emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] xwidget_mvp e6f6513: Merge remote-tracking branch 'origin/


From: Joakim Verona
Subject: [Emacs-diffs] xwidget_mvp e6f6513: Merge remote-tracking branch 'origin/master' into xwidget_mvp
Date: Wed, 13 May 2015 13:20:40 +0000

branch: xwidget_mvp
commit e6f6513fc9a1beae5a48de93fb23372eada7dd85
Merge: 11456f9 a314016
Author: Joakim Verona <address@hidden>
Commit: Joakim Verona <address@hidden>

    Merge remote-tracking branch 'origin/master' into xwidget_mvp
---
 .gitignore                                         |   10 +-
 ChangeLog.2                                        | 1156 +++
 Makefile.in                                        |   25 +-
 build-aux/gitlog-to-changelog                      |    5 +-
 build-aux/gitlog-to-emacslog                       |   55 +-
 configure.ac                                       |   11 +-
 doc/emacs/emacs.texi                               |    2 +-
 doc/emacs/maintaining.texi                         |   36 +-
 doc/emacs/mule.texi                                |    4 +-
 doc/lispref/sequences.texi                         |    2 +-
 doc/misc/texinfo.tex                               |   34 +-
 etc/NEWS                                           |   22 +
 lib-src/etags.c                                    |   22 +-
 lisp/calc/calc.el                                  |    1 +
 lisp/cedet/semantic/symref.el                      |    8 +-
 lisp/cedet/semantic/symref/grep.el                 |   22 +-
 lisp/cedet/semantic/symref/list.el                 |   10 +-
 lisp/cedet/srecode/dictionary.el                   |    4 +-
 lisp/cedet/srecode/insert.el                       |   52 +-
 lisp/dired-aux.el                                  |    3 +
 lisp/dired.el                                      |    2 +-
 lisp/emacs-lisp/chart.el                           |    4 +-
 lisp/emacs-lisp/cl-generic.el                      |  244 +-
 lisp/emacs-lisp/eieio-opt.el                       |    3 +
 lisp/emacs-lisp/eieio.el                           |    2 +-
 lisp/emacs-lisp/package-x.el                       |    1 +
 lisp/emacs-lisp/package.el                         |    7 +-
 lisp/emacs-lisp/seq.el                             |   95 +-
 lisp/emacs-lisp/subr-x.el                          |    3 +-
 lisp/ffap.el                                       |    2 +-
 lisp/frame.el                                      |    1 +
 lisp/gnus/gnus-util.el                             |    1 +
 lisp/help.el                                       |    3 +-
 lisp/international/iso-transl.el                   |   31 +-
 lisp/linum.el                                      |    3 +
 lisp/mail/rmail.el                                 |    2 +-
 lisp/mail/rmailmm.el                               |   14 +-
 lisp/net/nsm.el                                    |    5 +
 lisp/net/shr.el                                    |    3 +
 lisp/play/dunnet.el                                |    2 +-
 lisp/progmodes/elisp-mode.el                       |   14 +-
 lisp/progmodes/etags.el                            |   25 +-
 lisp/progmodes/python.el                           |    3 +-
 lisp/progmodes/tcl.el                              |    3 +-
 lisp/progmodes/xref.el                             |   59 +-
 lisp/simple.el                                     |    6 +-
 lisp/term/common-win.el                            |    2 +
 lisp/term/ns-win.el                                |    2 +-
 lisp/term/rxvt.el                                  |  142 +-
 lisp/term/x-win.el                                 |   12 +
 lisp/term/xterm.el                                 |  148 +-
 lisp/textmodes/sgml-mode.el                        |   43 +-
 lisp/url/url-handlers.el                           |    4 +-
 lisp/url/url-http.el                               |    2 +
 lisp/vc/log-edit.el                                |   32 +-
 lisp/vc/vc-bzr.el                                  |   44 +-
 lisp/vc/vc-dir.el                                  |   10 +-
 lisp/vc/vc-git.el                                  |   28 +-
 lisp/vc/vc-hg.el                                   |   81 +-
 lisp/vc/vc-hooks.el                                |    6 +
 lisp/vc/vc.el                                      |   16 +
 lisp/window.el                                     |    6 +
 make-dist                                          |   18 +-
 src/Makefile.in                                    |    4 +-
 src/editfns.c                                      |    6 +-
 src/filelock.c                                     |   49 +-
 src/keyboard.c                                     |   10 +-
 src/nsterm.m                                       |  103 +-
 test/automated/cl-generic-tests.el                 |   10 +
 test/etags/CTAGS.good                              | 6013 ++++++++++++++++
 test/etags/ETAGS.good_1                            | 5214 ++++++++++++++
 test/etags/ETAGS.good_2                            | 6440 +++++++++++++++++
 test/etags/ETAGS.good_3                            | 6118 ++++++++++++++++
 test/etags/ETAGS.good_4                            | 5378 ++++++++++++++
 test/etags/ETAGS.good_5                            | 7508 ++++++++++++++++++++
 test/etags/Makefile                                |   79 +
 test/etags/ada-src/2ataspri.adb                    |  665 ++
 test/etags/ada-src/2ataspri.ads                    |  298 +
 test/etags/ada-src/etags-test-for.ada              |  193 +
 test/etags/ada-src/waroquiers.ada                  |  153 +
 test/etags/c-src/a/b/b.c                           |    5 +
 test/etags/c-src/abbrev.c                          |  616 ++
 test/etags/c-src/c.c                               |  169 +
 test/etags/c-src/dostorture.c                      |  107 +
 test/etags/c-src/emacs/src/gmalloc.c               | 2040 ++++++
 {src => test/etags/c-src/emacs/src}/keyboard.c     |   29 +-
 test/etags/c-src/emacs/src/lisp.h                  | 4817 +++++++++++++
 test/etags/c-src/emacs/src/regex.h                 |  630 ++
 {lib-src => test/etags/c-src}/etags.c              |   22 +-
 test/etags/c-src/exit.c                            |   77 +
 test/etags/c-src/exit.strange_suffix               |   77 +
 test/etags/c-src/fail.c                            |    1 +
 test/etags/c-src/getopt.h                          |  125 +
 test/etags/c-src/h.h                               |  119 +
 test/etags/c-src/machsyscalls.c                    |   10 +
 test/etags/c-src/machsyscalls.h                    |   31 +
 test/etags/c-src/sysdep.h                          |   57 +
 test/etags/c-src/tab.c                             |  112 +
 test/etags/c-src/torture.c                         |  107 +
 test/etags/cp-src/MDiagArray2.h                    |  163 +
 test/etags/cp-src/Pctest.h                         |   99 +
 test/etags/cp-src/Range.h                          |   96 +
 test/etags/cp-src/abstract.C                       | 4840 +++++++++++++
 test/etags/cp-src/abstract.H                       |  993 +++
 test/etags/cp-src/burton.cpp                       |   14 +
 test/etags/cp-src/c.C                              |  156 +
 test/etags/cp-src/cfront.H                         |  836 +++
 test/etags/cp-src/clheir.cpp.gz                    |  Bin 0 -> 408 bytes
 test/etags/cp-src/clheir.hpp                       |   82 +
 test/etags/cp-src/conway.cpp                       |   95 +
 test/etags/cp-src/conway.hpp                       |   23 +
 test/etags/cp-src/fail.C                           |   52 +
 test/etags/cp-src/functions.cpp                    |  239 +
 test/etags/cp-src/screen.cpp                       |   62 +
 test/etags/cp-src/screen.hpp                       |   39 +
 test/etags/el-src/TAGTEST.EL                       |   31 +
 .../etags/el-src/emacs/lisp}/progmodes/etags.el    |    0
 test/etags/erl-src/gs_dialog.erl                   |  271 +
 test/etags/erl-src/lines.erl                       |  297 +
 test/etags/erl-src/lists.erl.gz                    |  Bin 0 -> 2667 bytes
 test/etags/f-src/entry.for                         |  581 ++
 test/etags/f-src/entry.strange.gz                  |  Bin 0 -> 3265 bytes
 test/etags/f-src/entry.strange_suffix              |  581 ++
 test/etags/forth-src/test-forth.fth                |   53 +
 test/etags/html-src/algrthms.html                  |  519 ++
 test/etags/html-src/index.shtml                    |   70 +
 test/etags/html-src/software.html                  |  241 +
 test/etags/html-src/softwarelibero.html            |  313 +
 test/etags/java-src/AWTEMul.java                   |  658 ++
 test/etags/java-src/KeyEve.java                    |  440 ++
 test/etags/java-src/SMan.java                      |  848 +++
 test/etags/java-src/SysCol.java                    |  381 +
 test/etags/java-src/TG.java                        |  840 +++
 test/etags/lua-src/allegro.lua                     |  282 +
 test/etags/make-src/Makefile                       |  226 +
 test/etags/objc-src/PackInsp.h                     |  120 +
 test/etags/objc-src/PackInsp.m                     |  505 ++
 test/etags/objc-src/Subprocess.h                   |   81 +
 test/etags/objc-src/Subprocess.m                   |  343 +
 test/etags/objcpp-src/SimpleCalc.H                 |   49 +
 test/etags/objcpp-src/SimpleCalc.M                 |  207 +
 test/etags/pas-src/common.pas                      | 1545 ++++
 test/etags/perl-src/htlmify-cystic                 |  382 +
 test/etags/perl-src/kai-test.pl                    |   39 +
 test/etags/perl-src/mirror.pl                      | 4149 +++++++++++
 test/etags/perl-src/yagrip.pl                      |   54 +
 test/etags/php-src/lce_functions.php               |  699 ++
 test/etags/php-src/ptest.php                       |   18 +
 test/etags/php-src/sendmail.php                    |  527 ++
 test/etags/prol-src/natded.prolog                  | 1545 ++++
 test/etags/prol-src/ordsets.prolog                 |  337 +
 test/etags/ps-src/rfc1245.ps                       | 2085 ++++++
 test/etags/pyt-src/server.py                       |  819 +++
 test/etags/tex-src/gzip.texi                       |  479 ++
 test/etags/tex-src/nonewline.tex                   |    1 +
 test/etags/tex-src/testenv.tex                     |   15 +
 test/etags/tex-src/texinfo.tex                     | 3350 +++++++++
 test/etags/y-src/atest.y                           |    5 +
 test/etags/y-src/cccp.c                            | 2202 ++++++
 test/etags/y-src/cccp.y                            | 1006 +++
 test/etags/y-src/parse.c                           | 2236 ++++++
 test/etags/y-src/parse.y                           |  875 +++
 162 files changed, 87464 insertions(+), 640 deletions(-)

diff --git a/.gitignore b/.gitignore
index 9d32e6b..4e526be 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,11 +39,13 @@ src/config.in
 Info.plist
 InfoPlist.strings
 Makefile
+makefile
 !admin/charsets/Makefile
 !etc/refcards/Makefile
 !test/automated/data/flymake/Makefile
 !test/indent/Makefile
-makefile
+!test/etags/Makefile
+!test/etags/make-src/Makefile
 /*.cache
 /confdefs.h
 /config.status
@@ -145,6 +147,10 @@ src/*.map
 # Tests.
 test/indent/*.new
 test/biditest.txt
+test/etags/srclist
+test/etags/regexfile
+test/etags/ETAGS
+test/etags/CTAGS
 
 # ctags, etags.
 TAGS
@@ -200,6 +206,7 @@ lisp/international/uni-*.el
 *.fn
 *.fns
 *.html
+!test/etags/html-src/*.html
 *.info
 *.ky
 *.kys
@@ -215,6 +222,7 @@ lisp/international/uni-*.el
 *.pj
 *.pjs
 *.ps
+!test/etags/ps-src/*.ps
 *.sc
 *.scs
 *.t2d/
diff --git a/ChangeLog.2 b/ChangeLog.2
index 188e3ff..d1c9477 100644
--- a/ChangeLog.2
+++ b/ChangeLog.2
@@ -1,3 +1,1159 @@
+2015-05-09  Eli Zaretskii  <address@hidden>
+
+       Avoid infloop in ERC
+       * lisp/simple.el (line-move-to-column): Ignore field boundaries
+       while computing line beginning position.  (Bug#20498)
+
+2015-05-08  Glenn Morris  <address@hidden>
+
+       * Makefile.in (ChangeLog): No longer pass "srcprefix"; cd instead.
+       * build-aux/gitlog-to-emacslog: Check called from right directory.
+       (srcprefix): Remove.
+
+       * build-aux/gitlog-to-emacslog: Get rid of "distprefix".
+       * Makefile.in (ChangeLog): No longer pass "distprefix".
+       * make-dist: Update "make ChangeLog" syntax for the above change.
+
+       * build-aux/gitlog-to-emacslog: Don't hard-code "ChangeLog.2".
+       * Makefile.in (ChangeLog): Pass -n to gitlog-to-emacslog.
+
+       * build-aux/gitlog-to-emacslog: Add "for earlier changes" to footer.
+
+       Add command-line option-parsing to gitlog-to-emacslog.
+       * build-aux/gitlog-to-emacslog: Add command-line options.
+       By default, refuse to remove an existing output file.
+       * Makefile.in (CHANGELOG): Update default.
+       (ChangeLog): Do not test for existing file.
+       (change-history-nocommit): Ensure temp file does not exist.
+
+       Quieten --without-x compilation.
+       * lisp/term/common-win.el: Provide a feature.
+       * lisp/term/x-win.el (term/common-win): Require it.
+
+       * lisp/dired-aux.el (dired-do-print): Require lpr.
+
+       Quieten compilation, eg in --without-x builds.
+       * lisp/dired-aux.el (lpr-printer-switch):
+       * lisp/frame.el (tool-bar-height):
+       * lisp/linum.el (font-info):
+       * lisp/window.el (font-info, overflow-newline-into-fringe)
+       (tool-bar-height):
+       * lisp/emacs-lisp/package-x.el (tar-data-buffer):
+       * lisp/gnus/gnus-util.el (iswitchb-mode):
+       * lisp/mail/rmailmm.el (libxml-parse-html-region):
+       * lisp/net/nsm.el (gnutls-peer-status)
+       (gnutls-peer-status-warning-describe):
+       * lisp/net/shr.el (libxml-parse-xml-region):
+       * lisp/url/url-http.el (gnutls-peer-status): Declare.
+
+2015-05-08  Stefan Monnier  <address@hidden>
+
+       CEDET (srecode-pop, srecode-peek): Don't use `subclass'
+       * lisp/cedet/srecode/insert.el (srecode-pop, srecode-peek): Don't use
+       `subclass' since they're never called with a class.
+       (srecode-insert-method, srecode-insert-subtemplate): Avoid obsolete
+       srecode-dictionary-child-p.
+
+2015-05-08  Nicolas Richard  <address@hidden>
+
+       help--binding-locus: Document argument POSITION.
+       * lisp/help.el (help--binding-locus): Document argument POSITION. 
(bug#20530)
+
+2015-05-08  Paul Eggert  <address@hidden>
+
+       Merge from gnulib.
+       * doc/misc/texinfo.tex: Get latest version.
+
+2015-05-08  Oleh Krehel  <address@hidden>
+
+       ffap.el (ffap-read-file-or-url): Fix completing-read call
+       * lisp/ffap.el (ffap-read-file-or-url): The HIST argument of
+         `completing-read' should be a symbol.
+
+2015-05-08  Eli Zaretskii  <address@hidden>
+
+       Verify file modifications by other programs
+       * src/filelock.c (lock_file): Check whether the file was modified
+       since it was visited even if 'create-lockfiles' is nil.  (Bug#18828)
+
+       Fix keyboard macros that include function keys
+       * src/keyboard.c (read_char_minibuf_menu_prompt): Record function
+       keys in the macro before returning.  (Bug#20454)
+
+2015-05-08  Glenn Morris  <address@hidden>
+
+       * build-aux/gitlog-to-changelog: Treat "Tiny-change" like
+       "Copyright-paperwork-exempt".  (Bug#20324)
+
+       * lisp/vc/log-edit.el: Handle "(tiny change)".  (Bug#20324)
+       (log-edit-rewrite-tiny-change): New variable.
+       (log-edit-insert-changelog): Maybe add "Copyright-paperwork-exempt".
+       (log-edit-changelog-ours-p): Set log-edit-author to a cons.
+       * etc/NEWS: Mention this.
+
+       * lisp/calc/calc.el (math-zerop): Declare.
+
+       * lisp/emacs-lisp/eieio-opt.el (help-fns-short-filename): Declare.
+
+2015-05-07  Artur Malabarba  <address@hidden>
+
+       * lisp/emacs-lisp/subr-x.el (if-let): Fix debug spec
+       Support the case when BINDINGS is a single tuple.  (Bug#20525)
+
+       * etc/NEWS: Fix typo in commit 14bb519
+
+2015-05-07  Jan D  <address@hidden>
+
+       Warn for multiple display crash for all Gtk+ versions.
+       * configure.ac: Warn for multiple display crash for all Gtk+
+       versions.  Output URL to Gtk+ bug (Bug#20452).
+
+       ns-win.el (ns-paste-secondary): Use gui-get-selection.
+       * ns-win.el (ns-paste-secondary): Use gui-get-selection.
+
+2015-05-07  Artur Malabarba  <address@hidden>
+
+       * lisp/emacs-lisp/package.el: New "external" package status
+       An external package is any installed package that's not built-in
+       and not from `package-user-dir', which usually means it's from an
+       entry in `package-directory-list'.  They are treated much like
+       built-in packages, in that they cannot be through the Package Menu
+       deleted and are not considered for upgrades.
+       (package-desc-status): Identify if a package is installed outside
+       `package-user-dir'.
+       (package-menu--print-info-simple)
+       (package-menu--status-predicate): Add support for it.
+       * etc/NEWS: Document it.
+
+2015-05-06  Stefan Monnier  <address@hidden>
+
+       * lisp/mail/rmail.el: Use lexical-binding
+       (rmail-bury): Remove unused var `buffer-to-bury'.
+       (rmail-get-new-mail): Remove unused vars `opoint' and `success'.
+       (rmail-parse-url): Remove unused var `proto', `user', and `host'.
+       (rmail-unrmail-new-mail-maybe): Remove unused var `new-file'.
+       (rmail-insert-inbox-text): Remove unused var `movemail'.
+       (rmail-add-mbox-headers): Remove unused var `limit'.
+       (rmail-undelete-previous-message): Remove unused var `value'.
+       (rmail-reply): Remove unused vars `resent-to', `resent-cc',
+       `resent-reply-to'.
+       (rmail-mime-mbox-buffer, rmail-mime-view-buffer): Declare.
+       (rmail-restore-desktop-buffer): Rename arguments.
+
+2015-05-06  Glenn Morris  <address@hidden>
+
+       * Makefile.in (change-history-commit): Add missing piece of previous.
+
+       Avoid unnecessary bumping of Makefile.in's timestamp.
+       * Makefile.in (gen_origin): Move to gitlog-to-emacslog.
+       (emacslog): New variable.
+       (ChangeLog): Use $emacslog.  Don't pass $gen_origin.
+       (unchanged-history-files): Use $emacslog rather than Makefile.in.
+       (change-history-nocommit): Store hash in $emacslog.
+       * build-aux/gitlog-to-emacslog (gen_origin): Move default here.
+       * admin/update_autogen (changelog_files): Update for the above.
+
+       * Makefile.in: Don't always insist on removing existing "ChangeLog".
+       (CHANGELOG): New variable.
+       (no-ChangeLog): Remove.
+       (ChangeLog): Replace "no-ChangeLog"; pass output file to script.
+       (change-history-nocommit): Use a temp file rather than insisting
+       on deletion of any existing "ChangeLog".
+
+       * build-aux/gitlog-to-emacslog: Allow specification of output.
+
+       * admin/update_autogen: Add option to update ChangeLog.
+       (usage): Mention -H.
+       (changelog_flag, changelog_n, changelog_files): New variables.
+       (main): Check for -H, and maybe run change-history-nocommit.
+
+2015-05-06  Stefan Monnier  <address@hidden>
+
+       * lisp/subr.el (delete-dups): Pre-size the hashtable.
+
+       (define-modify-macro): Make sure cl--arglist-args is defined
+       * lisp/emacs-lisp/cl.el (define-modify-macro): Make sure
+       cl--arglist-args is defined (bug#20517).
+
+2015-05-06  Glenn Morris  <address@hidden>
+
+       * Makefile.in (change-history-nocommit): New.
+
+2015-05-06  Dmitry Gutov  <address@hidden>
+
+       Only cancel timer when it is non-nil
+       * lisp/cedet/pulse.el (pulse-momentary-unhighlight): Only cancel
+       timer when it is non-nil
+       (http://lists.gnu.org/archive/html/emacs-devel/2015-05/msg00223.html).
+
+2015-05-06  Glenn Morris  <address@hidden>
+
+       Quieten cedet compilation
+       * lisp/cedet/semantic/db-el.el (semanticdb-elisp-sym->tag):
+       Invert fboundp test to quieten on current Emacs.
+       * lisp/cedet/ede/config.el (ede-shell-run-something)
+       (semanticdb-file-table-object, semanticdb-needs-refresh-p)
+       (semanticdb-refresh-table): Declare.
+       (ede-preprocessor-map): Require semantic/db.
+
+       Quieten cc-mode compilation
+       * lisp/progmodes/cc-awk.el (c-forward-sws):
+       * lisp/progmodes/cc-cmds.el (c-forward-subword, c-backward-subword):
+       Declare.
+
+2015-05-06  Oleh Krehel  <address@hidden>
+
+       lisp/subr.el (delete-dups): Avoid nreverse.
+
+2015-05-06  Artur Malabarba  <address@hidden>
+
+       * lisp/subr.el (delete-dups): Make it destructive again.
+
+2015-05-06  Paul Eggert  <address@hidden>
+
+       * doc/lispref/sequences.texi (Sequence Functions): Fix quoting.
+
+2015-05-06  Stefan Monnier  <address@hidden>
+
+       * lisp/emacs-lisp/testcover.el: Don't use edebug--read (bug#20487)
+       * lisp/emacs-lisp/testcover.el: Use lexical-binding.
+       (testcover--read): Rename from testcover-read.  Change calling 
convention.
+       Use edebug-read-and-maybe-wrap-form now that edebug-read is gone.
+       (testcover-start): Use add-function.  Move edebug-all-defs binding to
+       testcover--read.
+       (testcover-this-defun): Tighten scope of edebug-all-defs binding.
+       (testcover-mark): Remove unused var `item'.
+       * src/lread.c (syms_of_lread): Default load-read-function to `read'.
+
+2015-05-06  Oleh Krehel  <address@hidden>
+
+       lisp/subr.el (delete-dups): Use a hash table
+       * lisp/subr.el (delete-dups): When there are more than 100 candidates,
+         use a hash table. This can result in ~500 times speed-up for typical
+         collections of size 5000, like that of `load-library'.
+
+2015-05-06  Stefan Monnier  <address@hidden>
+
+       CEDET: Avoid `oref' on classes in a few more cases
+       * lisp/cedet/ede/generic.el (ede-find-target):
+       * lisp/cedet/ede.el (ede-project-forms-menu): Avoid `oref' on classes.
+       * lisp/cedet/semantic/bovine/gcc.el (semantic-gcc-setup): Remove unused
+       var `prefix'.
+
+       * lisp/cedet/semantic/symref/grep.el: Fix unused var warnings
+       * lisp/cedet/semantic/symref/grep.el (grepflags, greppattern): Declare.
+       (semantic-symref-perform-search): Remove unused var `pat'.
+
+       CEDET (srecode-compile-inserter): Avoid `oref' on classes
+       * lisp/cedet/srecode/compile.el (srecode-compile-inserter):
+       Avoid `oref' on classes (bug#20491).
+       (srecode-compile-split-code): Remove unused var `key'.
+
+2015-05-06  Dmitry Gutov  <address@hidden>
+
+       Clean up pulse.el a little
+       * lisp/cedet/pulse.el (pulse): Remove.
+       (pulse-momentary-timer): Save instead of the stop time.
+       (pulse-momentary-highlight-overlay): Call
+       pulse-momentary-unhighlight first thing. Treat
+       pulse-momentary-overlay as a single value, not a list. Save the
+       created timer. Only pass the stop time to the timer.
+       (pulse-tick): Update accordingly.
+       (pulse-momentary-unhighlight): Treat pulse-momentary-overlay as a
+       single value. Cancel the timer.
+
+2015-05-06  Tassilo Horn  <address@hidden>
+
+       Support the biblatex journaltitle field
+       * lisp/textmodes/reftex-cite.el (reftex-format-bib-entry):
+       Support the biblatex journaltitle field.
+
+2015-05-05  Glenn Morris  <address@hidden>
+
+       Minor declare-function improvement
+       * lisp/emacs-lisp/bytecomp.el
+       (byte-compile-macroexpand-declare-function):
+       Handle declarations after calls.  (Bug#20509)
+
+       * lisp/progmodes/js.el (js--optimize-arglist): Remove declaration.
+
+       * lisp/w32-fns.el (w32-shell-name): Silence compiler.
+
+2015-05-05  Dmitry Gutov  <address@hidden>
+
+       Pulse using a timer
+       * lisp/cedet/pulse.el (pulse-momentary-stop-time): New variable.
+       (pulse-momentary-highlight-overlay): Set up the timer instead of
+       calling `pulse'
+       (http://lists.gnu.org/archive/html/emacs-devel/2015-05/).
+       (pulse-tick): New function.
+       (pulse-momentary-unhighlight): Cut off the stop time.
+       (pulse-delay): Update the docstring WRT to not using sit-for.
+
+       Add semantic/symref/grep file patterns for ruby-mode
+       * lisp/cedet/semantic/symref/grep.el
+       (semantic-symref-filepattern-alist): Add patterns for
+       ruby-mode. Clarify the docstring.
+
+       Don't require match
+       * lisp/progmodes/xref.el (xref--read-identifier): Don't require
+       match. That doesn't work for every command, and some identifier
+       completion tables are bound to be imperfect anyway.
+
+2015-05-05  Stefan Monnier  <address@hidden>
+
+       * lisp/cedet/semantic/grammar.el: Fix compiler warnings (bug#20505)
+       (semantic-grammar--template-expand): New function.
+       (semantic-grammar-header, semantic-grammar-footer): Use it.
+       (semantic-grammar--lex-block-specs): Remove unused var `block-spec'.
+       (semantic-grammar-file-regexp): Refine regexp.
+       (semantic-grammar-eldoc-get-macro-docstring):
+       Use elisp-get-fnsym-args-string when available.
+       (semantic-idle-summary-current-symbol-info): Use new elisp-* names
+       instead of the old eldoc-* names.
+       * lisp/emacs-lisp/eldoc.el (eldoc-docstring-format-sym-doc): Move back
+       from elisp-mode.el.  Tweak calling convention.
+       * lisp/progmodes/elisp-mode.el (package-user-dir): Declare.
+       (elisp-get-fnsym-args-string): Add `prefix' argument.  Rename from
+       elisp--get-fnsym-args-string.
+       (elisp--highlight-function-argument): Add `prefix' arg.
+       (elisp-get-var-docstring): Rename from elisp--get-var-docstring.
+       (elisp--docstring-format-sym-doc): Move back to eldoc.el.
+
+2015-05-05  Glenn Morris  <address@hidden>
+
+       * lisp/help-fns.el (describe-function-1):
+       Handle builtins with advertised calling conventions.  (Bug#20479)
+
+2015-05-05  Nicolas Petton  <address@hidden>
+
+       Merge branch 'seq-let'
+
+       Update `seq-let' documentation
+       * doc/lispref/sequences.texi: Update the documentation of `seq-let'
+       with the support of  `&rest'.
+
+       Add support for &rest in `seq-let'
+       * lisp/emacs-lisp/seq.el (seq--make-bindings): Add support for `&rest'
+       in the argument list.
+       * test/automated/seq-tests.el: Add a test for parsing and binding
+       `&rest' in `seq-let'.
+
+2015-05-05  Paul Eggert  <address@hidden>
+
+       Spelling fixes
+
+2015-05-05  (tiny change) Pierre Lorenzon  <address@hidden>
+
+       * eieio-custom.el (eieio-object-value-get): Add missing increment
+       (Bug#20467)
+
+       (eieio-object-value-create): Adjust to new slots representation
+       (Bug#20467)
+       * eieio-custom.el (eieio-object-value-create):
+       Fix missed adjustment to new representation of slots metadata.
+
+2015-05-05  Nicolas Petton  <address@hidden>
+
+       * lisp/emacs-lisp/seq.el (seq--make-bindings): Improve the docstring.
+
+2015-05-05  Dmitry Gutov  <address@hidden>
+
+       Work around "Attempt to modify read-only object"
+       * lisp/progmodes/elisp-mode.el (elisp--xref-format): Extract from
+       elisp--xref-find-definitions, to work around "Attempt to modify
+       read-only object" error.
+
+       Only skip some variables that have function counterparts
+       * lisp/progmodes/elisp-mode.el (elisp--xref-identifier-location):
+       Only skip minor-mode-named variable if it's defined in a Lisp
+       file, and it's in minor-mode-list (bug#20506).
+       * test/automated/elisp-mode-tests.el
+       (elisp-xref-finds-both-function-and-variable)
+       (elisp-xref-finds-only-function-for-minor-mode): New tests.
+
+2015-05-04  Dmitry Gutov  <address@hidden>
+
+       Buttonize the whole line, including the number at the beginning
+       * lisp/progmodes/xref.el (xref--location-at-point): Revert the
+       previous change.
+       (xref--insert-xrefs): Buttonize the whole line, including the
+       number at the beginning.
+
+       Make sure we're inside the let bindings
+       * lisp/progmodes/elisp-mode.el (elisp-completion-at-point):
+       Make sure we're inside the let bindings.
+       * test/automated/elisp-mode-tests.el
+       (elisp-completes-functions-after-let-bindings): New test.
+
+2015-05-04  Glenn Morris  <address@hidden>
+
+       * lisp/cedet/semantic/grammar.el (eldoc-function-argstring)
+       (eldoc-docstring-format-sym-doc, eldoc-last-data-store)
+       (eldoc-get-fnsym-args-string, eldoc-get-var-docstring):
+       Remove outdated declarations.
+
+       Replace instances of "(eval-when-compile (autoload ...))"
+       * lisp/gnus/gnus-art.el (nneething-get-file-name):
+       Declare rather than autoload.
+       * lisp/gnus/gnus-async.el (gnus-html-prefetch-images):
+       Remove pointless autoload.
+       * lisp/gnus/gnus-sync.el (gnus-group-topic): Autoload at run-time.
+       (gnus-topic-create-topic, gnus-topic-enter-dribble):
+       Declare rather than autoload.
+       * lisp/gnus/mm-archive.el (gnus-recursive-directory-files)
+       (mailcap-extension-to-mime): Autoload at run-time.
+       * lisp/gnus/mm-util.el (latin-unity-massage-name)
+       (latin-unity-maybe-remap, latin-unity-representations-feasible-region)
+       (latin-unity-representations-present-region):
+       Declare rather than autoload.
+       * lisp/gnus/mml-smime.el (epg-make-context)
+       (epg-passphrase-callback-function): Autoload at run-time.
+       (epg-context-set-signers, epg-context-result-for)
+       (epg-new-signature-digest-algorithm)
+       (epg-verify-result-to-string, epg-list-keys, epg-verify-string)
+       (epg-sign-string, epg-encrypt-string)
+       (epg-context-set-passphrase-callback, epg-sub-key-fingerprint)
+       (epg-configuration, epg-expand-group, epa-select-keys):
+       Declare rather than autoload.
+       * lisp/gnus/nnir.el (nnimap-change-group, nnimap-make-thread-query):
+       Autoload at run-time.
+       (gnus-group-topic-name, nnimap-buffer, nnimap-command)
+       (gnus-registry-get-id-key, gnus-registry-action):
+       Declare rather than autoload.
+       * lisp/gnus/nnmail.el (mail-send-and-exit): Autoload at run-time.
+       * lisp/gnus/spam.el (spam-stat-buffer-change-to-non-spam)
+       (spam-stat-buffer-change-to-spam, spam-stat-buffer-is-non-spam)
+       (spam-stat-buffer-is-spam, spam-stat-load, spam-stat-save)
+       (spam-stat-split-fancy): Remove pointless autoloads.
+       * lisp/net/mairix.el: Load gnus-util when compiling.
+       (gnus-group-read-ephemeral-group, gnus-summary-toggle-header)
+       (message-field-value): Declare rather than autoload.
+       (mairix-gnus-ephemeral-nndoc, mairix-gnus-fetch-field):
+       Check gnus-alive-p is fbound.
+       (vm-quit, vm-visit-folder, vm-select-folder-buffer)
+       (vm-check-for-killed-summary, vm-error-if-folder-empty)
+       (vm-get-header-contents, vm-select-marked-or-prefixed-messages):
+       Declare rather than autoload.
+
+       * lisp/gnus/mm-view.el (epg-decrypt-string): Autoload.
+
+       * lisp/gnus/mml-smime.el (epg-key-sub-key-list)
+       (epg-sub-key-capability, epg-sub-key-validity): Fix declarations.
+
+       * lisp/progmodes/elisp-mode.el (xref-collect-references): Declare.
+
+       * lisp/emacs-lisp/debug.el (help-xref-interned): Update declaration.
+
+       * lisp/allout.el (epg-user-id-string, epg-key-user-id-list):
+       * lisp/emacs-lisp/package.el (epg-signature-status):
+       Fix declarations.
+
+       * lisp/play/gametree.el (gametree-show-children-and-entry)
+       (gametree-apply-layout, gametree-mouse-show-subtree)
+       (gametree-mouse-hide-subtree): Replace obsolete outline aliases.
+
+       * lisp/emacs-lisp/check-declare.el (check-declare-verify):
+       Handle cl-defgeneric, cl-defmethod.
+
+2015-05-04  Dmitry Gutov  <address@hidden>
+
+       Highlight both type and symbol name
+       * lisp/progmodes/elisp-mode.el (elisp--xref-find-definitions):
+       Highlight both type and symbol name.
+
+       Insert, highlight and align line numbers in xref output
+       * lisp/progmodes/etags.el (xref-location-line): Specialize for
+       xref-etags-location.
+       * lisp/progmodes/xref.el (xref-location-line): New generic method.
+       (xref-file-location): Add reader for the line slot.
+       (xref--location-at-point): Skip to the `xref-location' property.
+       (xref--collect-reference): Drop the line number from description.
+       (xref--insert-xrefs): Insert, highlight and align line numbers.
+
+2015-05-04  Daniel Colascione  <address@hidden>
+
+       Fix previous commit
+
+2015-05-04  Dmitry Gutov  <address@hidden>
+
+       Don't pulse the indentation, or the newline
+       * lisp/cedet/pulse.el (pulse-lighten-highlight)
+       (pulse-reset-face): Fall back to the inherited background
+       attribute in FACE.
+       (pulse-momentary-highlight-region): Add autoload cookie.
+       * lisp/progmodes/xref.el (xref--maybe-pulse): Don't highlight the
+       indentation, or the newline, if the line's non-empty
+       (http://lists.gnu.org/archive/html/emacs-devel/2015-05/msg00118.html).
+
+2015-05-04  Daniel Colascione  <address@hidden>
+
+       Add `save-mark-and-excursion', which has the old `save-excursion' 
behavior
+       * doc/lispref/positions.texi (Excursions): Document
+       `save-mark-and-excursion'.
+       * lisp/font-lock.el (font-lock-fontify-block): Use
+       `save-mark-and-excursion' instead of `save-excursion', restoring
+       Emacs 24 behavior.
+       * lisp/simple.el (save-mark-and-excursion--save)
+       (save-mark-and-excursion--restore): New functions.
+       (save-mark-and-excursion): New user macro.
+       * src/editfns.c (Fsave_excursion): Mention
+       `save-mark-and-excursion' in `save-excursion' documentation.
+
+2015-05-04  Dmitry Gutov  <address@hidden>
+
+       Classify lone symbol inside let varlist as variable
+       * lisp/progmodes/elisp-mode.el (elisp-completion-at-point):
+       Classify lone symbol inside let varlist as variable.
+       * test/automated/elisp-mode-tests.el 
(completest-variables-in-let-bindings):
+       New test.
+
+       Add xref-pulse-on-jump
+       * lisp/cedet/pulse.el (pulse-momentary-highlight-one-line):
+       Add autoload cookie.
+       * lisp/progmodes/xref.el (xref-pulse-on-jump): New option.
+       (xref--maybe-pulse): New function.
+       (xref-pop-marker-stack, xref--pop-to-location)
+       (xref--display-position): Use it.
+       (xref--location-at-point): Use back-to-indentation.
+
+2015-05-04  Stefan Monnier  <address@hidden>
+
+       * lisp/org/org-{macs,list}.el: Fix lexical warnings
+       * lisp/org/org-list.el (org-list-struct): Remove unused var `ind'.
+       (org-list-get-next-item, org-list-get-prev-item)
+       (org-list-get-children): Mark unused arg `struct'.
+       (org-list-use-alpha-bul-p): Remove unused var `bul'.
+       (org-toggle-checkbox): Mark unused var.
+       (org-update-checkbox-count): Remove unused var `box-num'.
+       (org-adapt-indentation): Declare.
+       (org-list-parse-list): Declare var instead of adding a dummy duplicate.
+       (org-list-send-list): Remove unused var `txt'.
+       (org-list-to-latex, org-list-to-texinfo): Mark unused arg `params'.
+       (org-list-to-subtree): Add prefix to dyn-bind var, and declare them.
+       * lisp/org/org-macs.el: Use `declare'.
+       (org-with-limited-levels): Declare dyn-bound vars.
+
+2015-05-04  Eli Zaretskii  <address@hidden>
+
+       Fix minor issues with CEDET on MS-Windows
+       * lisp/cedet/semantic/symref/idutils.el
+       (semantic-symref-parse-tool-output-one-line): Fix the search
+       regexp to match MS-Windows file names with drive letters.
+       (Bug#19468)
+       * lisp/cedet/semantic/symref/grep.el
+       (semantic-symref-grep-use-template): Remove "--color=always" from
+       Grep switches on MS-Windows.
+       (semantic-symref-grep-shell): Use shell-file-name as the default
+       value, so this works not only on Posix platforms.
+       (semantic-symref-perform-search): Use shell-quote-argument instead
+       of literal '..' for portable quoting of Grep command-line
+       argument.  Use shell-command-switch instead of a literal "-c".
+       * lisp/cedet/semantic/bovine/gcc.el
+       (semantic-gcc-get-include-paths): Use file-name-absolute-p to test
+       for an absolute file name in a portable way.
+
+2015-05-04  Artur Malabarba  <address@hidden>
+
+       * lisp/emacs-lisp/package.el: Remove `package--silence' variable
+       (package-import-keyring, package-refresh-contents)
+       (package-compute-transaction, package--save-selected-packages)
+       (package-install-from-archive, package-delete)
+       (package-menu--perform-transaction): Use `inhibit-message'
+       instead.
+       (package--compile): Set `warning-minimum-level' to :error.
+
+2015-05-03  Stefan Monnier  <address@hidden>
+
+       * lisp/term/screen.el (xterm-screen-extra-capabilities): New custom
+       (terminal-init-screen): Use it (bug#20356).
+       * lisp/term/xterm.el: Provide `term/xterm' instead of `xterm'.
+       (xterm--extra-capabilities-type): New const.
+       (xterm-extra-capabilities): Use it.
+       (xterm--version-handler): Lower the pseudo-version for `screen'.
+
+2015-05-03  Dmitry Gutov  <address@hidden>
+
+       xref--insert-xrefs: Tweak the faces
+       * lisp/progmodes/xref.el (xref--insert-xrefs): Tweak the faces.
+       Always insert a newline at the end (to avoid mouse-face background
+       tail at the last line).
+
+       elisp-completion-at-point: Prioritize being quoted over funpos
+       * lisp/progmodes/elisp-mode.el (elisp-completion-at-point):
+       Only consider function position when not inside quoted form
+       (bug#20425).
+       * test/automated/elisp-mode-tests.el: New file.
+
+       Stop vc-print-log from jumping to the top
+       * lisp/vc/vc.el (vc-print-log-internal): Pass nil
+       GOTO-LOCATION-FUNC to vc-log-internal-common when WORKING-REVISION
+       is not specified.
+       (vc-incoming-outgoing-internal): Always pass nil.
+       (vc-log-internal-common): When GOTO-LOCATION-FUNC is nil, don't
+       call it, and don't set vc-sentinel-movepoint (bug#15322).
+       (vc-print-root-log): Don't fetch the root working revision, nor
+       pass it to vc-print-log-internal.
+
+2015-05-02  Michael Vehrs  <address@hidden>
+
+       Fix display of keyboard layouts for right-to-left scripts
+       * lisp/international/quail.el (quail-insert-kbd-layout): Force
+       left-to-right paragraph direction.
+
+2015-05-02  K. Handa  <address@hidden>
+
+       Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
+
+       * cmds.c (internal_self_insert): When we insert spaces for
+       padding, set point before the padding spaces, not after them.
+
+2015-05-02  Nicolas Petton  <address@hidden>
+
+       * lisp/emacs-lisp/seq.el (seq-p): New alias to `sequencep'.
+
+2015-05-02  Dmitry Gutov  <address@hidden>
+
+       Fix etags-xref-find for references
+       * lisp/progmodes/elisp-mode.el (elisp--xref-find-references): Use 
`cl-mapcan'.
+       * lisp/progmodes/etags.el (etags-xref-find): Ditto.  Prompt for
+       directory if no tags tables are loaded (bug#19468).
+
+2015-05-02  Philipp Stephani  <address@hidden>
+
+       Update the options in whitespace-style defcustom
+       * lisp/whitespace.el (whitespace-style): Use `set' instead of a
+       `repeat' because the option is really set-like.  Add missing
+       options.  Reorder options to match the order in the
+       documentation.  (Bug#20346)
+
+2015-05-02  Eli Zaretskii  <address@hidden>
+
+       Fix error diagnostics of c-macro-expand
+       * lisp/progmodes/cmacexp.el (c-macro-expansion): Don't bail out
+       too early if no start-marker string was found -- that generally
+       means cpp exited abnormally, and we still want to show its error
+       messages to the user.
+
+       Don't require Texinfo 5.0 for Emacs documentation
+       * doc/emacs/docstyle.texi: Use "@set txicodequoteundirected" and
+       "@set txicodequotebacktick" instead of "@codequotebacktick on" and
+       "@codequoteundirected on", respectively, to avoid requiring
+       Texinfo 5.x for Emacs documentation.
+
+2015-05-01  Simen Heggestøyl  <address@hidden>
+
+       * lisp/files.el (pwd):
+       When called with a prefix argument, insert the current default
+       directory at point.
+
+2015-05-01  Stefan Monnier  <address@hidden>
+
+       * lisp/isearch.el (isearch-mode-map): Allow backspace remapping
+       * lisp/isearch.el (isearch-mode-map): Don't inhibit
+       function-key-map remapping for backspace (bug#20466).
+
+2015-05-01  Dmitry Gutov  <address@hidden>
+
+       Implement xref-find-references in etags and elisp-mode
+       * lisp/progmodes/elisp-mode.el (elisp--xref-find-references): New 
function.
+       (elisp-xref-find): Use it.
+       * lisp/progmodes/etags.el (etags-xref-find): Use 
`xref-collect-references'.
+       * lisp/progmodes/xref.el (xref-collect-references):
+       (xref--collect-reference): New functions.
+
+2015-05-01  Paul Eggert  <address@hidden>
+
+       Prefer plain characters to Texinfo circumlocutions
+       For example, prefer 'François' to 'Fran\c{c}ois', 'Fran\c cois',
+       'Fran@,{c}ois' or 'Francois' (all of which were used!) in Texinfo 
sources.
+
+       Fix single-quoting style in PDF manuals
+       The PDF versions of the GNU manuals used curved single quotes to
+       represent grave accent and apostrophe, which made it a pain to cut
+       and paste code examples from them.  Fix the PDF versions to use
+       grave accent and apostrophe for Lisp source code, keystrokes, etc.
+       This change does not affect the info files, nor does it affect
+       ordinary uses of curved single quotes in PDF.
+       * doc/emacs/docstyle.texi: New file, which specifies treatment for
+       grave accent and apostrophe, as well as the document encoding.
+       * doc/emacs/emacs-xtra.texi, doc/emacs/emacs.texi:
+       * doc/lispintro/emacs-lisp-intro.texi:
+       * doc/lispref/back.texi, doc/lispref/book-spine.texi:
+       * doc/lispref/elisp.texi, doc/lispref/lay-flat.texi:
+       * doc/misc/ada-mode.texi, doc/misc/auth.texi:
+       * doc/misc/autotype.texi, doc/misc/bovine.texi, doc/misc/calc.texi:
+       * doc/misc/cc-mode.texi, doc/misc/cl.texi, doc/misc/dbus.texi:
+       * doc/misc/dired-x.texi, doc/misc/ebrowse.texi, doc/misc/ede.texi:
+       * doc/misc/ediff.texi, doc/misc/edt.texi, doc/misc/efaq-w32.texi:
+       * doc/misc/efaq.texi, doc/misc/eieio.texi, doc/misc/emacs-gnutls.texi:
+       * doc/misc/emacs-mime.texi, doc/misc/epa.texi, doc/misc/erc.texi:
+       * doc/misc/ert.texi, doc/misc/eshell.texi, doc/misc/eudc.texi:
+       * doc/misc/eww.texi, doc/misc/flymake.texi, doc/misc/forms.texi:
+       * doc/misc/gnus-coding.texi, doc/misc/gnus-faq.texi:
+       * doc/misc/gnus.texi, doc/misc/htmlfontify.texi:
+       * doc/misc/idlwave.texi, doc/misc/ido.texi, doc/misc/info.texi:
+       * doc/misc/mairix-el.texi, doc/misc/message.texi, doc/misc/mh-e.texi:
+       * doc/misc/newsticker.texi, doc/misc/nxml-mode.texi:
+       * doc/misc/octave-mode.texi, doc/misc/org.texi, doc/misc/pcl-cvs.texi:
+       * doc/misc/pgg.texi, doc/misc/rcirc.texi, doc/misc/reftex.texi:
+       * doc/misc/remember.texi, doc/misc/sasl.texi, doc/misc/sc.texi:
+       * doc/misc/semantic.texi, doc/misc/ses.texi, doc/misc/sieve.texi:
+       * doc/misc/smtpmail.texi, doc/misc/speedbar.texi:
+       * doc/misc/srecode.texi, doc/misc/todo-mode.texi, doc/misc/tramp.texi:
+       * doc/misc/url.texi, doc/misc/vhdl-mode.texi, doc/misc/vip.texi:
+       * doc/misc/viper.texi, doc/misc/widget.texi, doc/misc/wisent.texi:
+       * doc/misc/woman.texi:
+       Use it instead of '@documentencoding UTF-8', to lessen the need for
+       global changes like this in the future.
+       * doc/emacs/Makefile.in (EMACS_XTRA):
+       * doc/lispintro/Makefile.in (srcs):
+       * doc/lispref/Makefile.in (srcs):
+       Add dependency on docstyle.texi.
+       * doc/misc/Makefile.in (style): New macro.
+       (${buildinfodir}/%.info, %.dvi, %.pdf, %.html)
+       (${buildinfodir}/ccmode.info, ${buildinfodir}/efaq%.info, gnus_deps):
+       Use it.
+
+2015-05-01  Glenn Morris  <address@hidden>
+
+       * test/automated/cl-lib-tests.el (cl-lib-adjoin-test): Fix it.
+
+       * lisp/emacs-lisp/pcase.el (get-edebug-spec, edebug-match)
+       (help-fns--signature): Declare.
+
+       * lisp/emacs-lisp/pcase.el (pcase--make-docstring): Require help-fns.
+
+2015-05-01  Nicolas Petton  <address@hidden>
+
+       New macro seq-let, providing destructuring support to seq.el
+       * lisp/emacs-lisp/seq.el (seq-let): New macro.  `seq-let' is similar
+       to `cl-destructuring-bind' but works on all sequence types supported
+       by `seq.el'.  Bump version number to 1.6.
+       * test/automated/seq-tests.el: Add tests for seq-let.
+       * doc/lispref/sequences.texi: Add documentation for seq-let.
+
+2015-05-01  Pontus Michael  <address@hidden>
+
+       * lisp/simple.el (blink-matching-open): Better behavior in minibuffer
+
+2015-05-01  Glenn Morris  <address@hidden>
+
+       * lisp/emacs-lisp/ert.el (ert--special-operator-p): Fix previous.
+
+2015-05-01  Artur Malabarba  <address@hidden>
+
+       * lisp/emacs-lisp/bytecomp.el: Revert "Silence noninteractive 
compilations"
+       This reverts commit 9a7ddde977378cb5276a81476ae458889c403267.
+       This reverts commit 3c0ea587daf8b17960b90603a70e3ac4057d883d.
+       With message: "* lisp/emacs-lisp/bytecomp.el: Use `inhibit-message'".
+       (Bug#20445).
+
+2015-05-01  K. Handa  <address@hidden>
+
+       * mule-cmds.el (input-method-use-echo-area): Change :type to
+       'boolean.
+
+2015-05-01  Lars Magne Ingebrigtsen  <address@hidden>
+
+       Start using proportional fonts in eww by default
+       * lisp/net/shr.el (shr-use-fonts): Switch the default to t, since
+       it seems to work well.
+
+       Fix links in tables in shr
+       * lisp/net/shr.el: Remove `shr-inhibit-decoration', because that
+       makes (some) links in tables not work.
+
+2015-05-01  Jan D  <address@hidden>
+
+       (ns-get-cut-buffer-internal): Remove this alias.
+       * lisp/term/ns-win.el (ns-get-cut-buffer-internal): Remove this alias.
+
+2015-04-30  Glenn Morris  <address@hidden>
+
+       * lisp/emacs-lisp/ert.el (ert--special-operator-p):
+       Update for 2015-02-08 change to indirect-function.
+
+       * lisp/term/ns-win.el (ns-get-selection-internal):
+       Remove declaration for function deleted 2014-10-21.
+
+       * lisp/dom.el: Load subr-x when compiling, for when-let.
+
+       Silence some compilation warnings
+       * lisp/emacs-lisp/check-declare.el (compilation-forget-errors):
+       * lisp/emulation/cua-base.el (delete-active-region):
+       * lisp/net/net-utils.el (w32-get-console-output-codepage):
+       * lisp/term/ns-win.el (ns-own-selection-internal)
+       (ns-disown-selection-internal, ns-selection-owner-p)
+       (ns-selection-exists-p, ns-get-selection):
+       Declare for compiler..
+
+       Function declaration updates prompted by 'make check-declare'
+       * lisp/emacs-lisp/package.el (lm-homepage):
+       * lisp/gnus/gnus-util.el (iswitchb-read-buffer):
+       * lisp/gnus/mm-decode.el (libxml-parse-html-region):
+       * lisp/gnus/mml.el (libxml-parse-html-region):
+       * lisp/gnus/nnrss.el (libxml-parse-html-region):
+       * lisp/net/eww.el (libxml-parse-html-region):
+       * lisp/net/shr.el (libxml-parse-html-region):
+       * lisp/vc/vc-bzr.el (vc-annotate-convert-time):
+       * lisp/vc/vc-cvs.el (vc-annotate-convert-time):
+       * lisp/vc/vc-git.el (vc-annotate-convert-time):
+       * lisp/vc/vc-hg.el (vc-annotate-convert-time):
+       * lisp/vc/vc-mtn.el (vc-annotate-convert-time):
+       * lisp/vc/vc-rcs.el (vc-annotate-convert-time):
+       Update declaration.
+
+       Remove compatibility code for 20-year old function renaming
+       * lisp/progmodes/idlw-shell.el (idlwave-shell-comint-filter):
+       Make it an obsolete alias.
+       (idlwave-shell-filter): Change all uses to comint-output-filter.
+
+2015-04-30  Tassilo Horn  <address@hidden>
+
+       Add ace-window face config
+       * etc/themes/tsdh-light-theme.el (tsdh-light): Add ace-window face
+       configuration.
+
+2015-04-30  Paul Eggert  <address@hidden>
+
+       Unclutter 'make doc' output a bit
+       * Makefile.in ($(DOCS), $(INSTALL_DOC), $(UNINSTALL_DOC)):
+       Use make subst rather than sh IFS to split target string apart.
+       This makes 'make' output easier to follow.
+
+       Merge from gnulib
+       * doc/misc/texinfo.tex: Update from gnulib.
+
+2015-04-30  Artur Malabarba  <address@hidden>
+
+       * lisp/emacs-lisp/package.el: Some speed optimizations on menu refresh
+       (package-menu--print-info): Obsolete.
+       (package-menu--print-info-simple): New function.
+       (package-menu--refresh): Use it, simplify code, and improve
+       performance.
+       * lisp/emacs-lisp/tabulated-list.el (tabulated-list-print-entry):
+       Tiny performance improvement.
+
+       * lisp/emacs-lisp/package.el (package--message): inhibit-message
+
+2015-04-29  Paul Eggert  <address@hidden>
+
+       Omit -Wstrict-overflow workaround in GCC 5
+       * src/process.c: Remove workaround for GCC -Wstrict-overflow bug
+       if it's GCC 5 or later, as the bug appears to be fixed in GCC 5.1.
+
+       Merge from gnulib
+       This incorporates:
+       2015-04-29 extern-inline: no need for workaround in GCC 5.1
+       2015-04-26 file-has-acl: port to CentOS 6
+       * m4/acl.m4, m4/extern-inline.m4: Update from gnulib.
+
+2015-04-29  Helmut Eller  <address@hidden>
+
+       Set next-error-* in xref--xref-buffer-mode
+       * xref.el (xref--xref-buffer-mode): Set `next-error-function' and
+       `next-error-last-buffer'.
+       (xref--next-error-function): New function.
+       (http://lists.gnu.org/archive/html/emacs-devel/2015-04/msg01311.html)
+
+2015-04-29  Fabián Ezequiel Gallina  <address@hidden>
+
+       python.el: Fix warnings on looking-back calls missing LIMIT
+       * lisp/progmodes/python.el (python-shell-accept-process-output):
+       Pass LIMIT arg to looking-back.
+
+2015-04-29  Artur Malabarba  <address@hidden>
+
+       * lisp/emacs-lisp/package.el: Use pushnew for downloads in progress
+       (package--download-and-read-archives): Use pushnew instead of
+       append.  If something terrible happened during a previous
+       download, simply refreshing should now make things work again.
+
+2015-04-29  Dmitry Gutov  <address@hidden>
+
+       Introduce etags-xref-find-definitions-tag-order
+       * lisp/progmodes/etags.el (etags-xref-find-definitions-tag-order):
+       New variable.
+       (etags--xref-find-definitions): Use it (bug#19468).
+
+2015-04-29  Eli Zaretskii  <address@hidden>
+
+       PATH- and completion-related fixes in Eshell on MS-Windows
+       * lisp/eshell/esh-ext.el (eshell-search-path): When running on
+       MS-Windows, prepend "." to list of directories produced from PATH,
+       as Windows always implicitly searches the current directory first.
+       (eshell-force-execution): Make it have a non-nil default value on
+       MS-Windows and MS-DOS.
+       * lisp/eshell/em-cmpl.el (eshell-complete-commands-list): If
+       eshell-force-execution is non-nil, complete on readable files and
+       directories, not only executables.  When running on MS-Windows,
+       prepend "." to list of directories produced from PATH, as Windows
+       always implicitly searches the current directory first.
+
+2015-04-29  Sam Steingold  <address@hidden>
+
+       bury RCIRC buffers when there is no activity
+       lisp/net/rcirc.el (rcirc-non-irc-buffer): remove
+       (rcirc-bury-buffers): new function
+       (rcirc-next-active-buffer): when there is no new activity, use
+       `rcirc-bury-buffers' to hide all RCIRC buffers
+
+2015-04-29  Michael Albinus  <address@hidden>
+
+       Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
+
+2015-04-29  Krzysztof Jurewicz  <address@hidden>  (tiny change)
+
+       Fix DBUS query result parsing for secrets-search-items
+       * lisp/net/secrets.el (secrets-search-items): Fix DBUS query result
+       parsing.  The function assumed that return value of the
+       SearchItems method called on a collection is a list of two lists,
+       however this is true only when no collection is specified.  GNOME
+       had used to incorrectly return a list of two lists in both cases,
+       but this was already fixed:
+       https://bugzilla.gnome.org/show_bug.cgi?id=695115 .  Also fix an
+       incorrect information in the secrets-search-items’ docstring.
+       (Bug#20449)
+
+2015-04-29  Artur Malabarba  <address@hidden>
+
+       * lisp/emacs-lisp/bytecomp.el: Use `inhibit-message'
+       (byte-compile--message): Use `inhibit-message' instead of hiding
+       the previous message with (message nil).
+
+2015-04-29  Oleh Krehel  <address@hidden>
+
+       Remove the deprecated INTERNAL_FIELD macro by expanding it
+       * src/lisp.h (INTERNAL_FIELD): Remove.
+       (DEFVAR_KBOARD): Modify accordingly.
+       * alloc.c, buffer.c, buffer.h, category.c, keyboard.c, keyboard.h:
+       * syntax.c: Adjust users.
+       * src/buffer.c (compact_buffer): Use BVAR.
+
+2015-04-29  Glenn Morris  <address@hidden>
+
+       Replace an obsolete function alias
+       * lisp/isearch.el (isearch-yank-x-selection):
+       * lisp/mouse-copy.el (mouse-drag-secondary-pasting)
+       (mouse-drag-secondary-moving):
+       * lisp/obsolete/mouse-sel.el (mouse-sel-get-selection-function):
+       Replace obsolete alias x-get-selection with gui-get-selection.
+
+2015-04-29  Stefan Monnier  <address@hidden>
+
+       * lisp/mail/rmailsum.el: Use lexical-binding.
+
+2015-04-29  Glenn Morris  <address@hidden>
+
+       * test/automated/package-test.el (package-test-update-archives-async):
+       Skip test on hydra.nixos.org.
+
+2015-04-28  Glenn Morris  <address@hidden>
+
+       * lisp/foldout.el: Update for 2015-01-30 outline.el changes.
+       (foldout-zoom-subtree, foldout-exit-fold, foldout-mouse-show)
+       (foldout-mouse-hide-or-exit): Use new names for outline functions.
+
+       * lisp/cedet/semantic/bovine/c.el (semantic-c-do-lex-if):
+       Update for 2014-06-26 hideif.el change.
+
+       * lisp/mail/rmailsum.el: Fix search for encoded subjects.  (Bug#19088)
+       (rmail--decode-and-apply): New function.
+       (rmail-message-regexp-p-1, rmail-message-subject-p): Use it.
+
+       * lisp/mail/rmail.el (rmail-highlighted-headers): Fix :type.
+
+2015-04-28  Artur Malabarba  <address@hidden>
+
+       * lisp/emacs-lisp/package.el: Fix priority-hiding corner case
+       (package-menu--refresh): Delegate obsolete-hiding to
+       `package--remove-hidden'.
+       (package--remove-hidden): Disregard high-priority package if it is
+       older than the installed one.
+
+2015-04-28  Paul Eggert  <address@hidden>
+
+       Update source file encoding list
+       Update admin/notes/unicode, along with coding system cookies in
+       other files, so that the two match each other better.
+       * admin/notes/unicode: lisp/language/ethio-util.el and
+       lisp/language/ethiopic.el also use utf-8-emacs.
+       * admin/notes/hydra, doc/misc/dbus.texi, doc/misc/org.texi:
+       * doc/misc/remember.texi, etc/refcards/cs-dired-ref.tex:
+       * etc/refcards/cs-refcard.tex, etc/refcards/cs-survival.tex:
+       * etc/refcards/sk-dired-ref.tex, etc/refcards/sk-refcard.tex:
+       * etc/refcards/sk-survival.tex:
+       Add "coding: utf-8" so that this file is not mishandled in a
+       Latin-1 or Big-5 locale.
+       * lisp/international/robin.el, lisp/org/ox-ascii.el:
+       Specify utf-8, not utf-8-emacs, as these are plain UTF-8 files.
+       * lisp/language/ethio-util.el: Fix trailer.
+
+2015-04-28  Eli Zaretskii  <address@hidden>
+
+       Fix synchronous invocation of Ispell
+       * lisp/textmodes/ispell.el (ispell-init-process): Assign a non-nil
+       value to ispell-process-directory before calling ispell-init-process.
+       Don't call set-process-coding-system if ispell-async-processp is nil.
+       (Bug#20448)
+
+2015-04-28  Artur Malabarba  <address@hidden>
+
+       * lisp/emacs-lisp/package.el: Skip space and comments in init file
+       (package--ensure-init-file): Insert snippet at first
+       non-whitespace non-comments line.  Respects local-vars at the top
+       of the file.
+
+2015-04-28  Glenn Morris  <address@hidden>
+
+       * lisp/mail/rmail.el (rmail-copy-headers):
+       Handle rmail-nonignored-headers being nil.  (Bug#18878)
+
+       * lisp/subr.el (delay-mode-hooks): Fix doc typo.
+
+       * lisp/vc/vc-bzr.el (vc-bzr-after-dir-status):
+       Don't get confused by a bzrlib version mismatch warning.
+
+2015-04-27  Thomas Fitzsimmons  <address@hidden>
+
+       Change default location of EUDC options file
+       * NEWS: Document change to EUDC options file's default location.
+       * lisp/net/eudc-vars.el (eudc-options-file): Use
+       `locate-user-emacs-file' to change default options file location.
+
+2015-04-27  Glenn Morris  <address@hidden>
+
+       * test/automated/package-test.el (package-test-update-archives-async):
+       Try to handle the test server script dying.
+
+2015-04-27  Stefan Monnier  <address@hidden>
+
+       * lisp/saveplace.el (save-place-mode): New minor mode.
+       (save-place): Redefine as an obsolete alias.
+
+       * lisp/midnight.el: Make it a minor mode.  Allow predicates.
+       * lisp/midnight.el: Use lexical-binding.
+       (midnight-mode): Make it a proper minor mode.
+       (midnight-buffer-display-time): Make arg non-optional.
+       (midnight-find): Remove.
+       (clean-buffer-list-kill-never-regexps)
+       (clean-buffer-list-kill-regexps): Tweak type for new function choice.
+       (clean-buffer-list-delay): Allow clean-buffer-list-kill-regexps to
+       contain functions.
+       (clean-buffer-list): Use cl-find.
+       Allow clean-buffer-list-kill-never-regexps to contain functions.
+
+2015-04-27  Nicolas Petton  <address@hidden>
+
+       Bump version of seq.el to 1.5
+       * lisp/emacs-lisp/seq.el (seq-doseq): Remove undocumented return value
+         from seq-doseq.  Bump version number of seq.el.
+
+2015-04-27  Glenn Morris  <address@hidden>
+
+       * lisp/mail/rmail.el (rmail-reply):
+       Decode subject before matching "Re:" prefix.  (Bug#20396)
+
+2015-04-27  Artur Malabarba  <address@hidden>
+
+       * lisp/emacs-lisp/package.el: Small improvements
+       (package--with-work-buffer-async): More informative error.
+       (package-install-user-selected-packages): Rename to
+       `package-install-selected-packages'.
+
+2015-04-27  Stefan Monnier  <address@hidden>
+
+       * lisp/emacs-lisp/eieio-core.el (eieio-defclass-internal): Fix last
+       * lisp/emacs-lisp/eieio-core.el (eieio-defclass-internal): Fix last 
change.
+       (eieio--class-make): Remove leftover `tag'.
+
+2015-04-27  Glenn Morris  <address@hidden>
+
+       * lisp/gnus/message.el (gnus-extract-address-components):
+       Remove bogus declaration that was masking previous problem.
+
+2015-04-27  Nicolas Graner  <address@hidden>  (tiny change)
+
+       * lisp/gnus/message.el (message-insert-formatted-citation-line):
+       Fix typo.  (Bug#20318)
+
+2015-04-27  Stefan Monnier  <address@hidden>
+
+       * lisp/emacs-lisp/eieio-core.el (eieio-defclass-internal): Reuse oldc.
+
+       * lisp/textmodes/reftex-toc.el: Improve multi-frame behavior
+       * lisp/textmodes/reftex-toc.el (reftex-toc-revert): Avoid displaying
+       the buffer in yet another frame.
+       (reftex-toc-visit-location): Make sure toc-window has focus at the end
+       when `final' is nil.
+       (reftex--rebuilding-toc): Defvar to avoid `boundp' and
+       silence warnings.  Use `--' to clarify that it's internal.
+       (reftex-toc-next, reftex-toc-previous, reftex-toc-demote)
+       (reftex-toc-promote): Clarify unused argument.
+       (reftex--pro-or-de, reftex--start-line, reftex--mark-line):
+       Add `reftex--' prefix.  Fix all users.
+       (reftex-toc-promote-prepare): Use _ for dummy variable.
+       (reftex-toc-restore-region): Rename `m
+
+2015-04-27  Eli Zaretskii  <address@hidden>
+
+       Fix a typo in bibtex.el
+       * lisp/textmodes/bibtex.el (bibtex-insert-kill): Fix a typo from
+       last change.  (Bug#20429)
+
+       Fix redisplay of frame after loading new fonts
+       * src/xdisp.c (redisplay_internal): When retrying redisplay of a
+       frame because new fonts were loaded, disable all redisplay
+       optimizations on that frame by calling SET_FRAME_GARBAGED.
+       (Bug#20410)
+
+2015-04-27  Stefan Monnier  <address@hidden>
+
+       * lisp/info.el (Info-menu): Properly provide the `default'
+       (Bug#20391)
+
+       * elisp-mode.el: Catch errors from `documentation'
+       (Bug#20418)
+       * lisp/progmodes/elisp-mode.el (elisp--get-fnsym-args-string):
+       Catch errors from documentation.
+       (emacs-lisp-mode-abbrev-table): Remove redundant defvar.
+
+2015-04-26  Stefan Monnier  <address@hidden>
+
+       lisp/emacs-lisp/package.el: Move variables to silence byte-compiler
+       Remove redundant ":group 'package".
+
+2015-04-26  Eli Zaretskii  <address@hidden>
+
+       Fix a typo in rmail.el
+       * lisp/mail/rmail.el (rmail-ensure-blank-line): Fix a typo in the
+       last commit.  (Bug#20429)
+
+2015-04-26  Dmitry Gutov  <address@hidden>
+
+       Introduce xref-prompt-for-identifier
+       * lisp/progmodes/xref.el (xref-prompt-for-identifier): New option.
+       (xref--read-identifier): Use it
+       (http://lists.gnu.org/archive/html/emacs-devel/2015-04/msg01205.html).
+
+2015-04-26  João Távora  <address@hidden>
+
+       `tex-insert-quote' after single `'' opens quotes instead of closing
+       Without this, it's very hard to precede double quotes with the
+       apostrophe character, i.e. insert the sequence '``
+       (quote-backquote-backquote), commonly useful in portuguese, for
+       instance.
+       * tex-mode.el (tex-insert-quote): Add ?' to the list of preceding
+       chars making `tex-insert-quote' be in the "opening" context.
+
+2015-04-25  Dmitry Gutov  <address@hidden>
+
+       Pass `id' to `completing-read' as def instead of initial input
+       * xref.el (xref--read-identifier): Pass `id' to `completing-read'
+       as the default value instead of initial input
+       (http://lists.gnu.org/archive/html/emacs-devel/2015-04/msg01182.html).
+
 2015-04-25  Paul Eggert  <address@hidden>
 
        Don't freeze with unreadable processes
diff --git a/Makefile.in b/Makefile.in
index e8780c2..a02f074 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1091,24 +1091,20 @@ bootstrap: bootstrap-clean
 .PHONY: ChangeLog change-history change-history-commit change-history-nocommit
 .PHONY: master-branch-is-current unchanged-history-files
 
-CHANGELOG =
-emacslog = $(srcdir)/build-aux/gitlog-to-emacslog
-
-# Convert git commit log to ChangeLog file.  make-dist uses this.
-# I guess this is PHONY because it generates in distprefix (which is
-# non-nil when called from make-dist)?
-# FIXME: test -f does not respect distprefix.
-ChangeLog:
-       @[ -n "${CHANGELOG}" ] || test ! -f ChangeLog
-       $(AM_V_GEN)distprefix=$(distprefix) srcprefix=$(srcdir)/ \
-       $(emacslog) . $(CHANGELOG)
-
+CHANGELOG = ChangeLog
+emacslog = build-aux/gitlog-to-emacslog
 # The ChangeLog history files are called ChangeLog.1, ChangeLog.2, ...,
 # ChangeLog.$(CHANGELOG_HISTORY_INDEX_MAX).  $(CHANGELOG_N) stands for
 # the newest (highest-numbered) ChangeLog history file.
 CHANGELOG_HISTORY_INDEX_MAX = 2
 CHANGELOG_N = ChangeLog.$(CHANGELOG_HISTORY_INDEX_MAX)
 
+# Convert git commit log to ChangeLog file.  make-dist uses this.
+# I guess this is PHONY so it always updates?
+ChangeLog:
+       $(AM_V_GEN)cd $(srcdir) && \
+         ./$(emacslog) -o $(CHANGELOG) -n $(CHANGELOG_HISTORY_INDEX_MAX)
+
 # Check that we are in a good state for changing history.
 master-branch-is-current:
        git branch | grep -q '^\* master$$'
@@ -1119,13 +1115,14 @@ unchanged-history-files:
 # Copy newer commit messages to the start of the ChangeLog history file,
 # and consider them to be older.
 change-history-nocommit: master-branch-is-current unchanged-history-files
+       -rm -f ChangeLog.tmp
        $(MAKE) ChangeLog CHANGELOG=ChangeLog.tmp
-       (sed '/^;; [L]ocal Variables:/,$$d' <ChangeLog.tmp && cat 
$(CHANGELOG_N)) \
+       (sed '/^See ChangeLog.[0-9]* for earlier/,$$d' <ChangeLog.tmp && cat 
$(CHANGELOG_N)) \
          >$(CHANGELOG_N).tmp
        rm ChangeLog.tmp
        new_origin=$$(git log --pretty=format:%H HEAD^!) && \
        sed 's/^\(gen_origin=\).*/\1'"$$new_origin/" \
-         < $(emacslog) > $(emacslog).tmp
+         < $(emacslog) > $(emacslog).tmp && chmod +x $(emacslog).tmp
        mv $(CHANGELOG_N).tmp $(CHANGELOG_N)
        mv $(emacslog).tmp $(emacslog)
 
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
index 3f4b06a..ad7c273 100755
--- a/build-aux/gitlog-to-changelog
+++ b/build-aux/gitlog-to-changelog
@@ -3,7 +3,7 @@ eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
     if 0;
 # Convert git log output to ChangeLog format.
 
-my $VERSION = '2015-04-09 16:03'; # UTC
+my $VERSION = '2015-05-08 06:05'; # UTC
 # The definition above must lie within the first 8 lines in order
 # for the Emacs time-stamp write hook (at end) to update it.
 # If you change this file with Emacs, please let the write hook
@@ -324,7 +324,7 @@ sub git_dir_option($)
 
       # Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog
       # `(tiny change)' annotation.
-      my $tiny = (grep (/^Copyright-paperwork-exempt:\s+[Yy]es$/, @line)
+      my $tiny = (grep 
(/^(?:Copyright-paperwork-exempt|Tiny-change):\s+[Yy]es$/, @line)
                   ? '  (tiny change)' : '');
 
       my $date_line = sprintf "%s  %s$tiny\n",
@@ -335,6 +335,7 @@ sub git_dir_option($)
       @line = grep !/^(?:Signed-off-by:[ ].*>$
                        |Co-authored-by:[ ]
                        |Copyright-paperwork-exempt:[ ]
+                       |Tiny-change:[ ]
                        )/x, @line;
 
       # Remove leading and trailing blank lines.
diff --git a/build-aux/gitlog-to-emacslog b/build-aux/gitlog-to-emacslog
index a657cce..e38f896 100755
--- a/build-aux/gitlog-to-emacslog
+++ b/build-aux/gitlog-to-emacslog
@@ -23,39 +23,58 @@ LC_ALL=C
 export LC_ALL
 
 # The newest revision that should not appear in the generated ChangeLog.
-gen_origin=2c1b8604946efbcd8ec5dd6c6dda7541ce4fc3c0
-test -n "$1" && test "$1" != "." && gen_origin=$1
+gen_origin=d2c7e14ac3bd2b517d35a86255c28d5b6d779451
+force=
+output=ChangeLog
+nmax=2
+
+while [ $# -gt 0 ]; do
+  case "$1" in
+      -g|--gen-origin) gen_origin="$2" ; shift ;;
+      -f|--force) force=1 ;;
+      -n|--nmax) nmax="$2"; shift ;;
+      -o|--output) output="$2" ; shift ;;
+      *) echo "Unrecognized argument: $1" >&2; exit 1 ;;
+  esac
+  shift
+done
+
+if [ ! -f ChangeLog.$nmax ]; then
+    echo "Can't find ChangeLog.$nmax" >&2
+    echo "Must be run from the top source directory" >&2
+    exit 1
+fi
 
-output=$2
-test -n "$output" || output=ChangeLog
+if [ -f "$output" ]; then
+    [ ! "$force" ] && echo "$output exists" >&2 && exit 1
+    rm -f "$output" || exit 1
+fi
 
 # If this is not a Git repository, just generate an empty ChangeLog.
-test -d ${srcprefix}.git || {
-  # Remove any old ChangeLog, in case it is a vc-dwim symlink.
-  rm -f "${distprefix}$output" || exit
-  >"${distprefix}$output"
+test -d .git || {
+  >"$output"
   exit
 }
 
 # Use Gnulib's packaged ChangeLog generator.
-${srcprefix}build-aux/gitlog-to-changelog --ignore-matching='^; ' \
+./build-aux/gitlog-to-changelog --ignore-matching='^; ' \
   --format='%B' \
-  "$gen_origin.." >"${distprefix}ChangeLog.tmp" || exit
+  "$gen_origin.." >"ChangeLog.tmp" || exit
 
-if test -s "${distprefix}ChangeLog.tmp"; then
+if test -s "ChangeLog.tmp"; then
 
   # Fix up bug references.
   # This would be better as eg a --transform option to gitlog-to-changelog,
   # but... effort.  FIXME does not handle rare cases like:
   # Fixes: debbugs:19434 debbugs:19519
   sed 's/      Fixes: \(debbugs:\|bug#\)\([0-9][0-9]*\)/       (Bug#\2)/' \
-      "${distprefix}ChangeLog.tmp" > "${distprefix}ChangeLog.tmp2"
-  mv "${distprefix}ChangeLog.tmp2" "${distprefix}ChangeLog.tmp"
+      "ChangeLog.tmp" > "ChangeLog.tmp2"
+  mv "ChangeLog.tmp2" "ChangeLog.tmp"
 
   # Find the years covered by the generated ChangeLog, so that
   # a proper copyright notice can be output.
   years=`
-    sed -n 's/^\([0-9][0-9]*\).*/\1/p' "${distprefix}ChangeLog.tmp" |
+    sed -n 's/^\([0-9][0-9]*\).*/\1/p' "ChangeLog.tmp" |
     sort -nu
   `
   start_year=
@@ -75,13 +94,13 @@ if test -s "${distprefix}ChangeLog.tmp"; then
   sed -n '
     1i\
 
-    /^;; Local Variables:/,${
+    /^See ChangeLog.[0-9]* for earlier/,${
+       s/ChangeLog\.[0-9]*/ChangeLog.'$nmax'/
        s/\(Copyright[ (C)]*\)[0-9]*-[0-9]*/\1'"$year_range"'/
        p
     }
-  ' <ChangeLog.2 >>"${distprefix}ChangeLog.tmp" || exit
+  ' <ChangeLog.$nmax >>"ChangeLog.tmp" || exit
 fi
 
 # Install the generated ChangeLog.
-test "$output" = "ChangeLog.tmp" || \
-  mv -i "${distprefix}ChangeLog.tmp" "${distprefix}$output"
+test "$output" = "ChangeLog.tmp" || mv "ChangeLog.tmp" "$output"
diff --git a/configure.ac b/configure.ac
index 86b5e7e..a8f292c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2499,15 +2499,12 @@ if test x"$pkg_check_gtk" = xyes; then
     GTK_OBJ="gtkutil.o $GTK_OBJ"
     term_header=$gtk_term_header
     USE_X_TOOLKIT=none
-    if "$PKG_CONFIG" --atleast-version=2.10 gtk+-2.0; then
-      :
-    else
-      AC_MSG_WARN([[Your version of Gtk+ will have problems with
+    AC_MSG_WARN([[Your version of Gtk+ will have problems with
        closing open displays.  This is no problem if you just use
        one display, but if you use more than one and close one of them
-       Emacs may crash.]])
-      sleep 3
-    fi
+       Emacs may crash.
+       See http://bugzilla.gnome.org/show_bug.cgi?id=85715]])
+    sleep 3
   fi
 
 fi
diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi
index 30c35a0..21f645e 100644
--- a/doc/emacs/emacs.texi
+++ b/doc/emacs/emacs.texi
@@ -831,7 +831,7 @@ VC Directory Mode
 Version Control Branches
 
 * Switching Branches::    How to get to another existing branch.
-* VC Pull::               Updating the contents of a branch.
+* Pulling / Pushing::     Receiving/sending changes from/to elsewhere.
 * Merging::               Transferring changes between branches.
 * Creating Branches::     How to start a new branch.
 
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index a129886..8ec1cd2 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -491,10 +491,10 @@ commit.  @xref{Log Buffer}.
 If committing to a shared repository, the commit may fail if the
 repository that has been changed since your last update.  In that
 case, you must perform an update before trying again.  On a
-decentralized version control system, use @kbd{C-x v +} (@pxref{VC
-Pull}) or @kbd{C-x v m} (@pxref{Merging}).  On a centralized version
-control system, type @kbd{C-x v v} again to merge in the repository
-changes.
+decentralized version control system, use @kbd{C-x v +}
+(@pxref{Pulling / Pushing}) or @kbd{C-x v m} (@pxref{Merging}).
+On a centralized version control system, type @kbd{C-x v v} again to
+merge in the repository changes.
 
 @item
 Finally, if you are using a centralized version control system, check
@@ -942,7 +942,7 @@ revision at point.  A second @key{RET} hides it again.
 (@code{vc-log-incoming}) command displays a log buffer showing the
 changes that will be applied, the next time you run the version
 control system's ``pull'' command to get new revisions from another
-repository (@pxref{VC Pull}).  This other repository is the default
+repository (@pxref{Pulling / Pushing}).  This other repository is the default
 one from which changes are pulled, as defined by the version control
 system; with a prefix argument, @code{vc-log-incoming} prompts for a
 specific repository.  Similarly, @kbd{C-x v O}
@@ -1305,7 +1305,7 @@ different branches.
 
 @menu
 * Switching Branches::    How to get to another existing branch.
-* VC Pull::               Updating the contents of a branch.
+* Pulling / Pushing::     Receiving/sending changes from/to elsewhere.
 * Merging::               Transferring changes between branches.
 * Creating Branches::     How to start a new branch.
 @end menu
@@ -1349,8 +1349,8 @@ unlocks (write-protects) the working tree.
 branch until you switch away; for instance, any VC filesets that you
 commit will be committed to that specific branch.
 
address@hidden VC Pull
address@hidden Pulling Changes into a Branch
address@hidden Pulling / Pushing
address@hidden Pulling/Pushing Changes into/from a Branch
 
 @table @kbd
 @item C-x v +
@@ -1359,6 +1359,11 @@ by ``pulling in'' changes from another location.
 
 On a centralized version control system, update the current VC
 fileset.
+
address@hidden C-x v P
+On a decentralized version control system, ``push'' changes from the
+current branch to another location.  This concept does not exist
+for centralized version control systems.
 @end table
 
 @kindex C-x v +
@@ -1388,6 +1393,21 @@ Log}.
   On a centralized version control system like CVS, @kbd{C-x v +}
 updates the current VC fileset from the repository.
 
address@hidden C-x v P
address@hidden vc-push
+  On a decentralized version control system, the command @kbd{C-x v P}
+(@code{vc-push}) sends changes from your current branch to another location.
+With a prefix argument, the command prompts for the exact
+version control command to use, which lets you specify where to push
+changes.  Otherwise, it pushes to a default location determined
+by the version control system.
+
+  Prior to pushing, you can use @kbd{C-x v O} (@code{vc-log-outgoing})
+to view a log buffer of the changes to be sent.  @xref{VC Change Log}.
+
+This command is currently supported only by Bazaar, Git, and Mercurial.
+It signals an error for centralized version control systems.
+
 @node Merging
 @subsubsection Merging Branches
 @cindex merging changes
diff --git a/doc/emacs/mule.texi b/doc/emacs/mule.texi
index de381df..d929e09 100644
--- a/doc/emacs/mule.texi
+++ b/doc/emacs/mule.texi
@@ -1660,8 +1660,8 @@ characters present directly on the keyboard or using 
@key{Compose} or
 @cindex compose character
 @cindex dead character
 @item
-For Latin-1 only, you can use the key @kbd{C-x 8} as a ``compose
-character'' prefix for entry of address@hidden Latin-1 printing
+You can use the key @kbd{C-x 8} as a ``compose character'' prefix for
+entry of address@hidden Latin-1 and a few other printing
 characters.  @kbd{C-x 8} is good for insertion (in the minibuffer as
 well as other buffers), for searching, and in any other context where
 a key sequence is allowed.
diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi
index 9bce155..72976b1 100644
--- a/doc/lispref/sequences.texi
+++ b/doc/lispref/sequences.texi
@@ -797,7 +797,7 @@ vector or string (@pxref{Iteration} for more information 
about the
 @code{dolist} macro).  This is primarily useful for side-effects.
 @end defmac
 
address@hidden seq-let arguments sequense address@hidden
address@hidden seq-let arguments sequence address@hidden
 @cindex sequence destructuring
   This macro binds the variables in defined in the sequence
 @var{arguments} to the elements of the sequence @var{sequence}.
diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex
index dc53be8..152e985 100644
--- a/doc/misc/texinfo.tex
+++ b/doc/misc/texinfo.tex
@@ -3,7 +3,7 @@
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2015-04-29.11}
+\def\texinfoversion{2015-05-06.11}
 %
 % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
 % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
@@ -3022,11 +3022,16 @@ end
   \TeX
 }
 
-% Some math mode symbols.
-\def\bullet{$\ptexbullet$}
-\def\geq{\ifmmode \ge\else $\ge$\fi}
-\def\leq{\ifmmode \le\else $\le$\fi}
-\def\minus{\ifmmode -\else $-$\fi}
+% Some math mode symbols.  Define \ensuremath to switch into math mode
+% unless we are already there.  Expansion tricks may not be needed here,
+% but safer, and can't hurt.
+\def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi}
+\def\ensuredmath#1{$\relax#1$}
+%
+\def\bullet{\ensuremath\ptexbullet}
+\def\geq{\ensuremath\ge}
+\def\leq{\ensuremath\le}
+\def\minus{\ensuremath-}
 
 % @dots{} outputs an ellipsis using the current font.
 % We do .5em per period so that it has the same spacing in the cm
@@ -9038,7 +9043,7 @@ directory should work if nowhere else does.}
   \gdef^^b4{\'{}}
   \gdef^^b5{$\mu$}
   \gdef^^b6{\P}
-  \gdef^^b7{\ifmmode\cdot\else $\cdot$\fi}
+  \gdef^^b7{\ensuremath\cdot}
   \gdef^^b8{\cedilla\ }
   \gdef^^b9{$^1$}
   \gdef^^ba{\ordm}
@@ -9397,19 +9402,19 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{00A9}{\copyright}
   \DeclareUnicodeCharacter{00AA}{\ordf}
   \DeclareUnicodeCharacter{00AB}{\guillemetleft}
-  \DeclareUnicodeCharacter{00AC}{\ifmmode\lnot\else $\lnot$\fi}
+  \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}
   \DeclareUnicodeCharacter{00AD}{\-}
   \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
   \DeclareUnicodeCharacter{00AF}{\={ }}
 
   \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
-  \DeclareUnicodeCharacter{00B1}{\ifmmode\pm\else $\pm$\fi}
+  \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}
   \DeclareUnicodeCharacter{00B2}{$^2$}
   \DeclareUnicodeCharacter{00B3}{$^3$}
   \DeclareUnicodeCharacter{00B4}{\'{ }}
   \DeclareUnicodeCharacter{00B5}{$\mu$}
   \DeclareUnicodeCharacter{00B6}{\P}
-  \DeclareUnicodeCharacter{00B7}{\ifmmode\cdot\else $\cdot$\fi}
+  \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}
   \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
   \DeclareUnicodeCharacter{00B9}{$^1$}
   \DeclareUnicodeCharacter{00BA}{\ordm}
@@ -9443,7 +9448,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{00D4}{\^O}
   \DeclareUnicodeCharacter{00D5}{\~O}
   \DeclareUnicodeCharacter{00D6}{\"O}
-  \DeclareUnicodeCharacter{00D7}{\ifmmode\times\else $\times$\fi}
+  \DeclareUnicodeCharacter{00D7}{\ensuremath\times}
   \DeclareUnicodeCharacter{00D8}{\O}
   \DeclareUnicodeCharacter{00D9}{\`U}
   \DeclareUnicodeCharacter{00DA}{\'U}
@@ -9477,7 +9482,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{00F4}{\^o}
   \DeclareUnicodeCharacter{00F5}{\~o}
   \DeclareUnicodeCharacter{00F6}{\"o}
-  \DeclareUnicodeCharacter{00F7}{\ifmmode\div\else $\div$\fi}
+  \DeclareUnicodeCharacter{00F7}{\ensuremath\div}
   \DeclareUnicodeCharacter{00F8}{\o}
   \DeclareUnicodeCharacter{00F9}{\`u}
   \DeclareUnicodeCharacter{00FA}{\'u}
@@ -9546,7 +9551,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
   \DeclareUnicodeCharacter{0136}{\cedilla{K}}
   \DeclareUnicodeCharacter{0137}{\cedilla{k}}
-  \DeclareUnicodeCharacter{0138}{\ifmmode\kappa\else $\kappa$\fi}  
+  \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}  
   \DeclareUnicodeCharacter{0139}{\'L}
   \DeclareUnicodeCharacter{013A}{\'l}
   \DeclareUnicodeCharacter{013B}{\cedilla{L}}
@@ -9813,6 +9818,8 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{201C}{\quotedblleft}
   \DeclareUnicodeCharacter{201D}{\quotedblright}
   \DeclareUnicodeCharacter{201E}{\quotedblbase}
+  \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}
+  \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}
   \DeclareUnicodeCharacter{2022}{\bullet}
   \DeclareUnicodeCharacter{2026}{\dots}
   \DeclareUnicodeCharacter{2039}{\guilsinglleft}
@@ -9824,6 +9831,7 @@ directory should work if nowhere else does.}
 
   \DeclareUnicodeCharacter{2212}{\minus}
   \DeclareUnicodeCharacter{2217}{\point}
+  \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}
   \DeclareUnicodeCharacter{2261}{\equiv}
 }% end of \utfeightchardefs
 
diff --git a/etc/NEWS b/etc/NEWS
index 3ab1f4b..3f907db 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -213,6 +213,9 @@ successive char insertions.
 
 ** Unicode names entered via C-x 8 RET now use substring completion by default.
 
+** C-x 8 now has shorthands for these chars: ‐ ‑ ‒ – — ― ‘ ’ “ ” † ‡ • ′ ″
+€ № ← → ↔ − ≈ ≠ ≤ ≥.  As before, you can type C-x 8 C-h to list shorthands.
+
 ** New minor mode global-eldoc-mode is enabled by default.
 
 ** Emacs now supports "bracketed paste mode" when running on a terminal
@@ -255,6 +258,17 @@ by default at least in Debian, for security reasons).
 
 ** package.el
 
+*** New "external" package status.
+An external package is any installed package that's not built-in and
+not from `package-user-dir', which usually means it's from an entry in
+`package-directory-list'.  They are treated much like built-in
+packages, in that they cannot be deleted through the package menu and
+are not considered for upgrades.
+
+The effect, is that a user can manually place a specific version of a
+package inside `package-directory-list' and the package menu will
+always respect that.
+
 *** If a package is available on multiple archives and one has higher
 priority (as per `package-archive-priorities') only that one is
 listed. This can be configured with `package-menu-hide-low-priority'.
@@ -539,6 +553,9 @@ and comments.
 
 ** VC and related modes
 
+*** Basic push support, via `vc-push', bound to `C-x v P'.
+Implemented for Bzr, Git, Hg.
+
 *** The new command vc-region-history shows the log+diff of the active region.
 
 *** New option `vc-annotate-background-mode' controls whether
@@ -552,6 +569,11 @@ allows to customize this.
 *** Two new faces `compare-windows-removed' and `compare-windows-added'
 replace the obsolete face `compare-windows'.
 
+---
+*** `log-edit-insert-changelog' converts "(tiny change)" to
+"Copyright-paperwork-exempt: yes".  Set `log-edit-rewrite-tiny-change'
+nil to disable this.
+
 ** VHDL mode supports VHDL'08.
 
 ** Calculator: decimal display mode uses "," groups, so it's more
diff --git a/lib-src/etags.c b/lib-src/etags.c
index b1361db..f243821 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -2862,7 +2862,10 @@ consider_token (char *str, int len, int c, int *c_extp,
      case st_none:
        if (constantypedefs
           && structdef == snone
-          && structtype == st_C_enum && bracelev > structbracelev)
+          && structtype == st_C_enum && bracelev > structbracelev
+          /* Don't tag tokens in expressions that assign values to enum
+             constants.  */
+          && fvdef != vignore)
         return true;           /* enum constant */
        switch (fvdef)
         {
@@ -3176,7 +3179,19 @@ C_entries (int c_ext, FILE *inf)
                      cpptoken = false;
                  }
              if (cpptoken)
-               definedef = dsharpseen;
+               {
+                 definedef = dsharpseen;
+                 /* This is needed for tagging enum values: when there are
+                    preprocessor conditionals inside the enum, we need to
+                    reset the value of fvdef so that the next enum value is
+                    tagged even though the one before it did not end in a
+                    comma.  */
+                 if (fvdef == vignore && instruct && parlev == 0)
+                   {
+                     if (strneq (cp, "#if", 3) || strneq (cp, "#el", 3))
+                       fvdef = fvnone;
+                   }
+               }
            } /* if (definedef == dnone) */
          continue;
        case '[':
@@ -3507,7 +3522,10 @@ C_entries (int c_ext, FILE *inf)
            case fstartlist:
            case finlist:
            case fignore:
+             break;
            case vignore:
+             if (instruct && parlev == 0)
+               fvdef = fvnone;
              break;
            case fdefunname:
              fvdef = fignore;
diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el
index 58bbdb8..1cc11b4 100644
--- a/lisp/calc/calc.el
+++ b/lisp/calc/calc.el
@@ -154,6 +154,7 @@
 (declare-function math-parse-date "calc-forms" (math-pd-str))
 (declare-function math-lessp "calc-ext" (a b))
 (declare-function math-compare "calc-ext" (a b))
+(declare-function math-zerop "calc-misc" (a))
 (declare-function calc-embedded-finish-command "calc-embed" ())
 (declare-function calc-embedded-select-buffer "calc-embed" ())
 (declare-function calc-embedded-mode-line-change "calc-embed" ())
diff --git a/lisp/cedet/semantic/symref.el b/lisp/cedet/semantic/symref.el
index 10293d9..2c5e3ba 100644
--- a/lisp/cedet/semantic/symref.el
+++ b/lisp/cedet/semantic/symref.el
@@ -472,8 +472,12 @@ buffers that were opened."
     (goto-char (point-min))
     (forward-line (1- line))
 
-    ;; Search forward for the matching text
-    (when (re-search-forward (regexp-quote searchtxt)
+    ;; Search forward for the matching text.
+    ;; FIXME: This still fails if the regexp uses something specific
+    ;; to the extended syntax, like grouping.
+    (when (re-search-forward (if (memq searchtype '(regexp tagregexp))
+                                 searchtxt
+                               (regexp-quote searchtxt))
                             (point-at-eol)
                             t)
       (goto-char (match-beginning 0))
diff --git a/lisp/cedet/semantic/symref/grep.el 
b/lisp/cedet/semantic/symref/grep.el
index 3fa1c5f..6325eb4 100644
--- a/lisp/cedet/semantic/symref/grep.el
+++ b/lisp/cedet/semantic/symref/grep.el
@@ -141,7 +141,7 @@ This shell should support pipe redirect syntax."
   "Perform a search with Grep."
   ;; Grep doesn't support some types of searches.
   (let ((st (oref tool :searchtype)))
-    (when (not (eq st 'symbol))
+    (when (not (memq st '(symbol regexp)))
       (error "Symref impl GREP does not support searchtype of %s" st))
     )
   ;; Find the root of the project, and do a find-grep...
@@ -150,13 +150,19 @@ This shell should support pipe redirect syntax."
         (filepattern (semantic-symref-derive-find-filepatterns))
         ;; Grep based flags.
         (grepflags (cond ((eq (oref tool :resulttype) 'file)
-                         "-l ")
-                        (t "-n ")))
-        (greppat (cond ((eq (oref tool :searchtype) 'regexp)
-                        (oref tool searchfor))
-                       (t
-                        (shell-quote-argument
-                          (concat "\\<" (oref tool searchfor) "\\>")))))
+                           "-l ")
+                          ((eq (oref tool :searchtype) 'regexp)
+                           "-nE ")
+                          (t "-n ")))
+        (greppat (shell-quote-argument
+                   (cond ((eq (oref tool :searchtype) 'regexp)
+                          (oref tool searchfor))
+                         (t
+                          ;; Can't use the word boundaries: Grep
+                          ;; doesn't always agrees with the language
+                          ;; syntax on those.
+                          (format "\\(^\\|\\W\\)%s\\(\\W\\|$\\)"
+                                  (oref tool searchfor))))))
         ;; Misc
         (b (get-buffer-create "*Semantic SymRef*"))
         (ans nil)
diff --git a/lisp/cedet/semantic/symref/list.el 
b/lisp/cedet/semantic/symref/list.el
index c99fc5f..f72499b 100644
--- a/lisp/cedet/semantic/symref/list.el
+++ b/lisp/cedet/semantic/symref/list.el
@@ -84,9 +84,13 @@ This command uses the currently configured references tool 
within the
 current project to find references to the input SYM.  The
 references are the organized by file and the name of the function
 they are used in.
-Display the references in`semantic-symref-results-mode'."
-  (interactive (list (semantic-tag-name (semantic-complete-read-tag-buffer-deep
-                                        "Symrefs for: "))))
+Display the references in `semantic-symref-results-mode'."
+  (interactive (list (let ((tag (semantic-current-tag)))
+                       (read-string " Symrefs for: " nil nil
+                                    (when tag
+                                      (regexp-quote (semantic-tag-name 
tag)))))))
+  ;; FIXME: Shouldn't the input be in Emacs regexp format, for
+  ;; consistency? Converting it to extended is not hard.
   (semantic-fetch-tags)
   (message "Gathering References...")
   ;; Gather results and tags
diff --git a/lisp/cedet/srecode/dictionary.el b/lisp/cedet/srecode/dictionary.el
index 97d3310..27e730f 100644
--- a/lisp/cedet/srecode/dictionary.el
+++ b/lisp/cedet/srecode/dictionary.el
@@ -195,8 +195,8 @@ associated with a buffer or parent."
              initfrombuff t)))
 
       ;; Create the new dictionary object.
-      (let ((dict (srecode-dictionary
-                  major-mode
+      (let ((dict (make-instance
+                   'srecode-dictionary
                   :buffer   buffer
                   :parent   parent
                   :namehash (make-hash-table :test 'equal
diff --git a/lisp/cedet/srecode/insert.el b/lisp/cedet/srecode/insert.el
index 0c13ee5..c2a70fe 100644
--- a/lisp/cedet/srecode/insert.el
+++ b/lisp/cedet/srecode/insert.el
@@ -35,7 +35,6 @@
 (require 'srecode/args)
 (require 'srecode/filters)
 
-(defvar srecode-template-inserter-point)
 (declare-function srecode-overlaid-activate "srecode/fields")
 (declare-function srecode-template-inserted-region "srecode/fields")
 
@@ -145,7 +144,7 @@ has set everything up already."
               )
       (set-buffer standard-output)
       (setq end-mark (point-marker))
-      (goto-char  (oref srecode-template-inserter-point point)))
+      (goto-char  (oref-default 'srecode-template-inserter-point point)))
     (oset-default 'srecode-template-inserter-point point eieio-unbound)
 
     ;; Return the end-mark.
@@ -264,13 +263,12 @@ Optional argument TEMP is the template that is getting 
its arguments resolved."
   "Push the srecoder template ST onto the active stack."
   (oset st active (cons st (oref st active))))
 
-(cl-defmethod srecode-pop ((st (subclass srecode-template)))
-  "Pop the srecoder template ST onto the active stack.
-ST can be a class, or an object."
+(cl-defmethod srecode-pop ((st srecode-template))
+  "Pop the srecoder template ST onto the active stack."
   (oset st active (cdr (oref st active))))
 
-(cl-defmethod srecode-peek ((st (subclass srecode-template)))
-  "Fetch the topmost active template record.  ST can be a class."
+(cl-defmethod srecode-peek ((st srecode-template))
+  "Fetch the topmost active template record."
   (car (oref st active)))
 
 (cl-defmethod srecode-insert-method ((st srecode-template) dictionary)
@@ -363,7 +361,7 @@ occur in your template.")
            ((stringp i)
             (princ i))))))
 
-(cl-defmethod srecode-dump ((ins srecode-template-inserter-newline) indent)
+(cl-defmethod srecode-dump ((ins srecode-template-inserter-newline) _indent)
   "Dump the state of the SRecode template inserter INS."
   (cl-call-next-method)
   (when (oref ins hard)
@@ -425,8 +423,8 @@ Specify the :blank argument to enable this inserter.")
    )
   "Allow comments within template coding.  This inserts nothing.")
 
-(cl-defmethod srecode-inserter-prin-example ((ins (subclass 
srecode-template-inserter-comment))
-                                                 escape-start escape-end)
+(cl-defmethod srecode-inserter-prin-example ((_ins (subclass 
srecode-template-inserter-comment))
+                                             escape-start escape-end)
   "Insert an example using inserter INS.
 Arguments ESCAPE-START and ESCAPE-END are the current escape sequences in use."
   (princ "   ")
@@ -436,8 +434,8 @@ Arguments ESCAPE-START and ESCAPE-END are the current 
escape sequences in use."
   (terpri)
   )
 
-(cl-defmethod srecode-insert-method ((sti srecode-template-inserter-comment)
-                                 dictionary)
+(cl-defmethod srecode-insert-method ((_sti srecode-template-inserter-comment)
+                                     _dictionary)
   "Don't insert anything for comment macros in STI."
   nil)
 
@@ -491,7 +489,7 @@ If SECONDNAME is nil, return VALUE."
        (setq val (srecode-insert-variable-secondname-handler
                   sti dictionary val fcnpart)))
        ;; Compound data value
-       ((srecode-dictionary-compound-value-child-p val)
+       ((cl-typep val 'srecode-dictionary-compound-value)
        ;; Force FCN to be a symbol
        (when fcnpart (setq fcnpart (read fcnpart)))
        ;; Convert compound value to a string with the fcn.
@@ -502,7 +500,7 @@ If SECONDNAME is nil, return VALUE."
          (setq do-princ nil)))
 
        ;; Dictionaries... not allowed in this style
-       ((srecode-dictionary-child-p val)
+       ((cl-typep val 'srecode-dictionary)
        (srecode-insert-report-error
         dictionary
         "Macro %s cannot insert a dictionary - use section macros instead"
@@ -661,7 +659,7 @@ Use DICTIONARY to resolve values."
     ;; across multiple locations.
     compound-value))
 
-(cl-defmethod srecode-dump ((ins srecode-template-inserter-ask) indent)
+(cl-defmethod srecode-dump ((ins srecode-template-inserter-ask) _indent)
   "Dump the state of the SRecode template inserter INS."
   (cl-call-next-method)
   (princ " : \"")
@@ -682,7 +680,7 @@ to 10 characters, with spaces added to the left.  Use 
`right' for adding
 spaces to the right.")
 
 (cl-defmethod srecode-insert-variable-secondname-handler
-  ((sti srecode-template-inserter-width) dictionary value width)
+  ((_sti srecode-template-inserter-width) dictionary value width)
   "For VALUE handle WIDTH behaviors for this variable inserter.
 Return the result as a string.
 By default, treat as a function name."
@@ -714,8 +712,8 @@ By default, treat as a function name."
            (concat padchars value)
          (concat value padchars))))))
 
-(cl-defmethod srecode-inserter-prin-example ((ins (subclass 
srecode-template-inserter-width))
-                                                 escape-start escape-end)
+(cl-defmethod srecode-inserter-prin-example ((_ins (subclass 
srecode-template-inserter-width))
+                                             escape-start escape-end)
   "Insert an example using inserter INS.
 Arguments ESCAPE-START and ESCAPE-END are the current escape sequences in use."
   (princ "   ")
@@ -750,8 +748,8 @@ The cursor is placed at the ^ macro after insertion.
 Some inserter macros, such as `srecode-template-inserter-include-wrap'
 will place text at the ^ macro from the included macro.")
 
-(cl-defmethod srecode-inserter-prin-example ((ins (subclass 
srecode-template-inserter-point))
-                                                 escape-start escape-end)
+(cl-defmethod srecode-inserter-prin-example ((_ins (subclass 
srecode-template-inserter-point))
+                                             escape-start escape-end)
   "Insert an example using inserter INS.
 Arguments ESCAPE-START and ESCAPE-END are the current escape sequences in use."
   (princ "   ")
@@ -787,8 +785,8 @@ generalized marker will do something else.  See
   "Wrap a section of a template under the control of a macro."
   :abstract t)
 
-(cl-defmethod srecode-inserter-prin-example ((ins (subclass 
srecode-template-inserter-subtemplate))
-                                                 escape-start escape-end)
+(cl-defmethod srecode-inserter-prin-example ((_ins (subclass 
srecode-template-inserter-subtemplate))
+                                             escape-start escape-end)
   "Insert an example using inserter INS.
 Arguments ESCAPE-START and ESCAPE-END are the current escape sequences in use."
   (cl-call-next-method)
@@ -805,7 +803,7 @@ Arguments ESCAPE-START and ESCAPE-END are the current 
escape sequences in use."
                                       dict slot)
   "Insert a subtemplate for the inserter STI with dictionary DICT."
   ;; Make sure that only dictionaries are used.
-  (unless (srecode-dictionary-child-p dict)
+  (unless (cl-typep dict 'srecode-dictionary)
     (srecode-insert-report-error
      dict
      "Only section dictionaries allowed for `%s'"
@@ -889,8 +887,8 @@ Return the remains of INPUT."
   "All template segments between the section-start and section-end
 are treated specially.")
 
-(cl-defmethod srecode-insert-method ((sti 
srecode-template-inserter-section-end)
-                                 dictionary)
+(cl-defmethod srecode-insert-method ((_sti 
srecode-template-inserter-section-end)
+                                 _dictionary)
   "Insert the STI inserter."
   )
 
@@ -912,7 +910,7 @@ are treated specially.")
 The included template will have additional dictionary entries from the 
subdictionary
 stored specified by this macro.")
 
-(cl-defmethod srecode-inserter-prin-example ((ins (subclass 
srecode-template-inserter-include))
+(cl-defmethod srecode-inserter-prin-example ((_ins (subclass 
srecode-template-inserter-include))
                                                  escape-start escape-end)
   "Insert an example using inserter INS.
 Arguments ESCAPE-START and ESCAPE-END are the current escape sequences in use."
@@ -1017,7 +1015,7 @@ stored specified by this macro.  If the included macro 
includes a ^ macro,
 then the text between this macro and the end macro will be inserted at
 the ^ macro.")
 
-(cl-defmethod srecode-inserter-prin-example ((ins (subclass 
srecode-template-inserter-include-wrap))
+(cl-defmethod srecode-inserter-prin-example ((_ins (subclass 
srecode-template-inserter-include-wrap))
                                                  escape-start escape-end)
   "Insert an example using inserter INS.
 Arguments ESCAPE-START and ESCAPE-END are the current escape sequences in use."
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index b4e2dc0..4dcb519 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -413,12 +413,15 @@ into the minibuffer."
       ;; Now the original list FILES has been put back as it was.
       (nconc past pending))))
 
+(defvar lpr-printer-switch)
+
 ;;;###autoload
 (defun dired-do-print (&optional arg)
   "Print the marked (or next ARG) files.
 Uses the shell command coming from variables `lpr-command' and
 `lpr-switches' as default."
   (interactive "P")
+  (require 'lpr)
   (let* ((file-list (dired-get-marked-files t arg))
         (lpr-switches
          (if (and (stringp printer-name)
diff --git a/lisp/dired.el b/lisp/dired.el
index cc16c8c..ca13900 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -3889,7 +3889,7 @@ Ask means pop up a menu for the user to select one of 
copy, move or link."
 
 ;;; Start of automatically extracted autoloads.
 
-;;;### (autoloads nil "dired-aux" "dired-aux.el" 
"65f8aa57ace423283926d92dff903ca7")
+;;;### (autoloads nil "dired-aux" "dired-aux.el" 
"8820677763cb69eef827e38b86d35f47")
 ;;; Generated autoloads from dired-aux.el
 
 (autoload 'dired-diff "dired-aux" "\
diff --git a/lisp/emacs-lisp/chart.el b/lisp/emacs-lisp/chart.el
index 851b3bf..0660125 100644
--- a/lisp/emacs-lisp/chart.el
+++ b/lisp/emacs-lisp/chart.el
@@ -280,7 +280,7 @@ START and END represent the boundary."
   "Draw axis information based upon a range to be spread along the edge.
 A is the chart to draw.  DIR is the direction.
 MARGIN, ZONE, START, and END specify restrictions in chart space."
-  (call-next-method)
+  (cl-call-next-method)
   ;; We prefer about 5 spaces between each value
   (let* ((i (car (oref a bounds)))
         (e (cdr (oref a bounds)))
@@ -333,7 +333,7 @@ Automatically compensates for direction."
   "Draw axis information based upon A range to be spread along the edge.
 Optional argument DIR is the direction of the chart.
 Optional arguments MARGIN, ZONE, START and END specify boundaries of the 
drawing."
-  (call-next-method)
+  (cl-call-next-method)
   ;; We prefer about 5 spaces between each value
   (let* ((i 0)
         (s (oref a items))
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index fb11a3e..f6595d3 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -54,6 +54,15 @@
 ;; - The standard method combination supports ":extra STRING" qualifiers
 ;;   which simply allows adding more methods for the same
 ;;   specializers&qualifiers.
+;; - Methods can dispatch on the context.  For that, a method needs to specify
+;;   context arguments, introduced by `&context' (which need to come right
+;;   after the mandatory arguments and before anything like
+;;   &optional/&rest/&key).  Each context argument is given as (EXP 
SPECIALIZER)
+;;   which means that EXP is taken as an expression which computes some context
+;;   and this value is then used to dispatch.
+;;   E.g. (foo &context (major-mode (eql c-mode))) is an arglist specifying
+;;   that this method will only be applicable when `major-mode' has value
+;;   `c-mode'.
 
 ;; Efficiency considerations: overall, I've made an effort to make this fairly
 ;; efficient for the expected case (e.g. no constant redefinition of methods).
@@ -222,17 +231,12 @@ BODY, if present, is used as the body of a default method.
        ,@(mapcar (lambda (method) `(cl-defmethod ,name ,@method))
                  (nreverse methods)))))
 
-(defun cl--generic-mandatory-args (args)
-  (let ((res ()))
-    (while (not (memq (car args) '(nil &rest &optional &key)))
-      (push (pop args) res))
-    (nreverse res)))
-
 ;;;###autoload
 (defun cl-generic-define (name args options)
-  (let ((generic (cl-generic-ensure-function name))
-        (mandatory (cl--generic-mandatory-args args))
-        (apo (assq :argument-precedence-order options)))
+  (pcase-let* ((generic (cl-generic-ensure-function name))
+               (`(,spec-args . ,_) (cl--generic-split-args args))
+               (mandatory (mapcar #'car spec-args))
+               (apo (assq :argument-precedence-order options)))
     (setf (cl--generic-dispatches generic) nil)
     (when apo
       (dolist (arg (cdr apo))
@@ -259,52 +263,70 @@ This macro can only be used within the lexical scope of a 
cl-generic method."
       (and (memq sexp vars) (not (memq sexp res)) (push sexp res))
       res))
 
-  (defun cl--generic-lambda (args body)
-    "Make the lambda expression for a method with ARGS and BODY."
+  (defun cl--generic-split-args (args)
+    "Return (SPEC-ARGS . PLAIN-ARGS)."
     (let ((plain-args ())
           (specializers nil)
           (mandatory t))
       (dolist (arg args)
         (push (pcase arg
                 ((or '&optional '&rest '&key) (setq mandatory nil) arg)
-                ((and `(,name . ,type) (guard mandatory))
+                ('&context
+                 (unless mandatory
+                   (error "&context not immediately after mandatory args"))
+                 (setq mandatory 'context) nil)
+                ((let 'nil mandatory) arg)
+                ((let 'context mandatory)
+                 (unless (consp arg)
+                   (error "Invalid &context arg: %S" arg))
+                 (push `((&context . ,(car arg)) . ,(cadr arg)) specializers)
+                 nil)
+                (`(,name . ,type)
                  (push (cons name (car type)) specializers)
                  name)
-                (_ arg))
+                (_
+                 (push (cons arg t) specializers)
+                 arg))
               plain-args))
-      (setq plain-args (nreverse plain-args))
-      (let ((fun `(cl-function (lambda ,plain-args ,@body)))
-            (macroenv (cons `(cl-generic-current-method-specializers
-                              . ,(lambda () specializers))
-                            macroexpand-all-environment)))
-        (require 'cl-lib)        ;Needed to expand `cl-flet' and `cl-function'.
-        ;; First macroexpand away the cl-function stuff (e.g. &key and
-        ;; destructuring args, `declare' and whatnot).
-        (pcase (macroexpand fun macroenv)
-          (`#'(lambda ,args . ,body)
-           (let* ((parsed-body (macroexp-parse-body body))
-                  (cnm (make-symbol "cl--cnm"))
-                  (nmp (make-symbol "cl--nmp"))
-                  (nbody (macroexpand-all
-                          `(cl-flet ((cl-call-next-method ,cnm)
-                                     (cl-next-method-p ,nmp))
-                             ,@(cdr parsed-body))
-                          macroenv))
-                  ;; FIXME: Rather than `grep' after the fact, the
-                  ;; macroexpansion should directly set some flag when cnm
-                  ;; is used.
-                  ;; FIXME: Also, optimize the case where call-next-method is
-                  ;; only called with explicit arguments.
-                  (uses-cnm (cl--generic-fgrep (list cnm nmp) nbody)))
-             (cons (not (not uses-cnm))
-                   `#'(lambda (,@(if uses-cnm (list cnm)) ,@args)
-                        ,@(car parsed-body)
-                        ,(if (not (memq nmp uses-cnm))
-                             nbody
-                           `(let ((,nmp (lambda ()
-                                          (cl--generic-isnot-nnm-p ,cnm))))
-                              ,nbody))))))
-          (f (error "Unexpected macroexpansion result: %S" f)))))))
+      (cons (nreverse specializers)
+            (nreverse (delq nil plain-args)))))
+
+  (defun cl--generic-lambda (args body)
+    "Make the lambda expression for a method with ARGS and BODY."
+    (pcase-let* ((`(,spec-args . ,plain-args)
+                  (cl--generic-split-args args))
+                 (fun `(cl-function (lambda ,plain-args ,@body)))
+                 (macroenv (cons `(cl-generic-current-method-specializers
+                                   . ,(lambda () spec-args))
+                                 macroexpand-all-environment)))
+      (require 'cl-lib)        ;Needed to expand `cl-flet' and `cl-function'.
+      ;; First macroexpand away the cl-function stuff (e.g. &key and
+      ;; destructuring args, `declare' and whatnot).
+      (pcase (macroexpand fun macroenv)
+        (`#'(lambda ,args . ,body)
+         (let* ((parsed-body (macroexp-parse-body body))
+                (cnm (make-symbol "cl--cnm"))
+                (nmp (make-symbol "cl--nmp"))
+                (nbody (macroexpand-all
+                        `(cl-flet ((cl-call-next-method ,cnm)
+                                   (cl-next-method-p ,nmp))
+                           ,@(cdr parsed-body))
+                        macroenv))
+                ;; FIXME: Rather than `grep' after the fact, the
+                ;; macroexpansion should directly set some flag when cnm
+                ;; is used.
+                ;; FIXME: Also, optimize the case where call-next-method is
+                ;; only called with explicit arguments.
+                (uses-cnm (cl--generic-fgrep (list cnm nmp) nbody)))
+           (cons (not (not uses-cnm))
+                 `#'(lambda (,@(if uses-cnm (list cnm)) ,@args)
+                      ,@(car parsed-body)
+                      ,(if (not (memq nmp uses-cnm))
+                           nbody
+                         `(let ((,nmp (lambda ()
+                                        (cl--generic-isnot-nnm-p ,cnm))))
+                            ,nbody))))))
+        (f (error "Unexpected macroexpansion result: %S" f))))))
 
 
 ;;;###autoload
@@ -375,21 +397,26 @@ which case this method will be invoked when the argument 
is `eql' to VAL.
 
 ;;;###autoload
 (defun cl-generic-define-method (name qualifiers args uses-cnm function)
-  (let* ((generic (cl-generic-ensure-function name))
-         (mandatory (cl--generic-mandatory-args args))
-         (specializers
-          (mapcar (lambda (arg) (if (consp arg) (cadr arg) t)) mandatory))
-         (method (cl--generic-make-method
-                  specializers qualifiers uses-cnm function))
-         (mt (cl--generic-method-table generic))
-         (me (cl--generic-member-method specializers qualifiers mt))
-         (dispatches (cl--generic-dispatches generic))
-         (i 0))
-    (dolist (specializer specializers)
-      (let* ((generalizers (cl-generic-generalizers specializer))
-             (x (assq i dispatches)))
+  (pcase-let*
+      ((generic (cl-generic-ensure-function name))
+       (`(,spec-args . ,_) (cl--generic-split-args args))
+       (specializers (mapcar (lambda (spec-arg)
+                               (if (eq '&context (car-safe (car spec-arg)))
+                                   spec-arg (cdr spec-arg)))
+                             spec-args))
+       (method (cl--generic-make-method
+                specializers qualifiers uses-cnm function))
+       (mt (cl--generic-method-table generic))
+       (me (cl--generic-member-method specializers qualifiers mt))
+       (dispatches (cl--generic-dispatches generic))
+       (i 0))
+    (dolist (spec-arg spec-args)
+      (let* ((key (if (eq '&context (car-safe (car spec-arg)))
+                      (car spec-arg) i))
+             (generalizers (cl-generic-generalizers (cdr spec-arg)))
+             (x (assoc key dispatches)))
         (unless x
-          (setq x (cons i (cl-generic-generalizers t)))
+          (setq x (cons key (cl-generic-generalizers t)))
           (setf (cl--generic-dispatches generic)
                 (setq dispatches (cons x dispatches))))
         (dolist (generalizer generalizers)
@@ -427,6 +454,7 @@ which case this method will be invoked when the argument is 
`eql' to VAL.
 (defun cl--generic-get-dispatcher (dispatch)
   (cl--generic-with-memoization
       (gethash dispatch cl--generic-dispatchers)
+    ;; (message "cl--generic-get-dispatcher (%S)" dispatch)
     (let* ((dispatch-arg (car dispatch))
            (generalizers (cdr dispatch))
            (lexical-binding t)
@@ -437,13 +465,14 @@ which case this method will be invoked when the argument 
is `eql' to VAL.
                                'arg))
                     generalizers))
            (typescodes
-            (mapcar (lambda (generalizer)
-                      `(funcall 
',(cl--generic-generalizer-specializers-function
-                                   generalizer)
-                                ,(funcall 
(cl--generic-generalizer-tagcode-function
-                                           generalizer)
-                                          'arg)))
-                    generalizers))
+            (mapcar
+             (lambda (generalizer)
+               `(funcall ',(cl--generic-generalizer-specializers-function
+                            generalizer)
+                         ,(funcall (cl--generic-generalizer-tagcode-function
+                                    generalizer)
+                                   'arg)))
+             generalizers))
            (tag-exp
             ;; Minor optimization: since this tag-exp is
             ;; only used to lookup the method-cache, it
@@ -452,23 +481,30 @@ which case this method will be invoked when the argument 
is `eql' to VAL.
             `(or ,@(if (macroexp-const-p (car (last tagcodes)))
                        (butlast tagcodes)
                      tagcodes)))
-           (extraargs ()))
-      (dotimes (_ dispatch-arg)
-        (push (make-symbol "arg") extraargs))
+           (fixedargs '(arg))
+           (dispatch-idx dispatch-arg)
+           (bindings nil))
+      (when (eq '&context (car-safe dispatch-arg))
+        (setq bindings `((arg ,(cdr dispatch-arg))))
+        (setq fixedargs nil)
+        (setq dispatch-idx 0))
+      (dotimes (i dispatch-idx)
+        (push (make-symbol (format "arg%d" (- dispatch-idx i 1))) fixedargs))
       ;; FIXME: For generic functions with a single method (or with 2 methods,
       ;; one of which always matches), using a tagcode + hash-table is
       ;; overkill: better just use a `cl-typep' test.
       (byte-compile
        `(lambda (generic dispatches-left methods)
           (let ((method-cache (make-hash-table :test #'eql)))
-            (lambda (,@extraargs arg &rest args)
-              (apply (cl--generic-with-memoization
-                         (gethash ,tag-exp method-cache)
-                       (cl--generic-cache-miss
-                        generic ',dispatch-arg dispatches-left methods
-                        ,(if (cdr typescodes)
-                             `(append ,@typescodes) (car typescodes))))
-                     ,@extraargs arg args))))))))
+            (lambda (,@fixedargs &rest args)
+              (let ,bindings
+                (apply (cl--generic-with-memoization
+                        (gethash ,tag-exp method-cache)
+                        (cl--generic-cache-miss
+                         generic ',dispatch-arg dispatches-left methods
+                         ,(if (cdr typescodes)
+                              `(append ,@typescodes) (car typescodes))))
+                       ,@fixedargs args)))))))))
 
 (defun cl--generic-make-function (generic)
   (cl--generic-make-next-function generic
@@ -593,8 +629,11 @@ FUN is the function that should be called when METHOD calls
                                dispatch-arg dispatches-left methods-left types)
   (let ((methods '()))
     (dolist (method methods-left)
-      (let* ((specializer (or (nth dispatch-arg
-                                   (cl--generic-method-specializers method))
+      (let* ((specializer (or (if (integerp dispatch-arg)
+                                  (nth dispatch-arg
+                                       (cl--generic-method-specializers 
method))
+                                (cdr (assoc dispatch-arg
+                                            (cl--generic-method-specializers 
method))))
                               t))
              (m (member specializer types)))
         (when m
@@ -830,6 +869,17 @@ Can only be used from within the lexical body of a primary 
or around method."
    80 (lambda (name) `(gethash (car-safe ,name) cl--generic-head-used))
    (lambda (tag) (if (eq (car-safe tag) 'head) (list tag)))))
 
+;; Pre-fill the cl--generic-dispatchers table.
+;; We have two copies of `(0 ...)' but we can't share them via `let' because
+;; they're not used at the same time (one is compile-time, one is run-time).
+(puthash `(0 ,cl--generic-head-generalizer ,cl--generic-t-generalizer)
+         (eval-when-compile
+           (unless (fboundp 'cl--generic-get-dispatcher)
+             (require 'cl-generic))
+           (cl--generic-get-dispatcher
+            `(0 ,cl--generic-head-generalizer ,cl--generic-t-generalizer)))
+         cl--generic-dispatchers)
+
 (cl-defmethod cl-generic-generalizers :extra "head" (specializer)
   "Support for the `(head VAL)' specializers."
   ;; We have to implement `head' here using the :extra qualifier,
@@ -948,40 +998,6 @@ Can only be used from within the lexical body of a primary 
or around method."
           (list cl--generic-typeof-generalizer)))
    (cl-call-next-method)))
 
-;;; Just for kicks: dispatch on major-mode
-;;
-;; Here's how you'd use it:
-;;   (cl-defmethod foo ((x (major-mode text-mode)) y z) ...)
-;; And then
-;;     (foo 'major-mode toto titi)
-;;
-;; FIXME: Better would be to do that via dispatch on an "implicit argument".
-;; E.g. (cl-defmethod foo (y z &context (major-mode text-mode)) ...)
-
-;; (defvar cl--generic-major-modes (make-hash-table :test #'eq))
-;;
-;; (add-function :before-until cl-generic-generalizer-function
-;;               #'cl--generic-major-mode-tagcode)
-;; (defun cl--generic-major-mode-tagcode (type name)
-;;   (if (eq 'major-mode (car-safe type))
-;;       `(50 . (if (eq ,name 'major-mode)
-;;                  (cl--generic-with-memoization
-;;                      (gethash major-mode cl--generic-major-modes)
-;;                    `(cl--generic-major-mode . ,major-mode))))))
-;;
-;; (add-function :before-until cl-generic-tag-types-function
-;;               #'cl--generic-major-mode-types)
-;; (defun cl--generic-major-mode-types (tag)
-;;   (when (eq (car-safe tag) 'cl--generic-major-mode)
-;;     (if (eq tag 'fundamental-mode) '(fundamental-mode t)
-;;       (let ((types `((major-mode ,(cdr tag)))))
-;;         (while (get (car types) 'derived-mode-parent)
-;;           (push (list 'major-mode (get (car types) 'derived-mode-parent))
-;;                 types))
-;;         (unless (eq 'fundamental-mode (car types))
-;;           (push '(major-mode fundamental-mode) types))
-;;         (nreverse types)))))
-
 ;; Local variables:
 ;; generated-autoload-file: "cl-loaddefs.el"
 ;; End:
diff --git a/lisp/emacs-lisp/eieio-opt.el b/lisp/emacs-lisp/eieio-opt.el
index 7f98730..02b89e0 100644
--- a/lisp/emacs-lisp/eieio-opt.el
+++ b/lisp/emacs-lisp/eieio-opt.el
@@ -74,6 +74,9 @@ Argument CH-PREFIX is another character prefix to display."
 
 ;;; CLASS COMPLETION / DOCUMENTATION
 
+;; Called via help-fns-describe-function-functions.
+(declare-function help-fns-short-filename "help-fns" (filename))
+
 ;;;###autoload
 (defun eieio-help-class (class)
   "Print help description for CLASS.
diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el
index 26418e9..f6ffa3d 100644
--- a/lisp/emacs-lisp/eieio.el
+++ b/lisp/emacs-lisp/eieio.el
@@ -978,7 +978,7 @@ Optional argument GROUP is the sub-group of slots to 
display.
 
 ;;;***
 
-;;;### (autoloads nil "eieio-opt" "eieio-opt.el" 
"3005b815c6b30eccbf0642170b3f82a5")
+;;;### (autoloads nil "eieio-opt" "eieio-opt.el" 
"59cee62a4829ace9bb4a6526442d2b3c")
 ;;; Generated autoloads from eieio-opt.el
 
 (autoload 'eieio-browse "eieio-opt" "\
diff --git a/lisp/emacs-lisp/package-x.el b/lisp/emacs-lisp/package-x.el
index 6955ce8..81d0b83 100644
--- a/lisp/emacs-lisp/package-x.el
+++ b/lisp/emacs-lisp/package-x.el
@@ -156,6 +156,7 @@ DESCRIPTION is the text of the news item."
                               archive-url))
 
 (declare-function lm-commentary "lisp-mnt" (&optional file))
+(defvar tar-data-buffer)
 
 (defun package-upload-buffer-internal (pkg-desc extension &optional 
archive-url)
   "Upload a package whose contents are in the current buffer.
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 7968ecd..6156313 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -2457,7 +2457,9 @@ of these dependencies, similar to the list returned by
          (t "disabled"))))
      (dir                               ;One of the installed packages.
       (cond
-       ((not (file-exists-p (package-desc-dir pkg-desc))) "deleted")
+       ((not (file-exists-p dir)) "deleted")
+       ;; Not inside `package-user-dir'.
+       ((not (file-in-directory-p dir package-user-dir)) "external")
        ((eq pkg-desc (cadr (assq name package-alist)))
         (if (not signed) "unsigned"
           (if (package--user-selected-p name)
@@ -2662,6 +2664,7 @@ Return (PKG-DESC [NAME VERSION STATUS DOC])."
   (let* ((status  (package-desc-status pkg))
          (face (pcase status
                  (`"built-in"  'font-lock-builtin-face)
+                 (`"external"  'font-lock-builtin-face)
                  (`"available" 'default)
                  (`"avail-obso" 'font-lock-comment-face)
                  (`"new"       'bold)
@@ -2977,6 +2980,8 @@ Optional argument NOQUERY non-nil means do not ask the 
user to confirm."
           ((string= sB "unsigned") nil)
           ((string= sA "held") t)
           ((string= sB "held") nil)
+          ((string= sA "external") t)
+          ((string= sB "external") nil)
           ((string= sA "built-in") t)
           ((string= sB "built-in") nil)
           ((string= sA "obsolete") t)
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el
index f1633ce..5553de6 100644
--- a/lisp/emacs-lisp/seq.el
+++ b/lisp/emacs-lisp/seq.el
@@ -4,7 +4,7 @@
 
 ;; Author: Nicolas Petton <address@hidden>
 ;; Keywords: sequences
-;; Version: 1.6
+;; Version: 1.7
 ;; Package: seq
 
 ;; Maintainer: address@hidden
@@ -40,11 +40,6 @@
 ;;
 ;; All functions are tested in test/automated/seq-tests.el
 
-;;; TODO:
-
-;; - Add a pcase macro named using `pcase-defmacro' that `seq-let'
-;; - could wrap.
-
 ;;; Code:
 
 (defmacro seq-doseq (spec &rest body)
@@ -70,13 +65,38 @@ Evaluate BODY with VAR bound to each element of SEQ, in 
turn.
                               (pop ,index))))
            ,@body)))))
 
-(defmacro seq-let (args seq &rest body)
-  "Bind the variables in ARGS to the elements of SEQ then evaluate BODY."
-  (declare (indent 2) (debug t))
-  (let ((seq-var (make-symbol "seq")))
-    `(let* ((,seq-var ,seq)
-           ,@(seq--make-bindings args seq-var))
-       ,@body)))
+(if (fboundp 'pcase-defmacro)
+    ;; Implementation of `seq-let' based on a `pcase'
+    ;; pattern. Requires Emacs>=25.1.
+    (progn
+      (pcase-defmacro seq (&rest args)
+        "pcase pattern matching sequence elements.
+Matches if the object is a sequence (list, string or vector), and
+binds each element of ARGS to the corresponding element of the
+sequence."
+        `(and (pred seq-p)
+              ,@(seq--make-pcase-bindings args)))
+
+      (defmacro seq-let (args seq &rest body)
+        "Bind the variables in ARGS to the elements of SEQ then evaluate BODY.
+
+ARGS can also include the `&rest' marker followed by a variable
+name to be bound to the rest of SEQ."
+        (declare (indent 2) (debug t))
+        `(pcase-let ((,(seq--make-pcase-patterns args) ,seq))
+           ,@body)))
+
+  ;; Implementation of `seq-let' compatible with Emacs<25.1.
+  (defmacro seq-let (args seq &rest body)
+    "Bind the variables in ARGS to the elements of SEQ then evaluate BODY.
+
+ARGS can also include the `&rest' marker followed by a variable
+name to be bound to the rest of SEQ."
+    (declare (indent 2) (debug t))
+    (let ((seq-var (make-symbol "seq")))
+      `(let* ((,seq-var ,seq)
+              ,@(seq--make-bindings args seq-var))
+         ,@body))))
 
 (defun seq-drop (seq n)
   "Return a subsequence of SEQ without its first N elements.
@@ -346,19 +366,43 @@ This is an optimization for lists in `seq-take-while'."
       (setq n (+ 1 n)))
     n))
 
-(defun seq--activate-font-lock-keywords ()
-  "Activate font-lock keywords for some symbols defined in seq."
-  (font-lock-add-keywords 'emacs-lisp-mode
-                          '("\\<seq-doseq\\>" "\\<seq-let\\>")))
+(defun seq--make-pcase-bindings (args)
+  "Return a list of bindings of the variables in ARGS to the elements of a 
sequence."
+  (let ((bindings '())
+        (index 0)
+        (rest-marker nil))
+    (seq-doseq (name args)
+      (unless rest-marker
+        (pcase name
+          (`&rest
+           (progn (push `(app (pcase--flip seq-drop ,index)
+                              ,(seq--elt-safe args (1+ index)))
+                        bindings)
+                  (setq rest-marker t)))
+          (t
+           (push `(app (pcase--flip seq--elt-safe ,index) ,name) bindings))))
+      (setq index (1+ index)))
+    bindings))
 
+(defun seq--make-pcase-patterns (args)
+  "Return a list of `(seq ...)' pcase patterns from the argument list ARGS."
+  (cons 'seq
+        (seq-map (lambda (elt)
+                   (if (seq-p elt)
+                       (seq--make-pcase-patterns elt)
+                     elt))
+                 args)))
+
+;; Helper function for the Backward-compatible version of `seq-let'
+;; for Emacs<25.1.
 (defun seq--make-bindings (args seq &optional bindings)
-  "Return a list of bindings of the variables in ARGS to the elements of SEQ.
-if BINDINGS is non-nil, append new bindings to it, and
-return BINDINGS."
+  "Return a list of bindings of the variables in ARGS to the elements of a 
sequence.
+if BINDINGS is non-nil, append new bindings to it, and return
+BINDINGS."
   (let ((index 0)
-        (rest-bound nil))
+        (rest-marker nil))
     (seq-doseq (name args)
-      (unless rest-bound
+      (unless rest-marker
         (pcase name
           ((pred seq-p)
            (setq bindings (seq--make-bindings (seq--elt-safe args index)
@@ -368,7 +412,7 @@ return BINDINGS."
            (progn (push `(,(seq--elt-safe args (1+ index))
                           (seq-drop ,seq ,index))
                         bindings)
-                  (setq rest-bound t)))
+                  (setq rest-marker t)))
           (t
            (push `(,name (seq--elt-safe ,seq ,index)) bindings))))
       (setq index (1+ index)))
@@ -382,6 +426,11 @@ If no element is found, return nil."
                  (> (seq-length seq) n)))
     (seq-elt seq n)))
 
+(defun seq--activate-font-lock-keywords ()
+  "Activate font-lock keywords for some symbols defined in seq."
+  (font-lock-add-keywords 'emacs-lisp-mode
+                          '("\\<seq-doseq\\>" "\\<seq-let\\>")))
+
 (defalias 'seq-copy #'copy-sequence)
 (defalias 'seq-elt #'elt)
 (defalias 'seq-length #'length)
diff --git a/lisp/emacs-lisp/subr-x.el b/lisp/emacs-lisp/subr-x.el
index 78a6dc9..bd178fa 100644
--- a/lisp/emacs-lisp/subr-x.el
+++ b/lisp/emacs-lisp/subr-x.el
@@ -120,7 +120,8 @@ Argument BINDINGS is a list of tuples whose car is a symbol 
to be
 bound and (optionally) used in THEN, and its cadr is a sexp to be
 evalled to set symbol's value.  In the special case you only want
 to bind a single value, BINDINGS can just be a plain tuple."
-  (declare (indent 2) (debug ((&rest (symbolp form)) form body)))
+  (declare (indent 2)
+           (debug ([&or (&rest (symbolp form)) (symbolp form)] form body)))
   (when (and (<= (length bindings) 2)
              (not (listp (car bindings))))
     ;; Adjust the single binding case
diff --git a/lisp/ffap.el b/lisp/ffap.el
index 452275a..d78fd4c 100644
--- a/lisp/ffap.el
+++ b/lisp/ffap.el
@@ -1288,7 +1288,7 @@ which may actually result in an URL rather than a 
filename."
                    nil
                    nil
                    (if dir (cons guess (length dir)) guess)
-                   (list 'file-name-history)
+                   'file-name-history
                    (and buffer-file-name
                         (abbreviate-file-name buffer-file-name)))))
         ;; Remove the special handler manually.  We used to just let-bind
diff --git a/lisp/frame.el b/lisp/frame.el
index e8a8982..0c1fb38 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -217,6 +217,7 @@ This function runs the hook `focus-out-hook'."
   "Non-nil means function `frame-notice-user-settings' wasn't run yet.")
 
 (declare-function tool-bar-mode "tool-bar" (&optional arg))
+(declare-function tool-bar-height "xdisp.c" (&optional frame pixelwise))
 
 (defalias 'tool-bar-lines-needed 'tool-bar-height)
 
diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el
index 4b06cc0..b75d9ef 100644
--- a/lisp/gnus/gnus-util.el
+++ b/lisp/gnus/gnus-util.el
@@ -1578,6 +1578,7 @@ SPEC is a predicate specifier that contains stuff like 
`or', `and',
                  (prompt &optional default require-match
                          _predicate start matches-set))
 (defvar iswitchb-temp-buflist)
+(defvar iswitchb-mode)
 
 (defun gnus-iswitchb-completing-read (prompt collection &optional require-match
                                             initial-input history def)
diff --git a/lisp/help.el b/lisp/help.el
index fb1719a..2b8f642 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -691,7 +691,8 @@ POSITION is as documented in the function `key-binding'."
 (defun help--binding-locus (key position)
   "Describe in which keymap KEY is defined.
 Return a symbol pointing to that keymap if one exists ; otherwise
-return nil."
+return nil.  The argument POSITION is as documented in the
+function `key-binding'."
   (let ((map (help--key-binding-keymap key t nil position)))
     (when map
       (catch 'found
diff --git a/lisp/international/iso-transl.el b/lisp/international/iso-transl.el
index 73bcae0..e9fb009 100644
--- a/lisp/international/iso-transl.el
+++ b/lisp/international/iso-transl.el
@@ -1,4 +1,4 @@
-;;; iso-transl.el --- keyboard input definitions for ISO 8859-1  -*- coding: 
utf-8 -*-
+;;; iso-transl.el --- keyboard input for ISO 10646 chars -*- coding: utf-8 -*-
 
 ;; Copyright (C) 1987, 1993-1999, 2001-2015 Free Software Foundation,
 ;; Inc.
@@ -36,6 +36,10 @@
 ;; to make all of the Alt keys autoload, and it is not clear
 ;; that the dead accent keys SHOULD autoload this package.
 
+;; This package supports all characters defined by ISO 8859-1, along
+;; with a few other ISO 10646 characters commonly used in English and
+;; basic math.
+
 ;;; Code:
 
 ;;; Provide some binding for startup:
@@ -192,6 +196,31 @@
     ("~o"   . [?õ])
     ("~t"   . [?þ])
     ("~~"   . [?¬])
+    ("_h"   . [?‐])
+    ("_H"   . [?‑])
+    ("_f"   . [?‒])
+    ("_n"   . [?–])
+    ("_m"   . [?—])
+    ("_q"   . [?―])
+    ("["    . [?‘])
+    ("]"    . [?’])
+    ("{"    . [?“])
+    ("}"    . [?”])
+    ("1+"   . [?†])
+    ("2+"   . [?‡])
+    ("**"   . [?•])
+    ("*'"   . [?′])
+    ("*\""  . [?″])
+    ("*E"   . [?€])
+    ("No"   . [?№])
+    ("a<"   . [?←])
+    ("a>"   . [?→])
+    ("a="   . [?↔])
+    ("_-"   . [?−])
+    ("~="   . [?≈])
+    ("/="   . [?≠])
+    ("_<"   . [?≤])
+    ("_>"   . [?≥])
     ("' "   . "'")
     ("` "   . "`")
     ("\" "  . "\"")
diff --git a/lisp/linum.el b/lisp/linum.el
index de15274..2aac13a 100644
--- a/lisp/linum.el
+++ b/lisp/linum.el
@@ -138,6 +138,9 @@ Linum mode is a buffer-local minor mode."
       (mapc #'delete-overlay linum-available)
       (setq linum-available nil))))
 
+;; Behind display-graphic-p test.
+(declare-function font-info "font.c" (name &optional frame))
+
 (defun linum--face-width (face)
   (let ((info (font-info (face-font face)))
        width)
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 1572712..f0c6d87 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -4746,7 +4746,7 @@ With prefix argument N moves forward N messages with 
these labels.
 
 ;;;***
 
-;;;### (autoloads nil "rmailmm" "rmailmm.el" 
"a17df5ef8968113c8f6a78cf85c82da4")
+;;;### (autoloads nil "rmailmm" "rmailmm.el" 
"e5b89eed8afb278cc8881f2208382c7c")
 ;;; Generated autoloads from rmailmm.el
 
 (autoload 'rmail-mime "rmailmm" "\
diff --git a/lisp/mail/rmailmm.el b/lisp/mail/rmailmm.el
index 00fc25d..3dd57b9 100644
--- a/lisp/mail/rmailmm.el
+++ b/lisp/mail/rmailmm.el
@@ -135,9 +135,10 @@ automatically display the image in the buffer."
   (cond ((fboundp 'libxml-parse-html-region) 'rmail-mime-render-html-shr)
        ((executable-find "lynx") 'rmail-mime-render-html-lynx)
        (t nil))
-  "Function to convert HTML to text.  Called with buffer containing HTML
-extracted from message in a temporary buffer.  Converts to text in current 
-buffer. If NIL, display HTML source."
+  "Function to convert HTML to text.
+Called with buffer containing HTML extracted from message in a
+temporary buffer.  Converts to text in current buffer.  If nil,
+display HTML source."
   :group 'rmail
   :version "25.1"
   :type '(choice function (const nil)))
@@ -705,6 +706,9 @@ HEADER is a header component of a MIME-entity object (see
              (insert-buffer-substring source-buffer))
            (rmail-mime-fix-inserted-faces start)))))))
 
+(declare-function libxml-parse-html-region "xml.c"
+                 (start end &optional base-url discard-comments))
+
 (defun rmail-mime-render-html-shr (source-buffer)
   (let ((dom (with-current-buffer source-buffer
               (libxml-parse-html-region (point-min) (point-max))))
@@ -732,12 +736,12 @@ HEADER is a header component of a MIME-entity object (see
 (defun rmail-mime-fix-inserted-faces (start)
   (while (< start (point))
     (let ((face (get-text-property start 'face))
-         (next (next-single-property-change 
+         (next (next-single-property-change
                 start 'face (current-buffer) (point))))
       (if face                         ; anything to do?
          (put-text-property start next 'font-lock-face face))
       (setq start next))))
-    
+
 (defun rmail-mime-toggle-button (button)
   "Hide or show the body of the MIME-entity associated with BUTTON."
   (save-excursion
diff --git a/lisp/net/nsm.el b/lisp/net/nsm.el
index 28253e5..261e5a1 100644
--- a/lisp/net/nsm.el
+++ b/lisp/net/nsm.el
@@ -76,6 +76,8 @@ stored in plain text."
   "If non-nil, the connection is opened in a non-interactive context.
 This means that no queries should be performed.")
 
+(declare-function gnutls-peer-status "gnutls.c" (proc))
+
 (defun nsm-verify-connection (process host port &optional
                                      save-fingerprint warn-unencrypted)
   "Verify the security status of PROCESS that's connected to HOST:PORT.
@@ -122,6 +124,9 @@ unencrypted."
        (nsm-check-protocol process host port status settings)
       process)))
 
+(declare-function gnutls-peer-status-warning-describe "gnutls.c"
+                 (status-symbol))
+
 (defun nsm-check-certificate (process host port status settings)
   (let ((warnings (plist-get status :warnings)))
     (cond
diff --git a/lisp/net/shr.el b/lisp/net/shr.el
index f17ef8e..0ce77b9 100644
--- a/lisp/net/shr.el
+++ b/lisp/net/shr.el
@@ -949,6 +949,9 @@ Return a string with image data."
                (search-forward "\r\n\r\n" nil t))
        (shr-parse-image-data)))))
 
+(declare-function libxml-parse-xml-region "xml.c"
+                 (start end &optional base-url discard-comments))
+
 (defun shr-parse-image-data ()
   (let ((data (buffer-substring (point) (point-max)))
        (content-type
diff --git a/lisp/play/dunnet.el b/lisp/play/dunnet.el
index 2f4536c..877e5db 100644
--- a/lisp/play/dunnet.el
+++ b/lisp/play/dunnet.el
@@ -3099,7 +3099,7 @@ File not found")))
 (defun dun-dos-boot-msg ()
   (sleep-for 3)
   (dun-mprinc "Current time is ")
-  (dun-mprincl (substring (current-time-string) 12 20))
+  (dun-mprincl (format-time-string "%H:%M:%S"))
   (dun-mprinc "Enter new time: ")
   (dun-read-line)
   (if (not dun-batch-mode)
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index 7bc7798..e06b920 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -581,7 +581,7 @@ It can be quoted, or be inside a quoted form."
 (declare-function xref-make-elisp-location "xref" (symbol type file))
 (declare-function xref-make-bogus-location "xref" (message))
 (declare-function xref-make "xref" (description location))
-(declare-function xref-collect-references "xref" (name dir))
+(declare-function xref-collect-matches "xref" (input dir &optional kind))
 
 (defun elisp-xref-find (action id)
   (require 'find-func)
@@ -591,7 +591,9 @@ It can be quoted, or be inside a quoted form."
         (when sym
           (elisp--xref-find-definitions sym))))
     (`references
-     (elisp--xref-find-references id))
+     (elisp--xref-find-matches id 'symbol))
+    (`matches
+     (elisp--xref-find-matches id 'regexp))
     (`apropos
      (elisp--xref-find-apropos id))))
 
@@ -652,12 +654,14 @@ It can be quoted, or be inside a quoted form."
 
 (defvar package-user-dir)
 
-(defun elisp--xref-find-references (symbol)
+(defun elisp--xref-find-matches (symbol kind)
   (let* ((dirs (sort
                 (mapcar
                  (lambda (dir)
                    (file-name-as-directory (expand-file-name dir)))
-                 ;; FIXME: Why add package-user-dir?
+                 ;; It's one level above a number of `load-path'
+                 ;; elements (one for each installed package).
+                 ;; Save us some process calls.
                  (cons package-user-dir load-path))
                 #'string<))
          (ref dirs))
@@ -669,7 +673,7 @@ It can be quoted, or be inside a quoted form."
     (cl-mapcan
      (lambda (dir)
        (and (file-exists-p dir)
-            (xref-collect-references symbol dir)))
+            (xref-collect-matches symbol dir kind)))
      dirs)))
 
 (defun elisp--xref-find-apropos (regexp)
diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el
index 6acafdb..7a87377 100644
--- a/lisp/progmodes/etags.el
+++ b/lisp/progmodes/etags.el
@@ -947,6 +947,7 @@ onto a ring and may be popped back to with \\[pop-tag-mark].
 Contrast this with the ring of marks gone to by the command.
 
 See documentation of variable `tags-file-name'."
+  (declare (obsolete xref-find-definitions "25.1"))
   (interactive (find-tag-interactive "Find tag: "))
   (let* ((buf (find-tag-noselect tagname next-p regexp-p))
         (pos (with-current-buffer buf (point))))
@@ -2074,25 +2075,27 @@ for \\[find-tag] (which see)."
 (defconst etags--xref-limit 1000)
 
 (defvar etags-xref-find-definitions-tag-order '(tag-exact-match-p
-                                                tag-implicit-name-match-p
-                                                tag-symbol-match-p)
+                                                tag-implicit-name-match-p)
   "Tag order used in `etags-xref-find' to look for definitions.")
 
 ;;;###autoload
 (defun etags-xref-find (action id)
   (pcase action
     (`definitions (etags--xref-find-definitions id))
-    (`references
-     (let ((dirs (if tags-table-list
-                     (mapcar #'file-name-directory tags-table-list)
-                   ;; If no tags files are loaded, prompt for the dir.
-                   (list (read-directory-name "In directory: " nil nil t)))))
-       (cl-mapcan
-        (lambda (dir)
-          (xref-collect-references id dir))
-        dirs)))
+    (`references (etags--xref-find-matches id 'symbol))
+    (`matches (etags--xref-find-matches id 'regexp))
     (`apropos (etags--xref-find-definitions id t))))
 
+(defun etags--xref-find-matches (input kind)
+  (let ((dirs (if tags-table-list
+                  (mapcar #'file-name-directory tags-table-list)
+                ;; If no tags files are loaded, prompt for the dir.
+                (list (read-directory-name "In directory: " nil nil t)))))
+    (cl-mapcan
+     (lambda (dir)
+       (xref-collect-matches input dir kind))
+     dirs)))
+
 (defun etags--xref-find-definitions (pattern &optional regexp?)
   ;; This emulates the behaviour of `find-tag-in-order' but instead of
   ;; returning one match at a time all matches are returned as list.
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 2e7410a..4b0a028 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -2268,7 +2268,8 @@ banner and the initial prompt are received separately."
       (while t
         (when (not (accept-process-output process timeout))
           (throw 'found nil))
-        (when (looking-back regexp (point-min))
+        (when (looking-back
+               regexp (car (python-util-comint-last-prompt)))
           (throw 'found t))))))
 
 (defun python-shell-comint-end-of-output-p (output)
diff --git a/lisp/progmodes/tcl.el b/lisp/progmodes/tcl.el
index 8f7705b..e4e9655 100644
--- a/lisp/progmodes/tcl.el
+++ b/lisp/progmodes/tcl.el
@@ -1028,7 +1028,8 @@ Returns nil if line starts inside a string, t if in a 
comment."
     (with-current-buffer (process-buffer proc)
       ;; Delete prompt if requested.
       (when (marker-buffer inferior-tcl-delete-prompt-marker)
-        (delete-region (process-mark proc) inferior-tcl-delete-prompt-marker)
+       (let ((inhibit-read-only t))
+         (delete-region (process-mark proc) inferior-tcl-delete-prompt-marker))
         (set-marker inferior-tcl-delete-prompt-marker nil))))
   (comint-output-filter proc string))
 
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index f6faaf6..ef46e34 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -207,6 +207,9 @@ found, return nil.
  (apropos PATTERN): Find all symbols that match PATTERN.  PATTERN
 is a regexp.
 
+ (matches REGEXP): Find all matches for REGEXP in the related
+files.  REGEXP is an Emacs regular expression.
+
 IDENTIFIER can be any string returned by
 `xref-identifier-at-point-function', or from the table returned
 by `xref-identifier-completion-table-function'.
@@ -661,6 +664,12 @@ With prefix argument, prompt for the identifier."
   (interactive (list (xref--read-identifier "Find references of: ")))
   (xref--show-xrefs identifier 'references identifier nil))
 
+;;;###autoload
+(defun xref-find-regexp (regexp)
+  "Find all matches for REGEXP."
+  (interactive (list (xref--read-identifier "Find regexp: ")))
+  (xref--show-xrefs regexp 'matches regexp nil))
+
 (declare-function apropos-parse-pattern "apropos" (pattern))
 
 ;;;###autoload
@@ -713,38 +722,64 @@ and just use etags."
                 (cdr xref-etags-mode--saved))))
 
 (declare-function semantic-symref-find-references-by-name "semantic/symref")
+(declare-function semantic-symref-find-text "semantic/symref")
 (declare-function semantic-find-file-noselect "semantic/fw")
 
-(defun xref-collect-references (name dir)
-  "Collect mentions of NAME inside DIR.
-Uses the Semantic Symbol Reference API, see
-`semantic-symref-find-references-by-name' for details on which
-tools are used, and when."
+(defun xref-collect-matches (input dir &optional kind)
+  "Collect KIND matches for INPUT inside DIR according.
+KIND can be `symbol', `regexp' or nil, the last of which means
+literal matches.  This function uses the Semantic Symbol
+Reference API, see `semantic-symref-find-references-by-name' for
+details on which tools are used, and when."
   (require 'semantic/symref)
   (defvar semantic-symref-tool)
   (cl-assert (directory-name-p dir))
+  (when (null kind)
+    (setq input (regexp-quote input)))
   (let* ((default-directory dir)
          (semantic-symref-tool 'detect)
-         (res (semantic-symref-find-references-by-name name 'subdirs))
+         (res (if (eq kind 'symbol)
+                  (semantic-symref-find-references-by-name input 'subdirs)
+                (semantic-symref-find-text (xref--regexp-to-extended input)
+                                           'subdirs)))
          (hits (and res (oref res :hit-lines)))
          (orig-buffers (buffer-list)))
     (unwind-protect
         (delq nil
-              (mapcar (lambda (hit) (xref--collect-reference hit name)) hits))
+              (mapcar (lambda (hit) (xref--collect-match hit input kind)) 
hits))
       (mapc #'kill-buffer
             (cl-set-difference (buffer-list) orig-buffers)))))
 
-(defun xref--collect-reference (hit name)
+(defun xref--regexp-to-extended (str)
+  (replace-regexp-in-string
+   ;; FIXME: Add tests.  Move to subr.el, make a public function.
+   ;; Maybe error on Emacs-only constructs.
+   "\\(?:\\\\\\\\\\)*\\(?:\\\\[][]\\)?\\(?:\\[.+?\\]\\|\\(\\\\?[(){}|]\\)\\)"
+   (lambda (str)
+     (cond
+      ((not (match-beginning 1))
+       str)
+      ((eq (length (match-string 1 str)) 2)
+       (concat (substring str 0 (match-beginning 1))
+               (substring (match-string 1 str) 1 2)))
+      (t
+       (concat (substring str 0 (match-beginning 1))
+               "\\"
+               (match-string 1 str)))))
+   str t t))
+
+(defun xref--collect-match (hit input kind)
   (pcase-let* ((`(,line . ,file) hit)
                (buf (or (find-buffer-visiting file)
-                        (semantic-find-file-noselect file))))
+                        (semantic-find-file-noselect file)))
+               (input (if (eq kind 'symbol)
+                          (format "\\_<%s\\_>" (regexp-quote input))
+                        input)))
     (with-current-buffer buf
       (save-excursion
         (goto-char (point-min))
         (forward-line (1- line))
-        (when (re-search-forward (format "\\_<%s\\_>"
-                                         (regexp-quote name))
-                                 (line-end-position) t)
+        (when (re-search-forward input (line-end-position) t)
           (goto-char (match-beginning 0))
           (xref-make (buffer-substring
                       (line-beginning-position)
diff --git a/lisp/simple.el b/lisp/simple.el
index 47c9cd3..dfd92dc 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -6000,7 +6000,11 @@ and `current-column' to be able to ignore invisible 
text."
        ;; that will get us to the same place on the screen
        ;; but with a more reasonable buffer position.
        (goto-char normal-location)
-       (let ((line-beg (line-beginning-position)))
+       (let ((line-beg
+               ;; We want the real line beginning, so it's consistent
+               ;; with bolp below, otherwise we might infloop.
+               (let ((inhibit-field-text-motion t))
+                 (line-beginning-position))))
          (while (and (not (bolp)) (invisible-p (1- (point))))
            (goto-char (previous-char-property-change (point) line-beg))))))))
 
diff --git a/lisp/term/common-win.el b/lisp/term/common-win.el
index 6445935..98ad5ac 100644
--- a/lisp/term/common-win.el
+++ b/lisp/term/common-win.el
@@ -419,4 +419,6 @@ the operating system.")
             (setq defined-colors (cons this-color defined-colors))))
       defined-colors)))
 
+(provide 'term/common-win)
+
 ;;; common-win.el ends here
diff --git a/lisp/term/ns-win.el b/lisp/term/ns-win.el
index a87352e..e642ab5 100644
--- a/lisp/term/ns-win.el
+++ b/lisp/term/ns-win.el
@@ -728,7 +728,7 @@ See the documentation of `create-fontset-from-fontset-spec' 
for the format.")
 
 (defun ns-paste-secondary ()
   (interactive)
-  (insert (ns-get-selection-internal 'SECONDARY)))
+  (insert (gui-get-selection 'SECONDARY)))
 
 
 ;;;; Scrollbar handling.
diff --git a/lisp/term/rxvt.el b/lisp/term/rxvt.el
index fa981c6..c205508 100644
--- a/lisp/term/rxvt.el
+++ b/lisp/term/rxvt.el
@@ -24,36 +24,21 @@
 
 ;;; Code:
 
+(require 'term/xterm)
+
 (defvar rxvt-function-map
   (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map xterm-rxvt-function-map)
 
     ;; Set up input-decode-map entries that termcap and terminfo don't know.
-    (define-key map "\e[A" [up])
-    (define-key map "\e[B" [down])
-    (define-key map "\e[C" [right])
-    (define-key map "\e[D" [left])
-    (define-key map "\e[2~" [insert])
-    (define-key map "\e[3~" [delete])
-    (define-key map "\e[4~" [select])
-    (define-key map "\e[5~" [prior])
-    (define-key map "\e[6~" [next])
     (define-key map "\e[7~" [home])
     (define-key map "\e[8~" [end])
-    (define-key map "\e[11~" [f1])
-    (define-key map "\e[12~" [f2])
-    (define-key map "\e[13~" [f3])
-    (define-key map "\e[14~" [f4])
-    (define-key map "\e[15~" [f5])
-    (define-key map "\e[17~" [f6])
-    (define-key map "\e[18~" [f7])
-    (define-key map "\e[19~" [f8])
-    (define-key map "\e[20~" [f9])
-    (define-key map "\e[21~" [f10])
     ;; The strings emitted by f11 and f12 are the same as the strings
     ;; emitted by S-f1 and S-f2, so don't define f11 and f12.
     ;; (define-key rxvt-function-map "\e[23~" [f11])
     ;; (define-key rxvt-function-map "\e[24~" [f12])
-    (define-key map "\e[29~" [print])
+    (define-key map "\e[23~" [S-f1])
+    (define-key map "\e[24~" [S-f2])
 
     (define-key map "\e[11^" [C-f1])
     (define-key map "\e[12^" [C-f2])
@@ -66,8 +51,6 @@
     (define-key map "\e[20^" [C-f9])
     (define-key map "\e[21^" [C-f10])
 
-    (define-key map "\e[23~" [S-f1])
-    (define-key map "\e[24~" [S-f2])
     (define-key map "\e[25~" [S-f3])
     (define-key map "\e[26~" [S-f4])
     (define-key map "\e[28~" [S-f5])
@@ -99,7 +82,6 @@
     (define-key map "\eOa" [C-up])
     (define-key map "\eOb" [C-down])
 
-    (define-key map "\e[2;2~" [S-insert])
     (define-key map "\e[3$" [S-delete])
     (define-key map "\e[5$" [S-prior])
     (define-key map "\e[6$" [S-next])
@@ -157,26 +139,6 @@
     map)
   "Keymap of possible alternative meanings for some keys.")
 
-(defun terminal-init-rxvt ()
-  "Terminal initialization function for rxvt."
-
-  (let ((map (copy-keymap rxvt-alternatives-map)))
-    (set-keymap-parent map (keymap-parent local-function-key-map))
-    (set-keymap-parent local-function-key-map map))
-
-  ;; Use inheritance to let the main keymap override those defaults.
-  ;; This way we don't override terminfo-derived settings or settings
-  ;; made in the init file.
-  (let ((m (copy-keymap rxvt-function-map)))
-    (set-keymap-parent m (keymap-parent input-decode-map))
-    (set-keymap-parent input-decode-map m))
-
-  ;; Initialize colors and background mode.
-  (rxvt-register-default-colors)
-  (rxvt-set-background-mode)
-  ;; This recomputes all the default faces given the colors we've just set up.
-  (tty-set-up-initial-frame-faces))
-
 ;; Set up colors, for those versions of rxvt that support it.
 (defvar rxvt-standard-colors
   ;; The names of the colors in the comments taken from the rxvt.1 man
@@ -199,93 +161,17 @@
     ("brightwhite"   15 (255 255 255)))        ; white
   "Names of 16 standard rxvt colors, their numbers, and RGB values.")
 
-(defun rxvt-rgb-convert-to-16bit (prim)
-  "Convert an 8-bit primary color value PRIM to a corresponding 16-bit value."
-  (logior prim (lsh prim 8)))
-
-(defun rxvt-register-default-colors ()
-  "Register the default set of colors for rxvt or compatible emulator.
+(defun terminal-init-rxvt ()
+  "Terminal initialization function for rxvt."
 
-This function registers the number of colors returned by `display-color-cells'
-for the currently selected frame."
-  (let* ((ncolors (display-color-cells))
-        (colors rxvt-standard-colors)
-        (color (car colors)))
-    (if (> ncolors 0)
-       ;; Clear the 8 default tty colors registered by startup.el
-       (tty-color-clear))
-    ;; Only register as many colors as are supported by the display.
-    (while (and (> ncolors 0) colors)
-      (tty-color-define (car color) (cadr color)
-                       (mapcar 'rxvt-rgb-convert-to-16bit
-                               (car (cddr color))))
-      (setq colors (cdr colors)
-           color (car colors)
-           ncolors (1- ncolors)))
-    (when (> ncolors 0)
-      (cond
-       ((= ncolors 240)                        ; 256-color rxvt
-       ;; 216 non-gray colors first
-       (let ((r 0) (g 0) (b 0))
-         (while (> ncolors 24)
-           ;; This and other formulas taken from 256colres.pl and
-           ;; 88colres.pl in the xterm distribution.
-           (tty-color-define (format "color-%d" (- 256 ncolors))
-                             (- 256 ncolors)
-                             (mapcar 'rxvt-rgb-convert-to-16bit
-                                     (list (if (zerop r) 0 (+ (* r 40) 55))
-                                           (if (zerop g) 0 (+ (* g 40) 55))
-                                           (if (zerop b) 0 (+ (* b 40) 55)))))
-           (setq b (1+ b))
-           (if (> b 5)
-               (setq g (1+ g)
-                     b 0))
-           (if (> g 5)
-               (setq r (1+ r)
-                     g 0))
-           (setq ncolors (1- ncolors))))
-       ;; Now the 24 gray colors
-       (while (> ncolors 0)
-         (setq color (rxvt-rgb-convert-to-16bit (+ 8 (* (- 24 ncolors) 10))))
-         (tty-color-define (format "color-%d" (- 256 ncolors))
-                           (- 256 ncolors)
-                           (list color color color))
-         (setq ncolors (1- ncolors))))
+  (xterm--push-map rxvt-alternatives-map local-function-key-map)
+  (xterm--push-map rxvt-function-map input-decode-map)
 
-       ((= ncolors 72) ; rxvt-unicode
-       ;; 64 non-gray colors
-       (let ((levels '(0 139 205 255))
-             (r 0) (g 0) (b 0))
-         (while (> ncolors 8)
-           (tty-color-define (format "color-%d" (- 88 ncolors))
-                             (- 88 ncolors)
-                             (mapcar 'rxvt-rgb-convert-to-16bit
-                                     (list (nth r levels)
-                                           (nth g levels)
-                                           (nth b levels))))
-           (setq b (1+ b))
-           (if (> b 3)
-               (setq g (1+ g)
-                     b 0))
-           (if (> g 3)
-               (setq r (1+ r)
-                     g 0))
-           (setq ncolors (1- ncolors))))
-       ;; Now the 8 gray colors
-       (while (> ncolors 0)
-         (setq color (rxvt-rgb-convert-to-16bit
-                      (floor
-                       (if (= ncolors 8)
-                           46.36363636
-                         (+ (* (- 8 ncolors) 23.18181818) 69.54545454)))))
-         (tty-color-define (format "color-%d" (- 88 ncolors))
-                           (- 88 ncolors)
-                           (list color color color))
-         (setq ncolors (1- ncolors))))
-       (t (error "Unsupported number of rxvt colors (%d)" (+ 16 ncolors)))))
-    ;; Modifying color mappings means realized faces don't use the
-    ;; right colors, so clear them.
-    (clear-face-cache)))
+  ;; Initialize colors and background mode.
+  (xterm-register-default-colors rxvt-standard-colors)
+  (rxvt-set-background-mode)
+  ;; This recomputes all the default faces given the colors we've just set up.
+  (tty-set-up-initial-frame-faces))
 
 ;; rxvt puts the default colors into an environment variable
 ;; COLORFGBG.  We use this to set the background mode in a more
diff --git a/lisp/term/x-win.el b/lisp/term/x-win.el
index b090294..f929288 100644
--- a/lisp/term/x-win.el
+++ b/lisp/term/x-win.el
@@ -72,6 +72,7 @@
 (if (not (fboundp 'x-create-frame))
     (error "%s: Loading x-win.el but not compiled for X" (invocation-name)))
 
+(require 'term/common-win)
 (require 'frame)
 (require 'mouse)
 (require 'scroll-bar)
@@ -1322,6 +1323,17 @@ This returns an error if any Emacs frames are X frames."
   (x-apply-session-resources)
   (setq x-initialized t))
 
+(declare-function x-own-selection-internal "xselect.c"
+                 (selection value &optional frame))
+(declare-function x-disown-selection-internal "xselect.c"
+                 (selection &optional time-object terminal))
+(declare-function x-selection-owner-p "xselect.c"
+                 (&optional selection terminal))
+(declare-function x-selection-exists-p "xselect.c"
+                 (&optional selection terminal))
+(declare-function x-get-selection-internal "xselect.c"
+                 (selection-symbol target-type &optional time-stamp terminal))
+
 (add-to-list 'display-format-alist '("\\`[^:]*:[0-9]+\\(\\.[0-9]+\\)?\\'" . x))
 (gui-method-define handle-args-function x #'x-handle-args)
 (gui-method-define frame-creation-function x #'x-create-frame-with-faces)
diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el
index 79699c6..667e4ce 100644
--- a/lisp/term/xterm.el
+++ b/lisp/term/xterm.el
@@ -95,20 +95,50 @@ string bytes that can be copied is 3/4 of this value."
 
 (define-key global-map [xterm-paste] #'xterm-paste)
 
-(defvar xterm-function-map
+(defvar xterm-rxvt-function-map
   (let ((map (make-sparse-keymap)))
+    (define-key map "\e[2~" [insert])
+    (define-key map "\e[3~" [delete])
+    (define-key map "\e[4~" [select])
+    (define-key map "\e[5~" [prior])
+    (define-key map "\e[6~" [next])
 
-    ;; xterm from X.org 6.8.2 uses these key definitions.
-    (define-key map "\eOP" [f1])
-    (define-key map "\eOQ" [f2])
-    (define-key map "\eOR" [f3])
-    (define-key map "\eOS" [f4])
     (define-key map "\e[15~" [f5])
     (define-key map "\e[17~" [f6])
     (define-key map "\e[18~" [f7])
     (define-key map "\e[19~" [f8])
     (define-key map "\e[20~" [f9])
     (define-key map "\e[21~" [f10])
+
+    (define-key map "\e[2;2~" [S-insert])
+
+    ;; Other versions of xterm might emit these.
+    (define-key map "\e[A" [up])
+    (define-key map "\e[B" [down])
+    (define-key map "\e[C" [right])
+    (define-key map "\e[D" [left])
+
+    (define-key map "\e[11~" [f1])
+    (define-key map "\e[12~" [f2])
+    (define-key map "\e[13~" [f3])
+    (define-key map "\e[14~" [f4])
+
+    ;; Recognize the start of a bracketed paste sequence.  The handler
+    ;; internally recognizes the end.
+    (define-key map "\e[200~" [xterm-paste])
+
+    map)
+  "Keymap of escape sequences, shared between xterm and rxvt support.")
+
+(defvar xterm-function-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map xterm-rxvt-function-map)
+
+    ;; xterm from X.org 6.8.2 uses these key definitions.
+    (define-key map "\eOP" [f1])
+    (define-key map "\eOQ" [f2])
+    (define-key map "\eOR" [f3])
+    (define-key map "\eOS" [f4])
     (define-key map "\e[23~" [f11])
     (define-key map "\e[24~" [f12])
 
@@ -237,12 +267,6 @@ string bytes that can be copied is 3/4 of this value."
     (define-key map "\e[1;3F" [M-end])
     (define-key map "\e[1;3H" [M-home])
 
-    (define-key map "\e[2~" [insert])
-    (define-key map "\e[3~" [delete])
-    (define-key map "\e[5~" [prior])
-    (define-key map "\e[6~" [next])
-
-    (define-key map "\e[2;2~" [S-insert])
     (define-key map "\e[3;2~" [S-delete])
     (define-key map "\e[5;2~" [S-prior])
     (define-key map "\e[6;2~" [S-next])
@@ -277,7 +301,6 @@ string bytes that can be copied is 3/4 of this value."
     (define-key map "\e[5;3~" [M-prior])
     (define-key map "\e[6;3~" [M-next])
 
-    (define-key map "\e[4~" [select])
     (define-key map "\e[29~" [print])
 
     (define-key map "\eOj" [kp-multiply])
@@ -482,10 +505,6 @@ string bytes that can be copied is 3/4 of this value."
         (format "\e[%d;%du" (nth 1 bind) (nth 0 bind)) (nth 2 bind)))
 
     ;; Other versions of xterm might emit these.
-    (define-key map "\e[A" [up])
-    (define-key map "\e[B" [down])
-    (define-key map "\e[C" [right])
-    (define-key map "\e[D" [left])
     (define-key map "\e[1~" [home])
 
     (define-key map "\eO2A" [S-up])
@@ -502,15 +521,6 @@ string bytes that can be copied is 3/4 of this value."
     (define-key map "\eO5F" [C-end])
     (define-key map "\eO5H" [C-home])
 
-    (define-key map "\e[11~" [f1])
-    (define-key map "\e[12~" [f2])
-    (define-key map "\e[13~" [f3])
-    (define-key map "\e[14~" [f4])
-
-    ;; Recognize the start of a bracketed paste sequence.  The handler
-    ;; internally recognizes the end.
-    (define-key map "\e[200~" [xterm-paste])
-    
     map)
   "Function key map overrides for xterm.")
 
@@ -580,6 +590,29 @@ string bytes that can be copied is 3/4 of this value."
     map)
   "Keymap of possible alternative meanings for some keys.")
 
+;; Set up colors, for those versions of xterm that support it.
+(defvar xterm-standard-colors
+  ;; The names in the comments taken from XTerm-col.ad in the xterm
+  ;; distribution, see ftp://dickey.his.com/xterm/.  RGB values are
+  ;; from rgb.txt.
+  '(("black"          0 (  0   0   0)) ; black
+    ("red"            1 (205   0   0)) ; red3
+    ("green"          2 (  0 205   0)) ; green3
+    ("yellow"         3 (205 205   0)) ; yellow3
+    ("blue"           4 (  0   0 238)) ; blue2
+    ("magenta"        5 (205   0 205)) ; magenta3
+    ("cyan"           6 (  0 205 205)) ; cyan3
+    ("white"          7 (229 229 229)) ; gray90
+    ("brightblack"    8 (127 127 127)) ; gray50
+    ("brightred"      9 (255   0   0)) ; red
+    ("brightgreen"   10 (  0 255   0)) ; green
+    ("brightyellow"  11 (255 255   0)) ; yellow
+    ("brightblue"    12 (92   92 255)) ; rgb:5c/5c/ff
+    ("brightmagenta" 13 (255   0 255)) ; magenta
+    ("brightcyan"    14 (  0 255 255)) ; cyan
+    ("brightwhite"   15 (255 255 255)))        ; white
+  "Names of 16 standard xterm/aixterm colors, their numbers, and RGB values.")
+
 (defun xterm--report-background-handler ()
   (let ((str "")
         chr)
@@ -687,6 +720,14 @@ We run the first FUNCTION whose STRING matches the input 
events."
             (push (aref (car handler) (setq i (1- i)))
                   unread-command-events)))))))
 
+(defun xterm--push-map (map basemap)
+  ;; Use inheritance to let the main keymaps override those defaults.
+  ;; This way we don't override terminfo-derived settings or settings
+  ;; made in the init file.
+  (set-keymap-parent
+   basemap
+   (make-composed-keymap map (keymap-parent basemap))))
+
 (defun terminal-init-xterm ()
   "Terminal initialization function for xterm."
   ;; rxvt terminals sometimes set the TERM variable to "xterm", but
@@ -696,19 +737,10 @@ We run the first FUNCTION whose STRING matches the input 
events."
           (string-match "\\`rxvt" (getenv "COLORTERM" (selected-frame))))
       (tty-run-terminal-initialization (selected-frame) "rxvt")
 
-    (let ((map (copy-keymap xterm-alternatives-map)))
-      (set-keymap-parent map (keymap-parent local-function-key-map))
-      (set-keymap-parent local-function-key-map map))
-
-    (let ((map (copy-keymap xterm-function-map)))
+      (xterm--push-map xterm-alternatives-map local-function-key-map)
+      (xterm--push-map xterm-function-map     input-decode-map))
 
-      ;; Use inheritance to let the main keymap override those defaults.
-      ;; This way we don't override terminfo-derived settings or settings
-      ;; made in the init file.
-      (set-keymap-parent map (keymap-parent input-decode-map))
-      (set-keymap-parent input-decode-map map)))
-
-  (xterm-register-default-colors)
+  (xterm-register-default-colors xterm-standard-colors)
   (tty-set-up-initial-frame-faces)
 
   (if (eq xterm-extra-capabilities 'check)
@@ -807,43 +839,19 @@ hitting screen's max DCS length."
             "\a"
             (when screen "\e\\"))))))))
 
-;; Set up colors, for those versions of xterm that support it.
-(defvar xterm-standard-colors
-  ;; The names in the comments taken from XTerm-col.ad in the xterm
-  ;; distribution, see ftp://dickey.his.com/xterm/.  RGB values are
-  ;; from rgb.txt.
-  '(("black"          0 (  0   0   0)) ; black
-    ("red"            1 (205   0   0)) ; red3
-    ("green"          2 (  0 205   0)) ; green3
-    ("yellow"         3 (205 205   0)) ; yellow3
-    ("blue"           4 (  0   0 238)) ; blue2
-    ("magenta"        5 (205   0 205)) ; magenta3
-    ("cyan"           6 (  0 205 205)) ; cyan3
-    ("white"          7 (229 229 229)) ; gray90
-    ("brightblack"    8 (127 127 127)) ; gray50
-    ("brightred"      9 (255   0   0)) ; red
-    ("brightgreen"   10 (  0 255   0)) ; green
-    ("brightyellow"  11 (255 255   0)) ; yellow
-    ("brightblue"    12 (92   92 255)) ; rgb:5c/5c/ff
-    ("brightmagenta" 13 (255   0 255)) ; magenta
-    ("brightcyan"    14 (  0 255 255)) ; cyan
-    ("brightwhite"   15 (255 255 255)))        ; white
-  "Names of 16 standard xterm/aixterm colors, their numbers, and RGB values.")
-
 (defun xterm-rgb-convert-to-16bit (prim)
   "Convert an 8-bit primary color value PRIM to a corresponding 16-bit value."
   (logior prim (lsh prim 8)))
 
-(defun xterm-register-default-colors ()
+(defun xterm-register-default-colors (colors)
   "Register the default set of colors for xterm or compatible emulator.
 
 This function registers the number of colors returned by `display-color-cells'
-for the currently selected frame.  The first 16 colors are taken from
-`xterm-standard-colors', which see, while the rest are computed assuming
+for the currently selected frame.  The first (16) colors are taken from
+COLORS, which see, while the rest are computed assuming
 either the 88- or 256-color standard color scheme supported by latest
 versions of xterm."
-  (let* ((ncolors (display-color-cells (selected-frame)))
-        (colors xterm-standard-colors)
+  (let* ((ncolors (display-color-cells))
         (color (car colors)))
     (if (> ncolors 0)
        ;; Clear the 8 default tty colors registered by startup.el
@@ -851,12 +859,12 @@ versions of xterm."
     ;; Only register as many colors as are supported by the display.
     (while (and (> ncolors 0) colors)
       (tty-color-define (car color) (cadr color)
-                       (mapcar 'xterm-rgb-convert-to-16bit
+                       (mapcar #'xterm-rgb-convert-to-16bit
                                (car (cddr color))))
       (setq colors (cdr colors)
            color (car colors)
            ncolors (1- ncolors)))
-    ;; We've exhausted the colors from `xterm-standard-colors'.  If there
+    ;; We've exhausted the colors from `colors'.  If there
     ;; are more colors to support, compute them now.
     (when (> ncolors 0)
       (cond
@@ -868,7 +876,7 @@ versions of xterm."
            ;; 88colres.pl in the xterm distribution.
            (tty-color-define (format "color-%d" (- 256 ncolors))
                              (- 256 ncolors)
-                             (mapcar 'xterm-rgb-convert-to-16bit
+                             (mapcar #'xterm-rgb-convert-to-16bit
                                      (list (if (zerop r) 0 (+ (* r 40) 55))
                                            (if (zerop g) 0 (+ (* g 40) 55))
                                            (if (zerop b) 0 (+ (* b 40) 55)))))
@@ -895,7 +903,7 @@ versions of xterm."
          (while (> ncolors 8)
            (tty-color-define (format "color-%d" (- 88 ncolors))
                              (- 88 ncolors)
-                             (mapcar 'xterm-rgb-convert-to-16bit
+                             (mapcar #'xterm-rgb-convert-to-16bit
                                      (list (nth r levels)
                                            (nth g levels)
                                            (nth b levels))))
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index c71ecb4..2ffe9c1 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -1828,6 +1828,8 @@ This takes effect when first loading the library.")
       ("array" (nil \n
                    ("Item: " "<item>" str (if sgml-xml-mode "</item>") \n))
        "align")
+      ("article" \n)
+      ("aside" \n)
       ("au")
       ("b")
       ("big")
@@ -1853,7 +1855,10 @@ This takes effect when first loading the library.")
              "<dd>" (if sgml-xml-mode "</dd>") \n))
       ("em")
       ("fn" "id" "fn")  ;; Footnotes were deprecated in HTML 3.2
+      ("footer" \n)
       ("head" \n)
+      ("header" \n)
+      ("hgroup" \n)
       ("html" (\n
               "<head>\n"
               "<title>" (setq str (read-input "Title: ")) "</title>\n"
@@ -1871,6 +1876,7 @@ This takes effect when first loading the library.")
       ("lang")
       ("li" ,(not sgml-xml-mode))
       ("math" \n)
+      ("nav" \n)
       ("nobr")
       ("option" t ("value") ("label") ("selected" t))
       ("over" t)
@@ -1880,6 +1886,7 @@ This takes effect when first loading the library.")
       ("rev")
       ("s")
       ("samp")
+      ("section" \n)
       ("small")
       ("span" nil
        ("class"
@@ -1910,6 +1917,8 @@ This takes effect when first loading the library.")
     ("acronym" . "Acronym")
     ("address" . "Formatted mail address")
     ("array" . "Math array")
+    ("article" . "An independent part of document or site")
+    ("aside" . "Secondary content related to surrounding content (e.g. page or 
article)")
     ("au" . "Author")
     ("b" . "Bold face")
     ("base" . "Base address for URLs")
@@ -1939,6 +1948,7 @@ This takes effect when first loading the library.")
     ("figt" . "Figure text")
     ("fn" . "Footnote")  ;; No one supports special footnote rendering.
     ("font" . "Font size")
+    ("footer" . "Footer of a section")
     ("form" . "Form with input fields")
     ("group" . "Document grouping")
     ("h1" . "Most important section headline")
@@ -1948,6 +1958,8 @@ This takes effect when first loading the library.")
     ("h5" . "Unimportant section headline")
     ("h6" . "Least important section headline")
     ("head" . "Document header")
+    ("header" . "Header of a section")
+    ("hgroup" . "Group of headings - h1-h6 elements")
     ("hr" . "Horizontal rule")
     ("html" . "HTML Document")
     ("i" . "Italic face")
@@ -1960,8 +1972,9 @@ This takes effect when first loading the library.")
     ("li" . "List item")
     ("link" . "Link relationship")
     ("math" . "Math formula")
-    ("menu" . "Menu list (obsolete)")
+    ("menu" . "List of commands")
     ("mh" . "Form mail header")
+    ("nav" . "Group of navigational links")
     ("nextid" . "Allocate new id")
     ("nobr" . "Text without line break")
     ("ol" . "Ordered list")
@@ -1975,6 +1988,7 @@ This takes effect when first loading the library.")
     ("rev" . "Reverse video")
     ("s" . "Strikeout")
     ("samp" . "Sample text")
+    ("section" . "Section of a document")
     ("select" . "Selection list")
     ("small" . "Font size")
     ("sp" . "Nobreak space")
@@ -2242,6 +2256,33 @@ HTML Autoview mode is a buffer-local minor mode for use 
with
                             "")))
    \n))
 
+(define-skeleton html-navigational-links
+  "Group of navigational links."
+  nil
+  "<nav>" \n
+  "<ul>" \n
+  "<li><a href=\"" (skeleton-read "URL: " "#") "\">"
+  (skeleton-read "Title: ") "</a>"
+  (if sgml-xml-mode (if sgml-xml-mode "</li>")) \n
+  "</ul>" \n
+  "</nav>")
+
+(define-skeleton html-html5-template
+  "Initial HTML5 template"
+  nil
+  "<!DOCTYPE html>" \n
+  "<html lang=\"en\">" \n
+  "<head>" \n
+  "<meta charset=\"utf-8\">" \n
+  "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">" \n
+  "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">" \n
+  "<title>" (skeleton-read "Page Title: ") "</title>" \n
+  "</head>" \n
+  "<body>" \n
+  "<div id=\"app\"></div>" \n
+  "</body>" \n
+  "</html>")
+
 (provide 'sgml-mode)
 
 ;;; sgml-mode.el ends here
diff --git a/lisp/url/url-handlers.el b/lisp/url/url-handlers.el
index ff3eafd..001a783 100644
--- a/lisp/url/url-handlers.el
+++ b/lisp/url/url-handlers.el
@@ -344,14 +344,14 @@ They count bytes from the beginning of the body."
 
 (put 'insert-file-contents 'url-file-handlers 'url-insert-file-contents)
 
-(defun url-file-name-completion (url directory &optional predicate)
+(defun url-file-name-completion (url _directory &optional _predicate)
   ;; Even if it's not implemented, it's not an error to ask for completion,
   ;; in case it's available (bug#14806).
   ;; (error "Unimplemented")
   url)
 (put 'file-name-completion 'url-file-handlers 'url-file-name-completion)
 
-(defun url-file-name-all-completions (file directory)
+(defun url-file-name-all-completions (_file _directory)
   ;; Even if it's not implemented, it's not an error to ask for completion,
   ;; in case it's available (bug#14806).
   ;; (error "Unimplemented")
diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el
index d766952..6a7d8e2 100644
--- a/lisp/url/url-http.el
+++ b/lisp/url/url-http.el
@@ -485,6 +485,8 @@ work correctly."
     )
   )
 
+(declare-function gnutls-peer-status "gnutls.c" (proc))
+
 (defun url-http-parse-headers ()
  "Parse and handle HTTP specific headers.
 Return t if and only if the current buffer is still active and
diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el
index f82c7e9..08ae998 100644
--- a/lisp/vc/log-edit.el
+++ b/lisp/vc/log-edit.el
@@ -717,6 +717,9 @@ can thus take some time."
 
 (defvar log-edit-changelog-use-first nil)
 
+(defvar log-edit-rewrite-tiny-change t
+  "Non-nil means rewrite (tiny change).")
+
 (defvar log-edit-rewrite-fixes nil
   "Rule to rewrite bug numbers into Fixes: headers.
 The value should be of the form (REGEXP . REPLACEMENT)
@@ -761,7 +764,7 @@ regardless of user name or time."
             (log-edit-insert-changelog-entries (log-edit-files)))))
       (log-edit-set-common-indentation)
       ;; Add an Author: field if appropriate.
-      (when author (log-edit-add-field "Author" author))
+      (when author (log-edit-add-field "Author" (car author)))
       ;; Add a Fixes: field if applicable.
       (when (consp log-edit-rewrite-fixes)
        (rfc822-goto-eoh)
@@ -782,7 +785,13 @@ regardless of user name or time."
               (goto-char start)
               (skip-chars-forward "^():")
               (skip-chars-forward ": ")
-              (delete-region start (point))))))))
+              (delete-region start (point)))))
+      ;; FIXME also add "Co-authored-by" when appropriate.
+      ;; Bzr accepts multiple --author arguments, others (?) don't.
+      (and log-edit-rewrite-tiny-change
+           (eq 'tiny (cdr author))
+           (goto-char (point-max))
+           (insert "\nCopyright-paperwork-exempt: yes\n")))))
 
 ;;;;
 ;;;; functions for getting commit message from ChangeLog a file...
@@ -868,19 +877,26 @@ Return non-nil if it is."
     (if (null log-edit-changelog-use-first)
         (looking-at (regexp-quote (format "%s  %s  <%s>" time name mail)))
       ;; Check the author, to potentially add it as a "Author: " header.
+      ;; FIXME This accumulates multiple authors, but only when there
+      ;; are multiple ChangeLog files.  It should also check for
+      ;; multiple authors in each individual entry.
       (when (looking-at "[^ \t]")
         (when (and (boundp 'log-edit-author)
                    (not (looking-at (format ".+  .+  <%s>"
                                             (regexp-quote mail))))
-                   (looking-at ".+  \\(.+  <.+>\\)"))
+                   (looking-at ".+  \\(.+  <.+>\\) *\\((tiny change)\\)?"))
           (let ((author (replace-regexp-in-string "  " " "
                                                   (match-string 1))))
             (unless (and log-edit-author
-                         (string-match (regexp-quote author) log-edit-author))
-              (setq log-edit-author
-                    (if log-edit-author
-                        (concat log-edit-author ", " author)
-                      author)))))
+                         (string-match (regexp-quote author)
+                                       (car log-edit-author)))
+              (if (not log-edit-author)
+                  (setq log-edit-author
+                        (cons author (if (match-string 2) 'tiny)))
+                (setcar log-edit-author
+                        (concat (car log-edit-author) ", " author))
+                (and (match-string 2) (not (cdr log-edit-author))
+                     (setcdr log-edit-author 'tiny))))))
         t))))
 
 (defun log-edit-changelog-entries (file)
diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el
index a1f6bab..c950825 100644
--- a/lisp/vc/vc-bzr.el
+++ b/lisp/vc/vc-bzr.el
@@ -335,29 +335,31 @@ in the repository root directory of FILE."
 (declare-function vc-set-async-update "vc-dispatcher" (process-buffer))
 (declare-function vc-compilation-mode "vc-dispatcher" (backend))
 
-(defun vc-bzr-pull (prompt)
-  "Pull changes into the current Bzr branch.
-Normally, this runs \"bzr pull\".  However, if the branch is a
-bound branch, run \"bzr update\" instead.  If there is no default
-location from which to pull or update, or if PROMPT is non-nil,
-prompt for the Bzr command to run."
+(defun vc-bzr--pushpull (command prompt)
+    "Run COMMAND (a string; either push or pull) on the current Bzr branch.
+If PROMPT is non-nil, prompt for the Bzr command to run."
   (let* ((vc-bzr-program vc-bzr-program)
         (branch-conf (vc-bzr-branch-conf default-directory))
         ;; Check whether the branch is bound.
         (bound (assoc "bound" branch-conf))
         (bound (and bound (equal "true" (downcase (cdr bound)))))
-        ;; If we need to do a "bzr pull", check for a parent.  If it
-        ;; does not exist, bzr will need a pull location.
-        (has-parent (unless bound
-                      (assoc "parent_location" branch-conf)))
-        (command (if bound "update" "pull"))
+        (has-loc (assoc (if (equal command "push")
+                            "push_location"
+                          "parent_location")
+                        branch-conf))
         args)
+    (when bound
+      (if (equal command "push")
+         (user-error "Cannot push a bound branch")
+       (setq command "update")))
     ;; If necessary, prompt for the exact command.
-    (when (or prompt (not (or bound has-parent)))
+    (when (or prompt (if (equal command "push")
+                        (not has-loc)
+                      (not (or bound has-loc))))
       (setq args (split-string
                  (read-shell-command
-                  "Bzr pull command: "
-                  (concat vc-bzr-program " " command)
+                  (format "Bzr %s command: " command)
+                  (format "%s %s" vc-bzr-program command)
                   'vc-bzr-history)
                  " " t))
       (setq vc-bzr-program (car  args)
@@ -368,6 +370,20 @@ prompt for the Bzr command to run."
       (with-current-buffer buf (vc-run-delayed (vc-compilation-mode 'bzr)))
       (vc-set-async-update buf))))
 
+(defun vc-bzr-pull (prompt)
+  "Pull changes into the current Bzr branch.
+Normally, this runs \"bzr pull\".  However, if the branch is a
+bound branch, run \"bzr update\" instead.  If there is no default
+location from which to pull or update, or if PROMPT is non-nil,
+prompt for the Bzr command to run."
+  (vc-bzr--pushpull "pull" prompt))
+
+(defun vc-bzr-push (prompt)
+  "Push changes from the current Bzr branch.
+Normally, this runs \"bzr push\".  If there is no push location,
+or if PROMPT is non-nil, prompt for the Bzr command to run."
+  (vc-bzr--pushpull "push" prompt))
+
 (defun vc-bzr-merge-branch ()
   "Merge another Bzr branch into the current one.
 Prompt for the Bzr command to run, providing a pre-defined merge
diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el
index e050c94..eb03a8b 100644
--- a/lisp/vc/vc-dir.el
+++ b/lisp/vc/vc-dir.el
@@ -111,7 +111,7 @@ See `run-hooks'."
           (current-buffer)))))
 
 (defvar vc-dir-menu-map
-  (let ((map (make-sparse-keymap "VC-dir")))
+  (let ((map (make-sparse-keymap "VC-Dir")))
     (define-key map [quit]
       '(menu-item "Quit" quit-window
                  :help "Quit"))
@@ -204,6 +204,10 @@ See `run-hooks'."
                  :help "List the change log for the current tree in a window"))
     ;; VC commands.
     (define-key map [sepvccmd] '("--"))
+    (define-key map [push]
+      '(menu-item "Push Changes" vc-push
+                 :enable (vc-find-backend-function vc-dir-backend 'push)
+                 :help "Push the current branch's changes"))
     (define-key map [update]
       '(menu-item "Update to Latest Version" vc-update
                  :help "Update the current fileset's files to their tip 
revisions"))
@@ -246,6 +250,8 @@ See `run-hooks'."
     (define-key map "D" 'vc-root-diff)    ;; C-x v D
     (define-key map "i" 'vc-register)     ;; C-x v i
     (define-key map "+" 'vc-update)       ;; C-x v +
+    ;; I'd prefer some kind of symmetry with vc-update:
+    (define-key map "P" 'vc-push)         ;; C-x v P
     (define-key map "l" 'vc-print-log)    ;; C-x v l
     (define-key map "L" 'vc-print-root-log) ;; C-x v L
     (define-key map "I" 'vc-log-incoming)   ;; C-x v I
@@ -294,7 +300,7 @@ See `run-hooks'."
       `(menu-item
        ;; VC backends can use this to add mode-specific menu items to
        ;; vc-dir-menu-map.
-       "VC-dir" ,vc-dir-menu-map :filter vc-dir-menu-map-filter))
+       "VC-Dir" ,vc-dir-menu-map :filter vc-dir-menu-map-filter))
     map)
   "Keymap for directory buffer.")
 
diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index 2bca723..20f2101 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -721,21 +721,21 @@ It is based on `log-edit-mode', and has Git-specific 
extensions.")
 ;; To be called via vc-pull from vc.el, which requires vc-dispatcher.
 (declare-function vc-compilation-mode "vc-dispatcher" (backend))
 
-(defun vc-git-pull (prompt)
-  "Pull changes into the current Git branch.
-Normally, this runs \"git pull\".  If PROMPT is non-nil, prompt
-for the Git command to run."
+(defun vc-git--pushpull (command prompt)
+  "Run COMMAND (a string; either push or pull) on the current Git branch.
+If PROMPT is non-nil, prompt for the Git command to run."
   (let* ((root (vc-git-root default-directory))
         (buffer (format "*vc-git : %s*" (expand-file-name root)))
-        (command "pull")
         (git-program vc-git-program)
         args)
     ;; If necessary, prompt for the exact command.
+    ;; TODO if pushing, prompt if no default push location - cf bzr.
     (when prompt
       (setq args (split-string
-                 (read-shell-command "Git pull command: "
-                                      (format "%s pull" git-program)
-                                     'vc-git-history)
+                 (read-shell-command
+                   (format "Git %s command: " command)
+                   (format "%s %s" git-program command)
+                   'vc-git-history)
                  " " t))
       (setq git-program (car  args)
            command     (cadr args)
@@ -745,6 +745,18 @@ for the Git command to run."
     (with-current-buffer buffer (vc-run-delayed (vc-compilation-mode 'git)))
     (vc-set-async-update buffer)))
 
+(defun vc-git-pull (prompt)
+  "Pull changes into the current Git branch.
+Normally, this runs \"git pull\".  If PROMPT is non-nil, prompt
+for the Git command to run."
+  (vc-git--pushpull "pull" prompt))
+
+(defun vc-git-push (prompt)
+  "Push changes from the current Git branch.
+Normally, this runs \"git push\".  If PROMPT is non-nil, prompt
+for the Git command to run."
+  (vc-git--pushpull "push" prompt))
+
 (defun vc-git-merge-branch ()
   "Merge changes into the current Git branch.
 This prompts for a branch to merge from."
diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el
index c302436..556174a 100644
--- a/lisp/vc/vc-hg.el
+++ b/lisp/vc/vc-hg.el
@@ -659,20 +659,6 @@ REV is the revision to check out into WORKFILE."
   (vc-hg-command buffer 1 nil "outgoing" "-n" (unless (string= remote-location 
"")
                                                remote-location)))
 
-(declare-function log-view-get-marked "log-view" ())
-
-;; XXX maybe also add key bindings for these functions.
-(defun vc-hg-push ()
-  (interactive)
-  (let ((marked-list (log-view-get-marked)))
-    (if marked-list
-        (apply #'vc-hg-command
-               nil 0 nil
-               "push"
-               (apply 'nconc
-                      (mapcar (lambda (arg) (list "-r" arg)) marked-list)))
-      (error "No log entries selected for push"))))
-
 (defvar vc-hg-error-regexp-alist nil
   ;; 'hg pull' does not list modified files, so, for now, the only
   ;; benefit of `vc-compilation-mode' is that one can get rid of
@@ -682,51 +668,70 @@ REV is the revision to check out into WORKFILE."
   "Value of `compilation-error-regexp-alist' in *vc-hg* buffers.")
 
 (autoload 'vc-do-async-command "vc-dispatcher")
+(autoload 'log-view-get-marked "log-view")
 
-(defun vc-hg-pull (prompt)
-  "Issue a Mercurial pull command.
-If called interactively with a set of marked Log View buffers,
-call \"hg pull -r REVS\" to pull in the specified revisions REVS.
-
-With a prefix argument or if PROMPT is non-nil, prompt for a
-specific Mercurial pull command.  The default is \"hg pull -u\",
-which fetches changesets from the default remote repository and
-then attempts to update the working directory."
-  (interactive "P")
+(defun vc-hg--pushpull (command prompt &optional obsolete)
+  "Run COMMAND (a string; either push or pull) on the current Hg branch.
+If PROMPT is non-nil, prompt for the Hg command to run.
+If OBSOLETE is non-nil, behave like the old versions of the Hg push/pull
+commands, which only operated on marked files."
   (let (marked-list)
-    ;; The `vc-hg-pull' command existed before the `pull' VC action
-    ;; was implemented.  Keep it for backward compatibility.
-    (if (and (called-interactively-p 'interactive)
-            (setq marked-list (log-view-get-marked)))
+    ;; The `vc-hg-pull' and `vc-hg-push' commands existed before the
+    ;; `pull'/`push' VC actions were implemented.
+    ;; The following is for backwards compatibility.
+    (if (and obsolete (setq marked-list (log-view-get-marked)))
        (apply #'vc-hg-command
               nil 0 nil
-              "pull"
+              command
               (apply 'nconc
-                     (mapcar (lambda (arg) (list "-r" arg))
-                             marked-list)))
+                     (mapcar (lambda (arg) (list "-r" arg)) marked-list)))
       (let* ((root (vc-hg-root default-directory))
             (buffer (format "*vc-hg : %s*" (expand-file-name root)))
-            (command "pull")
             (hg-program vc-hg-program)
             ;; Fixme: before updating the working copy to the latest
             ;; state, should check if it's visiting an old revision.
-            (args '("-u")))
+            (args (if (equal command "pull") '("-u"))))
        ;; If necessary, prompt for the exact command.
+        ;; TODO if pushing, prompt if no default push location - cf bzr.
        (when prompt
          (setq args (split-string
-                     (read-shell-command "Run Hg (like this): "
-                                         (format "%s pull -u" hg-program)
-                                         'vc-hg-history)
+                     (read-shell-command
+                       (format "Hg %s command: " command)
+                       (format "%s %s%s" hg-program command
+                               (if (not args) ""
+                                 (concat " " (mapconcat 'identity args " "))))
+                       'vc-hg-history)
                      " " t))
          (setq hg-program (car  args)
                command    (cadr args)
                args       (cddr args)))
-       (apply 'vc-do-async-command buffer root hg-program
-              command args)
+       (apply 'vc-do-async-command buffer root hg-program command args)
         (with-current-buffer buffer
           (vc-run-delayed (vc-compilation-mode 'hg)))
        (vc-set-async-update buffer)))))
 
+(defun vc-hg-pull (prompt)
+  "Issue a Mercurial pull command.
+If called interactively with a set of marked Log View buffers,
+call \"hg pull -r REVS\" to pull in the specified revisions REVS.
+
+With a prefix argument or if PROMPT is non-nil, prompt for a
+specific Mercurial pull command.  The default is \"hg pull -u\",
+which fetches changesets from the default remote repository and
+then attempts to update the working directory."
+  (interactive "P")
+  (vc-hg--pushpull "pull" prompt (called-interactively-p 'interactive)))
+
+(defun vc-hg-push (prompt)
+  "Push changes from the current Mercurial branch.
+Normally, this runs \"hg push\".  If PROMPT is non-nil, prompt
+for the Hg command to run.
+
+If called interactively with a set of marked Log View buffers,
+call \"hg push -r REVS\" to push the specified revisions REVS."
+  (interactive "P")
+  (vc-hg--pushpull "push" prompt (called-interactively-p 'interactive)))
+
 (defun vc-hg-merge-branch ()
   "Merge incoming changes into the current working directory.
 This runs the command \"hg merge\"."
diff --git a/lisp/vc/vc-hooks.el b/lisp/vc/vc-hooks.el
index 251fecb..bae9919 100644
--- a/lisp/vc/vc-hooks.el
+++ b/lisp/vc/vc-hooks.el
@@ -883,6 +883,8 @@ current, and kill the buffer that visits the link."
     (define-key map "u" 'vc-revert)
     (define-key map "v" 'vc-next-action)
     (define-key map "+" 'vc-update)
+    ;; I'd prefer some kind of symmetry with vc-update:
+    (define-key map "P" 'vc-push)
     (define-key map "=" 'vc-diff)
     (define-key map "D" 'vc-root-diff)
     (define-key map "~" 'vc-revision-other-window)
@@ -940,6 +942,10 @@ current, and kill the buffer that visits the link."
     (bindings--define-key map [vc-revert]
       '(menu-item "Revert to Base Version" vc-revert
                  :help "Revert working copies of the selected file set to 
their repository contents"))
+    ;; TODO Only :enable if (vc-find-backend-function backend 'push)
+    (bindings--define-key map [vc-push]
+      '(menu-item "Push Changes" vc-push
+                 :help "Push the current branch's changes"))
     (bindings--define-key map [vc-update]
       '(menu-item "Update to Latest Version" vc-update
                  :help "Update the current fileset's files to their tip 
revisions"))
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index 1a997a4..d5d0abe 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -2484,6 +2484,22 @@ tip revision are merged into the working file."
 ;;;###autoload
 (defalias 'vc-update 'vc-pull)
 
+;;;###autoload
+(defun vc-push (&optional arg)
+  "Push the current branch.
+You must be visiting a version controlled file, or in a `vc-dir' buffer.
+On a distributed version control system, this runs a \"push\"
+operation on the current branch, prompting for the precise command
+if required.  Optional prefix ARG non-nil forces a prompt.
+On a non-distributed version control system, this signals an error."
+  (interactive "P")
+  (let* ((vc-fileset (vc-deduce-fileset t))
+        (backend (car vc-fileset)))
+;;;     (files (cadr vc-fileset)))
+    (if (vc-find-backend-function backend 'push)
+        (vc-call-backend backend 'push arg)
+      (user-error "VC push is unsupported for `%s'" backend))))
+
 (defun vc-version-backup-file (file &optional rev)
   "Return name of backup file for revision REV of FILE.
 If version backups should be used for FILE, and there exists
diff --git a/lisp/window.el b/lisp/window.el
index a6c60e9..49b7e2c 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -1835,6 +1835,8 @@ optional argument PIXELWISE is passed to the functions."
       (window-body-width window pixelwise)
     (window-body-height window pixelwise)))
 
+(declare-function font-info "font.c" (name &optional frame))
+
 (defun window-font-width (&optional window face)
    "Return average character width for the font of FACE used in WINDOW.
 WINDOW must be a live window and defaults to the selected one.
@@ -1866,6 +1868,8 @@ information for the remapped face."
           (aref info 3))
        (frame-char-height))))
 
+(defvar overflow-newline-into-fringe)
+
 (defun window-max-chars-per-line (&optional window face)
   "Return the number of characters that can be displayed on one line in WINDOW.
 WINDOW must be a live window and defaults to the selected one.
@@ -7187,6 +7191,8 @@ See also `fit-frame-to-buffer-margins'."
             (<= left (- right margin)) (<= margin right))
     margin))
 
+(declare-function tool-bar-height "xdisp.c" (&optional frame pixelwise))
+
 (defun fit-frame-to-buffer (&optional frame max-height min-height max-width 
min-width only)
   "Adjust size of FRAME to display the contents of its buffer exactly.
 FRAME can be any live frame and defaults to the selected one.
diff --git a/make-dist b/make-dist
index 441070f..bc5874e 100755
--- a/make-dist
+++ b/make-dist
@@ -52,6 +52,7 @@ make_tar=no
 default_gzip=gzip
 newer=""
 with_tests=no
+changelog=yes
 
 while [ $# -gt 0 ]; do
   case "$1" in
@@ -72,6 +73,9 @@ while [ $# -gt 0 ]; do
     "--no-check" )
       check=no
     ;;
+    "--no-changelog" )
+      changelog=no
+    ;;
     ## This option tells make-dist to make the distribution normally, then
     ## remove all files older than the given timestamp file.  This is useful
     ## for creating incremental or patch distributions.
@@ -115,6 +119,7 @@ while [ $# -gt 0 ]; do
       echo "  --newer=TIME     don't include files older than TIME"
       echo "  --no-check       don't check for bad file names etc."
       echo "  --no-update      don't recompile or do analogous things"
+      echo "  --no-changelog   don't generate the top-level ChangeLog"
       echo "  --snapshot       same as --clean-up --no-update --tar --no-check"
       echo "  --tar            make a tar file"
       echo "  --tests  include the test/ directory"
@@ -277,11 +282,14 @@ fi
 echo "Creating top directory: '${tempdir}'"
 mkdir ${tempdir}
 
-if test -d .git; then
-  echo "Making top-level ChangeLog"
-  make distprefix=${tempdir}/ ChangeLog
-else
-  echo "No repository, so omitting top-level ChangeLog"
+if [ "$changelog" = yes ]; then
+  if test -d .git; then
+    echo "Making top-level ChangeLog"
+    make ChangeLog CHANGELOG=${tempdir}/ChangeLog || \
+      { x=$?; echo "make ChangeLog FAILED (try --no-changelog?)" >&2; exit $x; 
}
+  else
+    echo "No repository, so omitting top-level ChangeLog"
+  fi
 fi
 
 ### We copy in the top-level files before creating the subdirectories in
diff --git a/src/Makefile.in b/src/Makefile.in
index f92849f..b7e776e 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -615,9 +615,9 @@ ctagsfiles3 = [a-zA-Z]*.m
 ## rather than the file contents.
 TAGS: $(srcdir)/$(ctagsfiles1) $(srcdir)/$(ctagsfiles2) 
$(srcdir)/$(ctagsfiles3)
        "$(ETAGS)" --include=../lisp/TAGS --include=$(lwlibdir)/TAGS \
-         --regex='{c}/[        ]*DEFVAR_[A-Z_  (]+"\([^"]+\)"/' \
+         --regex='{c}/[        ]*DEFVAR_[A-Z_  (]+"\([^"]+\)"/\1/' \
          $(srcdir)/$(ctagsfiles1) $(srcdir)/$(ctagsfiles2) \
-         --regex='{objc}/[     ]*DEFVAR_[A-Z_  (]+"\([^"]+\)"/' \
+         --regex='{objc}/[     ]*DEFVAR_[A-Z_  (]+"\([^"]+\)"/\1/' \
          $(srcdir)/$(ctagsfiles3)
 
 ## Arrange to make tags tables for ../lisp and ../lwlib,
diff --git a/src/editfns.c b/src/editfns.c
index 1686fbf..cddb0d4 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -4390,9 +4390,6 @@ usage: (format STRING &rest OBJECTS)  */)
     nchars = multibyte_chars_in_text ((unsigned char *) buf, p - buf);
   val = make_specified_string (buf, nchars, p - buf, multibyte);
 
-  /* If we allocated BUF with malloc, free it too.  */
-  SAFE_FREE ();
-
   /* If the format string has text properties, or any of the string
      arguments has text properties, set up text properties of the
      result string.  */
@@ -4498,6 +4495,9 @@ usage: (format STRING &rest OBJECTS)  */)
       UNGCPRO;
     }
 
+  /* If we allocated BUF or INFO with malloc, free it too.  */
+  SAFE_FREE ();
+
   return val;
 }
 
diff --git a/src/filelock.c b/src/filelock.c
index 89d3e35..4ee7a01 100644
--- a/src/filelock.c
+++ b/src/filelock.c
@@ -669,10 +669,6 @@ lock_file (Lisp_Object fn)
   struct gcpro gcpro1;
   USE_SAFE_ALLOCA;
 
-  /* Don't do locking if the user has opted out.  */
-  if (! create_lockfiles)
-    return;
-
   /* Don't do locking while dumping Emacs.
      Uncompressing wtmp files uses call-process, which does not work
      in an uninitialized Emacs.  */
@@ -690,9 +686,6 @@ lock_file (Lisp_Object fn)
 #endif
   encoded_fn = ENCODE_FILE (fn);
 
-  /* Create the name of the lock-file for file fn */
-  MAKE_LOCK_NAME (lfname, encoded_fn);
-
   /* See if this file is visited and has changed on disk since it was
      visited.  */
   {
@@ -707,27 +700,35 @@ lock_file (Lisp_Object fn)
 
   }
 
-  /* Try to lock the lock.  */
-  if (0 < lock_if_free (&lock_info, lfname))
+  /* Don't do locking if the user has opted out.  */
+  if (create_lockfiles)
     {
-      /* Someone else has the lock.  Consider breaking it.  */
-      Lisp_Object attack;
-      char *dot = lock_info.dot;
-      ptrdiff_t pidlen = lock_info.colon - (dot + 1);
-      static char const replacement[] = " (pid ";
-      int replacementlen = sizeof replacement - 1;
-      memmove (dot + replacementlen, dot + 1, pidlen);
-      strcpy (dot + replacementlen + pidlen, ")");
-      memcpy (dot, replacement, replacementlen);
-      attack = call2 (intern ("ask-user-about-lock"), fn,
-                     build_string (lock_info.user));
-      /* Take the lock if the user said so.  */
-      if (!NILP (attack))
-       lock_file_1 (lfname, 1);
+
+      /* Create the name of the lock-file for file fn */
+      MAKE_LOCK_NAME (lfname, encoded_fn);
+
+      /* Try to lock the lock.  */
+      if (0 < lock_if_free (&lock_info, lfname))
+       {
+         /* Someone else has the lock.  Consider breaking it.  */
+         Lisp_Object attack;
+         char *dot = lock_info.dot;
+         ptrdiff_t pidlen = lock_info.colon - (dot + 1);
+         static char const replacement[] = " (pid ";
+         int replacementlen = sizeof replacement - 1;
+         memmove (dot + replacementlen, dot + 1, pidlen);
+         strcpy (dot + replacementlen + pidlen, ")");
+         memcpy (dot, replacement, replacementlen);
+         attack = call2 (intern ("ask-user-about-lock"), fn,
+                         build_string (lock_info.user));
+         /* Take the lock if the user said so.  */
+         if (!NILP (attack))
+           lock_file_1 (lfname, 1);
+       }
+      SAFE_FREE ();
     }
 
   UNGCPRO;
-  SAFE_FREE ();
 }
 
 void
diff --git a/src/keyboard.c b/src/keyboard.c
index 392cea1..8dc96be 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -8722,12 +8722,10 @@ read_char_minibuf_menu_prompt (int commandflag,
       while (BUFFERP (obj));
       kset_defining_kbd_macro (current_kboard, orig_defn_macro);
 
-      if (!INTEGERP (obj) || XINT (obj) == -2)
-        return obj;
-
-      if (! EQ (obj, menu_prompt_more_char)
-         && (!INTEGERP (menu_prompt_more_char)
-             || ! EQ (obj, make_number (Ctl (XINT (menu_prompt_more_char))))))
+      if (!INTEGERP (obj) || XINT (obj) == -2
+         || (! EQ (obj, menu_prompt_more_char)
+             && (!INTEGERP (menu_prompt_more_char)
+                 || ! EQ (obj, make_number (Ctl (XINT 
(menu_prompt_more_char)))))))
        {
          if (!NILP (KVAR (current_kboard, defining_kbd_macro)))
            store_kbd_macro_char (obj);
diff --git a/src/nsterm.m b/src/nsterm.m
index e90c3d7..187086c 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -3188,6 +3188,96 @@ ns_dumpglyphs_stretch (struct glyph_string *s)
 
 
 static void
+ns_draw_composite_glyph_string_foreground (struct glyph_string *s)
+{
+  int i, j, x;
+  struct font *font = s->font;
+
+  /* If first glyph of S has a left box line, start drawing the text
+     of S to the right of that box line.  */
+  if (s->face && s->face->box != FACE_NO_BOX
+      && s->first_glyph->left_box_line_p)
+    x = s->x + eabs (s->face->box_line_width);
+  else
+    x = s->x;
+
+  /* S is a glyph string for a composition.  S->cmp_from is the index
+     of the first character drawn for glyphs of this composition.
+     S->cmp_from == 0 means we are drawing the very first character of
+     this composition.  */
+
+  /* Draw a rectangle for the composition if the font for the very
+     first character of the composition could not be loaded.  */
+  if (s->font_not_found_p)
+    {
+      if (s->cmp_from == 0)
+        {
+          NSRect r = NSMakeRect (s->x, s->y, s->width-1, s->height -1);
+          ns_draw_box (r, 1, FRAME_CURSOR_COLOR (s->f), 1, 1);
+        }
+    }
+  else if (! s->first_glyph->u.cmp.automatic)
+    {
+      int y = s->ybase;
+
+      for (i = 0, j = s->cmp_from; i < s->nchars; i++, j++)
+       /* TAB in a composition means display glyphs with padding
+          space on the left or right.  */
+       if (COMPOSITION_GLYPH (s->cmp, j) != '\t')
+         {
+           int xx = x + s->cmp->offsets[j * 2];
+           int yy = y - s->cmp->offsets[j * 2 + 1];
+
+           font->driver->draw (s, j, j + 1, xx, yy, false);
+           if (s->face->overstrike)
+             font->driver->draw (s, j, j + 1, xx + 1, yy, false);
+         }
+    }
+  else
+    {
+      Lisp_Object gstring = composition_gstring_from_id (s->cmp_id);
+      Lisp_Object glyph;
+      int y = s->ybase;
+      int width = 0;
+
+      for (i = j = s->cmp_from; i < s->cmp_to; i++)
+       {
+         glyph = LGSTRING_GLYPH (gstring, i);
+         if (NILP (LGLYPH_ADJUSTMENT (glyph)))
+           width += LGLYPH_WIDTH (glyph);
+         else
+           {
+             int xoff, yoff, wadjust;
+
+             if (j < i)
+               {
+                 font->driver->draw (s, j, i, x, y, false);
+                 if (s->face->overstrike)
+                   font->driver->draw (s, j, i, x + 1, y, false);
+                 x += width;
+               }
+             xoff = LGLYPH_XOFF (glyph);
+             yoff = LGLYPH_YOFF (glyph);
+             wadjust = LGLYPH_WADJUST (glyph);
+             font->driver->draw (s, i, i + 1, x + xoff, y + yoff, false);
+             if (s->face->overstrike)
+               font->driver->draw (s, i, i + 1, x + xoff + 1, y + yoff,
+                                   false);
+             x += wadjust;
+             j = i + 1;
+             width = 0;
+           }
+       }
+      if (j < i)
+       {
+         font->driver->draw (s, j, i, x, y, false);
+         if (s->face->overstrike)
+           font->driver->draw (s, j, i, x + 1, y, false);
+       }
+    }
+}
+
+static void
 ns_draw_glyph_string (struct glyph_string *s)
 /* --------------------------------------------------------------------------
       External (RIF): Main draw-text call.
@@ -3279,13 +3369,14 @@ ns_draw_glyph_string (struct glyph_string *s)
 
       {
         BOOL isComposite = s->first_glyph->type == COMPOSITE_GLYPH;
-        int end = isComposite ? s->cmp_to : s->nchars;
-
-        font->driver->draw
-          (s, s->cmp_from, end, s->x, s->ybase,
-           (flags == NS_DUMPGLYPH_NORMAL && !s->background_filled_p)
-           || flags == NS_DUMPGLYPH_MOUSEFACE);
 
+        if (isComposite)
+          ns_draw_composite_glyph_string_foreground (s);
+        else
+          font->driver->draw
+            (s, s->cmp_from, s->nchars, s->x, s->ybase,
+             (flags == NS_DUMPGLYPH_NORMAL && !s->background_filled_p)
+             || flags == NS_DUMPGLYPH_MOUSEFACE);
       }
 
       {
diff --git a/test/automated/cl-generic-tests.el 
b/test/automated/cl-generic-tests.el
index 5194802..a6035d1 100644
--- a/test/automated/cl-generic-tests.el
+++ b/test/automated/cl-generic-tests.el
@@ -179,5 +179,15 @@
     (cl-list* "quatre" (cl-next-method-p) (cl-call-next-method)))
   (should (equal (cl--generic-1 4 5) '("quatre" t 4 5 nil))))
 
+(ert-deftest sm-generic-test-12-context ()
+  (cl-defgeneric cl--generic-1 ())
+  (cl-defmethod cl--generic-1 (&context (overwrite-mode (eql t)))   'is-t)
+  (cl-defmethod cl--generic-1 (&context (overwrite-mode (eql nil))) 'is-nil)
+  (cl-defmethod cl--generic-1 () 'other)
+  (should (equal (list (let ((overwrite-mode t))   (cl--generic-1))
+                       (let ((overwrite-mode nil)) (cl--generic-1))
+                       (let ((overwrite-mode 1))   (cl--generic-1)))
+                 '(is-t is-nil other))))
+
 (provide 'cl-generic-tests)
 ;;; cl-generic-tests.el ends here
diff --git a/test/etags/CTAGS.good b/test/etags/CTAGS.good
new file mode 100644
index 0000000..ee5b3f4
--- /dev/null
+++ b/test/etags/CTAGS.good
@@ -0,0 +1,6013 @@
+#a-defer-word  forth-src/test-forth.fth        /^defer #a-defer-word$/
+#some-storage  forth-src/test-forth.fth        /^2000 buffer: #some-storage$/
+$      make-src/Makefile       /^      @-$(MAKE) OPTIONS='--no-members' 
${LATEST}ediff$/
+$      make-src/Makefile       /^      @-$(MAKE) OPTIONS='--declarations 
--no-members' $/
+$      make-src/Makefile       /^      @-$(MAKE) OPTIONS='--members' 
${LATEST}ediff$/
+$      make-src/Makefile       /^      @-$(MAKE) OPTIONS='address@hidden 
--no-member/
+$      make-src/Makefile       /^      @-$(MAKE) OPTIONS='nonexistent 
--members --declar/
+$      make-src/Makefile       /^      @-$(MAKE) ${LATEST}cdiff$/
+$      make-src/Makefile       /^      $(CC) ${FASTCFLAGS} -c $?$/
+$      make-src/Makefile       /^      $(CC) ${FASTCFLAGS} -c $?$/
+$      make-src/Makefile       /^      $(CC) ${FASTCFLAGS} -c $?$/
+$      make-src/Makefile       /^      $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) 
-o etags e/
+$      make-src/Makefile       /^      $(CC) $(CFLAGS) $(CPPFLAGS) -DCTAGS 
$(LDFLAGS) -o/
+$$i    make-src/Makefile       140
+$0x80  c-src/sysdep.h  32
+$SYS_##syscall_na      c-src/sysdep.h  31
+$domain        php-src/lce_functions.php       175
+$filename      php-src/lce_functions.php       174
+$ignore_ws     php-src/lce_functions.php       171
+$memassign     php-src/ptest.php       9
+$memassign_space       php-src/ptest.php       10
+$member        php-src/ptest.php       8
+$msgid php-src/lce_functions.php       107
+$msgid php-src/lce_functions.php       165
+$msgid_lc      php-src/lce_functions.php       113
+$msgstr        php-src/lce_functions.php       108
+$msgstr        php-src/lce_functions.php       166
+$msgstr_lc     php-src/lce_functions.php       114
+$po_entries    php-src/lce_functions.php       172
+$poe_num       php-src/lce_functions.php       173
+$por_a php-src/lce_functions.php       500
+$prefix        php-src/lce_functions.php       72
+$state php-src/lce_functions.php       170
+$sys_comment   php-src/lce_functions.php       110
+$sys_comment   php-src/lce_functions.php       168
+$sys_comment_lc        php-src/lce_functions.php       116
+$test  php-src/ptest.php       12
+$unk_comment   php-src/lce_functions.php       111
+$unk_comment   php-src/lce_functions.php       169
+$unk_comment_lc        php-src/lce_functions.php       117
+$user_comment  php-src/lce_functions.php       109
+$user_comment  php-src/lce_functions.php       167
+$user_comment_lc       php-src/lce_functions.php       115
+( $arg         perl-src/mirror.pl      468
+( $arg         perl-src/mirror.pl      1506
+( $as  perl-src/mirror.pl      3046
+( $atime, $mtime, $path        perl-src/mirror.pl      4118
+( $attempts    perl-src/mirror.pl      1548
+( $buffer, $in, $sofar         perl-src/mirror.pl      3686
+( $bufsiz      perl-src/mirror.pl      3685
+( $c   perl-src/mirror.pl      634
+( $c   perl-src/mirror.pl      706
+( $changed     perl-src/mirror.pl      3916
+( $com         perl-src/mirror.pl      3741
+( $comp        perl-src/mirror.pl      2998
+( $comptemp    perl-src/mirror.pl      2916
+( $con         perl-src/mirror.pl      1241
+( $cont        perl-src/mirror.pl      830
+( $count       perl-src/mirror.pl      2353
+( $count       perl-src/mirror.pl      3920
+( $d   perl-src/mirror.pl      3691
+( $del, $kind  perl-src/mirror.pl      3322
+( $del_patt    perl-src/mirror.pl      3135
+( $dest, $existing     perl-src/mirror.pl      2745
+( $dest_dir    perl-src/mirror.pl      3684
+( $dest_path   perl-src/mirror.pl      3066
+( $dest_path, $attribs         perl-src/mirror.pl      2809
+( $dest_path, $dest_loc_mapi, $src_rem_mapi,  $rtime   perl-src/mirror.pl      
2685
+( $dest_path, $existing_path   perl-src/mirror.pl      3400
+( $desti, $srci, $compress, $srciZ, $srcigz, $split, $dest_path_real   
perl-src/mirror.pl      2299
+( $dev,$ino,$fmode,$nlink,$uid,$gid,$rdev,$ssize,      perl-src/mirror.pl      
1694
+( $diff        perl-src/mirror.pl      3638
+( $dir         perl-src/mirror.pl      3306
+( $dir         perl-src/mirror.pl      3459
+( $dir         perl-src/mirror.pl      3530
+( $dir         perl-src/mirror.pl      3784
+( $dir, $file  perl-src/mirror.pl      3064
+( $dir, $file, $temp, $compress, $split, $restart, $mesg, $got_mesg    
perl-src/mirror.pl      2872
+( $dir, $mode  perl-src/mirror.pl      3499
+( $dir, $mp    perl-src/mirror.pl      723
+( $dir, $rest  perl-src/mirror.pl      3873
+( $dir_level   perl-src/mirror.pl      1691
+( $dirname     perl-src/mirror.pl      3284
+( $dirpart     perl-src/mirror.pl      2746
+( $dirpart     perl-src/mirror.pl      3905
+( $dirtmp      perl-src/mirror.pl      1830
+( $dirtmp      perl-src/mirror.pl      1859
+( $dl  perl-src/mirror.pl      2788
+( $done        perl-src/mirror.pl      2239
+( $dpp, $dps   perl-src/mirror.pl      2509
+( $eqpl        perl-src/mirror.pl      829
+( $err         perl-src/mirror.pl      1601
+( $exit_status         perl-src/mirror.pl      1030
+( $f   perl-src/mirror.pl      725
+( $f   perl-src/mirror.pl      1840
+( $f   perl-src/mirror.pl      2770
+( $f   perl-src/mirror.pl      2921
+( $f   perl-src/mirror.pl      2997
+( $f, $fr, $flb, $flt, $flp, $flz, $frb, $frt  perl-src/mirror.pl      1990
+( $f, $uf      perl-src/mirror.pl      1878
+( $file        perl-src/mirror.pl      3673
+( $file, $kind         perl-src/mirror.pl      3991
+( $files_to_go, $dirs_to_go    perl-src/mirror.pl      3125
+( $filesize    perl-src/mirror.pl      3015
+( $flag, $p    perl-src/mirror.pl      480
+( $flags       perl-src/mirror.pl      1912
+( $fname       perl-src/mirror.pl      758
+( $fname       perl-src/mirror.pl      3379
+( $ft  perl-src/mirror.pl      2747
+( $get_one_package     perl-src/mirror.pl      1009
+( $i   perl-src/mirror.pl      1692
+( $i   perl-src/mirror.pl      2129
+( $i   perl-src/mirror.pl      3917
+( $in  perl-src/mirror.pl      3932
+( $index       perl-src/mirror.pl      3697
+( $key         perl-src/mirror.pl      964
+( $key, $val   perl-src/mirror.pl      896
+( $key, $val, $overrides       perl-src/mirror.pl      870
+( $key, $val, $str     perl-src/mirror.pl      975
+( $key_val     perl-src/mirror.pl      578
+( $last_prodded        perl-src/mirror.pl      1643
+( $last_prodded        perl-src/mirror.pl      2294
+( $lcwd        perl-src/mirror.pl      4137
+( $locali      perl-src/mirror.pl      3054
+( $locali      perl-src/mirror.pl      3714
+( $map         perl-src/mirror.pl      3645
+( $map         perl-src/mirror.pl      3659
+( $mapi        perl-src/mirror.pl      1763
+( $mapi        perl-src/mirror.pl      2214
+( $mode        perl-src/mirror.pl      3556
+( $msg         perl-src/mirror.pl      972
+( $msg         perl-src/mirror.pl      1963
+( $msg         perl-src/mirror.pl      3417
+( $msg         perl-src/mirror.pl      3431
+( $msg         perl-src/mirror.pl      4030
+( $name        perl-src/mirror.pl      2653
+( $newpath     perl-src/mirror.pl      2838
+( $nle         perl-src/mirror.pl      973
+( $now         perl-src/mirror.pl      1493
+( $old         perl-src/mirror.pl      2421
+( $old_dest_path       perl-src/mirror.pl      2432
+( $old_dest_path, $existing_path, $tmp, $restart       perl-src/mirror.pl      
2300
+( $old_mode    perl-src/mirror.pl      4124
+( $old_name    perl-src/mirror.pl      2656
+( $old_path    perl-src/mirror.pl      2130
+( $old_path    perl-src/mirror.pl      2143
+( $old_sig     perl-src/mirror.pl      2098
+( $orig_do_deletes     perl-src/mirror.pl      3132
+( $orig_path   perl-src/mirror.pl      3921
+( $orig_path, $points_to       perl-src/mirror.pl      3904
+( $orig_save_deletes   perl-src/mirror.pl      3133
+( $out         perl-src/mirror.pl      974
+( $p   perl-src/mirror.pl      2762
+( $p, $s, $trz, $t, $m         perl-src/mirror.pl      2030
+( $package     perl-src/mirror.pl      3965
+( $package, $filename, $line   perl-src/mirror.pl      4031
+( $parse_state         perl-src/mirror.pl      1946
+( $part        perl-src/mirror.pl      3698
+( $pass        perl-src/mirror.pl      3609
+( $path        perl-src/mirror.pl      3763
+( $path        perl-src/mirror.pl      3766
+( $path        perl-src/mirror.pl      3888
+( $path        perl-src/mirror.pl      3915
+( $path, $size, $time, $type, $mode, $rdir, $rcwd      perl-src/mirror.pl      
2127
+( $path, $src_path, $type      perl-src/mirror.pl      3555
+( $path, $time         perl-src/mirror.pl      2701
+( $path, $time, $size, $type, $mode, $name, $isdir, $value, $follow    
perl-src/mirror.pl      1693
+( $pathi       perl-src/mirror.pl      3564
+( $pathi       perl-src/mirror.pl      3568
+( $pathi, $path, *keep, *keep_totals, *keep_map, $kind         
perl-src/mirror.pl      4071
+( $per         perl-src/mirror.pl      3162
+( $per         perl-src/mirror.pl      3184
+( $pr_time     perl-src/mirror.pl      2703
+( $prog        perl-src/mirror.pl      3762
+( $program     perl-src/mirror.pl      3782
+( $readme      perl-src/mirror.pl      3730
+( $real        perl-src/mirror.pl      2409
+( $real, $reali, $reali1       perl-src/mirror.pl      2352
+( $real_save_dir, $save_dest   perl-src/mirror.pl      3249
+( $reali       perl-src/mirror.pl      2410
+( $res         perl-src/mirror.pl      1549
+( $ret         perl-src/mirror.pl      1587
+( $ret         perl-src/mirror.pl      2097
+( $ret         perl-src/mirror.pl      4126
+( $ri  perl-src/mirror.pl      2203
+( $rls         perl-src/mirror.pl      1825
+( $rooted      perl-src/mirror.pl      3919
+( $save, $kind         perl-src/mirror.pl      3247
+( $save_dir_tail       perl-src/mirror.pl      3226
+( $sec,$min,$hour,$mday,$mon,$year,    perl-src/mirror.pl      678
+( $sig         perl-src/mirror.pl      4029
+( $sig         perl-src/mirror.pl      4038
+( $site, $path         perl-src/mirror.pl      539
+( $site_path   perl-src/mirror.pl      525
+( $size        perl-src/mirror.pl      3840
+( $sizemsg     perl-src/mirror.pl      3016
+( $sp, $dp     perl-src/mirror.pl      2301
+( $src_file    perl-src/mirror.pl      2915
+( $src_path    perl-src/mirror.pl      2677
+( $src_path    perl-src/mirror.pl      2808
+( $src_path, $dest_path, $attribs, $timestamp  perl-src/mirror.pl      2871
+( $src_path, $dest_path, $got_mesg, $size      perl-src/mirror.pl      3092
+( $src_path, $dest_path, $i    perl-src/mirror.pl      2293
+( $src_path, $i        perl-src/mirror.pl      3131
+( $srci        perl-src/mirror.pl      2810
+( $srcsize     perl-src/mirror.pl      3017
+( $status      perl-src/mirror.pl      3442
+( $storename   perl-src/mirror.pl      1793
+( $t   perl-src/mirror.pl      1589
+( $t1, $t2     perl-src/mirror.pl      3637
+( $temp, $dest_path, $time     perl-src/mirror.pl      3683
+( $thing       perl-src/mirror.pl      2721
+( $thing       perl-src/mirror.pl      2738
+( $ti  perl-src/mirror.pl      2975
+( $time        perl-src/mirror.pl      3029
+( $time_to_sig         perl-src/mirror.pl      4106
+( $tlb         perl-src/mirror.pl      1995
+( $tlz         perl-src/mirror.pl      2037
+( $tmp         perl-src/mirror.pl      2666
+( $tmp_mode    perl-src/mirror.pl      4125
+( $to , $tn    perl-src/mirror.pl      1991
+( $todo, $msg  perl-src/mirror.pl      3809
+( $type_changed        perl-src/mirror.pl      1791
+( $udirtmp     perl-src/mirror.pl      1792
+( $uid, $gid, $path    perl-src/mirror.pl      4112
+( $unsquish    perl-src/mirror.pl      1832
+( $unsquish    perl-src/mirror.pl      1870
+( $update      perl-src/mirror.pl      2534
+( $user        perl-src/mirror.pl      595
+( $user        perl-src/mirror.pl      3608
+( $v   perl-src/mirror.pl      839
+( $v, $kind    perl-src/mirror.pl      3860
+( $val         perl-src/mirror.pl      953
+( $val         perl-src/mirror.pl      1597
+( $val         perl-src/mirror.pl      3392
+( $val         perl-src/mirror.pl      3500
+( $val         perl-src/mirror.pl      3531
+( $val_name    perl-src/mirror.pl      902
+( $value       perl-src/mirror.pl      2408
+( $|   perl-src/mirror.pl      3610
+( *src_paths,  perl-src/mirror.pl      2286
+( *src_paths,  perl-src/mirror.pl      3121
+( *things      perl-src/mirror.pl      3754
+( @dir, $d, $path      perl-src/mirror.pl      3460
+( @dir_list    perl-src/mirror.pl      2128
+( @dirs, $dir  perl-src/mirror.pl      1642
+( @parts       perl-src/mirror.pl      3933
+( @prog_path   perl-src/mirror.pl      3783
+( @rhelp       perl-src/mirror.pl      1289
+( @sub_dirs    perl-src/mirror.pl      1329
+( @t   perl-src/mirror.pl      1154
+( @t   perl-src/mirror.pl      4006
+($_,$flag,$opt,$f,$r,@temp     perl-src/yagrip.pl      8
+($filesize     perl-src/mirror.pl      2944
+($old_dir      perl-src/mirror.pl      3539
+($prog,$_,@list        perl-src/yagrip.pl      39
+($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst   perl-src/mirror.pl      
4013
+($string,$flag,@string,@temp,@last     perl-src/yagrip.pl      40
+(a-forth-constant      forth-src/test-forth.fth        /^constant 
(a-forth-constant$/
+(another-forth-word    forth-src/test-forth.fth        /^: 
(another-forth-word) ( -- )$/
++      tex-src/texinfo.tex     /^\\def+{{\\tt \\char 43}}$/
+.PRECIOUS      Makefile        /^.PRECIOUS: ETAGS.good CTAGS.good$/
+/.notdef       ps-src/rfc1245.ps       /^\/.notdef \/.notdef \/.notdef 
\/.notdef \/.notdef \/.not/
+/.notdef       ps-src/rfc1245.ps       /^\/.notdef \/.notdef \/.notdef 
\/.notdef \/.notdef \/.not/
+/.notdef       ps-src/rfc1245.ps       /^\/.notdef \/.notdef \/.notdef 
\/.notdef \/.notdef \/.not/
+/.notdef       ps-src/rfc1245.ps       /^\/.notdef \/.notdef \/.notdef 
\/.notdef \/.notdef \/.not/
+/.notdef       ps-src/rfc1245.ps       /^\/.notdef \/.notdef \/.notdef 
\/.notdef \/space \/exclam/
+/A     ps-src/rfc1245.ps       /^\/A { $/
+/Acircumflex   ps-src/rfc1245.ps       /^\/Acircumflex \/Ecircumflex \/Aacute 
\/Edieresis \/Egra/
+/B     ps-src/rfc1245.ps       /^\/B { $/
+/BEGINBITMAP2BIT       ps-src/rfc1245.ps       /^\/BEGINBITMAP2BIT { $/
+/BEGINBITMAP2BITc      ps-src/rfc1245.ps       /^\/BEGINBITMAP2BITc { $/
+/BEGINBITMAPBW ps-src/rfc1245.ps       /^\/BEGINBITMAPBW { $/
+/BEGINBITMAPBWc        ps-src/rfc1245.ps       /^\/BEGINBITMAPBWc { $/
+/BEGINBITMAPGRAY       ps-src/rfc1245.ps       /^\/BEGINBITMAPGRAY { $/
+/BEGINBITMAPGRAYc      ps-src/rfc1245.ps       /^\/BEGINBITMAPGRAYc { $/
+/BEGINPRINTCODE        ps-src/rfc1245.ps       /^\/BEGINPRINTCODE { $/
+/BF    ps-src/rfc1245.ps       /^\/BF { $/
+/BITMAPCOLOR   ps-src/rfc1245.ps       /^\/BITMAPCOLOR { $/
+/BITMAPCOLORc  ps-src/rfc1245.ps       /^\/BITMAPCOLORc { $/
+/BITMAPGRAY    ps-src/rfc1245.ps       /^\/BITMAPGRAY { $/
+/BITMAPGRAYc   ps-src/rfc1245.ps       /^\/BITMAPGRAYc { $/
+/C     ps-src/rfc1245.ps       /^\/C { $/
+/COMMONBITMAP  ps-src/rfc1245.ps       /^\/COMMONBITMAP { $/
+/COMMONBITMAPc ps-src/rfc1245.ps       /^\/COMMONBITMAPc { $/
+/D     ps-src/rfc1245.ps       /^\/D {curveto} bind def$/
+/DiacriticEncoding     ps-src/rfc1245.ps       /^\/DiacriticEncoding [$/
+/E     ps-src/rfc1245.ps       /^\/E {lineto} bind def$/
+/ENDBITMAP     ps-src/rfc1245.ps       /^\/ENDBITMAP {$/
+/ENDPRINTCODE  ps-src/rfc1245.ps       /^\/ENDPRINTCODE {$/
+/F     ps-src/rfc1245.ps       /^\/F { $/
+/FMBEGINEPSF   ps-src/rfc1245.ps       /^\/FMBEGINEPSF { $/
+/FMBEGINPAGE   ps-src/rfc1245.ps       /^\/FMBEGINPAGE { $/
+/FMDEFINEFONT  ps-src/rfc1245.ps       /^\/FMDEFINEFONT { $/
+/FMDOCUMENT    ps-src/rfc1245.ps       /^\/FMDOCUMENT { $/
+/FMENDEPSF     ps-src/rfc1245.ps       /^\/FMENDEPSF {$/
+/FMENDPAGE     ps-src/rfc1245.ps       /^\/FMENDPAGE {$/
+/FMLOCAL       ps-src/rfc1245.ps       /^\/FMLOCAL {$/
+/FMNORMALIZEGRAPHICS   ps-src/rfc1245.ps       /^\/FMNORMALIZEGRAPHICS { $/
+/FMVERSION     ps-src/rfc1245.ps       /^\/FMVERSION {$/
+/FMversion     ps-src/rfc1245.ps       /^\/FMversion (2.0) def $/
+/Fmcc  ps-src/rfc1245.ps       /^\/Fmcc {$/
+/FrameDict     ps-src/rfc1245.ps       /^\/FrameDict 190 dict def $/
+/G     ps-src/rfc1245.ps       /^\/G { $/
+/H     ps-src/rfc1245.ps       /^\/H { $/
+/Icircumflex   ps-src/rfc1245.ps       /^\/Icircumflex \/Idieresis \/Igrave 
\/Oacute \/Ocircumfl/
+/L     ps-src/rfc1245.ps       /^\/L \/M \/N \/O \/P \/Q \/R \/S \/T \/U \/V 
\/W \/X \/Y \/Z \/brac/
+/L     ps-src/rfc1245.ps       /^\/L { $/
+/M     ps-src/rfc1245.ps       /^\/M {newpath moveto} bind def$/
+/N     ps-src/rfc1245.ps       /^\/N { $/
+/Ntilde        ps-src/rfc1245.ps       /^\/Ntilde \/Odieresis \/Udieresis 
\/aacute \/agrave \/aci/
+/O     ps-src/rfc1245.ps       /^\/O {closepath} bind def$/
+/Otilde        ps-src/rfc1245.ps       /^\/Otilde \/OE \/oe \/endash \/emdash 
\/quotedblleft \/quo/
+/P     ps-src/rfc1245.ps       /^\/P { $/
+/PF    ps-src/rfc1245.ps       /^\/PF { $/
+/R     ps-src/rfc1245.ps       /^\/R { $/
+/RF    ps-src/rfc1245.ps       /^\/RF { $/
+/RR    ps-src/rfc1245.ps       /^\/RR { $/
+/ReEncode      ps-src/rfc1245.ps       /^\/ReEncode { $/
+/S     ps-src/rfc1245.ps       /^\/S { $/
+/SF    ps-src/rfc1245.ps       /^\/SF { $/
+/T     ps-src/rfc1245.ps       /^\/T { $/
+/TF    ps-src/rfc1245.ps       /^\/TF { $/
+/U     ps-src/rfc1245.ps       /^\/U { $/
+/Uacute        ps-src/rfc1245.ps       /^\/Uacute \/Ucircumflex \/Ugrave 
\/dotlessi \/circumflex/
+/V     ps-src/rfc1245.ps       /^\/V { $/
+/W     ps-src/rfc1245.ps       /^\/W { $/
+/X     ps-src/rfc1245.ps       /^\/X { $/
+/Y     ps-src/rfc1245.ps       /^\/Y { $/
+/Z     ps-src/rfc1245.ps       /^\/Z {$/
+/atilde        ps-src/rfc1245.ps       /^\/atilde \/aring \/ccedilla \/eacute 
\/egrave \/ecircumf/
+/bl    ps-src/rfc1245.ps       /^\/bl { $/
+/braceright    ps-src/rfc1245.ps       /^\/braceright \/asciitilde \/.notdef 
\/Adieresis \/Aring/
+/bracketright  ps-src/rfc1245.ps       /^\/bracketright \/asciicircum 
\/underscore \/grave \/a \//
+/breve ps-src/rfc1245.ps       /^\/breve \/dotaccent \/ring \/cedilla 
\/hungarumlaut \/og/
+/cfs   ps-src/rfc1245.ps       /^\/cfs { $/
+/colorsetup    ps-src/rfc1245.ps       /^\/colorsetup {$/
+/desperatepapersize    ps-src/rfc1245.ps       /^\/desperatepapersize {$/
+/dieresis      ps-src/rfc1245.ps       /^\/dieresis \/.notdef \/AE \/Oslash 
\/.notdef \/.notdef \//
+/dmatrix       ps-src/rfc1245.ps       /^\/dmatrix matrix def$/
+/dnormalize    ps-src/rfc1245.ps       /^\/dnormalize {$/
+/dpi   ps-src/rfc1245.ps       /^\/dpi    72 0 dmatrix defaultmatrix 
dtransform$/
+/exclamdown    ps-src/rfc1245.ps       /^\/exclamdown \/logicalnot \/.notdef 
\/florin \/.notdef /
+/fakecolorsetup        ps-src/rfc1245.ps       /^\/fakecolorsetup {$/
+/fillprocs     ps-src/rfc1245.ps       /^\/fillprocs 32 array def$/
+/fl    ps-src/rfc1245.ps       /^\/fl { $/
+/fraction      ps-src/rfc1245.ps       /^\/fraction \/currency \/guilsinglleft 
\/guilsinglright/
+/freq  ps-src/rfc1245.ps       /^\/freq dpi 18.75 div 8 div round dup 0 eq 
{pop 1} i/
+/gn    ps-src/rfc1245.ps       /^\/gn { $/
+/graymode      ps-src/rfc1245.ps       /^\/graymode true def$/
+/grayness      ps-src/rfc1245.ps       /^\/grayness {$/
+/guillemotleft ps-src/rfc1245.ps       /^\/guillemotleft \/guillemotright 
\/ellipsis \/.notdef /
+/hx    ps-src/rfc1245.ps       /^\/hx { $/
+/i     ps-src/rfc1245.ps       /^\/i \/j \/k \/l \/m \/n \/o \/p \/q \/r \/s 
\/t \/u \/v \/w \/x \/y/
+/iacute        ps-src/rfc1245.ps       /^\/iacute \/igrave \/icircumflex 
\/idieresis \/ntilde \/o/
+/ic    ps-src/rfc1245.ps       /^\/ic [ $/
+/inch  ps-src/rfc1245.ps       /^\/inch {72 mul} def$/
+/ip    ps-src/rfc1245.ps       /^\/ip { $/
+/less  ps-src/rfc1245.ps       /^\/less \/equal \/greater \/question \/at \/A 
\/B \/C \/D \/E/
+/lnormalize    ps-src/rfc1245.ps       /^\/lnormalize { $/
+/manualpapersize       ps-src/rfc1245.ps       /^\/manualpapersize {$/
+/max   ps-src/rfc1245.ps       /^\/max {2 copy lt {exch} if pop} bind def$/
+/min   ps-src/rfc1245.ps       /^\/min {2 copy gt {exch} if pop} bind def$/
+/ms    ps-src/rfc1245.ps       /^\/ms { $/
+/nbluet        ps-src/rfc1245.ps       /^\/nbluet 256 array def$/
+/ngrayt        ps-src/rfc1245.ps       /^\/ngrayt 256 array def$/
+/ngreent       ps-src/rfc1245.ps       /^\/ngreent 256 array def$/
+/normalize     ps-src/rfc1245.ps       /^\/normalize {$/
+/nredt ps-src/rfc1245.ps       /^\/nredt 256 array def$/
+/numbersign    ps-src/rfc1245.ps       /^\/numbersign \/dollar \/percent 
\/ampersand \/quotesing/
+/ocircumflex   ps-src/rfc1245.ps       /^\/ocircumflex \/odieresis \/otilde 
\/uacute \/ugrave \/u/
+/ordfeminine   ps-src/rfc1245.ps       /^\/ordfeminine \/ordmasculine 
\/.notdef \/ae \/oslash \/q/
+/pagedimen     ps-src/rfc1245.ps       /^\/pagedimen { $/
+/papersize     ps-src/rfc1245.ps       /^\/papersize {$/
+/paragraph     ps-src/rfc1245.ps       /^\/paragraph \/germandbls \/registered 
\/copyright \/tra/
+/parenright    ps-src/rfc1245.ps       /^\/parenright \/asterisk \/plus 
\/comma \/hyphen \/period/
+/periodcentered        ps-src/rfc1245.ps       /^\/periodcentered 
\/quotesinglbase \/quotedblbase \/per/
+/quoteleft     ps-src/rfc1245.ps       /^\/quoteleft \/quoteright \/.notdef 
\/.notdef \/ydieresi/
+/restorematrix ps-src/rfc1245.ps       /^\/restorematrix {$/
+/s1    ps-src/rfc1245.ps       /^\/s1 1 string def$/
+/sangle        ps-src/rfc1245.ps       /^\/sangle 1 0 dmatrix defaultmatrix 
dtransform exch /
+/savematrix    ps-src/rfc1245.ps       /^\/savematrix {$/
+/setmanualfeed ps-src/rfc1245.ps       /^\/setmanualfeed {$/
+/setpapername  ps-src/rfc1245.ps       /^\/setpapername { $/
+/setpattern    ps-src/rfc1245.ps       /^\/setpattern {$/
+/two   ps-src/rfc1245.ps       /^\/two \/three \/four \/five \/six \/seven 
\/eight \/nine \//
+/udieresis     ps-src/rfc1245.ps       /^\/udieresis \/dagger \/.notdef \/cent 
\/sterling \/secti/
+/wbytes        ps-src/rfc1245.ps       /^\/wbytes { $/
+/wh    ps-src/rfc1245.ps       /^\/wh { $/
+/yen   ps-src/rfc1245.ps       /^\/yen \/.notdef \/.notdef \/.notdef \/.notdef 
\/.notdef /
+::PctestActionAbort    cp-src/Pctest.h 53
+::PctestActionFiltered cp-src/Pctest.h 51
+::PctestActionValid    cp-src/Pctest.h 47
+::PctestActionValidLasthop     cp-src/Pctest.h 49
+::cat  cp-src/c.C      126
+::dog  cp-src/c.C      126
+::f    cp-src/c.C      /^     void f() {}$/
+::teats        cp-src/c.C      127
+:a-forth-dictionary-entry      forth-src/test-forth.fth        /^create 
:a-forth-dictionary-entry$/
+<      tex-src/texinfo.tex     /^\\def<{{\\tt \\less}}$/
+=      tex-src/texinfo.tex     /^\\global\\let\\section = \\numberedsec$/
+=      tex-src/texinfo.tex     /^\\global\\let\\subsection = \\numberedsubsec$/
+=      tex-src/texinfo.tex     /^\\global\\let\\subsubsection = 
\\numberedsubsubsec$/
+=      tex-src/texinfo.tex     /^\\global\\let\\section = \\appendixsec$/
+=      tex-src/texinfo.tex     /^\\global\\let\\subsection = \\appendixsubsec$/
+=      tex-src/texinfo.tex     /^\\global\\let\\subsubsection = 
\\appendixsubsubsec$/
+=      tex-src/texinfo.tex     /^\\global\\let\\section = \\unnumberedsec$/
+=      tex-src/texinfo.tex     /^\\global\\let\\subsection = 
\\unnumberedsubsec$/
+=      tex-src/texinfo.tex     /^\\global\\let\\subsubsection = 
\\unnumberedsubsubsec$/
+=      tex-src/texinfo.tex     /^\\global\\let\\section = \\numberedsec$/
+=      tex-src/texinfo.tex     /^\\global\\let\\subsection = \\numberedsubsec$/
+=      tex-src/texinfo.tex     /^\\global\\let\\subsubsection = 
\\numberedsubsubsec$/
+=      tex-src/texinfo.tex     /^\\global\\def={{\\tt \\char 61}}}$/
+=/f    ada-src/etags-test-for.ada      /^   function "=" (L, R : 
System.Address) return Boo/
+=\indexdummyfont       tex-src/texinfo.tex     /^\\let\\cite=\\indexdummyfont$/
+=\relax        tex-src/texinfo.tex     /^\\let\\chapter=\\relax$/
+=\relax        tex-src/texinfo.tex     /^\\let\\section=\\relax$/
+=\relax        tex-src/texinfo.tex     /^\\let\\subsection=\\relax$/
+=\relax        tex-src/texinfo.tex     /^\\let\\subsubsection=\\relax$/
+=\relax        tex-src/texinfo.tex     /^\\let\\appendix=\\relax$/
+=\smartitalic  tex-src/texinfo.tex     /^\\let\\cite=\\smartitalic$/
+>      tex-src/texinfo.tex     /^\\def>{{\\tt \\gtr}}$/
+>field1        forth-src/test-forth.fth        /^   9   field   >field1$/
+>field2        forth-src/test-forth.fth        /^   5   field   >field2$/
address@hidden  make-src/Makefile       /^      @$(MAKE) OPTIONS='--no-members' 
${LATEST}ediff$/
address@hidden  make-src/Makefile       /^      @$(MAKE) 
OPTIONS='--declarations --no-members' ${/
address@hidden  make-src/Makefile       /^      @$(MAKE) OPTIONS='--members' 
${LATEST}ediff$/
address@hidden  make-src/Makefile       /^      @$(MAKE) 
OPTIONS='address@hidden --no-members/
address@hidden  make-src/Makefile       /^      @$(MAKE) OPTIONS='nonexistent 
--members --declara/
address@hidden  make-src/Makefile       /^      @$(MAKE) ${LATEST}cdiff$/
address@hidden  make-src/Makefile       /^      @$(MAKE) etags 
"CPPFLAGS=-UVERSION"$/
address@hidden  make-src/Makefile       /^      @$(MAKE) CHECKOBJS= CHECKFLAGS= 
etags "CFLAGS=-an/
address@hidden  make-src/Makefile       /^      @$(MAKE) CHECKOBJS= CHECKFLAGS= 
ctags "CFLAGS=-an/
address@hidden  make-src/Makefile       /^      @$(MAKE) etags CHECKOBJS= 
CHECKFLAGS= REGEXOBJS= /
+A      c.c     162
+A      cp-src/c.C      39
+A      cp-src/c.C      56
+A      cp-src/c.C      57
+A      cp-src/c.C      73
+A      cp-src/c.C      117
+A      cp-src/fail.C   7
+A      cp-src/fail.C   23
+A::A   cp-src/c.C      /^void A::A() {}$/
+A::B   cp-src/c.C      56
+A::B   cp-src/fail.C   8
+A::B   cp-src/fail.C   24
+A::B::C        cp-src/fail.C   9
+A::B::C        cp-src/fail.C   25
+A::B::C::C     cp-src/fail.C   /^                         C(int i) {x = i;}$/
+A::B::C::operator int  cp-src/fail.C   /^                         operator 
int() const {return x;}$/
+A::B::C::x     cp-src/fail.C   10
+A::B::T        cp-src/fail.C   14
+A::B::f        cp-src/fail.C   /^              int f() { return 5; }$/
+A::B::f        cp-src/fail.C   /^int A::B::f() { return 2; }$/
+A::T2  cp-src/fail.C   16
+A::colori      cp-src/c.C      40
+A::giallo      cp-src/c.C      40
+A::operator+   cp-src/c.C      /^const A& A::operator+(const A&) { }$/
+A::operator+   cp-src/c.C      /^  A operator+(A& a) {};$/
+A::rosso       cp-src/c.C      40
+A::verde       cp-src/c.C      40
+A::~A  cp-src/c.C      /^A::~A() {}$/
+ADASRC Makefile        /^ADASRC=$(addprefix .\/ada-src\/,etags-test-for.ada 2/
+ADDRESS        c-src/emacs/src/gmalloc.c       /^#define ADDRESS(B)    ((void 
*) (((B) - 1) * BLOCKSIZ/
+ALIGNOF_STRUCT_LISP_VECTOR     c-src/emacs/src/lisp.h  1378
+ALLOCATED_BEFORE_DUMPING       c-src/emacs/src/gmalloc.c       /^#define 
ALLOCATED_BEFORE_DUMPING(P) \\$/
+ALLOCATE_PSEUDOVECTOR  c-src/emacs/src/lisp.h  /^#define 
ALLOCATE_PSEUDOVECTOR(type, field, tag)                       /
+ALLOCATE_ZEROED_PSEUDOVECTOR   c-src/emacs/src/lisp.h  /^#define 
ALLOCATE_ZEROED_PSEUDOVECTOR(type, field, /
+AND    y-src/cccp.c    11
+ANSIC  c-src/h.h       84
+ANSIC  c-src/h.h       85
+AREF   c-src/emacs/src/lisp.h  /^AREF (Lisp_Object array, ptrdiff_t idx)$/
+ARGS   Makefile        /^ARGS=- < srclist$/
+ARITH_EQUAL    c-src/emacs/src/lisp.h  3498
+ARITH_GRTR     c-src/emacs/src/lisp.h  3501
+ARITH_GRTR_OR_EQUAL    c-src/emacs/src/lisp.h  3503
+ARITH_LESS     c-src/emacs/src/lisp.h  3500
+ARITH_LESS_OR_EQUAL    c-src/emacs/src/lisp.h  3502
+ARITH_NOTEQUAL c-src/emacs/src/lisp.h  3499
+ARRAYELTS      c-src/emacs/src/lisp.h  /^#define ARRAYELTS(arr) (sizeof (arr) 
\/ sizeof (arr/
+ARRAYP c-src/emacs/src/lisp.h  /^ARRAYP (Lisp_Object x)$/
+ARRAY_MARK_FLAG        c-src/emacs/src/lisp.h  768
+ASCII_CHAR_P   c-src/emacs/src/lisp.h  /^#define ASCII_CHAR_P(c) UNSIGNED_CMP 
(c, <, 0x80)$/
+ASET   c-src/emacs/src/lisp.h  /^ASET (Lisp_Object array, ptrdiff_t idx, 
Lisp_Objec/
+ASIZE  c-src/emacs/src/lisp.h  /^ASIZE (Lisp_Object array)$/
+ASRC   Makefile        /^ASRC=$(addprefix .\/a-src\/,empty.zz empty.zz.gz)$/
+AST_Array::AST_Array   cp-src/c.C      /^AST_Array::AST_Array(UTL_ScopedName 
*n, unsigned l/
+AST_ConcreteType::AST_ConcreteType     cp-src/c.C      
/^AST_ConcreteType::AST_ConcreteType(AST_Decl::NodeT/
+AST_Root       cp-src/c.C      92
+AT     cp-src/c.C      52
+AT::t  cp-src/c.C      52
+AU     cp-src/c.C      53
+AU::x  cp-src/c.C      53
+AUTOLOADP      c-src/emacs/src/lisp.h  /^AUTOLOADP (Lisp_Object x)$/
+AUTO_CONS      c-src/emacs/src/lisp.h  /^#define AUTO_CONS(name, a, b) 
Lisp_Object name = A/
+AUTO_CONS_EXPR c-src/emacs/src/lisp.h  /^#define AUTO_CONS_EXPR(a, b) \\$/
+AUTO_LIST1     c-src/emacs/src/lisp.h  /^#define AUTO_LIST1(name, a)           
                                \\$/
+AUTO_LIST2     c-src/emacs/src/lisp.h  /^#define AUTO_LIST2(name, a, b)        
                                        \\$/
+AUTO_LIST3     c-src/emacs/src/lisp.h  /^#define AUTO_LIST3(name, a, b, c)     
                                \\$/
+AUTO_LIST4     c-src/emacs/src/lisp.h  /^#define AUTO_LIST4(name, a, b, c, d)  
                                \\$/
+AUTO_STRING    c-src/emacs/src/lisp.h  /^#define AUTO_STRING(name, str)        
                                        \\$/
+AVAIL_ALLOCA   c-src/emacs/src/lisp.h  /^#define AVAIL_ALLOCA(size) (sa_avail 
-= (size), al/
+AWTEventMulticaster    java-src/AWTEMul.java   63
+AWTEventMulticaster.AWTEventMulticaster        java-src/AWTEMul.java   /^    
protected AWTEventMulticaster(EventListener a,/
+AWTEventMulticaster.a  java-src/AWTEMul.java   69
+AWTEventMulticaster.actionPerformed    java-src/AWTEMul.java   /^    public 
void actionPerformed(ActionEvent e) {$/
+AWTEventMulticaster.add        java-src/AWTEMul.java   /^    public static 
ComponentListener add(ComponentL/
+AWTEventMulticaster.add        java-src/AWTEMul.java   /^    public static 
ContainerListener add(ContainerL/
+AWTEventMulticaster.add        java-src/AWTEMul.java   /^    public static 
FocusListener add(FocusListener /
+AWTEventMulticaster.add        java-src/AWTEMul.java   /^    public static 
KeyListener add(KeyListener a, K/
+AWTEventMulticaster.add        java-src/AWTEMul.java   /^    public static 
MouseListener add(MouseListener /
+AWTEventMulticaster.add        java-src/AWTEMul.java   /^    public static 
MouseMotionListener add(MouseMot/
+AWTEventMulticaster.add        java-src/AWTEMul.java   /^    public static 
WindowListener add(WindowListene/
+AWTEventMulticaster.add        java-src/AWTEMul.java   /^    public static 
ActionListener add(ActionListene/
+AWTEventMulticaster.add        java-src/AWTEMul.java   /^    public static 
ItemListener add(ItemListener a,/
+AWTEventMulticaster.add        java-src/AWTEMul.java   /^    public static 
AdjustmentListener add(Adjustmen/
+AWTEventMulticaster.add        java-src/AWTEMul.java   /^    public static 
TextListener add(TextListener a,/
+AWTEventMulticaster.addInternal        java-src/AWTEMul.java   /^    protected 
static EventListener addInternal(Eve/
+AWTEventMulticaster.adjustmentValueChanged     java-src/AWTEMul.java   /^    
public void adjustmentValueChanged(AdjustmentE/
+AWTEventMulticaster.b  java-src/AWTEMul.java   69
+AWTEventMulticaster.componentAdded     java-src/AWTEMul.java   /^    public 
void componentAdded(ContainerEvent e) {/
+AWTEventMulticaster.componentHidden    java-src/AWTEMul.java   /^    public 
void componentHidden(ComponentEvent e) /
+AWTEventMulticaster.componentMoved     java-src/AWTEMul.java   /^    public 
void componentMoved(ComponentEvent e) {/
+AWTEventMulticaster.componentRemoved   java-src/AWTEMul.java   /^    public 
void componentRemoved(ContainerEvent e)/
+AWTEventMulticaster.componentResized   java-src/AWTEMul.java   /^    public 
void componentResized(ComponentEvent e)/
+AWTEventMulticaster.componentShown     java-src/AWTEMul.java   /^    public 
void componentShown(ComponentEvent e) {/
+AWTEventMulticaster.focusGained        java-src/AWTEMul.java   /^    public 
void focusGained(FocusEvent e) {$/
+AWTEventMulticaster.focusLost  java-src/AWTEMul.java   /^    public void 
focusLost(FocusEvent e) {$/
+AWTEventMulticaster.itemStateChanged   java-src/AWTEMul.java   /^    public 
void itemStateChanged(ItemEvent e) {$/
+AWTEventMulticaster.keyPressed java-src/AWTEMul.java   /^    public void 
keyPressed(KeyEvent e) {$/
+AWTEventMulticaster.keyReleased        java-src/AWTEMul.java   /^    public 
void keyReleased(KeyEvent e) {$/
+AWTEventMulticaster.keyTyped   java-src/AWTEMul.java   /^    public void 
keyTyped(KeyEvent e) {$/
+AWTEventMulticaster.mouseClicked       java-src/AWTEMul.java   /^    public 
void mouseClicked(MouseEvent e) {$/
+AWTEventMulticaster.mouseDragged       java-src/AWTEMul.java   /^    public 
void mouseDragged(MouseEvent e) {$/
+AWTEventMulticaster.mouseEntered       java-src/AWTEMul.java   /^    public 
void mouseEntered(MouseEvent e) {$/
+AWTEventMulticaster.mouseExited        java-src/AWTEMul.java   /^    public 
void mouseExited(MouseEvent e) {$/
+AWTEventMulticaster.mouseMoved java-src/AWTEMul.java   /^    public void 
mouseMoved(MouseEvent e) {$/
+AWTEventMulticaster.mousePressed       java-src/AWTEMul.java   /^    public 
void mousePressed(MouseEvent e) {$/
+AWTEventMulticaster.mouseReleased      java-src/AWTEMul.java   /^    public 
void mouseReleased(MouseEvent e) {$/
+AWTEventMulticaster.remove     java-src/AWTEMul.java   /^    protected 
EventListener remove(EventListener o/
+AWTEventMulticaster.remove     java-src/AWTEMul.java   /^    public static 
ComponentListener remove(Compone/
+AWTEventMulticaster.remove     java-src/AWTEMul.java   /^    public static 
ContainerListener remove(Contain/
+AWTEventMulticaster.remove     java-src/AWTEMul.java   /^    public static 
FocusListener remove(FocusListen/
+AWTEventMulticaster.remove     java-src/AWTEMul.java   /^    public static 
KeyListener remove(KeyListener l/
+AWTEventMulticaster.remove     java-src/AWTEMul.java   /^    public static 
MouseListener remove(MouseListen/
+AWTEventMulticaster.remove     java-src/AWTEMul.java   /^    public static 
MouseMotionListener remove(Mouse/
+AWTEventMulticaster.remove     java-src/AWTEMul.java   /^    public static 
WindowListener remove(WindowList/
+AWTEventMulticaster.remove     java-src/AWTEMul.java   /^    public static 
ActionListener remove(ActionList/
+AWTEventMulticaster.remove     java-src/AWTEMul.java   /^    public static 
ItemListener remove(ItemListener/
+AWTEventMulticaster.remove     java-src/AWTEMul.java   /^    public static 
AdjustmentListener remove(Adjust/
+AWTEventMulticaster.remove     java-src/AWTEMul.java   /^    public static 
TextListener remove(TextListener/
+AWTEventMulticaster.removeInternal     java-src/AWTEMul.java   /^    protected 
static EventListener removeInternal(/
+AWTEventMulticaster.save       java-src/AWTEMul.java   /^    static void 
save(ObjectOutputStream s, String /
+AWTEventMulticaster.saveInternal       java-src/AWTEMul.java   /^    protected 
void saveInternal(ObjectOutputStream/
+AWTEventMulticaster.textValueChanged   java-src/AWTEMul.java   /^    public 
void textValueChanged(TextEvent e) {$/
+AWTEventMulticaster.windowActivated    java-src/AWTEMul.java   /^    public 
void windowActivated(WindowEvent e) {$/
+AWTEventMulticaster.windowClosed       java-src/AWTEMul.java   /^    public 
void windowClosed(WindowEvent e) {$/
+AWTEventMulticaster.windowClosing      java-src/AWTEMul.java   /^    public 
void windowClosing(WindowEvent e) {$/
+AWTEventMulticaster.windowDeactivated  java-src/AWTEMul.java   /^    public 
void windowDeactivated(WindowEvent e) {/
+AWTEventMulticaster.windowDeiconified  java-src/AWTEMul.java   /^    public 
void windowDeiconified(WindowEvent e) {/
+AWTEventMulticaster.windowIconified    java-src/AWTEMul.java   /^    public 
void windowIconified(WindowEvent e) {$/
+AWTEventMulticaster.windowOpened       java-src/AWTEMul.java   /^    public 
void windowOpened(WindowEvent e) {$/
+Abort_Handler_Pointer/t        ada-src/2ataspri.ads    /^   type 
Abort_Handler_Pointer is access procedure /
+Abort_Task/p   ada-src/2ataspri.adb    /^   procedure Abort_Task (T : TCB_Ptr) 
is$/
+Abort_Task/p   ada-src/2ataspri.ads    /^   procedure Abort_Task (T : 
TCB_Ptr);$/
+Abort_Wrapper/p        ada-src/2ataspri.adb    /^   procedure Abort_Wrapper$/
+Abort_Wrapper/p        ada-src/2ataspri.adb    /^   procedure Abort_Wrapper$/
+Action_Pref    cp-src/abstract.H       704
+Action_Pref::Action_Pref       cp-src/abstract.C       
/^Action_Pref::Action_Pref(Tree_Node *a_d, Tree_Node/
+Action_Pref::SetCollapsed      cp-src/abstract.C       /^void 
Action_Pref::SetCollapsed(char t)$/
+Action_Pref::SetDimensions     cp-src/abstract.C       /^void 
Action_Pref::SetDimensions(void)$/
+Action_Pref::SetFather cp-src/abstract.C       /^void 
Action_Pref::SetFather(Tree_Node *f)$/
+Action_Pref::SetPosition       cp-src/abstract.C       /^void 
Action_Pref::SetPosition(Coord xx, Coord yy)$/
+Action_Pref::SetTextual        cp-src/abstract.C       /^void 
Action_Pref::SetTextual(char t, char s)$/
+Action_Pref::action_den        cp-src/abstract.H       706
+Action_Pref::bex       cp-src/abstract.H       707
+Action_Pref::border    cp-src/abstract.H       709
+Action_Pref::havebox   cp-src/abstract.H       708
+Ada_funcs      c-src/etags.c   /^Ada_funcs (FILE *inf)$/
+Ada_getit      c-src/etags.c   /^Ada_getit (FILE *inf, const char 
*name_qualifier)$/
+Ada_help       c-src/etags.c   475
+Ada_suffixes   c-src/etags.c   473
+AddNullToNmStr pas-src/common.pas      /^function AddNullToNmStr; (*($/
+Address_To_Call_State/f        ada-src/2ataspri.adb    /^      function 
Address_To_Call_State is new$/
+Address_To_TCB_Ptr/f   ada-src/2ataspri.ads    /^   function 
Address_To_TCB_Ptr is new$/
+Advanced usage tex-src/gzip.texi       /address@hidden Advanced usage, 
Environment, Invoking gzip, /
+Aligned_Cons   c-src/emacs/src/lisp.h  4670
+Aligned_String c-src/emacs/src/lisp.h  4676
+AppendTextString       pas-src/common.pas      /^function 
AppendTextString;(*($/
+Arith_Comparison       c-src/emacs/src/lisp.h  3497
+Asm_help       c-src/etags.c   504
+Asm_labels     c-src/etags.c   /^Asm_labels (FILE *inf)$/
+Asm_suffixes   c-src/etags.c   493
+B      cp-src/c.C      54
+B      cp-src/c.C      74
+B      cp-src/c.C      122
+B::B   cp-src/c.C      /^void B::B() {}$/
+B::f   cp-src/c.C      /^class B<int> { void f() {} };$/
+B::~B  cp-src/c.C      /^    ~B() {};$/
+BE_Node        cp-src/c.C      77
+BE_Node::BE_Node       cp-src/c.C      /^void BE_Node::BE_Node() {}$/
+BITS_PER_BITS_WORD     c-src/emacs/src/lisp.h  125
+BITS_PER_BITS_WORD     c-src/emacs/src/lisp.h  129
+BITS_PER_CHAR  c-src/emacs/src/lisp.h  136
+BITS_PER_EMACS_INT     c-src/emacs/src/lisp.h  139
+BITS_PER_LONG  c-src/emacs/src/lisp.h  138
+BITS_PER_SHORT c-src/emacs/src/lisp.h  137
+BITS_WORD_MAX  c-src/emacs/src/lisp.h  124
+BITS_WORD_MAX  c-src/emacs/src/lisp.h  128
+BLOCK  c-src/emacs/src/gmalloc.c       /^#define BLOCK(A)      (((char *) (A) 
- _heapbase) \/ BLO/
+BLOCKIFY       c-src/emacs/src/gmalloc.c       /^#define BLOCKIFY(SIZE)        
(((SIZE) + BLOCKSIZE - 1) \//
+BLOCKLOG       c-src/emacs/src/gmalloc.c       125
+BLOCKSIZE      c-src/emacs/src/gmalloc.c       126
+BOOL_VECTOR_BITS_PER_CHAR      c-src/emacs/src/lisp.h  114
+BOOL_VECTOR_BITS_PER_CHAR      c-src/emacs/src/lisp.h  115
+BOOL_VECTOR_P  c-src/emacs/src/lisp.h  /^BOOL_VECTOR_P (Lisp_Object a)$/
+BREAK  erl-src/lines.erl       /^-define(BREAK, 10).   % how many lines to 
store in e/
+BUFFERP        c-src/emacs/src/lisp.h  /^BUFFERP (Lisp_Object a)$/
+BUFFERSIZE     objc-src/Subprocess.h   43
+BUFFER_OBJFWDP c-src/emacs/src/lisp.h  /^BUFFER_OBJFWDP (union Lisp_Fwd *a)$/
+BYTE_MARK_STACK        c-src/emacs/src/lisp.h  3181
+Bar    perl-src/kai-test.pl    /^package Bar;$/
+Bar::f4        perl-src/kai-test.pl    /^sub Bar::f4 {$/
+Bar::f5        perl-src/kai-test.pl    /^sub f5 {$/
+Barrier_Function_Pointer/t     ada-src/etags-test-for.ada      /^   type 
Barrier_Function_Pointer is access$/
+Bidule/b       ada-src/etags-test-for.ada      /^  protected body Bidule is$/
+Bidule/b       ada-src/waroquiers.ada  /^  protected body Bidule is$/
+Bidule/t       ada-src/etags-test-for.ada      /^  protected Bidule is$/
+Bidule/t       ada-src/waroquiers.ada  /^  protected Bidule is$/
+Body_Required/f        ada-src/etags-test-for.ada      /^   function 
Body_Required$/
+Boo    cp-src/c.C      129
+Boo::Boo       cp-src/c.C      /^    Boo(int _i, int _a, int _b) : i(_i), 
a(_a), b(/
+Boo::Boo       cp-src/c.C      /^Boo::Boo(Boo) :$/
+Boo::a cp-src/c.C      132
+Boo::animals   cp-src/c.C      130
+Boo::b cp-src/c.C      132
+Boo::cat       cp-src/c.C      130
+Boo::cow       cp-src/c.C      131
+Boo::dog       cp-src/c.C      130
+Boo::foo       cp-src/c.C      /^    foo() {$/
+Boo::i cp-src/c.C      132
+Boo::treats    cp-src/c.C      131
+ButtonBar      pyt-src/server.py       /^def ButtonBar(frame, legend, ref, 
alternatives, co/
+CALLMANY       c-src/emacs/src/lisp.h  /^#define CALLMANY(f, array) (f) 
(ARRAYELTS (array),/
+CALLN  c-src/emacs/src/lisp.h  /^#define CALLN(f, ...) CALLMANY (f, 
((Lisp_Object [/
+CAR    c-src/emacs/src/lisp.h  /^CAR (Lisp_Object c)$/
+CAR_SAFE       c-src/emacs/src/lisp.h  /^CAR_SAFE (Lisp_Object c)$/
+CATCHER        c-src/emacs/src/lisp.h  3021
+CDR    c-src/emacs/src/lisp.h  /^CDR (Lisp_Object c)$/
+CDR_SAFE       c-src/emacs/src/lisp.h  /^CDR_SAFE (Lisp_Object c)$/
+CFLAGS make-src/Makefile       88
+CHAR   c-src/etags.c   /^#define CHAR(x)               ((unsigned int)(x) & 
(CHARS - 1))/
+CHAR   y-src/cccp.c    7
+CHARACTERBITS  c-src/emacs/src/lisp.h  2457
+CHARS  c-src/etags.c   157
+CHARTAB_SIZE_BITS      c-src/emacs/src/lisp.h  1565
+CHARTAB_SIZE_BITS_0    c-src/emacs/src/lisp.h  1567
+CHARTAB_SIZE_BITS_1    c-src/emacs/src/lisp.h  1568
+CHARTAB_SIZE_BITS_2    c-src/emacs/src/lisp.h  1569
+CHARTAB_SIZE_BITS_3    c-src/emacs/src/lisp.h  1570
+CHAR_ALT       c-src/emacs/src/lisp.h  2445
+CHAR_CLASS_MAX_LENGTH  c-src/emacs/src/regex.h 593
+CHAR_CLASS_MAX_LENGTH  c-src/emacs/src/regex.h 597
+CHAR_CLASS_MAX_LENGTH  c-src/emacs/src/regex.h 605
+CHAR_CTL       c-src/emacs/src/lisp.h  2449
+CHAR_HYPER     c-src/emacs/src/lisp.h  2447
+CHAR_META      c-src/emacs/src/lisp.h  2450
+CHAR_MODIFIER_MASK     c-src/emacs/src/lisp.h  2452
+CHAR_SHIFT     c-src/emacs/src/lisp.h  2448
+CHAR_SUPER     c-src/emacs/src/lisp.h  2446
+CHAR_TABLE_EXTRA_SLOTS c-src/emacs/src/lisp.h  /^CHAR_TABLE_EXTRA_SLOTS 
(struct Lisp_Char_Table *ct/
+CHAR_TABLE_P   c-src/emacs/src/lisp.h  /^CHAR_TABLE_P (Lisp_Object a)$/
+CHAR_TABLE_REF c-src/emacs/src/lisp.h  /^CHAR_TABLE_REF (Lisp_Object ct, int 
idx)$/
+CHAR_TABLE_REF_ASCII   c-src/emacs/src/lisp.h  /^CHAR_TABLE_REF_ASCII 
(Lisp_Object ct, ptrdiff_t id/
+CHAR_TABLE_SET c-src/emacs/src/lisp.h  /^CHAR_TABLE_SET (Lisp_Object ct, int 
idx, Lisp_Obje/
+CHAR_TABLE_STANDARD_SLOTS      c-src/emacs/src/lisp.h  1697
+CHAR_TYPE_SIZE cccp.y  87
+CHAR_TYPE_SIZE y-src/cccp.y    87
+CHECKEROPTS    make-src/Makefile       92
+CHECK_ARRAY    c-src/emacs/src/lisp.h  /^CHECK_ARRAY (Lisp_Object x, 
Lisp_Object predicate)/
+CHECK_BOOL_VECTOR      c-src/emacs/src/lisp.h  /^CHECK_BOOL_VECTOR 
(Lisp_Object x)$/
+CHECK_BUFFER   c-src/emacs/src/lisp.h  /^CHECK_BUFFER (Lisp_Object x)$/
+CHECK_CONS     c-src/emacs/src/lisp.h  /^CHECK_CONS (Lisp_Object x)$/
+CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h  571
+CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h  572
+CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h  572
+CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h  579
+CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h  579
+CHECK_LIST     c-src/emacs/src/lisp.h  /^CHECK_LIST (Lisp_Object x)$/
+CHECK_LIST_CONS        c-src/emacs/src/lisp.h  /^# define CHECK_LIST_CONS(x, 
y) lisp_h_CHECK_LIST_C/
+CHECK_NATNUM   c-src/emacs/src/lisp.h  /^CHECK_NATNUM (Lisp_Object x)$/
+CHECK_NUMBER   c-src/emacs/src/lisp.h  /^# define CHECK_NUMBER(x) 
lisp_h_CHECK_NUMBER (x)$/
+CHECK_NUMBER_CAR       c-src/emacs/src/lisp.h  /^CHECK_NUMBER_CAR (Lisp_Object 
x)$/
+CHECK_NUMBER_CDR       c-src/emacs/src/lisp.h  /^CHECK_NUMBER_CDR (Lisp_Object 
x)$/
+CHECK_NUMBER_COERCE_MARKER     c-src/emacs/src/lisp.h  /^#define 
CHECK_NUMBER_COERCE_MARKER(x)                                 \\$/
+CHECK_NUMBER_OR_FLOAT  c-src/emacs/src/lisp.h  /^CHECK_NUMBER_OR_FLOAT 
(Lisp_Object x)$/
+CHECK_NUMBER_OR_FLOAT_COERCE_MARKER    c-src/emacs/src/lisp.h  /^#define 
CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(x)                                /
+CHECK_PROCESS  c-src/emacs/src/lisp.h  /^CHECK_PROCESS (Lisp_Object x)$/
+CHECK_RANGED_INTEGER   c-src/emacs/src/lisp.h  /^#define 
CHECK_RANGED_INTEGER(x, lo, hi)                                       \\$/
+CHECK_STRING_CAR       c-src/emacs/src/lisp.h  /^CHECK_STRING_CAR (Lisp_Object 
x)$/
+CHECK_SYMBOL   c-src/emacs/src/lisp.h  /^# define CHECK_SYMBOL(x) 
lisp_h_CHECK_SYMBOL (x)$/
+CHECK_TYPE     c-src/emacs/src/lisp.h  /^# define CHECK_TYPE(ok, predicate, x) 
lisp_h_CHECK/
+CHECK_TYPE_RANGED_INTEGER      c-src/emacs/src/lisp.h  /^#define 
CHECK_TYPE_RANGED_INTEGER(type, x) \\$/
+CHECK_VECTOR   c-src/emacs/src/lisp.h  /^CHECK_VECTOR (Lisp_Object x)$/
+CHECK_VECTOR_OR_STRING c-src/emacs/src/lisp.h  /^CHECK_VECTOR_OR_STRING 
(Lisp_Object x)$/
+CHECK_WINDOW   c-src/emacs/src/lisp.h  /^CHECK_WINDOW (Lisp_Object x)$/
+CK_ABS_C       y-src/parse.y   /^#define CK_ABS_C(x)   if((x)<MIN_COL || 
(x)>MAX_COL)/
+CK_ABS_C       parse.y /^#define CK_ABS_C(x)   if((x)<MIN_COL || (x)>MAX_COL)/
+CK_ABS_R       y-src/parse.y   /^#define CK_ABS_R(x)   if((x)<MIN_ROW || 
(x)>MAX_ROW)/
+CK_ABS_R       parse.y /^#define CK_ABS_R(x)   if((x)<MIN_ROW || (x)>MAX_ROW)/
+CK_REL_C       y-src/parse.y   /^#define CK_REL_C(x)   if(   ((x)>0 && 
MAX_COL-(x)<cu/
+CK_REL_C       parse.y /^#define CK_REL_C(x)   if(   ((x)>0 && MAX_COL-(x)<cu/
+CK_REL_R       y-src/parse.y   /^#define CK_REL_R(x)   if(   ((x)>0 && 
MAX_ROW-(x)<cu/
+CK_REL_R       parse.y /^#define CK_REL_R(x)   if(   ((x)>0 && MAX_ROW-(x)<cu/
+CMultiChannelCSC19_3D  cp-src/c.C      2
+CMultiChannelCSC19_3D::cscInitTime     cp-src/c.C      7
+CMultiChannelCSC19_3D::cscSegmentationTime     cp-src/c.C      8
+CMultiChannelCSC19_3D::execute cp-src/c.C      /^        void 
execute(CPluginCSCState& p, int w, in/
+CMultiChannelCSC19_3D::ipc3dCSC19      cp-src/c.C      6
+CMultiChannelCSC19_3D::mcCSC   cp-src/c.C      6
+CMultiChannelCSC19_3D::outputTime      cp-src/c.C      9
+CMultiChannelCSC19_3D::setup   cp-src/c.C      5
+CNL    c-src/etags.c   /^#define CNL()                                         
                \\$/
+CNL_SAVE_DEFINEDEF     c-src/etags.c   /^#define CNL_SAVE_DEFINEDEF()          
                                \\$/
+COLORS cp-src/screen.hpp       11
+COLORS::BLACK  cp-src/screen.hpp       12
+COLORS::BLUE   cp-src/screen.hpp       13
+COLORS::BROWN  cp-src/screen.hpp       18
+COLORS::CYAN   cp-src/screen.hpp       15
+COLORS::DARKGRAY       cp-src/screen.hpp       20
+COLORS::GREEN  cp-src/screen.hpp       14
+COLORS::LIGHTBLUE      cp-src/screen.hpp       21
+COLORS::LIGHTCYAN      cp-src/screen.hpp       23
+COLORS::LIGHTGRAY      cp-src/screen.hpp       19
+COLORS::LIGHTGREEN     cp-src/screen.hpp       22
+COLORS::LIGHTMAGENTA   cp-src/screen.hpp       25
+COLORS::LIGHTRED       cp-src/screen.hpp       24
+COLORS::MAGENTA        cp-src/screen.hpp       17
+COLORS::RED    cp-src/screen.hpp       16
+COLORS::WHITE  cp-src/screen.hpp       27
+COLORS::YELLOW cp-src/screen.hpp       26
+COMPILEDP      c-src/emacs/src/lisp.h  /^COMPILEDP (Lisp_Object a)$/
+COMPILED_ARGLIST       c-src/emacs/src/lisp.h  2431
+COMPILED_BYTECODE      c-src/emacs/src/lisp.h  2432
+COMPILED_CONSTANTS     c-src/emacs/src/lisp.h  2433
+COMPILED_DOC_STRING    c-src/emacs/src/lisp.h  2435
+COMPILED_INTERACTIVE   c-src/emacs/src/lisp.h  2436
+COMPILED_STACK_DEPTH   c-src/emacs/src/lisp.h  2434
+CONDITION_CASE c-src/emacs/src/lisp.h  3021
+CONSP  c-src/emacs/src/lisp.h  /^# define CONSP(x) lisp_h_CONSP (x)$/
+CONSTYPE_HEAP  c-src/emacs/src/lisp.h  3739
+CONSTYPE_PURE  c-src/emacs/src/lisp.h  3739
+CONS_TO_INTEGER        c-src/emacs/src/lisp.h  /^#define CONS_TO_INTEGER(cons, 
type, var)                              \\$/
+CONVERT_CHARSTRING_TO_VALUE    pas-src/common.pas      /^procedure 
CONVERT_CHARSTRING_TO_VALUE;(*($/
+CPPFLAGS       make-src/Makefile       49
+CPSRC  Makefile        /^CPSRC=$(addprefix .\/cp-src\/,c.C abstract.C abstrac/
+CSRC   Makefile        /^CSRC=$(addprefix .\/c-src\/,abbrev.c .\/\/c.c 
torture./
+CTAGS  Makefile        /^CTAGS: FRC ${infiles}$/
+CTAGS  c-src/etags.c   146
+CTAGS  c-src/etags.c   147
+CTAGS  c-src/etags.c   149
+CTAGS_PROG     Makefile        /^CTAGS_PROG=..\/..\/lib-src\/ctags$/
+C_AUTO c-src/etags.c   2198
+C_EXT  c-src/etags.c   2193
+C_JAVA c-src/etags.c   2197
+C_PLAIN        c-src/etags.c   2194
+C_PLPL c-src/etags.c   2195
+C_STAR c-src/etags.c   2196
+C_entries      c-src/etags.c   /^C_entries (int c_ext, FILE *inf)$/
+C_stab_entry   c-src/etags.c   2271
+C_symtype      c-src/etags.c   /^C_symtype (char *str, int len, int c_ext)$/
+ChangeFileType pas-src/common.pas      /^function ChangeFileType; (*(FileName 
: NameString;/
+Choice cp-src/abstract.H       768
+Choice::ChangeH        cp-src/abstract.C       /^void Choice::ChangeH(int nh)$/
+Choice::ChangeW        cp-src/abstract.C       /^void Choice::ChangeW(int nw)$/
+Choice::Choice cp-src/abstract.C       /^Choice::Choice(Tree_Node *b1, 
Tree_Node *b2)$/
+Choice::Get_Textual_H  cp-src/abstract.C       /^int Choice::Get_Textual_H()$/
+Choice::Get_Textual_W  cp-src/abstract.C       /^int Choice::Get_Textual_W()$/
+Choice::SetCollapsed   cp-src/abstract.C       /^void 
Choice::SetCollapsed(char t)$/
+Choice::SetDimensions  cp-src/abstract.C       /^void 
Choice::SetDimensions(void)$/
+Choice::SetFather      cp-src/abstract.C       /^void 
Choice::SetFather(Tree_Node *f)$/
+Choice::SetPosition    cp-src/abstract.C       /^void 
Choice::SetPosition(Coord xx, Coord yy)$/
+Choice::SetTerminalPos cp-src/abstract.C       /^void 
Choice::SetTerminalPos()$/
+Choice::SetTextual     cp-src/abstract.C       /^void Choice::SetTextual(char 
t, char s)$/
+Choice::bex1   cp-src/abstract.H       770
+Choice::bex2   cp-src/abstract.H       770
+Choice::border cp-src/abstract.H       774
+Choice::delta  cp-src/abstract.H       773
+Choice::havebox        cp-src/abstract.H       772
+Choice::xl     cp-src/abstract.H       771
+Choice::yl     cp-src/abstract.H       771
+Choice::yl1    cp-src/abstract.H       771
+Cjava_entries  c-src/etags.c   /^Cjava_entries (FILE *inf)$/
+Cjava_help     c-src/etags.c   551
+Cjava_suffixes c-src/etags.c   549
+Clear/p        ada-src/2ataspri.adb    /^   procedure Clear (Cell : in out 
TAS_Cell) is$/
+Clear/p        ada-src/2ataspri.ads    /^   procedure Clear        (Cell : in 
out TAS_Cell)/
+Cobol_help     c-src/etags.c   558
+Cobol_paragraphs       c-src/etags.c   /^Cobol_paragraphs (FILE *inf)$/
+Cobol_suffixes c-src/etags.c   556
+Comment        cp-src/abstract.H       105
+Comment::Comment       cp-src/abstract.C       /^Comment::Comment()$/
+Comment::SetComment    cp-src/abstract.C       /^void Comment::SetComment(char 
*comment)$/
+Comment::SetDimensions cp-src/abstract.C       /^void 
Comment::SetDimensions(void)$/
+Comment::SetFather     cp-src/abstract.C       /^void 
Comment::SetFather(Tree_Node *f)$/
+Comment::SetPosition   cp-src/abstract.C       /^void 
Comment::SetPosition(Coord xx, Coord yy)$/
+Comment::comm  cp-src/abstract.H       107
+Comment::~Comment      cp-src/abstract.C       /^Comment::~Comment()$/
+CommentAD      php-src/lce_functions.php       70
+CommentAD      php-src/lce_functions.php       /^      function CommentAD($/
+Comment_List   cp-src/abstract.H       122
+Comment_List::Comment_List     cp-src/abstract.C       
/^Comment_List::Comment_List(Comment *el, Comment_Li/
+Comment_List::SetDimensions    cp-src/abstract.C       /^void 
Comment_List::SetDimensions(void)$/
+Comment_List::SetFather        cp-src/abstract.C       /^void 
Comment_List::SetFather(Tree_Node *f)$/
+Comment_List::SetPosition      cp-src/abstract.C       /^void 
Comment_List::SetPosition(Coord xx, Coord yy)/
+Comment_List::elem     cp-src/abstract.H       124
+Comment_List::next     cp-src/abstract.H       125
+Communication  cp-src/abstract.H       627
+Communication::Communication   cp-src/abstract.C       
/^Communication::Communication(ID_Place *i, Tree_Nod/
+Communication::SetCollapsed    cp-src/abstract.C       /^void 
Communication::SetCollapsed(char t)$/
+Communication::SetDimensions   cp-src/abstract.C       /^void 
Communication::SetDimensions(void)$/
+Communication::SetFather       cp-src/abstract.C       /^void 
Communication::SetFather(Tree_Node *f)$/
+Communication::SetPosition     cp-src/abstract.C       /^void 
Communication::SetPosition(Coord xx, Coord yy/
+Communication::SetTextual      cp-src/abstract.C       /^void 
Communication::SetTextual(char t, char)$/
+Communication::experiment_option       cp-src/abstract.H       630
+Communication::gate_identifier cp-src/abstract.H       629
+Communication::hr      cp-src/abstract.H       632
+Communication::xl      cp-src/abstract.H       631
+Communication::yl      cp-src/abstract.H       631
+ConcatT        pas-src/common.pas      /^function ConcatT;(*($/
+Concept Index  tex-src/gzip.texi       /address@hidden Concept Index, , 
Problems, Top$/
+Cond_Signal/p  ada-src/2ataspri.adb    /^   procedure Cond_Signal (Cond : in 
out Condition_/
+Cond_Signal/p  ada-src/2ataspri.ads    /^   procedure Cond_Signal (Cond : in 
out Condition_/
+Cond_Timed_Wait/p      ada-src/2ataspri.adb    /^   procedure Cond_Timed_Wait$/
+Cond_Timed_Wait/p      ada-src/2ataspri.ads    /^   procedure Cond_Timed_Wait$/
+Cond_Wait/p    ada-src/2ataspri.adb    /^   procedure Cond_Wait (Cond : in out 
Condition_Va/
+Cond_Wait/p    ada-src/2ataspri.ads    /^   procedure Cond_Wait (Cond : in out 
Condition_Va/
+Condition_Variable/t   ada-src/2ataspri.ads    /^   type Condition_Variable is 
private;$/
+Condition_Variable/t   ada-src/2ataspri.ads    /^   type Condition_Variable 
is$/
+Configure      pyt-src/server.py       /^class Configure(Frame, ControlEdit):$/
+ConfirmQuit    pyt-src/server.py       /^def ConfirmQuit(frame, context):$/
+ControlEdit    pyt-src/server.py       /^class ControlEdit(Frame):$/
+Controls       pyt-src/server.py       /^class Controls:$/
+CopyTextString pas-src/common.pas      /^function CopyTextString;(*($/
+Copying        tex-src/gzip.texi       /address@hidden Copying, Overview, , 
Top$/
+Cplusplus_entries      c-src/etags.c   /^Cplusplus_entries (FILE *inf)$/
+Cplusplus_help c-src/etags.c   540
+Cplusplus_suffixes     c-src/etags.c   535
+Create_LL_Task/p       ada-src/2ataspri.adb    /^   procedure Create_LL_Task$/
+Create_LL_Task/p       ada-src/2ataspri.ads    /^   procedure Create_LL_Task$/
+Cstar_entries  c-src/etags.c   /^Cstar_entries (FILE *inf)$/
+Cstar_suffixes c-src/etags.c   562
+D      cp-src/fail.C   41
+D::D   cp-src/fail.C   /^              D() : ::A::T2::T(97), x(1066) {}$/
+D::x   cp-src/fail.C   44
+DAEMON_RUNNING c-src/emacs/src/lisp.h  4258
+DAEMON_RUNNING c-src/emacs/src/lisp.h  4262
+DB     cp-src/cfront.H /^#define DB(a) fprintf a$/
+DB     cp-src/cfront.H /^#define DB(a) \/**\/$/
+DEAFUN c.c     /^DEAFUN ("expand-file-name", Fexpand_file_name, Sex/
+DEBUG  c-src/etags.c   84
+DEBUG  c-src/etags.c   85
+DEBUG  c-src/etags.c   87
+DEBUG  objc-src/PackInsp.m     37
+DECLARE_GDB_SYM        c-src/emacs/src/lisp.h  /^#define DECLARE_GDB_SYM(type, 
id) type const id EX/
+DEFAULT_HASH_SIZE      c-src/emacs/src/lisp.h  1940
+DEFAULT_HASH_SIZE      c-src/emacs/src/lisp.h  1940
+DEFAULT_REHASH_SIZE    c-src/emacs/src/lisp.h  1950
+DEFAULT_REHASH_THRESHOLD       c-src/emacs/src/lisp.h  1946
+DEFINED        cp-src/cfront.H 230
+DEFINE_GDB_SYMBOL_BEGIN        c-src/emacs/src/lisp.h  /^# define 
DEFINE_GDB_SYMBOL_BEGIN(type, id) DECLARE/
+DEFINE_GDB_SYMBOL_BEGIN        c-src/emacs/src/lisp.h  /^# define 
DEFINE_GDB_SYMBOL_BEGIN(type, id) extern /
+DEFINE_GDB_SYMBOL_END  c-src/emacs/src/lisp.h  /^# define 
DEFINE_GDB_SYMBOL_END(id) = id;$/
+DEFINE_GDB_SYMBOL_END  c-src/emacs/src/lisp.h  /^# define 
DEFINE_GDB_SYMBOL_END(val) ;$/
+DEFINE_LISP_SYMBOL     c-src/emacs/src/lisp.h  /^#define 
DEFINE_LISP_SYMBOL(name) \\$/
+DEFINE_NON_NIL_Q_SYMBOL_MACROS c-src/emacs/src/lisp.h  755
+DEFSYM c-src/emacs/src/lisp.h  /^#define DEFSYM(sym, name) \/* empty *\/$/
+DEFSYM c-src/emacs/src/lisp.h  /^LISP_MACRO_DEFUN (SYMBOL_CONSTANT_P, int, 
(Lisp_Ob/
+DEFUN  c-src/emacs/src/lisp.h  /^#define DEFUN(lname, fnname, sname, minargs, 
maxar/
+DEFUN  c-src/emacs/src/lisp.h  /^#define DEFUN(lname, fnname, sname, minargs, 
maxar/
+DEFUN_ARGS_0   c-src/emacs/src/lisp.h  714
+DEFUN_ARGS_1   c-src/emacs/src/lisp.h  715
+DEFUN_ARGS_2   c-src/emacs/src/lisp.h  716
+DEFUN_ARGS_3   c-src/emacs/src/lisp.h  717
+DEFUN_ARGS_4   c-src/emacs/src/lisp.h  718
+DEFUN_ARGS_5   c-src/emacs/src/lisp.h  719
+DEFUN_ARGS_6   c-src/emacs/src/lisp.h  721
+DEFUN_ARGS_7   c-src/emacs/src/lisp.h  723
+DEFUN_ARGS_8   c-src/emacs/src/lisp.h  725
+DEFUN_ARGS_MANY        c-src/emacs/src/lisp.h  712
+DEFUN_ARGS_UNEVALLED   c-src/emacs/src/lisp.h  713
+DEFUN_func2    c.c     /^DEFUN_func2()$/
+DEFVAR_BOOL    c-src/emacs/src/lisp.h  /^#define DEFVAR_BOOL(lname, vname, 
doc)                \\$/
+DEFVAR_BUFFER_DEFAULTS c-src/emacs/src/lisp.h  /^#define 
DEFVAR_BUFFER_DEFAULTS(lname, vname, doc)     /
+DEFVAR_INT     c-src/emacs/src/lisp.h  /^#define DEFVAR_INT(lname, vname, doc) 
        \\$/
+DEFVAR_KBOARD  c-src/emacs/src/lisp.h  /^#define DEFVAR_KBOARD(lname, vname, 
doc)                      \\$/
+DEFVAR_LISP    c-src/emacs/src/lisp.h  /^#define DEFVAR_LISP(lname, vname, 
doc)                \\$/
+DEFVAR_LISP_NOPRO      c-src/emacs/src/lisp.h  /^#define 
DEFVAR_LISP_NOPRO(lname, vname, doc)  \\$/
+DEF_SEEN       cp-src/cfront.H 232
+DEL    cp-src/cfront.H /^#define DEL(p) if (p && (p->permanent==0)) p->del(/
+DEVICE_LAST    c-src/h.h       24
+DEVICE_SWP     c-src/h.h       23
+DOS_NT c-src/etags.c   117
+DOS_NT c-src/etags.c   118
+DUMPED c-src/emacs/src/gmalloc.c       80
+Date::minus    cp-src/functions.cpp    /^void Date::minus ( int days , int 
month , int year/
+Date::operator ++      cp-src/functions.cpp    /^Date & Date::operator ++ ( 
void ){$/
+Date::operator +=      cp-src/functions.cpp    /^Date & Date::operator += ( 
int days ){$/
+Date::operator -       cp-src/functions.cpp    /^int Date::operator - ( Date d 
){$/
+Date::operator --      cp-src/functions.cpp    /^Date & Date::operator -- ( 
void ){$/
+Date::operator -=      cp-src/functions.cpp    /^Date & Date::operator -= ( 
int days ){$/
+Date::operator <       cp-src/functions.cpp    /^int Date::operator < ( Date d 
) {$/
+Date::operator =       cp-src/functions.cpp    /^Date & Date::operator = ( 
Date d ){$/
+Date::operator ==      cp-src/functions.cpp    /^int Date::operator == ( Date 
d ) {$/
+Date::operator >       cp-src/functions.cpp    /^int Date::operator > ( Date d 
) {$/
+Date::plus     cp-src/functions.cpp    /^void Date::plus ( int days , int 
month , int year /
+Date::setDate  cp-src/functions.cpp    /^void Date::setDate ( int d , int m , 
int y ){$/
+Date::shift    cp-src/functions.cpp    /^void Date::shift ( void ){\/\/Shift 
this date to pre/
+Debug  cp-src/functions.cpp    /^void Debug ( int lineno, int level, char* 
func , c/
+Definition     cp-src/abstract.H       382
+Definition::Definition cp-src/abstract.C       
/^Definition::Definition(Tree_Node *b, Proc_List *p,/
+Definition::GetPath    cp-src/abstract.H       /^ char *GetPath() { 
return(path);};$/
+Definition::SetDimensions      cp-src/abstract.C       /^void 
Definition::SetDimensions(void)$/
+Definition::SetFather  cp-src/abstract.C       /^void 
Definition::SetFather(Tree_Node *f)$/
+Definition::SetPath    cp-src/abstract.C       /^void Definition::SetPath(char 
*p, char n, int& np,/
+Definition::SetPosition        cp-src/abstract.C       /^void 
Definition::SetPosition(Coord xx, Coord yy)$/
+Definition::bex        cp-src/abstract.H       384
+Definition::data_list  cp-src/abstract.H       386
+Definition::path       cp-src/abstract.H       387
+Definition::process_list       cp-src/abstract.H       385
+Disable        cp-src/abstract.H       746
+Disable::Disable       cp-src/abstract.C       /^Disable::Disable(Tree_Node 
*b1, Tree_Node *b2)$/
+Disable::Get_Textual_H cp-src/abstract.C       /^int Disable::Get_Textual_H()$/
+Disable::Get_Textual_W cp-src/abstract.C       /^int Disable::Get_Textual_W()$/
+Disable::SetCollapsed  cp-src/abstract.C       /^void 
Disable::SetCollapsed(char t)$/
+Disable::SetDimensions cp-src/abstract.C       /^void 
Disable::SetDimensions(void)$/
+Disable::SetFather     cp-src/abstract.C       /^void 
Disable::SetFather(Tree_Node *f)$/
+Disable::SetPosition   cp-src/abstract.C       /^void 
Disable::SetPosition(Coord xx, Coord yy)$/
+Disable::SetTerminalPos        cp-src/abstract.C       /^void 
Disable::SetTerminalPos()$/
+Disable::SetTextual    cp-src/abstract.C       /^void Disable::SetTextual(char 
t, char s)$/
+Disable::bex1  cp-src/abstract.H       748
+Disable::bex2  cp-src/abstract.H       748
+Disable::border        cp-src/abstract.H       751
+Disable::havebox       cp-src/abstract.H       750
+Disable::xl    cp-src/abstract.H       749
+Disable::yl    cp-src/abstract.H       749
+Disable::yl2   cp-src/abstract.H       749
+DisposeANameList       pas-src/common.pas      /^procedure DisposeANameList( $/
+DisposeNameList        pas-src/common.pas      /^procedure DisposeNameList;$/
+ELEM_I c-src/h.h       3
+ELSRC  Makefile        /^ELSRC=$(addprefix .\/el-src\/,TAGTEST.EL 
emacs\/lisp\//
+EMACS_INT      c-src/emacs/src/lisp.h  91
+EMACS_INT      c-src/emacs/src/lisp.h  96
+EMACS_INT      c-src/emacs/src/lisp.h  103
+EMACS_INT_MAX  c-src/emacs/src/lisp.h  93
+EMACS_INT_MAX  c-src/emacs/src/lisp.h  98
+EMACS_INT_MAX  c-src/emacs/src/lisp.h  105
+EMACS_LISP_H   c-src/emacs/src/lisp.h  22
+EMACS_NAME     c-src/etags.c   786
+EMACS_UINT     c-src/emacs/src/lisp.h  92
+EMACS_UINT     c-src/emacs/src/lisp.h  97
+EMACS_UINT     c-src/emacs/src/lisp.h  104
+ENTRY  c-src/sysdep.h  /^#define       ENTRY(name)                             
                              \\$/
+ENUM_BF        c-src/emacs/src/lisp.h  /^#define ENUM_BF(TYPE) unsigned int$/
+ENUM_BF        c-src/emacs/src/lisp.h  /^#define ENUM_BF(TYPE) enum TYPE$/
+ENUM_BF        c-src/emacs/src/lisp.h  /^  ENUM_BF (symbol_redirect) redirect 
: 3;$/
+ENUM_BF        c-src/emacs/src/lisp.h  /^  ENUM_BF (Lisp_Misc_Type) type : 16; 
        \/* = Lisp_M/
+ENUM_BF        c-src/emacs/src/lisp.h  /^  ENUM_BF (Lisp_Misc_Type) type : 16; 
        \/* = Lisp_M/
+ENUM_BF        c-src/emacs/src/lisp.h  /^    ENUM_BF (Lisp_Misc_Type) type : 
16;       \/* = Lisp_/
+ENUM_BF        c-src/emacs/src/lisp.h  /^    ENUM_BF (Lisp_Misc_Type) type : 
16;       \/* = Lisp_/
+ENUM_BF        c-src/emacs/src/lisp.h  /^    ENUM_BF (Lisp_Misc_Type) type : 
16;       \/* = Lisp_/
+ENUM_BF        c-src/emacs/src/lisp.h  /^    ENUM_BF (specbind_tag) kind : 
CHAR_BIT;$/
+ENUM_BF        c-src/emacs/src/lisp.h  /^      ENUM_BF (specbind_tag) kind : 
CHAR_BIT;$/
+ENUM_BF        c-src/emacs/src/lisp.h  /^      ENUM_BF (specbind_tag) kind : 
CHAR_BIT;$/
+ENUM_BF        c-src/emacs/src/lisp.h  /^      ENUM_BF (specbind_tag) kind : 
CHAR_BIT;$/
+ENUM_BF        c-src/emacs/src/lisp.h  /^      ENUM_BF (specbind_tag) kind : 
CHAR_BIT;$/
+ENUM_BF        c-src/emacs/src/lisp.h  /^      ENUM_BF (specbind_tag) kind : 
CHAR_BIT;$/
+ENUM_BF        c-src/emacs/src/lisp.h  /^      ENUM_BF (specbind_tag) kind : 
CHAR_BIT;$/
+EQ     c-src/emacs/src/lisp.h  /^# define EQ(x, y) lisp_h_EQ (x, y)$/
+EQUAL  y-src/cccp.c    12
+ERLSRC Makefile        /^ERLSRC=$(addprefix .\/erl-src\/,gs_dialog.erl lines./
+ERROR  y-src/parse.y   303
+ERROR  parse.y 303
+ERROR  y-src/cccp.c    9
+ETAGS  Makefile        /^ETAGS: FRC ${infiles}$/
+ETAGS_PROG     Makefile        /^ETAGS_PROG=..\/..\/lib-src\/etags$/
+EXFUN  c-src/emacs/src/lisp.h  /^#define EXFUN(fnname, maxargs) \\$/
+EXTERNALLY_VISIBLE     c-src/emacs/src/keyboard.c      3497
+EXTERNALLY_VISIBLE     c-src/emacs/src/keyboard.c      4372
+EmptyNmStr     pas-src/common.pas      /^function EmptyNmStr(* : 
NameString*);$/
+Enable cp-src/abstract.H       723
+Enable::Enable cp-src/abstract.C       /^Enable::Enable(Tree_Node *b1, ID_List 
*g_i_l, Tree/
+Enable::Get_Textual_H  cp-src/abstract.C       /^int Enable::Get_Textual_H()$/
+Enable::Get_Textual_W  cp-src/abstract.C       /^int Enable::Get_Textual_W()$/
+Enable::SetCollapsed   cp-src/abstract.C       /^void 
Enable::SetCollapsed(char t)$/
+Enable::SetDimensions  cp-src/abstract.C       /^void 
Enable::SetDimensions(void)$/
+Enable::SetFather      cp-src/abstract.C       /^void 
Enable::SetFather(Tree_Node *f)$/
+Enable::SetPosition    cp-src/abstract.C       /^void 
Enable::SetPosition(Coord xx, Coord yy)$/
+Enable::SetTerminalPos cp-src/abstract.C       /^void 
Enable::SetTerminalPos()$/
+Enable::SetTextual     cp-src/abstract.C       /^void Enable::SetTextual(char 
t, char s)$/
+Enable::Yclose cp-src/abstract.H       727
+Enable::bex1   cp-src/abstract.H       725
+Enable::bex2   cp-src/abstract.H       725
+Enable::border cp-src/abstract.H       729
+Enable::gate_id_list   cp-src/abstract.H       726
+Enable::havebox        cp-src/abstract.H       728
+Enable::xid    cp-src/abstract.H       727
+Enable::xl     cp-src/abstract.H       727
+Enable::xl2    cp-src/abstract.H       727
+Enable::yid    cp-src/abstract.H       727
+Enable::yl1    cp-src/abstract.H       727
+Enable::yl2    cp-src/abstract.H       727
+Environment    tex-src/gzip.texi       /address@hidden Environment, Tapes, 
Advanced usage, Top$/
+Equality       cp-src/abstract.H       473
+Equality::Equality     cp-src/abstract.C       /^Equality::Equality()$/
+Equality::Equality     cp-src/abstract.C       /^Equality::Equality(Tree_Node 
*ex1, Tree_Node *ex2)/
+Equality::SetCollapsed cp-src/abstract.C       /^void 
Equality::SetCollapsed(char t)$/
+Equality::SetDimensions        cp-src/abstract.C       /^void 
Equality::SetDimensions(void)$/
+Equality::SetFather    cp-src/abstract.C       /^void 
Equality::SetFather(Tree_Node *f)$/
+Equality::SetPosition  cp-src/abstract.C       /^void 
Equality::SetPosition(Coord xx, Coord yy)$/
+Equality::express1     cp-src/abstract.H       475
+Equality::express2     cp-src/abstract.H       476
+Erlang_functions       c-src/etags.c   /^Erlang_functions (FILE *inf)$/
+Erlang_help    c-src/etags.c   567
+Erlang_suffixes        c-src/etags.c   565
+ErrStrToNmStr  pas-src/common.pas      /^function ErrStrToNmStr;(*($/
+Error_Information/t    ada-src/2ataspri.ads    /^   type Error_Information is 
new Interfaces.C.POSI/
+Exclam cp-src/abstract.H       578
+Exclam::Exclam cp-src/abstract.C       /^Exclam::Exclam(Tree_Node *v_e)$/
+Exclam::SetCollapsed   cp-src/abstract.C       /^void 
Exclam::SetCollapsed(char t)$/
+Exclam::SetDimensions  cp-src/abstract.C       /^void 
Exclam::SetDimensions(void)$/
+Exclam::SetFather      cp-src/abstract.C       /^void 
Exclam::SetFather(Tree_Node *f)$/
+Exclam::SetPosition    cp-src/abstract.C       /^void 
Exclam::SetPosition(Coord xx, Coord yy)$/
+Exclam::value_exp      cp-src/abstract.H       580
+Exit   cp-src/abstract.H       407
+Exit::Exit     cp-src/abstract.C       /^Exit::Exit(ID_List *sl)$/
+Exit::SetDimensions    cp-src/abstract.C       /^void 
Exit::SetDimensions(void)$/
+Exit::SetFather        cp-src/abstract.C       /^void 
Exit::SetFather(Tree_Node *f)$/
+Exit::SetPosition      cp-src/abstract.C       /^void Exit::SetPosition(Coord 
x1, Coord y1, Coord x/
+Exit::sort_list        cp-src/abstract.H       409
+Exit_Bex       cp-src/abstract.H       810
+Exit_Bex::Exit_Bex     cp-src/abstract.C       
/^Exit_Bex::Exit_Bex(Exit_Entry_List *l)$/
+Exit_Bex::SetCollapsed cp-src/abstract.C       /^void 
Exit_Bex::SetCollapsed(char t)$/
+Exit_Bex::SetDimensions        cp-src/abstract.C       /^void 
Exit_Bex::SetDimensions(void)$/
+Exit_Bex::SetFather    cp-src/abstract.C       /^void 
Exit_Bex::SetFather(Tree_Node *f)$/
+Exit_Bex::SetPosition  cp-src/abstract.C       /^void 
Exit_Bex::SetPosition(Coord xx, Coord yy)$/
+Exit_Bex::SetTextual   cp-src/abstract.C       /^void 
Exit_Bex::SetTextual(char t, char s)$/
+Exit_Bex::Xclose       cp-src/abstract.H       813
+Exit_Bex::Xopen        cp-src/abstract.H       813
+Exit_Bex::border       cp-src/abstract.H       815
+Exit_Bex::entry_list   cp-src/abstract.H       812
+Exit_Bex::havebox      cp-src/abstract.H       814
+Exit_Entry     cp-src/abstract.H       165
+Exit_Entry::Exit_Entry cp-src/abstract.C       /^Exit_Entry::Exit_Entry() $/
+Exit_Entry::SetDimensions      cp-src/abstract.C       /^void 
Exit_Entry::SetDimensions(void)$/
+Exit_Entry::SetFather  cp-src/abstract.C       /^void 
Exit_Entry::SetFather(Tree_Node *f)$/
+Exit_Entry::SetPosition        cp-src/abstract.C       /^void 
Exit_Entry::SetPosition(Coord xx, Coord yy)$/
+Exit_Entry_List        cp-src/abstract.H       179
+Exit_Entry_List::Exit_Entry_List       cp-src/abstract.C       
/^Exit_Entry_List::Exit_Entry_List(Tree_Node *el, Ex/
+Exit_Entry_List::SetCollapsed  cp-src/abstract.C       /^void 
Exit_Entry_List::SetCollapsed(char t)$/
+Exit_Entry_List::SetDimensions cp-src/abstract.C       /^void 
Exit_Entry_List::SetDimensions(void)$/
+Exit_Entry_List::SetFather     cp-src/abstract.C       /^void 
Exit_Entry_List::SetFather(Tree_Node *f)$/
+Exit_Entry_List::SetPosition   cp-src/abstract.C       /^void 
Exit_Entry_List::SetPosition(Coord xx, Coord /
+Exit_Entry_List::elem  cp-src/abstract.H       181
+Exit_Entry_List::next  cp-src/abstract.H       182
+Exit_LL_Task/p ada-src/2ataspri.adb    /^   procedure Exit_LL_Task is$/
+Exit_LL_Task/p ada-src/2ataspri.ads    /^   procedure Exit_LL_Task;$/
+Exper_Off      cp-src/abstract.H       195
+Exper_Off::Exper_Off   cp-src/abstract.C       /^Exper_Off::Exper_Off()$/
+Exper_Off::SetDimensions       cp-src/abstract.C       /^void 
Exper_Off::SetDimensions(void)$/
+Exper_Off::SetFather   cp-src/abstract.C       /^void 
Exper_Off::SetFather(Tree_Node *f)$/
+Exper_Off::SetPosition cp-src/abstract.C       /^void 
Exper_Off::SetPosition(Coord xx, Coord yy)$/
+Exper_Off_List cp-src/abstract.H       207
+Exper_Off_List::Exper_Off_List cp-src/abstract.C       
/^Exper_Off_List::Exper_Off_List(Exper_Off *el, Expe/
+Exper_Off_List::SetCollapsed   cp-src/abstract.C       /^void 
Exper_Off_List::SetCollapsed(char t)$/
+Exper_Off_List::SetDimensions  cp-src/abstract.C       /^void 
Exper_Off_List::SetDimensions(void)$/
+Exper_Off_List::SetFather      cp-src/abstract.C       /^void 
Exper_Off_List::SetFather(Tree_Node *f)$/
+Exper_Off_List::SetPosition    cp-src/abstract.C       /^void 
Exper_Off_List::SetPosition(Coord xx, Coord y/
+Exper_Off_List::elem   cp-src/abstract.H       209
+Exper_Off_List::next   cp-src/abstract.H       210
+Experiment     cp-src/abstract.H       558
+Experiment::Experiment cp-src/abstract.C       
/^Experiment::Experiment(Exper_Off_List *e_of_l, Tre/
+Experiment::GetGuard   cp-src/abstract.H       /^ Tree_Node *GetGuard(void) { 
return(guard_option);/
+Experiment::SetCollapsed       cp-src/abstract.C       /^void 
Experiment::SetCollapsed(char t)$/
+Experiment::SetDimensions      cp-src/abstract.C       /^void 
Experiment::SetDimensions(void)$/
+Experiment::SetFather  cp-src/abstract.C       /^void 
Experiment::SetFather(Tree_Node *f)$/
+Experiment::SetPosition        cp-src/abstract.C       /^void 
Experiment::SetPosition(Coord xx, Coord yy)$/
+Experiment::SetTextual cp-src/abstract.C       /^void 
Experiment::SetTextual(char t, char)$/
+Experiment::exp_offer_list     cp-src/abstract.H       560
+Experiment::guard_option       cp-src/abstract.H       561
+ExtractCommentInfo     pas-src/common.pas      /^procedure ExtractCommentInfo; 
(*($/
+FASTCFLAGS     make-src/Makefile       55
+FILTER make-src/Makefile       58
+FINALIZERP     c-src/emacs/src/lisp.h  /^FINALIZERP (Lisp_Object x)$/
+FINAL_FREE_BLOCKS      c-src/emacs/src/gmalloc.c       135
+FIXNUM_BITS    c-src/emacs/src/lisp.h  252
+FIXNUM_OVERFLOW_P      c-src/emacs/src/lisp.h  /^#define FIXNUM_OVERFLOW_P(i) 
\\$/
+FIXNUM_OVERFLOW_P      c-src/emacs/src/lisp.h  /^LISP_MACRO_DEFUN (EQ, bool, 
(Lisp_Object x, Lisp_O/
+FLOATP c-src/emacs/src/lisp.h  /^# define FLOATP(x) lisp_h_FLOATP (x)$/
+FLOAT_TO_STRING_BUFSIZE        c-src/emacs/src/lisp.h  3927
+FORTHSRC       Makefile        /^FORTHSRC=$(addprefix 
.\/forth-src\/,test-forth.fth)$/
+FOR_EACH_ALIST_VALUE   c-src/emacs/src/lisp.h  /^#define 
FOR_EACH_ALIST_VALUE(head_var, list_var, v/
+FOR_EACH_TAIL  c-src/emacs/src/lisp.h  /^#define FOR_EACH_TAIL(hare, list, 
tortoise, n)        \\$/
+FRAMEP c-src/emacs/src/lisp.h  /^FRAMEP (Lisp_Object a)$/
+FRC    Makefile        /^FRC:;$/
+FREEFLOOD      c-src/emacs/src/gmalloc.c       1858
+FSRC   Makefile        /^FSRC=$(addprefix .\/f-src\/,entry.for entry.strange_/
+FUDGE111       cp-src/cfront.H 791
+FUN0   y-src/parse.y   /^yylex FUN0()$/
+FUN0   parse.y /^yylex FUN0()$/
+FUN1   y-src/parse.y   /^yyerror FUN1(char *, s)$/
+FUN1   y-src/parse.y   /^str_to_col FUN1(char **,str)$/
+FUN1   parse.y /^yyerror FUN1(char *, s)$/
+FUN1   parse.y /^str_to_col FUN1(char **,str)$/
+FUN2   y-src/parse.y   /^make_list FUN2(YYSTYPE, car, YYSTYPE, cdr)$/
+FUN2   y-src/parse.y   /^parse_cell_or_range FUN2(char **,ptr, struct rng */
+FUN2   parse.y /^make_list FUN2(YYSTYPE, car, YYSTYPE, cdr)$/
+FUN2   parse.y /^parse_cell_or_range FUN2(char **,ptr, struct rng */
+FUNCTIONP      c-src/emacs/src/lisp.h  /^FUNCTIONP (Lisp_Object obj)$/
+FUNCTION_KEY_OFFSET    c-src/emacs/src/keyboard.c      4766
+FUNCTION_KEY_OFFSET    c-src/emacs/src/keyboard.c      5061
+F_getit        c-src/etags.c   /^F_getit (FILE *inf)$/
+F_takeprec     c-src/etags.c   /^F_takeprec (void)$/
+Fails_t        c-src/h.h       5
+Finalize_Cond/p        ada-src/2ataspri.adb    /^   procedure Finalize_Cond 
(Cond : in out Conditio/
+Finalize_Cond/p        ada-src/2ataspri.ads    /^   procedure Finalize_Cond 
(Cond : in out Conditio/
+Finalize_Lock/p        ada-src/2ataspri.adb    /^   procedure Finalize_Lock (L 
: in out Lock) is$/
+Finalize_Lock/p        ada-src/2ataspri.ads    /^   procedure Finalize_Lock (L 
: in out Lock);$/
+Finalize_TAS_Cell/p    ada-src/2ataspri.adb    /^   procedure 
Finalize_TAS_Cell (Cell : in out TAS_/
+Finalize_TAS_Cell/p    ada-src/2ataspri.ads    /^   procedure 
Finalize_TAS_Cell   (Cell : in out TA/
+First100Chars  pas-src/common.pas      /^procedure First100Chars; (*($/
+Foo    perl-src/kai-test.pl    /^package Foo;$/
+Foo::Bar       perl-src/kai-test.pl    /^package Foo::Bar;$/
+Foo::Bar::f6   perl-src/kai-test.pl    /^sub f6 {$/
+Foo::f3        perl-src/kai-test.pl    /^sub f3 {$/
+Forth_help     c-src/etags.c   573
+Forth_suffixes c-src/etags.c   571
+Forth_words    c-src/etags.c   /^Forth_words (FILE *inf)$/
+Fortran_functions      c-src/etags.c   /^Fortran_functions (FILE *inf)$/
+Fortran_help   c-src/etags.c   579
+Fortran_suffixes       c-src/etags.c   577
+GCALIGNED      c-src/emacs/src/lisp.h  288
+GCALIGNED      c-src/emacs/src/lisp.h  290
+GCALIGNMENT    c-src/emacs/src/lisp.h  243
+GCPRO1 c-src/emacs/src/lisp.h  /^#define GCPRO1(varname) ((void) gcpro1)$/
+GCPRO1 c-src/emacs/src/lisp.h  /^#define GCPRO1(a)                             
                        \\$/
+GCPRO1 c-src/emacs/src/lisp.h  /^#define GCPRO1(a)                             
                        \\$/
+GCPRO2 c-src/emacs/src/lisp.h  /^#define GCPRO2(varname1, varname2) ((void) 
gcpro2,/
+GCPRO2 c-src/emacs/src/lisp.h  /^#define GCPRO2(a, b)                          
                        \\$/
+GCPRO2 c-src/emacs/src/lisp.h  /^#define GCPRO2(a, b)                          
                        \\$/
+GCPRO3 c-src/emacs/src/lisp.h  /^#define GCPRO3(varname1, varname2, varname3) 
\\$/
+GCPRO3 c-src/emacs/src/lisp.h  /^#define GCPRO3(a, b, c)                       
                                \\$/
+GCPRO3 c-src/emacs/src/lisp.h  /^#define GCPRO3(a, b, c)                       
                                \\$/
+GCPRO4 c-src/emacs/src/lisp.h  /^#define GCPRO4(varname1, varname2, varname3, 
varna/
+GCPRO4 c-src/emacs/src/lisp.h  /^#define GCPRO4(a, b, c, d)                    
                        \\$/
+GCPRO4 c-src/emacs/src/lisp.h  /^#define GCPRO4(a, b, c, d)                    
                        \\$/
+GCPRO5 c-src/emacs/src/lisp.h  /^#define GCPRO5(varname1, varname2, varname3, 
varna/
+GCPRO5 c-src/emacs/src/lisp.h  /^#define GCPRO5(a, b, c, d, e)                 
                        \\$/
+GCPRO5 c-src/emacs/src/lisp.h  /^#define GCPRO5(a, b, c, d, e)                 
                        \\$/
+GCPRO6 c-src/emacs/src/lisp.h  /^#define GCPRO6(varname1, varname2, varname3, 
varna/
+GCPRO6 c-src/emacs/src/lisp.h  /^#define GCPRO6(a, b, c, d, e, f)              
                        \\$/
+GCPRO6 c-src/emacs/src/lisp.h  /^#define GCPRO6(a, b, c, d, e, f)              
                        \\$/
+GCPRO7 c-src/emacs/src/lisp.h  /^#define GCPRO7(a, b, c, d, e, f, g) (GCPRO6 
(a, b,/
+GCPRO7 c-src/emacs/src/lisp.h  /^#define GCPRO7(a, b, c, d, e, f, g)           
                        \\$/
+GCPRO7 c-src/emacs/src/lisp.h  /^#define GCPRO7(a, b, c, d, e, f, g)           
                        \\$/
+GCTYPEBITS     c-src/emacs/src/lisp.h  67
+GCTYPEBITS     c-src/emacs/src/lisp.h  /^DEFINE_GDB_SYMBOL_BEGIN (int, 
GCTYPEBITS)$/
+GC_MAKE_GCPROS_NOOPS   c-src/emacs/src/lisp.h  3172
+GC_MARK_STACK  c-src/emacs/src/lisp.h  3177
+GC_MARK_STACK_CHECK_GCPROS     c-src/emacs/src/lisp.h  3173
+GC_USE_GCPROS_AS_BEFORE        c-src/emacs/src/lisp.h  3171
+GC_USE_GCPROS_CHECK_ZOMBIES    c-src/emacs/src/lisp.h  3174
+GE     y-src/parse.c   8
+GENERIC_PTR    cccp.y  56
+GENERIC_PTR    cccp.y  58
+GENERIC_PTR    y-src/cccp.y    56
+GENERIC_PTR    y-src/cccp.y    58
+GEQ    y-src/cccp.c    15
+GROW_RAW_KEYBUF        c-src/emacs/src/keyboard.c      119
+Gate_Decl      cp-src/abstract.H       223
+Gate_Decl::Gate_Decl   cp-src/abstract.C       /^Gate_Decl::Gate_Decl(ID_List 
*g_id_l1, ID_List *g_/
+Gate_Decl::SetCollapsed        cp-src/abstract.C       /^void 
Gate_Decl::SetCollapsed(char t)$/
+Gate_Decl::SetDimensions       cp-src/abstract.C       /^void 
Gate_Decl::SetDimensions(void)$/
+Gate_Decl::SetFather   cp-src/abstract.C       /^void 
Gate_Decl::SetFather(Tree_Node *f)$/
+Gate_Decl::SetPosition cp-src/abstract.C       /^void 
Gate_Decl::SetPosition(Coord xx, Coord yy)$/
+Gate_Decl::gate_id_list1       cp-src/abstract.H       225
+Gate_Decl::gate_id_list2       cp-src/abstract.H       226
+Gate_Decl_List cp-src/abstract.H       239
+Gate_Decl_List::Gate_Decl_List cp-src/abstract.C       
/^Gate_Decl_List::Gate_Decl_List(Gate_Decl *el, Gate/
+Gate_Decl_List::SetCollapsed   cp-src/abstract.C       /^void 
Gate_Decl_List::SetCollapsed(char t)$/
+Gate_Decl_List::SetDimensions  cp-src/abstract.C       /^void 
Gate_Decl_List::SetDimensions(void)$/
+Gate_Decl_List::SetFather      cp-src/abstract.C       /^void 
Gate_Decl_List::SetFather(Tree_Node *f)$/
+Gate_Decl_List::SetPosition    cp-src/abstract.C       /^void 
Gate_Decl_List::SetPosition(Coord xx, Coord y/
+Gate_Decl_List::elem   cp-src/abstract.H       241
+Gate_Decl_List::next   cp-src/abstract.H       242
+GatherControls pyt-src/server.py       /^    def GatherControls(self):$/
+Gen_Paral      cp-src/abstract.H       652
+Gen_Paral::Gen_Paral   cp-src/abstract.C       /^Gen_Paral::Gen_Paral(ID_List 
*g_i_l)$/
+Gen_Paral::HideGate    cp-src/abstract.H       /^ void HideGate() { ((ID_List 
*)gate_id_list)->Hide/
+Gen_Paral::SetCollapsed        cp-src/abstract.C       /^void 
Gen_Paral::SetCollapsed(char t)$/
+Gen_Paral::SetDimensions       cp-src/abstract.C       /^void 
Gen_Paral::SetDimensions(void)$/
+Gen_Paral::SetFather   cp-src/abstract.C       /^void 
Gen_Paral::SetFather(Tree_Node *f)$/
+Gen_Paral::SetPosition cp-src/abstract.C       /^void 
Gen_Paral::SetPosition(Coord xx, Coord yy)$/
+Gen_Paral::Xclose      cp-src/abstract.H       655
+Gen_Paral::border      cp-src/abstract.H       656
+Gen_Paral::gate_id_list        cp-src/abstract.H       654
+GetLayerByName lua-src/allegro.lua     /^function GetLayerByName (name)$/
+GetNameList    pas-src/common.pas      /^function GetNameList; (* : 
BinNodePointer;*)$/
+GetNewNameListNode     pas-src/common.pas      /^function 
GetNewNameListNode;(*($/
+GetTextRef     pas-src/common.pas      /^function GetTextRef;(*($/
+GetUniqueLayerName     lua-src/allegro.lua     /^function GetUniqueLayerName 
()$/
+Get_Own_Priority/f     ada-src/2ataspri.adb    /^   function Get_Own_Priority 
return System.Any_Pri/
+Get_Own_Priority/f     ada-src/2ataspri.ads    /^   function Get_Own_Priority 
return System.Any_Pri/
+Get_Priority/f ada-src/2ataspri.adb    /^   function Get_Priority (T : 
TCB_Ptr) return Syst/
+Get_Priority/f ada-src/2ataspri.ads    /^   function Get_Priority (T : 
TCB_Ptr) return Syst/
+Guard  cp-src/abstract.H       524
+Guard::Guard   cp-src/abstract.C       /^Guard::Guard(Equality *eq)$/
+Guard::SetCollapsed    cp-src/abstract.C       /^void Guard::SetCollapsed(char 
t)$/
+Guard::SetDimensions   cp-src/abstract.C       /^void 
Guard::SetDimensions(void)$/
+Guard::SetFather       cp-src/abstract.C       /^void 
Guard::SetFather(Tree_Node *f)$/
+Guard::SetPosition     cp-src/abstract.C       /^void Guard::SetPosition(Coord 
xx, Coord yy)$/
+Guard::equality        cp-src/abstract.H       526
+Guarded        cp-src/abstract.H       848
+Guarded::Guarded       cp-src/abstract.C       /^Guarded::Guarded(Equality 
*eq, Tree_Node *b)$/
+Guarded::SetCollapsed  cp-src/abstract.C       /^void 
Guarded::SetCollapsed(char t)$/
+Guarded::SetDimensions cp-src/abstract.C       /^void 
Guarded::SetDimensions(void)$/
+Guarded::SetFather     cp-src/abstract.C       /^void 
Guarded::SetFather(Tree_Node *f)$/
+Guarded::SetPosition   cp-src/abstract.C       /^void 
Guarded::SetPosition(Coord xx, Coord yy)$/
+Guarded::SetTextual    cp-src/abstract.C       /^void Guarded::SetTextual(char 
t, char s)$/
+Guarded::Xclose        cp-src/abstract.H       852
+Guarded::bex   cp-src/abstract.H       851
+Guarded::border        cp-src/abstract.H       853
+Guarded::equality      cp-src/abstract.H       850
+HASH_HASH      c-src/emacs/src/lisp.h  /^HASH_HASH (struct Lisp_Hash_Table *h, 
ptrdiff_t id/
+HASH_INDEX     c-src/emacs/src/lisp.h  /^HASH_INDEX (struct Lisp_Hash_Table 
*h, ptrdiff_t i/
+HASH_KEY       c-src/emacs/src/lisp.h  /^HASH_KEY (struct Lisp_Hash_Table *h, 
ptrdiff_t idx/
+HASH_NEXT      c-src/emacs/src/lisp.h  /^HASH_NEXT (struct Lisp_Hash_Table *h, 
ptrdiff_t id/
+HASH_TABLE_P   c-src/emacs/src/lisp.h  /^HASH_TABLE_P (Lisp_Object a)$/
+HASH_TABLE_SIZE        c-src/emacs/src/lisp.h  /^HASH_TABLE_SIZE (struct 
Lisp_Hash_Table *h)$/
+HASH_VALUE     c-src/emacs/src/lisp.h  /^HASH_VALUE (struct Lisp_Hash_Table 
*h, ptrdiff_t i/
+HAVE_NTGUI     c-src/etags.c   116
+HEAP   c-src/emacs/src/gmalloc.c       131
+HTMLSRC        Makefile        /^HTMLSRC=$(addprefix 
.\/html-src\/,softwarelibero.htm/
+HTML_help      c-src/etags.c   584
+HTML_labels    c-src/etags.c   /^HTML_labels (FILE *inf)$/
+HTML_suffixes  c-src/etags.c   582
+Half_Container cp-src/abstract.H       287
+Half_Container::Half_Container cp-src/abstract.C       
/^Half_Container::Half_Container(ID_List *g_l)$/
+Half_Container::SetCollapsed   cp-src/abstract.C       /^void 
Half_Container::SetCollapsed(char t)$/
+Half_Container::SetDimensions  cp-src/abstract.C       /^void 
Half_Container::SetDimensions(void)$/
+Half_Container::SetFather      cp-src/abstract.C       /^void 
Half_Container::SetFather(Tree_Node *f)$/
+Half_Container::SetPosition    cp-src/abstract.C       /^void 
Half_Container::SetPosition(Coord xx, Coord y/
+Half_Container::gate_list      cp-src/abstract.H       289
+Hide   cp-src/abstract.H       829
+Hide::Hide     cp-src/abstract.C       /^Hide::Hide(ID_List *g_l, Tree_Node 
*b)$/
+Hide::SetCollapsed     cp-src/abstract.C       /^void Hide::SetCollapsed(char 
t)$/
+Hide::SetDimensions    cp-src/abstract.C       /^void 
Hide::SetDimensions(void)$/
+Hide::SetFather        cp-src/abstract.C       /^void 
Hide::SetFather(Tree_Node *f)$/
+Hide::SetPosition      cp-src/abstract.C       /^void Hide::SetPosition(Coord 
xx, Coord yy)$/
+Hide::SetTextual       cp-src/abstract.C       /^void Hide::SetTextual(char t, 
char s)$/
+Hide::bex      cp-src/abstract.H       832
+Hide::border   cp-src/abstract.H       833
+Hide::gate_list        cp-src/abstract.H       831
+Hide::yl       cp-src/abstract.H       834
+ID_List        cp-src/abstract.H       47
+ID_List::BuildSigSorts cp-src/abstract.C       /^void 
ID_List::BuildSigSorts(char bubble, Signature/
+ID_List::ClearIDs      cp-src/abstract.C       /^void ID_List::ClearIDs(void)$/
+ID_List::GetCardinality        cp-src/abstract.C       /^int 
ID_List::GetCardinality(int c)$/
+ID_List::HideMe        cp-src/abstract.C       /^void ID_List::HideMe(void)$/
+ID_List::ID_List       cp-src/abstract.C       /^ID_List::ID_List(ID_Place 
*el, ID_List *nxt)$/
+ID_List::SetAlignement cp-src/abstract.C       /^void 
ID_List::SetAlignement(char a)$/
+ID_List::SetCollapsed  cp-src/abstract.C       /^void 
ID_List::SetCollapsed(char t)$/
+ID_List::SetDimensions cp-src/abstract.C       /^void 
ID_List::SetDimensions(void)$/
+ID_List::SetFather     cp-src/abstract.C       /^void 
ID_List::SetFather(Tree_Node *f)$/
+ID_List::SetPosition   cp-src/abstract.C       /^void 
ID_List::SetPosition(Coord xx, Coord yy)$/
+ID_List::SetRBubble    cp-src/abstract.C       /^void ID_List::SetRBubble(char 
r)$/
+ID_List::SetVisible    cp-src/abstract.C       /^void ID_List::SetVisible(char 
v)$/
+ID_List::elem  cp-src/abstract.H       49
+ID_List::next  cp-src/abstract.H       50
+ID_Place       cp-src/abstract.H       23
+ID_Place::ClearID      cp-src/abstract.C       /^void ID_Place::ClearID(void)$/
+ID_Place::GetIdent     cp-src/abstract.H       /^ char *GetIdent() 
{return(str);};$/
+ID_Place::GetRBubble   cp-src/abstract.H       /^ char GetRBubble(void) { 
return(RBubble); };$/
+ID_Place::ID_Place     cp-src/abstract.C       /^ID_Place::ID_Place()$/
+ID_Place::RBubble      cp-src/abstract.H       26
+ID_Place::SetDimensions        cp-src/abstract.C       /^void 
ID_Place::SetDimensions(void)$/
+ID_Place::SetFather    cp-src/abstract.C       /^void 
ID_Place::SetFather(Tree_Node *f)$/
+ID_Place::SetIdent     cp-src/abstract.C       /^void ID_Place::SetIdent(char 
*identifier)$/
+ID_Place::SetPosition  cp-src/abstract.C       /^void 
ID_Place::SetPosition(Coord xx, Coord yy)$/
+ID_Place::SetRBubble   cp-src/abstract.H       /^ void SetRBubble(char r) { 
RBubble = r; };$/
+ID_Place::SetVisible   cp-src/abstract.C       /^void 
ID_Place::SetVisible(char v)$/
+ID_Place::str  cp-src/abstract.H       25
+ID_Place::~ID_Place    cp-src/abstract.C       /^ID_Place::~ID_Place()$/
+IEEE_FLOATING_POINT    c-src/emacs/src/lisp.h  2415
+IMAGEP c-src/emacs/src/lisp.h  /^IMAGEP (Lisp_Object x)$/
+INPUT_EVENT_POS_MAX    c-src/emacs/src/keyboard.c      3698
+INPUT_EVENT_POS_MIN    c-src/emacs/src/keyboard.c      3701
+INSERT_TREE_NODE       pas-src/common.pas      /^procedure 
INSERT_TREE_NODE;(*( $/
+INSTANTIATE_MDIAGARRAY_FRIENDS cp-src/MDiagArray2.h    /^#define 
INSTANTIATE_MDIAGARRAY_FRIENDS(T) \\$/
+INT    c-src/h.h       32
+INT    y-src/cccp.c    6
+INTEGERP       c-src/emacs/src/lisp.h  /^# define INTEGERP(x) lisp_h_INTEGERP 
(x)$/
+INTEGER_TO_CONS        c-src/emacs/src/lisp.h  /^#define INTEGER_TO_CONS(i)    
                                    \\$/
+INTERVAL       c-src/emacs/src/lisp.h  1149
+INTMASK        c-src/emacs/src/lisp.h  437
+INTTYPEBITS    c-src/emacs/src/lisp.h  249
+INT_BIT        c-src/emacs/src/gmalloc.c       124
+INT_TYPE_SIZE  cccp.y  91
+INT_TYPE_SIZE  y-src/cccp.y    91
+IN_ERROR       cp-src/cfront.H 234
+ISALNUM        c-src/etags.c   /^#define ISALNUM(c)    isalnum (CHAR (c))$/
+ISALPHA        c-src/etags.c   /^#define ISALPHA(c)    isalpha (CHAR (c))$/
+ISDIGIT        c-src/etags.c   /^#define ISDIGIT(c)    isdigit (CHAR (c))$/
+ISLOWER        c-src/etags.c   /^#define ISLOWER(c)    islower (CHAR (c))$/
+ISO_FUNCTION_KEY_OFFSET        c-src/emacs/src/keyboard.c      5149
+ISUPPER        c-src/etags.c   /^# define ISUPPER(c)   isupper (CHAR (c))$/
+IS_DAEMON      c-src/emacs/src/lisp.h  4257
+IS_DAEMON      c-src/emacs/src/lisp.h  4261
+Id_Decl        cp-src/abstract.H       73
+Id_Decl::Id_Decl       cp-src/abstract.C       /^Id_Decl::Id_Decl(ID_List *l, 
ID_Place *s)$/
+Id_Decl::SetCollapsed  cp-src/abstract.C       /^void 
Id_Decl::SetCollapsed(char t)$/
+Id_Decl::SetDimensions cp-src/abstract.C       /^void 
Id_Decl::SetDimensions(void)$/
+Id_Decl::SetFather     cp-src/abstract.C       /^void 
Id_Decl::SetFather(Tree_Node *f)$/
+Id_Decl::SetPosition   cp-src/abstract.C       /^void 
Id_Decl::SetPosition(Coord xx, Coord yy)$/
+Id_Decl::id_list       cp-src/abstract.H       75
+Id_Decl::sort_id       cp-src/abstract.H       76
+Id_Decl_List   cp-src/abstract.H       89
+Id_Decl_List::Id_Decl_List     cp-src/abstract.C       
/^Id_Decl_List::Id_Decl_List(Id_Decl *el, Id_Decl_Li/
+Id_Decl_List::SetCollapsed     cp-src/abstract.C       /^void 
Id_Decl_List::SetCollapsed(char t)$/
+Id_Decl_List::SetDimensions    cp-src/abstract.C       /^void 
Id_Decl_List::SetDimensions(void)$/
+Id_Decl_List::SetFather        cp-src/abstract.C       /^void 
Id_Decl_List::SetFather(Tree_Node *f)$/
+Id_Decl_List::SetPosition      cp-src/abstract.C       /^void 
Id_Decl_List::SetPosition(Coord xx, Coord yy)/
+Id_Decl_List::elem     cp-src/abstract.H       91
+Id_Decl_List::next     cp-src/abstract.H       92
+Ident_Eq       cp-src/abstract.H       255
+Ident_Eq::Ident_Eq     cp-src/abstract.C       /^Ident_Eq::Ident_Eq(Id_Decl 
*idd, Value_Expr *ex)$/
+Ident_Eq::SetCollapsed cp-src/abstract.C       /^void 
Ident_Eq::SetCollapsed(char t)$/
+Ident_Eq::SetDimensions        cp-src/abstract.C       /^void 
Ident_Eq::SetDimensions(void)$/
+Ident_Eq::SetFather    cp-src/abstract.C       /^void 
Ident_Eq::SetFather(Tree_Node *f)$/
+Ident_Eq::SetPosition  cp-src/abstract.C       /^void 
Ident_Eq::SetPosition(Coord xx, Coord yy)$/
+Ident_Eq::expr cp-src/abstract.H       258
+Ident_Eq::iddecl       cp-src/abstract.H       257
+Ident_Eq_List  cp-src/abstract.H       271
+Ident_Eq_List::Ident_Eq_List   cp-src/abstract.C       
/^Ident_Eq_List::Ident_Eq_List(Ident_Eq *el, Ident_E/
+Ident_Eq_List::SetCollapsed    cp-src/abstract.C       /^void 
Ident_Eq_List::SetCollapsed(char t)$/
+Ident_Eq_List::SetDimensions   cp-src/abstract.C       /^void 
Ident_Eq_List::SetDimensions(void)$/
+Ident_Eq_List::SetFather       cp-src/abstract.C       /^void 
Ident_Eq_List::SetFather(Tree_Node *f)$/
+Ident_Eq_List::SetPosition     cp-src/abstract.C       /^void 
Ident_Eq_List::SetPosition(Coord xx, Coord yy/
+Ident_Eq_List::elem    cp-src/abstract.H       273
+Ident_Eq_List::next    cp-src/abstract.H       274
+InitNameList   pas-src/common.pas      /^procedure InitNameList;$/
+InitNameStringPool     pas-src/common.pas      /^procedure 
InitNameStringPool;$/
+InitializeStringPackage        pas-src/common.pas      /^procedure 
InitializeStringPackage;$/
+Initialize_Cond/p      ada-src/2ataspri.adb    /^   procedure Initialize_Cond 
(Cond : in out Condit/
+Initialize_Cond/p      ada-src/2ataspri.ads    /^   procedure Initialize_Cond 
(Cond : in out Condit/
+Initialize_LL_Tasks/p  ada-src/2ataspri.adb    /^   procedure 
Initialize_LL_Tasks (T : TCB_Ptr) is$/
+Initialize_LL_Tasks/p  ada-src/2ataspri.ads    /^   procedure 
Initialize_LL_Tasks (T : TCB_Ptr);$/
+Initialize_Lock/p      ada-src/2ataspri.adb    /^   procedure Initialize_Lock$/
+Initialize_Lock/p      ada-src/2ataspri.ads    /^   procedure Initialize_Lock 
(Prio : System.Any_Pr/
+Initialize_TAS_Cell/p  ada-src/2ataspri.adb    /^   procedure 
Initialize_TAS_Cell (Cell : out TAS_C/
+Initialize_TAS_Cell/p  ada-src/2ataspri.ads    /^   procedure 
Initialize_TAS_Cell (Cell :    out TA/
+Inner1/b       ada-src/etags-test-for.ada      /^  package body Inner1 is$/
+Inner1/b       ada-src/waroquiers.ada  /^  package body Inner1 is$/
+Inner1/s       ada-src/etags-test-for.ada      /^  package Inner1 is$/
+Inner1/s       ada-src/waroquiers.ada  /^  package Inner1 is$/
+Inner2/b       ada-src/etags-test-for.ada      /^  package body Inner2 is$/
+Inner2/b       ada-src/waroquiers.ada  /^  package body Inner2 is$/
+Inner2/s       ada-src/etags-test-for.ada      /^  package Inner2 is$/
+Inner2/s       ada-src/waroquiers.ada  /^  package Inner2 is$/
+Install_Abort_Handler/p        ada-src/2ataspri.adb    /^   procedure 
Install_Abort_Handler (Handler : Abor/
+Install_Abort_Handler/p        ada-src/2ataspri.ads    /^   procedure 
Install_Abort_Handler (Handler : Abor/
+Install_Error_Handler/p        ada-src/2ataspri.adb    /^   procedure 
Install_Error_Handler (Handler : Syst/
+Install_Error_Handler/p        ada-src/2ataspri.ads    /^   procedure 
Install_Error_Handler (Handler : Syst/
+Interl cp-src/abstract.H       672
+Interl::Interl cp-src/abstract.C       /^Interl::Interl()$/
+Interl::SetDimensions  cp-src/abstract.C       /^void 
Interl::SetDimensions(void)$/
+Interl::SetFather      cp-src/abstract.C       /^void 
Interl::SetFather(Tree_Node *f)$/
+Interl::SetPosition    cp-src/abstract.C       /^void 
Interl::SetPosition(Coord xx, Coord yy)$/
+Internal       cp-src/abstract.H       614
+Internal::Internal     cp-src/abstract.C       /^Internal::Internal()$/
+Internal::SetDimensions        cp-src/abstract.C       /^void 
Internal::SetDimensions(void)$/
+Internal::SetFather    cp-src/abstract.C       /^void 
Internal::SetFather(Tree_Node *f)$/
+Internal::SetPosition  cp-src/abstract.C       /^void 
Internal::SetPosition(Coord xx, Coord yy)$/
+Invoking gzip  tex-src/gzip.texi       /address@hidden Invoking gzip, Advanced 
usage, Sample, Top$/
+IsControlChar  pas-src/common.pas      /^function IsControlChar; (*($/
+IsControlCharName      pas-src/common.pas      /^function IsControlCharName($/
+Is_Set/f       ada-src/2ataspri.adb    /^   function  Is_Set (Cell : in 
TAS_Cell) return Bo/
+Is_Set/f       ada-src/2ataspri.ads    /^   function  Is_Set       (Cell : in  
   TAS_Cell)/
+JAVASRC        Makefile        /^JAVASRC=$(addprefix 
.\/java-src\/,AWTEMul.java KeyEv/
+KBD_BUFFER_SIZE        c-src/emacs/src/keyboard.c      82
+KBYTES objc-src/PackInsp.m     58
+KEY_TO_CHAR    c-src/emacs/src/keyboard.c      /^#define KEY_TO_CHAR(k) (XINT 
(k) & ((1 << CHARACTE/
+KeyEvent       java-src/KeyEve.java    36
+KeyEvent.CHAR_UNDEFINED        java-src/KeyEve.java    214
+KeyEvent.KEY_FIRST     java-src/KeyEve.java    41
+KeyEvent.KEY_LAST      java-src/KeyEve.java    46
+KeyEvent.KEY_PRESSED   java-src/KeyEve.java    57
+KeyEvent.KEY_RELEASED  java-src/KeyEve.java    62
+KeyEvent.KEY_TYPED     java-src/KeyEve.java    52
+KeyEvent.KeyEvent      java-src/KeyEve.java    /^    public KeyEvent(Component 
source, int id, long/
+KeyEvent.KeyEvent      java-src/KeyEve.java    /^    public KeyEvent(Component 
source, int id, long/
+KeyEvent.VK_0  java-src/KeyEve.java    110
+KeyEvent.VK_1  java-src/KeyEve.java    111
+KeyEvent.VK_2  java-src/KeyEve.java    112
+KeyEvent.VK_3  java-src/KeyEve.java    113
+KeyEvent.VK_4  java-src/KeyEve.java    114
+KeyEvent.VK_5  java-src/KeyEve.java    115
+KeyEvent.VK_6  java-src/KeyEve.java    116
+KeyEvent.VK_7  java-src/KeyEve.java    117
+KeyEvent.VK_8  java-src/KeyEve.java    118
+KeyEvent.VK_9  java-src/KeyEve.java    119
+KeyEvent.VK_A  java-src/KeyEve.java    125
+KeyEvent.VK_ACCEPT     java-src/KeyEve.java    200
+KeyEvent.VK_ADD        java-src/KeyEve.java    167
+KeyEvent.VK_ALT        java-src/KeyEve.java    92
+KeyEvent.VK_B  java-src/KeyEve.java    126
+KeyEvent.VK_BACK_QUOTE java-src/KeyEve.java    193
+KeyEvent.VK_BACK_SLASH java-src/KeyEve.java    153
+KeyEvent.VK_BACK_SPACE java-src/KeyEve.java    86
+KeyEvent.VK_C  java-src/KeyEve.java    127
+KeyEvent.VK_CANCEL     java-src/KeyEve.java    88
+KeyEvent.VK_CAPS_LOCK  java-src/KeyEve.java    94
+KeyEvent.VK_CLEAR      java-src/KeyEve.java    89
+KeyEvent.VK_CLOSE_BRACKET      java-src/KeyEve.java    154
+KeyEvent.VK_COMMA      java-src/KeyEve.java    105
+KeyEvent.VK_CONTROL    java-src/KeyEve.java    91
+KeyEvent.VK_CONVERT    java-src/KeyEve.java    198
+KeyEvent.VK_D  java-src/KeyEve.java    128
+KeyEvent.VK_DECIMAL    java-src/KeyEve.java    170
+KeyEvent.VK_DELETE     java-src/KeyEve.java    184
+KeyEvent.VK_DIVIDE     java-src/KeyEve.java    171
+KeyEvent.VK_DOWN       java-src/KeyEve.java    104
+KeyEvent.VK_E  java-src/KeyEve.java    129
+KeyEvent.VK_END        java-src/KeyEve.java    99
+KeyEvent.VK_ENTER      java-src/KeyEve.java    85
+KeyEvent.VK_EQUALS     java-src/KeyEve.java    122
+KeyEvent.VK_ESCAPE     java-src/KeyEve.java    95
+KeyEvent.VK_F  java-src/KeyEve.java    130
+KeyEvent.VK_F1 java-src/KeyEve.java    172
+KeyEvent.VK_F10        java-src/KeyEve.java    181
+KeyEvent.VK_F11        java-src/KeyEve.java    182
+KeyEvent.VK_F12        java-src/KeyEve.java    183
+KeyEvent.VK_F2 java-src/KeyEve.java    173
+KeyEvent.VK_F3 java-src/KeyEve.java    174
+KeyEvent.VK_F4 java-src/KeyEve.java    175
+KeyEvent.VK_F5 java-src/KeyEve.java    176
+KeyEvent.VK_F6 java-src/KeyEve.java    177
+KeyEvent.VK_F7 java-src/KeyEve.java    178
+KeyEvent.VK_F8 java-src/KeyEve.java    179
+KeyEvent.VK_F9 java-src/KeyEve.java    180
+KeyEvent.VK_FINAL      java-src/KeyEve.java    197
+KeyEvent.VK_G  java-src/KeyEve.java    131
+KeyEvent.VK_H  java-src/KeyEve.java    132
+KeyEvent.VK_HELP       java-src/KeyEve.java    190
+KeyEvent.VK_HOME       java-src/KeyEve.java    100
+KeyEvent.VK_I  java-src/KeyEve.java    133
+KeyEvent.VK_INSERT     java-src/KeyEve.java    189
+KeyEvent.VK_J  java-src/KeyEve.java    134
+KeyEvent.VK_K  java-src/KeyEve.java    135
+KeyEvent.VK_KANA       java-src/KeyEve.java    202
+KeyEvent.VK_KANJI      java-src/KeyEve.java    203
+KeyEvent.VK_L  java-src/KeyEve.java    136
+KeyEvent.VK_LEFT       java-src/KeyEve.java    101
+KeyEvent.VK_M  java-src/KeyEve.java    137
+KeyEvent.VK_META       java-src/KeyEve.java    191
+KeyEvent.VK_MODECHANGE java-src/KeyEve.java    201
+KeyEvent.VK_MULTIPLY   java-src/KeyEve.java    166
+KeyEvent.VK_N  java-src/KeyEve.java    138
+KeyEvent.VK_NONCONVERT java-src/KeyEve.java    199
+KeyEvent.VK_NUMPAD0    java-src/KeyEve.java    156
+KeyEvent.VK_NUMPAD1    java-src/KeyEve.java    157
+KeyEvent.VK_NUMPAD2    java-src/KeyEve.java    158
+KeyEvent.VK_NUMPAD3    java-src/KeyEve.java    159
+KeyEvent.VK_NUMPAD4    java-src/KeyEve.java    160
+KeyEvent.VK_NUMPAD5    java-src/KeyEve.java    161
+KeyEvent.VK_NUMPAD6    java-src/KeyEve.java    162
+KeyEvent.VK_NUMPAD7    java-src/KeyEve.java    163
+KeyEvent.VK_NUMPAD8    java-src/KeyEve.java    164
+KeyEvent.VK_NUMPAD9    java-src/KeyEve.java    165
+KeyEvent.VK_NUM_LOCK   java-src/KeyEve.java    185
+KeyEvent.VK_O  java-src/KeyEve.java    139
+KeyEvent.VK_OPEN_BRACKET       java-src/KeyEve.java    152
+KeyEvent.VK_P  java-src/KeyEve.java    140
+KeyEvent.VK_PAGE_DOWN  java-src/KeyEve.java    98
+KeyEvent.VK_PAGE_UP    java-src/KeyEve.java    97
+KeyEvent.VK_PAUSE      java-src/KeyEve.java    93
+KeyEvent.VK_PERIOD     java-src/KeyEve.java    106
+KeyEvent.VK_PRINTSCREEN        java-src/KeyEve.java    188
+KeyEvent.VK_Q  java-src/KeyEve.java    141
+KeyEvent.VK_QUOTE      java-src/KeyEve.java    194
+KeyEvent.VK_R  java-src/KeyEve.java    142
+KeyEvent.VK_RIGHT      java-src/KeyEve.java    103
+KeyEvent.VK_S  java-src/KeyEve.java    143
+KeyEvent.VK_SCROLL_LOCK        java-src/KeyEve.java    186
+KeyEvent.VK_SEMICOLON  java-src/KeyEve.java    121
+KeyEvent.VK_SEPARATER  java-src/KeyEve.java    168
+KeyEvent.VK_SHIFT      java-src/KeyEve.java    90
+KeyEvent.VK_SLASH      java-src/KeyEve.java    107
+KeyEvent.VK_SPACE      java-src/KeyEve.java    96
+KeyEvent.VK_SUBTRACT   java-src/KeyEve.java    169
+KeyEvent.VK_T  java-src/KeyEve.java    144
+KeyEvent.VK_TAB        java-src/KeyEve.java    87
+KeyEvent.VK_U  java-src/KeyEve.java    145
+KeyEvent.VK_UNDEFINED  java-src/KeyEve.java    208
+KeyEvent.VK_UP java-src/KeyEve.java    102
+KeyEvent.VK_V  java-src/KeyEve.java    146
+KeyEvent.VK_W  java-src/KeyEve.java    147
+KeyEvent.VK_X  java-src/KeyEve.java    148
+KeyEvent.VK_Y  java-src/KeyEve.java    149
+KeyEvent.VK_Z  java-src/KeyEve.java    150
+KeyEvent.getKeyChar    java-src/KeyEve.java    /^    public char getKeyChar() 
{$/
+KeyEvent.getKeyCode    java-src/KeyEve.java    /^    public int getKeyCode() 
{$/
+KeyEvent.getKeyModifiersText   java-src/KeyEve.java    /^    public static 
String getKeyModifiersText(int m/
+KeyEvent.getKeyText    java-src/KeyEve.java    /^    public static String 
getKeyText(int keyCode) {/
+KeyEvent.isActionKey   java-src/KeyEve.java    /^    public boolean 
isActionKey() {$/
+KeyEvent.keyChar       java-src/KeyEve.java    217
+KeyEvent.keyCode       java-src/KeyEve.java    216
+KeyEvent.paramString   java-src/KeyEve.java    /^    public String 
paramString() {$/
+KeyEvent.serialVersionUID      java-src/KeyEve.java    222
+KeyEvent.setKeyChar    java-src/KeyEve.java    /^    public void 
setKeyChar(char keyChar) {$/
+KeyEvent.setKeyCode    java-src/KeyEve.java    /^    public void 
setKeyCode(int keyCode) {$/
+KeyEvent.setModifiers  java-src/KeyEve.java    /^    public void 
setModifiers(int modifiers) {$/
+LATEST make-src/Makefile       1
+LCE_COMMENT    php-src/lce_functions.php       13
+LCE_COMMENT_TOOL       php-src/lce_functions.php       17
+LCE_COMMENT_USER       php-src/lce_functions.php       15
+LCE_FUNCTIONS  php-src/lce_functions.php       4
+LCE_MSGID      php-src/lce_functions.php       19
+LCE_MSGSTR     php-src/lce_functions.php       21
+LCE_TEXT       php-src/lce_functions.php       23
+LCE_UNKNOWN    php-src/lce_functions.php       9
+LCE_WS php-src/lce_functions.php       11
+LDFLAGS        make-src/Makefile       50
+LE     y-src/parse.c   7
+LEQ    y-src/cccp.c    14
+LISP_INITIALLY c-src/emacs/src/lisp.h  /^#define LISP_INITIALLY(i) {i}$/
+LISP_INITIALLY c-src/emacs/src/lisp.h  /^#define LISP_INITIALLY(i) (i)$/
+LISP_INITIALLY_ZERO    c-src/emacs/src/lisp.h  582
+LISP_MACRO_DEFUN       c-src/emacs/src/lisp.h  /^#define 
LISP_MACRO_DEFUN(name, type, argdecls, arg/
+LISP_MACRO_DEFUN       c-src/emacs/src/lisp.h  /^LISP_MACRO_DEFUN (XLI, 
EMACS_INT, (Lisp_Object o),/
+LISP_MACRO_DEFUN       c-src/emacs/src/lisp.h  /^LISP_MACRO_DEFUN (XPNTR, void 
*, (Lisp_Object a), /
+LISP_MACRO_DEFUN       c-src/emacs/src/lisp.h  /^LISP_MACRO_DEFUN (XHASH, 
EMACS_INT, (Lisp_Object a/
+LISP_MACRO_DEFUN       c-src/emacs/src/lisp.h  /^LISP_MACRO_DEFUN (XCONS, 
struct Lisp_Cons *, (Lisp/
+LISP_MACRO_DEFUN       c-src/emacs/src/lisp.h  /^LISP_MACRO_DEFUN (XCAR, 
Lisp_Object, (Lisp_Object /
+LISP_MACRO_DEFUN       c-src/emacs/src/lisp.h  /^LISP_MACRO_DEFUN (SYMBOL_VAL, 
Lisp_Object, (struct/
+LISP_MACRO_DEFUN       c-src/emacs/src/lisp.h  /^LISP_MACRO_DEFUN (NILP, bool, 
(Lisp_Object x), (x)/
+LISP_MACRO_DEFUN       c-src/emacs/src/lisp.h  /^LISP_MACRO_DEFUN (CONSP, 
bool, (Lisp_Object x), (x/
+LISP_MACRO_DEFUN_VOID  c-src/emacs/src/lisp.h  /^#define 
LISP_MACRO_DEFUN_VOID(name, argdecls, args/
+LISP_MACRO_DEFUN_VOID  c-src/emacs/src/lisp.h  /^LISP_MACRO_DEFUN_VOID 
(CHECK_TYPE,$/
+LISP_MACRO_DEFUN_VOID  c-src/emacs/src/lisp.h  /^LISP_MACRO_DEFUN_VOID 
(SET_SYMBOL_VAL,$/
+LISP_MACRO_DEFUN_VOID  c-src/emacs/src/lisp.h  /^LISP_MACRO_DEFUN_VOID 
(CHECK_LIST_CONS, (Lisp_Obje/
+LISTCONTENTS   objc-src/PackInsp.m     39
+LISTCONTENTSBUTTON     objc-src/PackInsp.m     48
+LISTDESCRIPTIONBUTTON  objc-src/PackInsp.m     49
+LL_Assert/p    ada-src/2ataspri.adb    /^   procedure LL_Assert (B : Boolean; 
M : String) i/
+LL_Assert/p    ada-src/2ataspri.ads    /^   procedure LL_Assert (B : Boolean; 
M : String);$/
+LL_Task_Procedure_Access/t     ada-src/etags-test-for.ada      /^   type 
LL_Task_Procedure_Access is access procedu/
+LL_Task_Procedure_Access/t     ada-src/2ataspri.ads    /^   type 
LL_Task_Procedure_Access is access procedu/
+LL_Wrapper/p   ada-src/etags-test-for.ada      /^   procedure LL_Wrapper (T : 
TCB_Ptr);$/
+LL_Wrapper/p   ada-src/2ataspri.adb    /^   procedure LL_Wrapper (T : 
TCB_Ptr);$/
+LL_Wrapper/p   ada-src/2ataspri.adb    /^   procedure LL_Wrapper (T : TCB_Ptr) 
is$/
+LOCALIZE       objc-src/PackInsp.m     /^#define LOCALIZE(s)           
NXLoadLocalizedStringFromTabl/
+LOCALIZE_ARCH  objc-src/PackInsp.m     /^#define LOCALIZE_ARCH(s)      
NXLoadLocalizedStringFrom/
+LOCK   c-src/emacs/src/gmalloc.c       /^#define LOCK()                        
                \\$/
+LOCK   c-src/emacs/src/gmalloc.c       /^#define LOCK()$/
+LOCK_ALIGNED_BLOCKS    c-src/emacs/src/gmalloc.c       /^#define 
LOCK_ALIGNED_BLOCKS()                         \\$/
+LOCK_ALIGNED_BLOCKS    c-src/emacs/src/gmalloc.c       /^#define 
LOCK_ALIGNED_BLOCKS()$/
+LONG_TYPE_SIZE cccp.y  95
+LONG_TYPE_SIZE y-src/cccp.y    95
+LOOKING_AT     c-src/etags.c   /^#define LOOKING_AT(cp, kw)  \/* kw is the 
keyword, /
+LOOKING_AT_NOCASE      c-src/etags.c   /^#define LOOKING_AT_NOCASE(cp, kw) \/* 
the keyword i/
+LOOKUP objc-src/PackInsp.m     /^#define LOOKUP(key, notfound) ([table 
isKey:key] ?/
+LOOKUP objc-src/PackInsp.m     176
+LOOP_ON_INPUT_LINES    c-src/etags.c   /^#define 
LOOP_ON_INPUT_LINES(file_pointer, line_buf/
+LSH    y-src/cccp.c    16
+LTGT   cp-src/MDiagArray2.h    35
+LTGT   cp-src/MDiagArray2.h    39
+LTGT   cp-src/MDiagArray2.h    42
+LTGT   cp-src/MDiagArray2.h    144
+LUASRC Makefile        /^LUASRC=$(addprefix .\/lua-src\/,allegro.lua)$/
+L_CELL y-src/parse.c   10
+L_CONST        y-src/parse.c   13
+L_FN0  y-src/parse.c   14
+L_FN1  y-src/parse.c   15
+L_FN1R y-src/parse.c   20
+L_FN2  y-src/parse.c   16
+L_FN2R y-src/parse.c   21
+L_FN3  y-src/parse.c   17
+L_FN3R y-src/parse.c   22
+L_FN4  y-src/parse.c   18
+L_FN4R y-src/parse.c   23
+L_FNN  y-src/parse.c   19
+L_FNNR y-src/parse.c   24
+L_GE   y-src/parse.c   27
+L_LE   y-src/parse.c   25
+L_NE   y-src/parse.c   26
+L_RANGE        y-src/parse.c   11
+L_VAR  y-src/parse.c   12
+L_getit        c-src/etags.c   /^L_getit (void)$/
+LabeledEntry   pyt-src/server.py       /^class LabeledEntry(Frame):$/
+Lang_function  c-src/etags.c   182
+Lang_function  c-src/h.h       6
+Lisp_Bits      c-src/emacs/src/lisp.h  239
+Lisp_Bool_Vector       c-src/emacs/src/lisp.h  1384
+Lisp_Boolfwd   c-src/emacs/src/lisp.h  2284
+Lisp_Buffer_Local_Value        c-src/emacs/src/lisp.h  2334
+Lisp_Buffer_Objfwd     c-src/emacs/src/lisp.h  2302
+Lisp_Char_Table        c-src/emacs/src/lisp.h  1575
+Lisp_Compiled  c-src/emacs/src/lisp.h  2429
+Lisp_Cons      c-src/emacs/src/lisp.h  475
+Lisp_Finalizer c-src/emacs/src/lisp.h  2186
+Lisp_Float     c-src/emacs/src/lisp.h  477
+Lisp_Float     c-src/emacs/src/lisp.h  2391
+Lisp_Free      c-src/emacs/src/lisp.h  2201
+Lisp_Fwd       c-src/emacs/src/lisp.h  2368
+Lisp_Fwd_Bool  c-src/emacs/src/lisp.h  505
+Lisp_Fwd_Buffer_Obj    c-src/emacs/src/lisp.h  507
+Lisp_Fwd_Int   c-src/emacs/src/lisp.h  504
+Lisp_Fwd_Kboard_Obj    c-src/emacs/src/lisp.h  508
+Lisp_Fwd_Obj   c-src/emacs/src/lisp.h  506
+Lisp_Fwd_Type  c-src/emacs/src/lisp.h  502
+Lisp_Hash_Table        c-src/emacs/src/lisp.h  1823
+Lisp_Int0      c-src/emacs/src/lisp.h  461
+Lisp_Int1      c-src/emacs/src/lisp.h  462
+Lisp_Intfwd    c-src/emacs/src/lisp.h  2274
+Lisp_Kboard_Objfwd     c-src/emacs/src/lisp.h  2362
+Lisp_Marker    c-src/emacs/src/lisp.h  1978
+Lisp_Misc      c-src/emacs/src/lisp.h  458
+Lisp_Misc      c-src/emacs/src/lisp.h  2212
+Lisp_Misc_Any  c-src/emacs/src/lisp.h  1971
+Lisp_Misc_Finalizer    c-src/emacs/src/lisp.h  491
+Lisp_Misc_Float        c-src/emacs/src/lisp.h  494
+Lisp_Misc_Free c-src/emacs/src/lisp.h  487
+Lisp_Misc_Limit        c-src/emacs/src/lisp.h  496
+Lisp_Misc_Marker       c-src/emacs/src/lisp.h  488
+Lisp_Misc_Overlay      c-src/emacs/src/lisp.h  489
+Lisp_Misc_Save_Value   c-src/emacs/src/lisp.h  490
+Lisp_Misc_Type c-src/emacs/src/lisp.h  485
+Lisp_Object    c-src/emacs/src/lisp.h  567
+Lisp_Object    c-src/emacs/src/lisp.h  577
+Lisp_Objfwd    c-src/emacs/src/lisp.h  2294
+Lisp_Overlay   c-src/emacs/src/lisp.h  2021
+Lisp_Save_Type c-src/emacs/src/lisp.h  2064
+Lisp_Save_Value        c-src/emacs/src/lisp.h  2110
+Lisp_String    c-src/emacs/src/lisp.h  466
+Lisp_Sub_Char_Table    c-src/emacs/src/lisp.h  1606
+Lisp_Subr      c-src/emacs/src/lisp.h  1670
+Lisp_Symbol    c-src/emacs/src/lisp.h  454
+Lisp_Symbol    c-src/emacs/src/lisp.h  654
+Lisp_Type      c-src/emacs/src/lisp.h  451
+Lisp_Vector    c-src/emacs/src/lisp.h  1369
+Lisp_Vectorlike        c-src/emacs/src/lisp.h  472
+Lisp_functions c-src/etags.c   /^Lisp_functions (FILE *inf)$/
+Lisp_help      c-src/etags.c   591
+Lisp_suffixes  c-src/etags.c   589
+ListEdit       pyt-src/server.py       /^class ListEdit(Frame):$/
+Local_Def      cp-src/abstract.H       914
+Local_Def::Local_Def   cp-src/abstract.C       
/^Local_Def::Local_Def(Ident_Eq_List *e_l, Tree_Node/
+Local_Def::SetCollapsed        cp-src/abstract.C       /^void 
Local_Def::SetCollapsed(char t)$/
+Local_Def::SetDimensions       cp-src/abstract.C       /^void 
Local_Def::SetDimensions(void)$/
+Local_Def::SetFather   cp-src/abstract.C       /^void 
Local_Def::SetFather(Tree_Node *f)$/
+Local_Def::SetPosition cp-src/abstract.C       /^void 
Local_Def::SetPosition(Coord xx, Coord yy)$/
+Local_Def::SetTextual  cp-src/abstract.C       /^void 
Local_Def::SetTextual(char t, char s)$/
+Local_Def::bex cp-src/abstract.H       917
+Local_Def::border      cp-src/abstract.H       919
+Local_Def::equa_list   cp-src/abstract.H       916
+Local_Def::yl  cp-src/abstract.H       918
+Locate pas-src/common.pas      /^function Locate; (*($/
+Lock/t ada-src/2ataspri.ads    /^   type Lock is private;$/
+Lock/t ada-src/2ataspri.ads    /^   type Lock is$/
+LowerCaseNmStr pas-src/common.pas      /^function LowerCaseNmStr; (*($/
+Lua_functions  c-src/etags.c   /^Lua_functions (FILE *inf)$/
+Lua_help       c-src/etags.c   600
+Lua_suffixes   c-src/etags.c   598
+MAGICBYTE      c-src/emacs/src/gmalloc.c       1856
+MAGICFREE      c-src/emacs/src/gmalloc.c       1855
+MAGICWORD      c-src/emacs/src/gmalloc.c       1854
+MAKESRC        Makefile        /^MAKESRC=$(addprefix .\/make-src\/,Makefile)$/
+MALLOCFLOOD    c-src/emacs/src/gmalloc.c       1857
+MANY   c-src/emacs/src/lisp.h  2833
+MARKERP        c-src/emacs/src/lisp.h  /^# define MARKERP(x) lisp_h_MARKERP 
(x)$/
+MAXCONT        cp-src/cfront.H 751
+MAXPATHLEN     c-src/etags.c   115
+MAX_ALLOCA     c-src/emacs/src/lisp.h  4556
+MAX_ALLOCA     c-src/emacs/src/lisp.h  4556
+MAX_ENCODED_BYTES      c-src/emacs/src/keyboard.c      2254
+MAX_HASH_VALUE c-src/etags.c   2329
+MAX_WORD_LENGTH        c-src/etags.c   2327
+MAYBEREL       y-src/parse.y   /^#define MAYBEREL(p) (*(p)=='[' && 
(isdigit((p)[1])/
+MAYBEREL       parse.y /^#define MAYBEREL(p) (*(p)=='[' && (isdigit((p)[1])/
+MBYTES objc-src/PackInsp.m     59
+MCHECK_DISABLED        c-src/emacs/src/gmalloc.c       285
+MCHECK_FREE    c-src/emacs/src/gmalloc.c       287
+MCHECK_HEAD    c-src/emacs/src/gmalloc.c       288
+MCHECK_OK      c-src/emacs/src/gmalloc.c       286
+MCHECK_TAIL    c-src/emacs/src/gmalloc.c       289
+MDiagArray2    cp-src/MDiagArray2.h    78
+MDiagArray2::MDiagArray2       cp-src/MDiagArray2.h    /^  MDiagArray2 (T *d, 
int r, int c) : DiagArray2<T>/
+MDiagArray2::MDiagArray2       cp-src/MDiagArray2.h    /^  MDiagArray2 (void) 
: DiagArray2<T> () { }$/
+MDiagArray2::MDiagArray2       cp-src/MDiagArray2.h    /^  MDiagArray2 (int r, 
int c) : DiagArray2<T> (r, c/
+MDiagArray2::MDiagArray2       cp-src/MDiagArray2.h    /^  MDiagArray2 (int r, 
int c, const T& val) : DiagA/
+MDiagArray2::MDiagArray2       cp-src/MDiagArray2.h    /^  MDiagArray2 (const 
Array<T>& a) : DiagArray2<T> /
+MDiagArray2::MDiagArray2       cp-src/MDiagArray2.h    /^  MDiagArray2 (const 
DiagArray2<T>& a) : DiagArray/
+MDiagArray2::MDiagArray2       cp-src/MDiagArray2.h    /^  MDiagArray2 (const 
MDiagArray2<T>& a) : DiagArra/
+MDiagArray2::operator =        cp-src/MDiagArray2.h    /^  MDiagArray2<T>& 
operator = (const MDiagArray2<T>/
+MDiagArray2::operator MArray2<T>       cp-src/MDiagArray2.h    /^  operator 
MArray2<T> () const$/
+MDiagArray2::~MDiagArray2      cp-src/MDiagArray2.h    /^  ~MDiagArray2 (void) 
{ }$/
+MIA    cp-src/cfront.H 779
+MIN_HASH_VALUE c-src/etags.c   2328
+MIN_WORD_LENGTH        c-src/etags.c   2326
+MISCP  c-src/emacs/src/lisp.h  /^# define MISCP(x) lisp_h_MISCP (x)$/
+MOST_NEGATIVE_FIXNUM   c-src/emacs/src/lisp.h  835
+MOST_POSITIVE_FIXNUM   c-src/emacs/src/lisp.h  834
+MOVE   c-src/sysdep.h  /^#define MOVE(x,y)     movl x, y$/
+MSDOS  c-src/etags.c   100
+MSDOS  c-src/etags.c   106
+MSDOS  c-src/etags.c   107
+MSDOS  c-src/etags.c   110
+MSGSEL f-src/entry.for /^       ENTRY  MSGSEL ( TYPE )$/
+MSGSEL f-src/entry.strange_suffix      /^       ENTRY  MSGSEL ( TYPE )$/
+MSGSEL f-src/entry.strange     /^       ENTRY  MSGSEL ( TYPE )$/
+MULTI_LETTER_MOD       c-src/emacs/src/keyboard.c      /^#define 
MULTI_LETTER_MOD(BIT, NAME, LEN)                      \\$/
+MULTI_LETTER_MOD       c-src/emacs/src/keyboard.c      6231
+MULTI_LETTER_MOD       c-src/emacs/src/keyboard.c      /^#define 
MULTI_LETTER_MOD(BIT, NAME, LEN)              \\$/
+MULTI_LETTER_MOD       c-src/emacs/src/keyboard.c      6764
+Machin_T/b     ada-src/waroquiers.ada  /^  protected body Machin_T is$/
+Machin_T/t     ada-src/etags-test-for.ada      /^  protected type Machin_T is$/
+Machin_T/t     ada-src/etags-test-for.ada      /^  protected Machin_T is$/
+Machin_T/t     ada-src/waroquiers.ada  /^  protected type Machin_T is$/
+Machine_Exceptions/t   ada-src/2ataspri.ads    /^   type Machine_Exceptions is 
new Interfaces.C.POS/
+MakeDispose    pyt-src/server.py       /^    def MakeDispose(self):$/
+MakeSitelist   pyt-src/server.py       /^    def MakeSitelist(self, master):$/
+Makefile_filenames     c-src/etags.c   603
+Makefile_help  c-src/etags.c   605
+Makefile_targets       c-src/etags.c   /^Makefile_targets (FILE *inf)$/
+Mc     cp-src/c.C      /^int main (void) { my_function0(0); my_function1(1)/
+Mcccp  cccp.y  /^main ()$/
+Mcccp  y-src/cccp.y    /^main ()$/
+Mconway.cpp    cp-src/conway.cpp       /^void main(void)$/
+Metags c-src/etags.c   /^main (int argc, char **argv)$/
+Mfail  cp-src/fail.C   /^main()$/
+Mkai-test.pl   perl-src/kai-test.pl    /^package main;$/
+More_Lisp_Bits c-src/emacs/src/lisp.h  801
+MoveLayerAfter lua-src/allegro.lua     /^function MoveLayerAfter (this_one)$/
+MoveLayerBefore        lua-src/allegro.lua     /^function MoveLayerBefore 
(this_one)$/
+MoveLayerBottom        lua-src/allegro.lua     /^function MoveLayerBottom ()$/
+MoveLayerTop   lua-src/allegro.lua     /^function MoveLayerTop ()$/
+NAME   y-src/cccp.c    8
+NATNUMP        c-src/emacs/src/lisp.h  /^NATNUMP (Lisp_Object x)$/
+NDEBUG c-src/etags.c   88
+NE     y-src/parse.c   6
+NEG    y-src/parse.c   9
+NEXT_ALMOST_PRIME_LIMIT        c-src/emacs/src/lisp.h  3573
+NILP   c-src/emacs/src/lisp.h  /^# define NILP(x) lisp_h_NILP (x)$/
+NIL_IS_ZERO    c-src/emacs/src/lisp.h  1515
+NONPOINTER_BITS        c-src/emacs/src/lisp.h  78
+NONPOINTER_BITS        c-src/emacs/src/lisp.h  80
+NONSRCS        Makefile        /^NONSRCS=.\/f-src\/entry.strange 
.\/erl-src\/lists.erl /
+NONSRCS        make-src/Makefile       35
+NOTEQUAL       y-src/cccp.c    13
+NULL   cccp.y  51
+NULL   y-src/cccp.y    51
+NULL_PTR       cccp.y  63
+NULL_PTR       y-src/cccp.y    63
+NUMSTATS       objc-src/PackInsp.h     36
+NUM_MOD_NAMES  c-src/emacs/src/keyboard.c      6325
+NUM_RECENT_KEYS        c-src/emacs/src/keyboard.c      91
+NameHasChar    pas-src/common.pas      /^function NameHasChar; (* (TheName : 
NameString; Th/
+NameStringLess pas-src/common.pas      /^function NameStringLess;(*(var 
Name1,Name2 : NameS/
+NewLayer       lua-src/allegro.lua     /^function NewLayer (name, x, y, w, h)$/
+NewLayerSet    lua-src/allegro.lua     /^function NewLayerSet (name)$/
+NewNameString  pas-src/common.pas      /^procedure NewNameString; (* (var NSP: 
NameStringPo/
+NmStrToErrStr  pas-src/common.pas      /^function NmStrToErrStr;(*($/
+NmStrToInteger pas-src/common.pas      /^function NmStrToInteger; (* (Str : 
NameString) : i/
+NoExit cp-src/abstract.H       421
+NoExit::NoExit cp-src/abstract.C       /^NoExit::NoExit()$/
+NoExit::SetDimensions  cp-src/abstract.C       /^void 
NoExit::SetDimensions(void)$/
+NoExit::SetFather      cp-src/abstract.C       /^void 
NoExit::SetFather(Tree_Node *f)$/
+NoExit::SetPosition    cp-src/abstract.C       /^void 
NoExit::SetPosition(Coord xx, Coord yy)$/
+NoExperiment   cp-src/abstract.H       545
+NoExperiment::NoExperiment     cp-src/abstract.C       
/^NoExperiment::NoExperiment()$/
+NoExperiment::SetDimensions    cp-src/abstract.C       /^void 
NoExperiment::SetDimensions(void)$/
+NoExperiment::SetFather        cp-src/abstract.C       /^void 
NoExperiment::SetFather(Tree_Node *f)$/
+NoExperiment::SetPosition      cp-src/abstract.C       /^void 
NoExperiment::SetPosition(Coord xx, Coord yy)/
+NoGuard        cp-src/abstract.H       511
+NoGuard::NoGuard       cp-src/abstract.C       /^NoGuard::NoGuard()$/
+NoGuard::SetDimensions cp-src/abstract.C       /^void 
NoGuard::SetDimensions(void)$/
+NoGuard::SetFather     cp-src/abstract.C       /^void 
NoGuard::SetFather(Tree_Node *f)$/
+NoGuard::SetPosition   cp-src/abstract.C       /^void 
NoGuard::SetPosition(Coord xx, Coord yy)$/
+NullSecurityManager    java-src/SMan.java      817
+NullSecurityManager.checkAccept        java-src/SMan.java      /^    public 
void checkAccept(String host, int port)/
+NullSecurityManager.checkAccess        java-src/SMan.java      /^    public 
void checkAccess(Thread g) { }$/
+NullSecurityManager.checkAccess        java-src/SMan.java      /^    public 
void checkAccess(ThreadGroup g) { }$/
+NullSecurityManager.checkAwtEventQueueAccess   java-src/SMan.java      /^    
public void checkAwtEventQueueAccess() { }$/
+NullSecurityManager.checkConnect       java-src/SMan.java      /^    public 
void checkConnect(String host, int port/
+NullSecurityManager.checkConnect       java-src/SMan.java      /^    public 
void checkConnect(String host, int port/
+NullSecurityManager.checkCreateClassLoader     java-src/SMan.java      /^    
public void checkCreateClassLoader() { } $/
+NullSecurityManager.checkDelete        java-src/SMan.java      /^    public 
void checkDelete(String file) { }$/
+NullSecurityManager.checkExec  java-src/SMan.java      /^    public void 
checkExec(String cmd) { }$/
+NullSecurityManager.checkExit  java-src/SMan.java      /^    public void 
checkExit(int status) { }$/
+NullSecurityManager.checkLink  java-src/SMan.java      /^    public void 
checkLink(String lib) { }$/
+NullSecurityManager.checkListen        java-src/SMan.java      /^    public 
void checkListen(int port) { }$/
+NullSecurityManager.checkMemberAccess  java-src/SMan.java      /^    public 
void checkMemberAccess(Class clazz, int/
+NullSecurityManager.checkMulticast     java-src/SMan.java      /^    public 
void checkMulticast(InetAddress maddr) /
+NullSecurityManager.checkMulticast     java-src/SMan.java      /^    public 
void checkMulticast(InetAddress maddr, /
+NullSecurityManager.checkPackageAccess java-src/SMan.java      /^    public 
void checkPackageAccess(String pkg) { }/
+NullSecurityManager.checkPackageDefinition     java-src/SMan.java      /^    
public void checkPackageDefinition(String pkg)/
+NullSecurityManager.checkPrintJobAccess        java-src/SMan.java      /^    
public void checkPrintJobAccess() { }$/
+NullSecurityManager.checkPropertiesAccess      java-src/SMan.java      /^    
public void checkPropertiesAccess() { }$/
+NullSecurityManager.checkPropertyAccess        java-src/SMan.java      /^    
public void checkPropertyAccess(String key) { /
+NullSecurityManager.checkPropertyAccess        java-src/SMan.java      /^    
public void checkPropertyAccess(String key, St/
+NullSecurityManager.checkRead  java-src/SMan.java      /^    public void 
checkRead(FileDescriptor fd) { }$/
+NullSecurityManager.checkRead  java-src/SMan.java      /^    public void 
checkRead(String file) { }$/
+NullSecurityManager.checkRead  java-src/SMan.java      /^    public void 
checkRead(String file, Object cont/
+NullSecurityManager.checkSecurityAccess        java-src/SMan.java      /^    
public void checkSecurityAccess(String provide/
+NullSecurityManager.checkSetFactory    java-src/SMan.java      /^    public 
void checkSetFactory() { }$/
+NullSecurityManager.checkSystemClipboardAccess java-src/SMan.java      /^    
public void checkSystemClipboardAccess() { }$/
+NullSecurityManager.checkTopLevelWindow        java-src/SMan.java      /^    
public boolean checkTopLevelWindow(Object wind/
+NullSecurityManager.checkWrite java-src/SMan.java      /^    public void 
checkWrite(FileDescriptor fd) { }$/
+NullSecurityManager.checkWrite java-src/SMan.java      /^    public void 
checkWrite(String file) { }$/
+OBJCPPSRC      Makefile        /^OBJCPPSRC=$(addprefix 
.\/objcpp-src\/,SimpleCalc.H S/
+OBJCSRC        Makefile        /^OBJCSRC=$(addprefix 
.\/objc-src\/,Subprocess.h Subpr/
+OPENBUTTON     objc-src/PackInsp.m     47
+OPTIONS        Makefile        /^OPTIONS=--members --declarations 
address@hidden/
+OR     y-src/cccp.c    10
+OVERLAYP       c-src/emacs/src/lisp.h  /^OVERLAYP (Lisp_Object x)$/
+Objc_help      c-src/etags.c   613
+Objc_suffixes  c-src/etags.c   609
+OperatorFun    c-src/h.h       88
+Overview       tex-src/gzip.texi       /address@hidden Overview, Sample, 
Copying, Top$/
+PASSRC Makefile        /^PASSRC=$(addprefix .\/pas-src\/,common.pas)$/
+PCTEST_H       cp-src/Pctest.h 24
+PDT    c-src/h.h       /^  Date 04 May 87 235311 PDT (Mon)$/
+PERLSRC        Makefile        /^PERLSRC=$(addprefix 
.\/perl-src\/,htlmify-cystic yag/
+PERM   cp-src/cfront.H /^#define PERM(p) p->permanent=1$/
+PHPSRC Makefile        /^PHPSRC=$(addprefix .\/php-src\/,lce_functions.php pt/
+PHP_functions  c-src/etags.c   /^PHP_functions (FILE *inf)$/
+PHP_help       c-src/etags.c   639
+PHP_suffixes   c-src/etags.c   637
+POEntry        php-src/lce_functions.php       105
+POEntry        php-src/lce_functions.php       /^      function POEntry()$/
+POEntryAD      php-src/lce_functions.php       29
+PORManager     php-src/lce_functions.php       498
+PORManager     php-src/lce_functions.php       /^      function PORManager()$/
+POReader       php-src/lce_functions.php       163
+POReader       php-src/lce_functions.php       /^      function 
POReader($domain, $filename)$/
+PRINT_UNDOCUMENTED_OPTIONS_HELP        c-src/etags.c   804
+PROCESSP       c-src/emacs/src/lisp.h  /^PROCESSP (Lisp_Object a)$/
+PROLSRC        Makefile        /^PROLSRC=$(addprefix 
.\/prol-src\/,ordsets.prolog nat/
+PROP   c-src/emacs/src/keyboard.c      /^#define PROP(IDX) AREF 
(tool_bar_item_properties, /
+PROP   c-src/emacs/src/keyboard.c      8379
+PROTECT_MALLOC_STATE   c-src/emacs/src/gmalloc.c       /^#define 
PROTECT_MALLOC_STATE(PROT) protect_malloc_/
+PROTECT_MALLOC_STATE   c-src/emacs/src/gmalloc.c       /^#define 
PROTECT_MALLOC_STATE(PROT)    \/* empty *\/$/
+PRTPKG f-src/entry.for /^      LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/
+PRTPKG f-src/entry.strange_suffix      /^      LOGICAL FUNCTION PRTPKG ( 
SHORT, LONG, EXPL,/
+PSEUDO c-src/sysdep.h  /^#define       PSEUDO(name, syscall_name, args)        
                              /
+PSEUDOVECSIZE  c-src/emacs/src/lisp.h  /^#define PSEUDOVECSIZE(type, 
nonlispfield)                     \\$/
+PSEUDOVECTORP  c-src/emacs/src/lisp.h  /^PSEUDOVECTORP (Lisp_Object a, int 
code)$/
+PSEUDOVECTOR_AREA_BITS c-src/emacs/src/lisp.h  818
+PSEUDOVECTOR_FLAG      c-src/emacs/src/lisp.h  774
+PSEUDOVECTOR_REST_BITS c-src/emacs/src/lisp.h  813
+PSEUDOVECTOR_REST_MASK c-src/emacs/src/lisp.h  814
+PSEUDOVECTOR_SIZE_BITS c-src/emacs/src/lisp.h  808
+PSEUDOVECTOR_SIZE_MASK c-src/emacs/src/lisp.h  809
+PSEUDOVECTOR_TYPEP     c-src/emacs/src/lisp.h  /^PSEUDOVECTOR_TYPEP (struct 
vectorlike_header *a, i/
+PSSRC  Makefile        /^PSSRC=$(addprefix .\/ps-src\/,rfc1245.ps)$/
+PS_functions   c-src/etags.c   /^PS_functions (FILE *inf)$/
+PS_help        c-src/etags.c   649
+PS_suffixes    c-src/etags.c   647
+PTY_LENGTH     objc-src/Subprocess.m   21
+PTY_TEMPLATE   objc-src/Subprocess.m   20
+PUSH_C_STR     c-src/emacs/src/keyboard.c      /^#define PUSH_C_STR(str, 
listvar) \\$/
+PUSH_HANDLER   c-src/emacs/src/lisp.h  /^#define PUSH_HANDLER(c, tag_ch_val, 
handlertype)      \\/
+PVEC_BOOL_VECTOR       c-src/emacs/src/lisp.h  787
+PVEC_BUFFER    c-src/emacs/src/lisp.h  788
+PVEC_CHAR_TABLE        c-src/emacs/src/lisp.h  796
+PVEC_COMPILED  c-src/emacs/src/lisp.h  795
+PVEC_FONT      c-src/emacs/src/lisp.h  798
+PVEC_FRAME     c-src/emacs/src/lisp.h  785
+PVEC_FREE      c-src/emacs/src/lisp.h  783
+PVEC_HASH_TABLE        c-src/emacs/src/lisp.h  789
+PVEC_NORMAL_VECTOR     c-src/emacs/src/lisp.h  782
+PVEC_OTHER     c-src/emacs/src/lisp.h  793
+PVEC_PROCESS   c-src/emacs/src/lisp.h  784
+PVEC_SUBR      c-src/emacs/src/lisp.h  792
+PVEC_SUB_CHAR_TABLE    c-src/emacs/src/lisp.h  797
+PVEC_TERMINAL  c-src/emacs/src/lisp.h  790
+PVEC_TYPE_MASK c-src/emacs/src/lisp.h  819
+PVEC_WINDOW    c-src/emacs/src/lisp.h  786
+PVEC_WINDOW_CONFIGURATION      c-src/emacs/src/lisp.h  791
+PYTSRC Makefile        /^PYTSRC=$(addprefix .\/pyt-src\/,server.py)$/
+PackageInspector       objc-src/PackInsp.h     /address@hidden 
PackageInspector:WMInspector$/
+Par    cp-src/abstract.H       933
+Par::Par       cp-src/abstract.C       /^Par::Par(Gate_Decl_List *g_d_l, 
Tree_Node *op, Tre/
+Par::SetCollapsed      cp-src/abstract.C       /^void Par::SetCollapsed(char 
t)$/
+Par::SetDimensions     cp-src/abstract.C       /^void 
Par::SetDimensions(void)$/
+Par::SetFather cp-src/abstract.C       /^void Par::SetFather(Tree_Node *f)$/
+Par::SetPosition       cp-src/abstract.C       /^void Par::SetPosition(Coord 
xx, Coord yy)$/
+Par::SetTextual        cp-src/abstract.C       /^void Par::SetTextual(char t, 
char s)$/
+Par::bex       cp-src/abstract.H       936
+Par::border    cp-src/abstract.H       938
+Par::gate_decl_list    cp-src/abstract.H       935
+Par::oper      cp-src/abstract.H       936
+Par::xl        cp-src/abstract.H       937
+Par::yl        cp-src/abstract.H       937
+Parallel       cp-src/abstract.H       888
+Parallel::GetOperType  cp-src/abstract.H       /^ char GetOperType(void) { 
return(oper->GetType());/
+Parallel::Get_Textual_H        cp-src/abstract.C       /^int 
Parallel::Get_Textual_H()$/
+Parallel::Get_Textual_W        cp-src/abstract.C       /^int 
Parallel::Get_Textual_W()$/
+Parallel::Parallel     cp-src/abstract.C       /^Parallel::Parallel(Tree_Node 
*b1, Tree_Node *op, T/
+Parallel::SetCollapsed cp-src/abstract.C       /^void 
Parallel::SetCollapsed(char t)$/
+Parallel::SetDimensions        cp-src/abstract.C       /^void 
Parallel::SetDimensions(void)$/
+Parallel::SetFather    cp-src/abstract.C       /^void 
Parallel::SetFather(Tree_Node *f)$/
+Parallel::SetPosition  cp-src/abstract.C       /^void 
Parallel::SetPosition(Coord xx, Coord yy)$/
+Parallel::SetTerminalPos       cp-src/abstract.C       /^void 
Parallel::SetTerminalPos()$/
+Parallel::SetTextual   cp-src/abstract.C       /^void 
Parallel::SetTextual(char t, char s)$/
+Parallel::bex1 cp-src/abstract.H       890
+Parallel::bex2 cp-src/abstract.H       890
+Parallel::border       cp-src/abstract.H       894
+Parallel::delta        cp-src/abstract.H       893
+Parallel::havebox      cp-src/abstract.H       892
+Parallel::oper cp-src/abstract.H       890
+Parallel::xl   cp-src/abstract.H       891
+Parallel::yl   cp-src/abstract.H       891
+Parallel::yl1  cp-src/abstract.H       891
+Pascal_functions       c-src/etags.c   /^Pascal_functions (FILE *inf)$/
+Pascal_help    c-src/etags.c   621
+Pascal_suffixes        c-src/etags.c   619
+Pctest cp-src/Pctest.h 56
+Pctest::GetAction      cp-src/Pctest.h /^    virtual PctestActionType 
GetAction(TestRecord /
+Pctest::GetTargetName  cp-src/Pctest.h /^    virtual char *GetTargetName() { 
return targetN/
+Pctest::Pctest cp-src/Pctest.h /^    Pctest() {$/
+Pctest::initialized    cp-src/Pctest.h 93
+Pctest::syscallTime    cp-src/Pctest.h 95
+Pctest::targetName     cp-src/Pctest.h 94
+Pctest::~Pctest        cp-src/Pctest.h /^    virtual ~Pctest() { };$/
+PctestActionType       cp-src/Pctest.h 54
+Perl_functions c-src/etags.c   /^Perl_functions (FILE *inf)$/
+Perl_help      c-src/etags.c   630
+Perl_interpreters      c-src/etags.c   628
+Perl_suffixes  c-src/etags.c   626
+Pkg1/b ada-src/etags-test-for.ada      /^package body Pkg1 is$/
+Pkg1/b ada-src/waroquiers.ada  /^package body Pkg1 is$/
+Pkg1/s ada-src/etags-test-for.ada      /^package Pkg1 is$/
+Pkg1/s ada-src/waroquiers.ada  /^package Pkg1 is$/
+Pkg1_Func1/f   ada-src/etags-test-for.ada      /^  function Pkg1_Func1 return 
Boolean;$/
+Pkg1_Func1/f   ada-src/etags-test-for.ada      /^  function Pkg1_Func1 return 
Boolean is separate;$/
+Pkg1_Func1/f   ada-src/etags-test-for.ada      /^function  Pkg1_Func1 return 
Boolean is$/
+Pkg1_Func1/f   ada-src/waroquiers.ada  /^  function Pkg1_Func1 return 
Boolean;$/
+Pkg1_Func1/f   ada-src/waroquiers.ada  /^  function Pkg1_Func1 return Boolean 
is separate;$/
+Pkg1_Func1/f   ada-src/waroquiers.ada  /^function  Pkg1_Func1 return Boolean 
is$/
+Pkg1_Func2/f   ada-src/etags-test-for.ada      /^  function Pkg1_Func2 (Ijk : 
Integer; Z : Integer)/
+Pkg1_Func2/f   ada-src/etags-test-for.ada      /^  function Pkg1_Func2 (Ijk : 
Integer; Z : Integer)/
+Pkg1_Func2/f   ada-src/waroquiers.ada  /^  function Pkg1_Func2 (Ijk : Integer; 
Z : Integer)/
+Pkg1_Func2/f   ada-src/waroquiers.ada  /^  function Pkg1_Func2 (Ijk : Integer; 
Z : Integer)/
+Pkg1_Pkg1/b    ada-src/etags-test-for.ada      /^  package body Pkg1_Pkg1 is 
separate;$/
+Pkg1_Pkg1/b    ada-src/etags-test-for.ada      /^package body Pkg1_Pkg1 is$/
+Pkg1_Pkg1/b    ada-src/waroquiers.ada  /^  package body Pkg1_Pkg1 is 
separate;$/
+Pkg1_Pkg1/b    ada-src/waroquiers.ada  /^package body Pkg1_Pkg1 is$/
+Pkg1_Pkg1/s    ada-src/etags-test-for.ada      /^  package Pkg1_Pkg1 is$/
+Pkg1_Pkg1/s    ada-src/waroquiers.ada  /^  package Pkg1_Pkg1 is$/
+Pkg1_Pkg1_Proc1/p      ada-src/etags-test-for.ada      /^    procedure 
Pkg1_Pkg1_Proc1;$/
+Pkg1_Pkg1_Proc1/p      ada-src/etags-test-for.ada      /^  procedure 
Pkg1_Pkg1_Proc1 is$/
+Pkg1_Pkg1_Proc1/p      ada-src/waroquiers.ada  /^    procedure 
Pkg1_Pkg1_Proc1;$/
+Pkg1_Pkg1_Proc1/p      ada-src/waroquiers.ada  /^  procedure Pkg1_Pkg1_Proc1 
is$/
+Pkg1_Proc1/p   ada-src/etags-test-for.ada      /^  procedure Pkg1_Proc1;$/
+Pkg1_Proc1/p   ada-src/etags-test-for.ada      /^  procedure Pkg1_Proc1 is$/
+Pkg1_Proc1/p   ada-src/waroquiers.ada  /^  procedure Pkg1_Proc1;$/
+Pkg1_Proc1/p   ada-src/waroquiers.ada  /^  procedure Pkg1_Proc1 is$/
+Pkg1_Proc2/p   ada-src/etags-test-for.ada      /^  procedure Pkg1_Proc2 (I : 
Integer);$/
+Pkg1_Proc2/p   ada-src/etags-test-for.ada      /^  procedure Pkg1_Proc2 (I : 
Integer) is$/
+Pkg1_Proc2/p   ada-src/waroquiers.ada  /^  procedure Pkg1_Proc2 (I : 
Integer);$/
+Pkg1_Proc2/p   ada-src/waroquiers.ada  /^  procedure Pkg1_Proc2 (I : Integer) 
is$/
+PostControls   pyt-src/server.py       /^    def PostControls(self):$/
+Pre_Call_State/t       ada-src/2ataspri.ads    /^   type Pre_Call_State is new 
System.Address;$/
+Private_T/b    ada-src/etags-test-for.ada      /^    task body Private_T is$/
+Private_T/b    ada-src/waroquiers.ada  /^    task body Private_T is$/
+Private_T/k    ada-src/etags-test-for.ada      /^    task Private_T;$/
+Private_T/k    ada-src/waroquiers.ada  /^    task Private_T;$/
+Private_T/p    ada-src/etags-test-for.ada      /^    procedure Private_T;$/
+Private_T/p    ada-src/etags-test-for.ada      /^    procedure Private_T is$/
+Private_T/p    ada-src/waroquiers.ada  /^    procedure Private_T;$/
+Private_T/p    ada-src/waroquiers.ada  /^    procedure Private_T is$/
+Private_T/t    ada-src/etags-test-for.ada      /^  type Private_T is private;$/
+Private_T/t    ada-src/etags-test-for.ada      /^  type Private_T is$/
+Private_T/t    ada-src/waroquiers.ada  /^  type Private_T is private;$/
+Private_T/t    ada-src/waroquiers.ada  /^  type Private_T is$/
+Problems       tex-src/gzip.texi       /address@hidden Problems, Concept 
Index, Tapes, Top$/
+Proc/t ada-src/2ataspri.ads    /^   type Proc is access procedure (Addr : 
System.Ad/
+Proc_Inst      cp-src/abstract.H       867
+Proc_Inst::Proc_Inst   cp-src/abstract.C       /^Proc_Inst::Proc_Inst(ID_Place 
*id, ID_List *g_i_l,/
+Proc_Inst::SetCollapsed        cp-src/abstract.C       /^void 
Proc_Inst::SetCollapsed(char t)$/
+Proc_Inst::SetDimensions       cp-src/abstract.C       /^void 
Proc_Inst::SetDimensions(void)$/
+Proc_Inst::SetFather   cp-src/abstract.C       /^void 
Proc_Inst::SetFather(Tree_Node *f)$/
+Proc_Inst::SetPosition cp-src/abstract.C       /^void 
Proc_Inst::SetPosition(Coord xx, Coord yy)$/
+Proc_Inst::SetTextual  cp-src/abstract.C       /^void 
Proc_Inst::SetTextual(char t, char s)$/
+Proc_Inst::Xclose      cp-src/abstract.H       872
+Proc_Inst::Xopen       cp-src/abstract.H       872
+Proc_Inst::border      cp-src/abstract.H       874
+Proc_Inst::gate_list   cp-src/abstract.H       869
+Proc_Inst::hp  cp-src/abstract.H       873
+Proc_Inst::ident       cp-src/abstract.H       870
+Proc_Inst::value_expr_list     cp-src/abstract.H       871
+Proc_Inst::yl1 cp-src/abstract.H       872
+Proc_Inst::yp  cp-src/abstract.H       872
+Proc_List      cp-src/abstract.H       367
+Proc_List::GetPath     cp-src/abstract.C       /^char *Proc_List::GetPath()$/
+Proc_List::Proc_List   cp-src/abstract.C       /^Proc_List::Proc_List(Process 
*el, Proc_List *nxt)$/
+Proc_List::SetDimensions       cp-src/abstract.C       /^void 
Proc_List::SetDimensions(void)$/
+Proc_List::SetFather   cp-src/abstract.C       /^void 
Proc_List::SetFather(Tree_Node *f)$/
+Proc_List::SetPath     cp-src/abstract.C       /^void Proc_List::SetPath(char 
*p, char n, int& np, /
+Proc_List::SetPosition cp-src/abstract.C       /^void 
Proc_List::SetPosition(Coord xx, Coord yy)$/
+Proc_List::elem        cp-src/abstract.H       369
+Proc_List::next        cp-src/abstract.H       370
+Process        cp-src/abstract.H       337
+Process::GetMaxX       cp-src/abstract.C       /^Coord Process::GetMaxX()$/
+Process::GetMaxY       cp-src/abstract.C       /^Coord Process::GetMaxY()$/
+Process::GetNesting    cp-src/abstract.H       /^ char GetNesting() 
{return(nesting);};$/
+Process::MaxX  cp-src/abstract.H       347
+Process::MaxY  cp-src/abstract.H       347
+Process::Process       cp-src/abstract.C       /^Process::Process(Comment_List 
*c_l, ID_Place *id, /
+Process::SetDimensions cp-src/abstract.C       /^void 
Process::SetDimensions(void)$/
+Process::SetFather     cp-src/abstract.C       /^void 
Process::SetFather(Tree_Node *f)$/
+Process::SetPath       cp-src/abstract.C       /^void Process::SetPath(char 
*p, char n, int& np, in/
+Process::SetPosition   cp-src/abstract.C       /^void 
Process::SetPosition(Coord xx, Coord yy)$/
+Process::com_list      cp-src/abstract.H       339
+Process::def   cp-src/abstract.H       343
+Process::func  cp-src/abstract.H       344
+Process::gate_list     cp-src/abstract.H       341
+Process::id_decl_list  cp-src/abstract.H       342
+Process::ident cp-src/abstract.H       340
+Process::nesting       cp-src/abstract.H       345
+Process::yl1   cp-src/abstract.H       346
+Process::yl2   cp-src/abstract.H       346
+Process::yl3   cp-src/abstract.H       346
+Process::ypath cp-src/abstract.H       346
+Prolog_functions       c-src/etags.c   /^Prolog_functions (FILE *inf)$/
+Prolog_help    c-src/etags.c   654
+Prolog_suffixes        c-src/etags.c   652
+Public_T/t     ada-src/etags-test-for.ada      /^  type Public_T is$/
+Public_T/t     ada-src/waroquiers.ada  /^  type Public_T is$/
+Python_functions       c-src/etags.c   /^Python_functions (FILE *inf)$/
+Python_help    c-src/etags.c   660
+Python_suffixes        c-src/etags.c   658
+QUIT   c-src/emacs/src/lisp.h  3101
+QUITP  c-src/emacs/src/lisp.h  3112
+Qpre_abbrev_expand_hook        c-src/abbrev.c  82
+Query  cp-src/abstract.H       593
+Query::Query   cp-src/abstract.C       /^Query::Query(Id_Decl *i_d)$/
+Query::SetCollapsed    cp-src/abstract.C       /^void Query::SetCollapsed(char 
t)$/
+Query::SetDimensions   cp-src/abstract.C       /^void 
Query::SetDimensions(void)$/
+Query::SetFather       cp-src/abstract.C       /^void 
Query::SetFather(Tree_Node *f)$/
+Query::SetPosition     cp-src/abstract.C       /^void Query::SetPosition(Coord 
xx, Coord yy)$/
+Query::id_decl cp-src/abstract.H       595
+RANGED_INTEGERP        c-src/emacs/src/lisp.h  /^RANGED_INTEGERP (intmax_t lo, 
Lisp_Object x, intma/
+RCSid  objc-src/PackInsp.m     30
+READABLE_EVENTS_DO_TIMERS_NOW  c-src/emacs/src/keyboard.c      346
+READABLE_EVENTS_FILTER_EVENTS  c-src/emacs/src/keyboard.c      347
+READABLE_EVENTS_IGNORE_SQUEEZABLES     c-src/emacs/src/keyboard.c      348
+RECC_ALNUM     c-src/emacs/src/regex.h 610
+RECC_ALPHA     c-src/emacs/src/regex.h 610
+RECC_ASCII     c-src/emacs/src/regex.h 617
+RECC_BLANK     c-src/emacs/src/regex.h 615
+RECC_CNTRL     c-src/emacs/src/regex.h 613
+RECC_DIGIT     c-src/emacs/src/regex.h 614
+RECC_ERROR     c-src/emacs/src/regex.h 609
+RECC_GRAPH     c-src/emacs/src/regex.h 611
+RECC_LOWER     c-src/emacs/src/regex.h 612
+RECC_MULTIBYTE c-src/emacs/src/regex.h 616
+RECC_NONASCII  c-src/emacs/src/regex.h 616
+RECC_PRINT     c-src/emacs/src/regex.h 611
+RECC_PUNCT     c-src/emacs/src/regex.h 613
+RECC_SPACE     c-src/emacs/src/regex.h 615
+RECC_UNIBYTE   c-src/emacs/src/regex.h 617
+RECC_UPPER     c-src/emacs/src/regex.h 612
+RECC_WORD      c-src/emacs/src/regex.h 610
+RECC_XDIGIT    c-src/emacs/src/regex.h 614
+REGEX  Makefile        /^REGEX=\/[ \\t]*DEFVAR_[A-Z_ \\t\\n(]+"\\([^"]+\\)"\/$/
+REGS_FIXED     c-src/emacs/src/regex.h 378
+REGS_REALLOCATE        c-src/emacs/src/regex.h 377
+REGS_UNALLOCATED       c-src/emacs/src/regex.h 376
+REG_BADBR      c-src/emacs/src/regex.h 313
+REG_BADPAT     c-src/emacs/src/regex.h 305
+REG_BADRPT     c-src/emacs/src/regex.h 316
+REG_EBRACE     c-src/emacs/src/regex.h 312
+REG_EBRACK     c-src/emacs/src/regex.h 310
+REG_ECOLLATE   c-src/emacs/src/regex.h 306
+REG_ECTYPE     c-src/emacs/src/regex.h 307
+REG_EEND       c-src/emacs/src/regex.h 319
+REG_EESCAPE    c-src/emacs/src/regex.h 308
+REG_ENOSYS     c.c     279
+REG_ENOSYS     c-src/emacs/src/regex.h 297
+REG_EPAREN     c-src/emacs/src/regex.h 311
+REG_ERANGE     c-src/emacs/src/regex.h 314
+REG_ERANGEX    c-src/emacs/src/regex.h 322
+REG_ERPAREN    c-src/emacs/src/regex.h 321
+REG_ESIZE      c-src/emacs/src/regex.h 320
+REG_ESPACE     c-src/emacs/src/regex.h 315
+REG_ESUBREG    c-src/emacs/src/regex.h 309
+REG_EXTENDED   c-src/emacs/src/regex.h 263
+REG_ICASE      c-src/emacs/src/regex.h 267
+REG_NEWLINE    c-src/emacs/src/regex.h 272
+REG_NOERROR    c-src/emacs/src/regex.h 300
+REG_NOMATCH    c-src/emacs/src/regex.h 301
+REG_NOSUB      c-src/emacs/src/regex.h 276
+REG_NOTBOL     c-src/emacs/src/regex.h 286
+REG_NOTEOL     c-src/emacs/src/regex.h 289
+RESUME_POLLING c-src/emacs/src/keyboard.c      2170
+RETURN_UNGCPRO c-src/emacs/src/lisp.h  /^#define RETURN_UNGCPRO(expr)          
        \\$/
+RE_BACKSLASH_ESCAPE_IN_LISTS   c-src/emacs/src/regex.h 47
+RE_BK_PLUS_QM  c-src/emacs/src/regex.h 52
+RE_CHAR_CLASSES        c-src/emacs/src/regex.h 58
+RE_CONTEXT_INDEP_ANCHORS       c-src/emacs/src/regex.h 72
+RE_CONTEXT_INDEP_OPS   c-src/emacs/src/regex.h 80
+RE_CONTEXT_INVALID_OPS c-src/emacs/src/regex.h 84
+RE_DEBUG       c-src/emacs/src/regex.h 161
+RE_DOT_NEWLINE c-src/emacs/src/regex.h 88
+RE_DOT_NOT_NULL        c-src/emacs/src/regex.h 92
+RE_DUP_MAX     c-src/emacs/src/regex.h 253
+RE_DUP_MAX     c-src/emacs/src/regex.h 256
+RE_FRUGAL      c-src/emacs/src/regex.h 147
+RE_HAT_LISTS_NOT_NEWLINE       c-src/emacs/src/regex.h 96
+RE_INTERVALS   c-src/emacs/src/regex.h 101
+RE_LIMITED_OPS c-src/emacs/src/regex.h 105
+RE_NEWLINE_ALT c-src/emacs/src/regex.h 109
+RE_NO_BK_BRACES        c-src/emacs/src/regex.h 114
+RE_NO_BK_PARENS        c-src/emacs/src/regex.h 118
+RE_NO_BK_REFS  c-src/emacs/src/regex.h 122
+RE_NO_BK_VBAR  c-src/emacs/src/regex.h 126
+RE_NO_EMPTY_RANGES     c-src/emacs/src/regex.h 132
+RE_NO_GNU_OPS  c-src/emacs/src/regex.h 144
+RE_NO_NEWLINE_ANCHOR   c-src/emacs/src/regex.h 153
+RE_NO_POSIX_BACKTRACKING       c-src/emacs/src/regex.h 140
+RE_NREGS       c-src/emacs/src/regex.h 440
+RE_SHY_GROUPS  c-src/emacs/src/regex.h 150
+RE_SYNTAX_AWK  c-src/emacs/src/regex.h 186
+RE_SYNTAX_ED   c-src/emacs/src/regex.h 216
+RE_SYNTAX_EGREP        c-src/emacs/src/regex.h 206
+RE_SYNTAX_EMACS        c-src/emacs/src/regex.h 183
+RE_SYNTAX_GNU_AWK      c-src/emacs/src/regex.h 193
+RE_SYNTAX_GREP c-src/emacs/src/regex.h 201
+RE_SYNTAX_POSIX_AWK    c-src/emacs/src/regex.h 197
+RE_SYNTAX_POSIX_BASIC  c-src/emacs/src/regex.h 225
+RE_SYNTAX_POSIX_EGREP  c-src/emacs/src/regex.h 212
+RE_SYNTAX_POSIX_EXTENDED       c-src/emacs/src/regex.h 234
+RE_SYNTAX_POSIX_MINIMAL_BASIC  c-src/emacs/src/regex.h 231
+RE_SYNTAX_POSIX_MINIMAL_EXTENDED       c-src/emacs/src/regex.h 242
+RE_SYNTAX_SED  c-src/emacs/src/regex.h 218
+RE_TRANSLATE_TYPE      c-src/emacs/src/regex.h 332
+RE_UNMATCHED_RIGHT_PAREN_ORD   c-src/emacs/src/regex.h 136
+RSH    y-src/cccp.c    17
+RTE/s  ada-src/2ataspri.adb    /^   package RTE renames 
Interfaces.C.POSIX_RTE;$/
+RUN    Makefile        /^RUN=$/
+Range  cp-src/Range.h  35
+Range::Range   cp-src/Range.h  /^  Range (void)$/
+Range::Range   cp-src/Range.h  /^  Range (const Range& r)$/
+Range::Range   cp-src/Range.h  /^  Range (double b, double l)$/
+Range::Range   cp-src/Range.h  /^  Range (double b, double l, double i)$/
+Range::base    cp-src/Range.h  /^  double base (void) const { return rng_base; 
 }$/
+Range::inc     cp-src/Range.h  /^  double inc (void) const { return rng_inc;   
}$/
+Range::limit   cp-src/Range.h  /^  double limit (void) const { return 
rng_limit; }$/
+Range::nelem   cp-src/Range.h  /^  int nelem (void) const { return rng_nelem; 
}$/
+Range::rng_base        cp-src/Range.h  79
+Range::rng_inc cp-src/Range.h  81
+Range::rng_limit       cp-src/Range.h  80
+Range::rng_nelem       cp-src/Range.h  83
+Range::set_base        cp-src/Range.h  /^  void set_base (double b) { rng_base 
= b;  }$/
+Range::set_inc cp-src/Range.h  /^  void set_inc (double i) { rng_inc = i;   }$/
+Range::set_limit       cp-src/Range.h  /^  void set_limit (double l) { 
rng_limit = l; }$/
+ReadVacation   cp-src/functions.cpp    /^void ReadVacation ( char *filename ) 
{$/
+Read_Lock/p    ada-src/2ataspri.adb    /^   procedure Read_Lock (L : in out 
Lock; Ceiling_V/
+Read_Lock/p    ada-src/2ataspri.ads    /^   procedure Read_Lock (L : in out 
Lock; Ceiling_V/
+ReleaseNameString      pas-src/common.pas      /^procedure ReleaseNameString; 
(* (var NSP: NameStri/
+RemoveLayer    lua-src/allegro.lua     /^function RemoveLayer ()$/
+RemoveUnderlineControl pas-src/common.pas      /^function 
RemoveUnderlineControl; (*($/
+ReprOfChar     pas-src/common.pas      /^function ReprOfChar; (*( ch : char) : 
NameString;*/
+S      c.c     156
+SAFE_ALLOCA    c-src/emacs/src/lisp.h  /^#define SAFE_ALLOCA(size) ((size) <= 
sa_avail                         \\/
+SAFE_ALLOCA_LISP       c-src/emacs/src/lisp.h  /^#define SAFE_ALLOCA_LISP(buf, 
nelt)                          \\$/
+SAFE_ALLOCA_STRING     c-src/emacs/src/lisp.h  /^#define 
SAFE_ALLOCA_STRING(ptr, string)                       \\$/
+SAFE_FREE      c-src/emacs/src/lisp.h  /^#define SAFE_FREE()                   
\\$/
+SAFE_NALLOCA   c-src/emacs/src/lisp.h  /^#define SAFE_NALLOCA(buf, multiplier, 
nitems)                  \\/
+SAVE_FUNCPOINTER       c-src/emacs/src/lisp.h  2049
+SAVE_INTEGER   c-src/emacs/src/lisp.h  2048
+SAVE_OBJECT    c-src/emacs/src/lisp.h  2051
+SAVE_POINTER   c-src/emacs/src/lisp.h  2050
+SAVE_SLOT_BITS c-src/emacs/src/lisp.h  2055
+SAVE_TYPE_BITS c-src/emacs/src/lisp.h  2062
+SAVE_TYPE_FUNCPTR_PTR_OBJ      c-src/emacs/src/lisp.h  2076
+SAVE_TYPE_INT_INT      c-src/emacs/src/lisp.h  2066
+SAVE_TYPE_INT_INT_INT  c-src/emacs/src/lisp.h  2067
+SAVE_TYPE_MEMORY       c-src/emacs/src/lisp.h  2080
+SAVE_TYPE_OBJ_OBJ      c-src/emacs/src/lisp.h  2069
+SAVE_TYPE_OBJ_OBJ_OBJ  c-src/emacs/src/lisp.h  2070
+SAVE_TYPE_OBJ_OBJ_OBJ_OBJ      c-src/emacs/src/lisp.h  2071
+SAVE_TYPE_PTR_INT      c-src/emacs/src/lisp.h  2073
+SAVE_TYPE_PTR_OBJ      c-src/emacs/src/lisp.h  2074
+SAVE_TYPE_PTR_PTR      c-src/emacs/src/lisp.h  2075
+SAVE_UNUSED    c-src/emacs/src/lisp.h  2047
+SAVE_VALUEP    c-src/emacs/src/lisp.h  /^SAVE_VALUEP (Lisp_Object x)$/
+SAVE_VALUE_SLOTS       c-src/emacs/src/lisp.h  2058
+SBYTES c-src/emacs/src/lisp.h  /^SBYTES (Lisp_Object string)$/
+SCHARS c-src/emacs/src/lisp.h  /^SCHARS (Lisp_Object string)$/
+SCREEN_FP      cp-src/screen.hpp       /^#define SCREEN_FP(x,y) \\$/
+SCREEN_START   cp-src/screen.hpp       33
+SDATA  c-src/emacs/src/lisp.h  /^SDATA (Lisp_Object string)$/
+SDTrefGetInteger       pas-src/common.pas      /^function SDTrefGetInteger : 
integer;$/
+SDTrefIsEnd    pas-src/common.pas      /^function SDTrefIsEnd : Boolean;$/
+SDTrefRecToString      pas-src/common.pas      /^procedure SDTrefRecToString  
(* ($/
+SDTrefSkipSpaces       pas-src/common.pas      /^procedure SDTrefSkipSpaces;$/
+SDTrefStringToRec      pas-src/common.pas      /^procedure SDTrefStringToRec 
(* ($/
+SETPRT f-src/entry.for /^       ENTRY  SETPRT ( SHORT, EXPL, LONG, TRACE, D/
+SETPRT f-src/entry.strange_suffix      /^       ENTRY  SETPRT ( SHORT, EXPL, 
LONG, TRACE, D/
+SET_SYMBOL_BLV c-src/emacs/src/lisp.h  /^SET_SYMBOL_BLV (struct Lisp_Symbol 
*sym, struct Li/
+SET_SYMBOL_FWD c-src/emacs/src/lisp.h  /^SET_SYMBOL_FWD (struct Lisp_Symbol 
*sym, union Lis/
+SET_SYMBOL_VAL c-src/emacs/src/lisp.h  /^# define SET_SYMBOL_VAL(sym, v) 
lisp_h_SET_SYMBOL_/
+SIMPLIFIED     cp-src/cfront.H 231
+SINGLE_LETTER_MOD      c-src/emacs/src/keyboard.c      /^#define 
SINGLE_LETTER_MOD(BIT)                                \\$/
+SINGLE_LETTER_MOD      c-src/emacs/src/keyboard.c      6212
+SINGLE_LETTER_MOD      c-src/emacs/src/keyboard.c      /^#define 
SINGLE_LETTER_MOD(BIT)                                \\$/
+SINGLE_LETTER_MOD      c-src/emacs/src/keyboard.c      6763
+SIZEFORMAT     objc-src/PackInsp.m     57
+SPECPDL_BACKTRACE      c-src/emacs/src/lisp.h  2948
+SPECPDL_LET    c-src/emacs/src/lisp.h  2949
+SPECPDL_LET_DEFAULT    c-src/emacs/src/lisp.h  2952
+SPECPDL_LET_LOCAL      c-src/emacs/src/lisp.h  2951
+SPECPDL_UNWIND c-src/emacs/src/lisp.h  2944
+SPECPDL_UNWIND_INT     c-src/emacs/src/lisp.h  2946
+SPECPDL_UNWIND_PTR     c-src/emacs/src/lisp.h  2945
+SPECPDL_UNWIND_VOID    c-src/emacs/src/lisp.h  2947
+SRCS   Makefile        /^SRCS=Makefile ${ADASRC} ${ASRC} ${CSRC} ${CPSRC} $/
+SREF   c-src/emacs/src/lisp.h  /^SREF (Lisp_Object string, ptrdiff_t index)$/
+SSDATA c-src/emacs/src/lisp.h  /^SSDATA (Lisp_Object string)$/
+SSET   c-src/emacs/src/lisp.h  /^SSET (Lisp_Object string, ptrdiff_t index, 
unsigne/
+STACK_CONS     c-src/emacs/src/lisp.h  /^#define STACK_CONS(a, b) \\$/
+STATE_ABORT    php-src/lce_functions.php       25
+STATE_COMPRESSD        objc-src/PackInsp.m     54
+STATE_INSTALLED        objc-src/PackInsp.m     53
+STATE_LOOP     php-src/lce_functions.php       27
+STATE_OK       php-src/lce_functions.php       26
+STATE_UNINSTALLED      objc-src/PackInsp.m     52
+STAT_EQ        objc-src/PackInsp.m     /^#define STAT_EQ(s1, s2)       
((s1)->st_ino == (s2)->st_/
+STDIN  c-src/etags.c   408
+STDIN  c-src/etags.c   411
+STOP_POLLING   c-src/emacs/src/keyboard.c      2166
+STRING_BYTES   c-src/emacs/src/lisp.h  /^STRING_BYTES (struct Lisp_String *s)$/
+STRING_BYTES_BOUND     c-src/emacs/src/lisp.h  1261
+STRING_MULTIBYTE       c-src/emacs/src/lisp.h  /^STRING_MULTIBYTE (Lisp_Object 
str)$/
+STRING_SET_CHARS       c-src/emacs/src/lisp.h  /^STRING_SET_CHARS (Lisp_Object 
string, ptrdiff_t ne/
+STRING_SET_MULTIBYTE   c-src/emacs/src/lisp.h  /^#define 
STRING_SET_MULTIBYTE(STR)                     \\$/
+STRING_SET_UNIBYTE     c-src/emacs/src/lisp.h  /^#define 
STRING_SET_UNIBYTE(STR)                               \\$/
+SUBRP  c-src/emacs/src/lisp.h  /^SUBRP (Lisp_Object a)$/
+SUB_CHAR_TABLE_OFFSET  c-src/emacs/src/lisp.h  1701
+SUB_CHAR_TABLE_P       c-src/emacs/src/lisp.h  /^SUB_CHAR_TABLE_P (Lisp_Object 
a)$/
+SXHASH_REDUCE  c-src/emacs/src/lisp.h  /^SXHASH_REDUCE (EMACS_UINT x)$/
+SYMBOLP        c-src/emacs/src/lisp.h  /^# define SYMBOLP(x) lisp_h_SYMBOLP 
(x)$/
+SYMBOL_BLV     c-src/emacs/src/lisp.h  /^SYMBOL_BLV (struct Lisp_Symbol *sym)$/
+SYMBOL_CONSTANT_P      c-src/emacs/src/lisp.h  /^# define 
SYMBOL_CONSTANT_P(sym) lisp_h_SYMBOL_CONS/
+SYMBOL_FORWARDED       c-src/emacs/src/lisp.h  651
+SYMBOL_FWD     c-src/emacs/src/lisp.h  /^SYMBOL_FWD (struct Lisp_Symbol *sym)$/
+SYMBOL_INDEX   c-src/emacs/src/lisp.h  /^#define SYMBOL_INDEX(sym) i##sym$/
+SYMBOL_INTERNED        c-src/emacs/src/lisp.h  642
+SYMBOL_INTERNED_IN_INITIAL_OBARRAY     c-src/emacs/src/lisp.h  643
+SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P   c-src/emacs/src/lisp.h  
/^SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P (Lisp_Object /
+SYMBOL_INTERNED_P      c-src/emacs/src/lisp.h  /^SYMBOL_INTERNED_P 
(Lisp_Object sym)$/
+SYMBOL_LOCALIZED       c-src/emacs/src/lisp.h  650
+SYMBOL_NAME    c-src/emacs/src/lisp.h  /^SYMBOL_NAME (Lisp_Object sym)$/
+SYMBOL_PLAINVAL        c-src/emacs/src/lisp.h  648
+SYMBOL_UNINTERNED      c-src/emacs/src/lisp.h  641
+SYMBOL_VAL     c-src/emacs/src/lisp.h  /^# define SYMBOL_VAL(sym) 
lisp_h_SYMBOL_VAL (sym)$/
+SYMBOL_VARALIAS        c-src/emacs/src/lisp.h  649
+SYSCALL        c-src/machsyscalls.c    /^#define       SYSCALL(name, number, 
type, args, typed_ar/
+Sample tex-src/gzip.texi       /address@hidden Sample, Invoking gzip, 
Overview, Top$/
+Scheme_functions       c-src/etags.c   /^Scheme_functions (FILE *inf)$/
+Scheme_help    c-src/etags.c   667
+Scheme_suffixes        c-src/etags.c   665
+SecurityManager        java-src/SMan.java      80
+SecurityManager.SecurityManager        java-src/SMan.java      /^    protected 
SecurityManager() {$/
+SecurityManager.checkAccept    java-src/SMan.java      /^    public void 
checkAccept(String host, int port)/
+SecurityManager.checkAccess    java-src/SMan.java      /^    public void 
checkAccess(Thread g) {$/
+SecurityManager.checkAccess    java-src/SMan.java      /^    public void 
checkAccess(ThreadGroup g) {$/
+SecurityManager.checkAwtEventQueueAccess       java-src/SMan.java      /^    
public void checkAwtEventQueueAccess() {$/
+SecurityManager.checkConnect   java-src/SMan.java      /^    public void 
checkConnect(String host, int port/
+SecurityManager.checkConnect   java-src/SMan.java      /^    public void 
checkConnect(String host, int port/
+SecurityManager.checkCreateClassLoader java-src/SMan.java      /^    public 
void checkCreateClassLoader() {$/
+SecurityManager.checkDelete    java-src/SMan.java      /^    public void 
checkDelete(String file) {$/
+SecurityManager.checkExec      java-src/SMan.java      /^    public void 
checkExec(String cmd) {$/
+SecurityManager.checkExit      java-src/SMan.java      /^    public void 
checkExit(int status) {$/
+SecurityManager.checkLink      java-src/SMan.java      /^    public void 
checkLink(String lib) {$/
+SecurityManager.checkListen    java-src/SMan.java      /^    public void 
checkListen(int port) {$/
+SecurityManager.checkMemberAccess      java-src/SMan.java      /^    public 
void checkMemberAccess(Class clazz, int/
+SecurityManager.checkMulticast java-src/SMan.java      /^    public void 
checkMulticast(InetAddress maddr) /
+SecurityManager.checkMulticast java-src/SMan.java      /^    public void 
checkMulticast(InetAddress maddr, /
+SecurityManager.checkPackageAccess     java-src/SMan.java      /^    public 
void checkPackageAccess(String pkg) {$/
+SecurityManager.checkPackageDefinition java-src/SMan.java      /^    public 
void checkPackageDefinition(String pkg)/
+SecurityManager.checkPrintJobAccess    java-src/SMan.java      /^    public 
void checkPrintJobAccess() {$/
+SecurityManager.checkPropertiesAccess  java-src/SMan.java      /^    public 
void checkPropertiesAccess() {$/
+SecurityManager.checkPropertyAccess    java-src/SMan.java      /^    public 
void checkPropertyAccess(String key) {$/
+SecurityManager.checkRead      java-src/SMan.java      /^    public void 
checkRead(FileDescriptor fd) {$/
+SecurityManager.checkRead      java-src/SMan.java      /^    public void 
checkRead(String file) {$/
+SecurityManager.checkRead      java-src/SMan.java      /^    public void 
checkRead(String file, Object cont/
+SecurityManager.checkSecurityAccess    java-src/SMan.java      /^    public 
void checkSecurityAccess(String action)/
+SecurityManager.checkSetFactory        java-src/SMan.java      /^    public 
void checkSetFactory() {$/
+SecurityManager.checkSystemClipboardAccess     java-src/SMan.java      /^    
public void checkSystemClipboardAccess() {$/
+SecurityManager.checkTopLevelWindow    java-src/SMan.java      /^    public 
boolean checkTopLevelWindow(Object wind/
+SecurityManager.checkWrite     java-src/SMan.java      /^    public void 
checkWrite(FileDescriptor fd) {$/
+SecurityManager.checkWrite     java-src/SMan.java      /^    public void 
checkWrite(String file) {$/
+SecurityManager.currentLoadedClass     java-src/SMan.java      /^    protected 
Class currentLoadedClass() {$/
+SecurityManager.getInCheck     java-src/SMan.java      /^    public boolean 
getInCheck() {$/
+SecurityManager.getSecurityContext     java-src/SMan.java      /^    public 
Object getSecurityContext() {$/
+SecurityManager.getThreadGroup java-src/SMan.java      /^    public 
ThreadGroup getThreadGroup() {$/
+SecurityManager.inCheck        java-src/SMan.java      87
+SecurityManager.inClass        java-src/SMan.java      /^    protected boolean 
inClass(String name) {$/
+SecurityManager.inClassLoader  java-src/SMan.java      /^    protected boolean 
inClassLoader() {$/
+SecurityManager.initialized    java-src/SMan.java      90
+SelectLayer    lua-src/allegro.lua     /^function SelectLayer (layer)$/
+Self/f ada-src/2ataspri.adb    /^   function Self return TCB_Ptr is$/
+Self/f ada-src/2ataspri.ads    /^   function Self return TCB_Ptr;$/
+Server pyt-src/server.py       /^class Server:$/
+ServerEdit     pyt-src/server.py       /^class ServerEdit(Frame):$/
+Set_Own_Priority/p     ada-src/2ataspri.adb    /^   procedure Set_Own_Priority 
(Prio : System.Any_P/
+Set_Own_Priority/p     ada-src/2ataspri.ads    /^   procedure Set_Own_Priority 
(Prio : System.Any_P/
+Set_Priority/p ada-src/2ataspri.adb    /^   procedure Set_Priority$/
+Set_Priority/p ada-src/2ataspri.ads    /^   procedure Set_Priority (T : 
TCB_Ptr; Prio : Sys/
+SimpleCalc     objcpp-src/SimpleCalc.H /address@hidden SimpleCalc:Object$/
+SkipBlanks     pas-src/common.pas      /^function SkipBlanks; (*($/
+SkipChars      pas-src/common.pas      /^function SkipChars; (*($/
+SkipSpaces     pas-src/common.pas      /^procedure SkipSpaces; (* (Str : 
NameString; var I /
+Sort_Id_Exit   cp-src/abstract.H       490
+Sort_Id_Exit::SetCollapsed     cp-src/abstract.C       /^void 
Sort_Id_Exit::SetCollapsed(char t)$/
+Sort_Id_Exit::SetDimensions    cp-src/abstract.C       /^void 
Sort_Id_Exit::SetDimensions(void)$/
+Sort_Id_Exit::SetFather        cp-src/abstract.C       /^void 
Sort_Id_Exit::SetFather(Tree_Node *f)$/
+Sort_Id_Exit::SetPosition      cp-src/abstract.C       /^void 
Sort_Id_Exit::SetPosition(Coord xx, Coord yy)/
+Sort_Id_Exit::Sort_Id_Exit     cp-src/abstract.C       
/^Sort_Id_Exit::Sort_Id_Exit(ID_Place *s)$/
+Sort_Id_Exit::sort_id  cp-src/abstract.H       492
+Specification  cp-src/abstract.H       308
+Specification::GetMaxX cp-src/abstract.C       /^Coord 
Specification::GetMaxX()$/
+Specification::GetMaxY cp-src/abstract.C       /^Coord 
Specification::GetMaxY()$/
+Specification::MaxX    cp-src/abstract.H       321
+Specification::MaxY    cp-src/abstract.H       321
+Specification::SetDimensions   cp-src/abstract.C       /^void 
Specification::SetDimensions(void)$/
+Specification::SetFather       cp-src/abstract.C       /^void 
Specification::SetFather(Tree_Node *f)$/
+Specification::SetPath cp-src/abstract.C       /^void 
Specification::SetPath(int& np, int& nd)$/
+Specification::SetPosition     cp-src/abstract.C       /^void 
Specification::SetPosition(Coord xx, Coord yy/
+Specification::Specification   cp-src/abstract.C       
/^Specification::Specification(Comment_List *c_l, ID/
+Specification::com_list        cp-src/abstract.H       312
+Specification::com_list1       cp-src/abstract.H       316
+Specification::def     cp-src/abstract.H       319
+Specification::dt_list cp-src/abstract.H       318
+Specification::func    cp-src/abstract.H       317
+Specification::gate_list       cp-src/abstract.H       314
+Specification::id_decl_list    cp-src/abstract.H       315
+Specification::ident   cp-src/abstract.H       313
+Specification::yl1     cp-src/abstract.H       320
+Specification::yl2     cp-src/abstract.H       320
+Specification::yl3     cp-src/abstract.H       320
+StartDay       cp-src/functions.cpp    /^Date StartDay(Date a,int 
days){\/\/Function to calcu/
+Stop   cp-src/abstract.H       793
+Stop::SetCollapsed     cp-src/abstract.C       /^void Stop::SetCollapsed(char 
t)$/
+Stop::SetDimensions    cp-src/abstract.C       /^void 
Stop::SetDimensions(void)$/
+Stop::SetFather        cp-src/abstract.C       /^void 
Stop::SetFather(Tree_Node *f)$/
+Stop::SetPosition      cp-src/abstract.C       /^void Stop::SetPosition(Coord 
xx, Coord yy)$/
+Stop::SetTextual       cp-src/abstract.C       /^void Stop::SetTextual(char t, 
char s)$/
+Stop::Stop     cp-src/abstract.C       /^Stop::Stop()$/
+Stop::border   cp-src/abstract.H       796
+Stop::havebox  cp-src/abstract.H       795
+StripPath      pas-src/common.pas      /^function StripPath; (*($/
+SubString      pas-src/common.pas      /^function SubString; (*($/
+Subprocess     objc-src/Subprocess.h   41
+Subprocess     objc-src/Subprocess.h   /address@hidden Subprocess:Object$/
+Subprocess(Private)    objc-src/Subprocess.m   /address@hidden 
Subprocess(Private)$/
+Sum_Gate       cp-src/abstract.H       952
+Sum_Gate::SetCollapsed cp-src/abstract.C       /^void 
Sum_Gate::SetCollapsed(char t)$/
+Sum_Gate::SetDimensions        cp-src/abstract.C       /^void 
Sum_Gate::SetDimensions(void)$/
+Sum_Gate::SetFather    cp-src/abstract.C       /^void 
Sum_Gate::SetFather(Tree_Node *f)$/
+Sum_Gate::SetPosition  cp-src/abstract.C       /^void 
Sum_Gate::SetPosition(Coord xx, Coord yy)$/
+Sum_Gate::SetTerminalPos       cp-src/abstract.C       /^void 
Sum_Gate::SetTerminalPos()$/
+Sum_Gate::SetTextual   cp-src/abstract.C       /^void 
Sum_Gate::SetTextual(char t, char s)$/
+Sum_Gate::Sum_Gate     cp-src/abstract.C       
/^Sum_Gate::Sum_Gate(Gate_Decl_List *g_d_l, Tree_Nod/
+Sum_Gate::Xch  cp-src/abstract.H       956
+Sum_Gate::Xclose       cp-src/abstract.H       956
+Sum_Gate::Ych  cp-src/abstract.H       956
+Sum_Gate::Yclose       cp-src/abstract.H       956
+Sum_Gate::bex  cp-src/abstract.H       955
+Sum_Gate::border       cp-src/abstract.H       957
+Sum_Gate::gate_decl_list       cp-src/abstract.H       954
+Sum_Gate::xl   cp-src/abstract.H       956
+Sum_Gate::yl   cp-src/abstract.H       956
+Sum_Ident      cp-src/abstract.H       972
+Sum_Ident::SetCollapsed        cp-src/abstract.C       /^void 
Sum_Ident::SetCollapsed(char t)$/
+Sum_Ident::SetDimensions       cp-src/abstract.C       /^void 
Sum_Ident::SetDimensions(void)$/
+Sum_Ident::SetFather   cp-src/abstract.C       /^void 
Sum_Ident::SetFather(Tree_Node *f)$/
+Sum_Ident::SetPosition cp-src/abstract.C       /^void 
Sum_Ident::SetPosition(Coord xx, Coord yy)$/
+Sum_Ident::SetTerminalPos      cp-src/abstract.C       /^void 
Sum_Ident::SetTerminalPos()$/
+Sum_Ident::SetTextual  cp-src/abstract.C       /^void 
Sum_Ident::SetTextual(char t, char s)$/
+Sum_Ident::Sum_Ident   cp-src/abstract.C       
/^Sum_Ident::Sum_Ident(Id_Decl_List *i_d_l, Tree_Nod/
+Sum_Ident::Xch cp-src/abstract.H       976
+Sum_Ident::Xclose      cp-src/abstract.H       976
+Sum_Ident::Ych cp-src/abstract.H       976
+Sum_Ident::Yclose      cp-src/abstract.H       976
+Sum_Ident::bex cp-src/abstract.H       975
+Sum_Ident::border      cp-src/abstract.H       977
+Sum_Ident::ident_decl_list     cp-src/abstract.H       974
+Sum_Ident::xl  cp-src/abstract.H       976
+Sum_Ident::yl  cp-src/abstract.H       976
+Syncr  cp-src/abstract.H       685
+Syncr::SetDimensions   cp-src/abstract.C       /^void 
Syncr::SetDimensions(void)$/
+Syncr::SetFather       cp-src/abstract.C       /^void 
Syncr::SetFather(Tree_Node *f)$/
+Syncr::SetPosition     cp-src/abstract.C       /^void Syncr::SetPosition(Coord 
xx, Coord yy)$/
+Syncr::Syncr   cp-src/abstract.C       /^Syncr::Syncr()$/
+System.Task_Primitives/b       ada-src/2ataspri.adb    /^package body 
System.Task_Primitives is$/
+System.Task_Primitives/s       ada-src/2ataspri.ads    /^package 
System.Task_Primitives is$/
+SystemColor    java-src/SysCol.java    37
+SystemColor.ACTIVE_CAPTION     java-src/SysCol.java    47
+SystemColor.ACTIVE_CAPTION_BORDER      java-src/SysCol.java    57
+SystemColor.ACTIVE_CAPTION_TEXT        java-src/SysCol.java    52
+SystemColor.CONTROL    java-src/SysCol.java    127
+SystemColor.CONTROL_DK_SHADOW  java-src/SysCol.java    152
+SystemColor.CONTROL_HIGHLIGHT  java-src/SysCol.java    137
+SystemColor.CONTROL_LT_HIGHLIGHT       java-src/SysCol.java    142
+SystemColor.CONTROL_SHADOW     java-src/SysCol.java    147
+SystemColor.CONTROL_TEXT       java-src/SysCol.java    132
+SystemColor.DESKTOP    java-src/SysCol.java    42
+SystemColor.INACTIVE_CAPTION   java-src/SysCol.java    62
+SystemColor.INACTIVE_CAPTION_BORDER    java-src/SysCol.java    72
+SystemColor.INACTIVE_CAPTION_TEXT      java-src/SysCol.java    67
+SystemColor.INFO       java-src/SysCol.java    162
+SystemColor.INFO_TEXT  java-src/SysCol.java    167
+SystemColor.MENU       java-src/SysCol.java    92
+SystemColor.MENU_TEXT  java-src/SysCol.java    97
+SystemColor.NUM_COLORS java-src/SysCol.java    172
+SystemColor.SCROLLBAR  java-src/SysCol.java    157
+SystemColor.SystemColor        java-src/SysCol.java    /^    private 
SystemColor(byte index) {$/
+SystemColor.TEXT       java-src/SysCol.java    102
+SystemColor.TEXT_HIGHLIGHT     java-src/SysCol.java    112
+SystemColor.TEXT_HIGHLIGHT_TEXT        java-src/SysCol.java    117
+SystemColor.TEXT_INACTIVE_TEXT java-src/SysCol.java    122
+SystemColor.TEXT_TEXT  java-src/SysCol.java    107
+SystemColor.WINDOW     java-src/SysCol.java    77
+SystemColor.WINDOW_BORDER      java-src/SysCol.java    82
+SystemColor.WINDOW_TEXT        java-src/SysCol.java    87
+SystemColor.activeCaption      java-src/SysCol.java    182
+SystemColor.activeCaptionBorder        java-src/SysCol.java    192
+SystemColor.activeCaptionText  java-src/SysCol.java    187
+SystemColor.control    java-src/SysCol.java    262
+SystemColor.controlDkShadow    java-src/SysCol.java    287
+SystemColor.controlHighlight   java-src/SysCol.java    272
+SystemColor.controlLtHighlight java-src/SysCol.java    277
+SystemColor.controlShadow      java-src/SysCol.java    282
+SystemColor.controlText        java-src/SysCol.java    267
+SystemColor.desktop    java-src/SysCol.java    177
+SystemColor.getRGB     java-src/SysCol.java    /^    public int getRGB() {$/
+SystemColor.inactiveCaption    java-src/SysCol.java    197
+SystemColor.inactiveCaptionBorder      java-src/SysCol.java    207
+SystemColor.inactiveCaptionText        java-src/SysCol.java    202
+SystemColor.info       java-src/SysCol.java    297
+SystemColor.infoText   java-src/SysCol.java    302
+SystemColor.menu       java-src/SysCol.java    227
+SystemColor.menuText   java-src/SysCol.java    232
+SystemColor.scrollbar  java-src/SysCol.java    292
+SystemColor.serialVersionUID   java-src/SysCol.java    340
+SystemColor.systemColors       java-src/SysCol.java    308
+SystemColor.text       java-src/SysCol.java    237
+SystemColor.textHighlight      java-src/SysCol.java    247
+SystemColor.textHighlightText  java-src/SysCol.java    252
+SystemColor.textInactiveText   java-src/SysCol.java    257
+SystemColor.textText   java-src/SysCol.java    242
+SystemColor.toString   java-src/SysCol.java    /^    public String toString() 
{$/
+SystemColor.updateSystemColors java-src/SysCol.java    /^    private static 
void updateSystemColors() {$/
+SystemColor.window     java-src/SysCol.java    212
+SystemColor.windowBorder       java-src/SysCol.java    217
+SystemColor.windowText java-src/SysCol.java    222
+T3     c.c     163
+TAG_PTR        c-src/emacs/src/lisp.h  /^#define TAG_PTR(tag, ptr) \\$/
+TAG_SYMOFFSET  c-src/emacs/src/lisp.h  /^#define TAG_SYMOFFSET(offset)         
                    \\$/
+TAS_Cell/t     ada-src/2ataspri.ads    /^   type TAS_Cell is private;$/
+TAS_Cell/t     ada-src/2ataspri.ads    /^   type TAS_Cell is$/
+TCB_Ptr/t      ada-src/2ataspri.ads    /^   type TCB_Ptr is access all 
Task_Control_Block;$/
+TERMINALP      c-src/emacs/src/lisp.h  /^TERMINALP (Lisp_Object a)$/
+TEST   php-src/ptest.php       1
+TEXSRC Makefile        /^TEXSRC=$(addprefix .\/tex-src\/,testenv.tex gzip.tex/
+TEXTAGS        make-src/Makefile       204
+TEXTAGS        make-src/Makefile       219
+TEX_LESC       c-src/etags.c   4986
+TEX_SESC       c-src/etags.c   4987
+TEX_clgrp      c-src/etags.c   4922
+TEX_decode_env c-src/etags.c   /^TEX_decode_env (const char *evarname, const 
char */
+TEX_defenv     c-src/etags.c   4912
+TEX_esc        c-src/etags.c   4920
+TEX_mode       c-src/etags.c   /^TEX_mode (FILE *inf)$/
+TEX_opgrp      c-src/etags.c   4921
+TEX_toktab     c-src/etags.c   4908
+TOTAL_KEYWORDS c-src/etags.c   2325
+TSL/s  ada-src/2ataspri.adb    /^   package TSL renames 
System.Tasking_Soft_Links;$/
+TYPESTOSTAT    objc-src/PackInsp.h     37
+TYPE_RANGED_INTEGERP   c-src/emacs/src/lisp.h  /^#define 
TYPE_RANGED_INTEGERP(type, x) \\$/
+Tapes  tex-src/gzip.texi       /address@hidden Tapes, Problems, Environment, 
Top$/
+Task_Control_Block/t   ada-src/2ataspri.ads    /^   type Task_Control_Block is 
record$/
+Task_Storage_Size/t    ada-src/2ataspri.ads    /^   type Task_Storage_Size is 
new Interfaces.C.size/
+Task_Type/b    ada-src/etags-test-for.ada      /^  task body Task_Type is$/
+Task_Type/b    ada-src/waroquiers.ada  /^  task body Task_Type is$/
+Task_Type/k    ada-src/etags-test-for.ada      /^  task type Task_Type is$/
+Task_Type/k    ada-src/waroquiers.ada  /^  task type Task_Type is$/
+TeX_commands   c-src/etags.c   /^TeX_commands (FILE *inf)$/
+TeX_help       c-src/etags.c   674
+TeX_suffixes   c-src/etags.c   672
+Term   cp-src/abstract.H       456
+Term::SetCollapsed     cp-src/abstract.C       /^void Term::SetCollapsed(char 
t)$/
+Term::SetDimensions    cp-src/abstract.C       /^void 
Term::SetDimensions(void)$/
+Term::SetFather        cp-src/abstract.C       /^void 
Term::SetFather(Tree_Node *f)$/
+Term::SetPosition      cp-src/abstract.C       /^void Term::SetPosition(Coord 
xx, Coord yy)$/
+Term::Term     cp-src/abstract.C       /^Term::Term(ID_Place *op, 
Value_Expr_List *el, ID_P/
+Term::expr_list        cp-src/abstract.H       459
+Term::op_ident cp-src/abstract.H       458
+Term::sort_id  cp-src/abstract.H       460
+Test_Abort/p   ada-src/2ataspri.adb    /^   procedure Test_Abort is$/
+Test_Abort/p   ada-src/2ataspri.ads    /^   procedure Test_Abort;$/
+Test_And_Set/p ada-src/2ataspri.adb    /^   procedure Test_And_Set (Cell : in 
out TAS_Cell;/
+Test_And_Set/p ada-src/2ataspri.ads    /^   procedure Test_And_Set (Cell : in 
out TAS_Cell;/
+Texinfo_help   c-src/etags.c   688
+Texinfo_nodes  c-src/etags.c   /^Texinfo_nodes (FILE *inf)$/
+Texinfo_suffixes       c-src/etags.c   686
+ThreadGroup    java-src/TG.java        54
+ThreadGroup.ThreadGroup        java-src/TG.java        /^    private 
ThreadGroup() {   \/\/ called from C code$/
+ThreadGroup.ThreadGroup        java-src/TG.java        /^    public 
ThreadGroup(String name) {$/
+ThreadGroup.ThreadGroup        java-src/TG.java        /^    public 
ThreadGroup(ThreadGroup parent, String /
+ThreadGroup.activeCount        java-src/TG.java        /^    public int 
activeCount() {$/
+ThreadGroup.activeGroupCount   java-src/TG.java        /^    public int 
activeGroupCount() {$/
+ThreadGroup.add        java-src/TG.java        /^    private final void 
add(ThreadGroup g){$/
+ThreadGroup.add        java-src/TG.java        /^    void add(Thread t) {$/
+ThreadGroup.allowThreadSuspension      java-src/TG.java        /^    public 
boolean allowThreadSuspension(boolean b/
+ThreadGroup.checkAccess        java-src/TG.java        /^    public final void 
checkAccess() {$/
+ThreadGroup.daemon     java-src/TG.java        59
+ThreadGroup.destroy    java-src/TG.java        /^    public final void 
destroy() {$/
+ThreadGroup.destroyed  java-src/TG.java        58
+ThreadGroup.enumerate  java-src/TG.java        /^    public int 
enumerate(Thread list[]) {$/
+ThreadGroup.enumerate  java-src/TG.java        /^    public int 
enumerate(Thread list[], boolean re/
+ThreadGroup.enumerate  java-src/TG.java        /^    private int 
enumerate(Thread list[], int n, bo/
+ThreadGroup.enumerate  java-src/TG.java        /^    public int 
enumerate(ThreadGroup list[]) {$/
+ThreadGroup.enumerate  java-src/TG.java        /^    public int 
enumerate(ThreadGroup list[], boole/
+ThreadGroup.enumerate  java-src/TG.java        /^    private int 
enumerate(ThreadGroup list[], int /
+ThreadGroup.getMaxPriority     java-src/TG.java        /^    public final int 
getMaxPriority() {$/
+ThreadGroup.getName    java-src/TG.java        /^    public final String 
getName() {$/
+ThreadGroup.getParent  java-src/TG.java        /^    public final ThreadGroup 
getParent() {$/
+ThreadGroup.groups     java-src/TG.java        66
+ThreadGroup.isDaemon   java-src/TG.java        /^    public final boolean 
isDaemon() {$/
+ThreadGroup.isDestroyed        java-src/TG.java        /^    public 
synchronized boolean isDestroyed() {$/
+ThreadGroup.list       java-src/TG.java        /^    public void list() {$/
+ThreadGroup.list       java-src/TG.java        /^    void list(PrintStream 
out, int indent) {$/
+ThreadGroup.maxPriority        java-src/TG.java        57
+ThreadGroup.name       java-src/TG.java        56
+ThreadGroup.ngroups    java-src/TG.java        65
+ThreadGroup.nthreads   java-src/TG.java        62
+ThreadGroup.parent     java-src/TG.java        55
+ThreadGroup.parentOf   java-src/TG.java        /^    public final boolean 
parentOf(ThreadGroup g) {/
+ThreadGroup.remove     java-src/TG.java        /^    private void 
remove(ThreadGroup g) {$/
+ThreadGroup.remove     java-src/TG.java        /^    void remove(Thread t) {$/
+ThreadGroup.resume     java-src/TG.java        /^    public final void 
resume() {$/
+ThreadGroup.setDaemon  java-src/TG.java        /^    public final void 
setDaemon(boolean daemon) {$/
+ThreadGroup.setMaxPriority     java-src/TG.java        /^    public final void 
setMaxPriority(int pri) {$/
+ThreadGroup.stop       java-src/TG.java        /^    public final void stop() 
{$/
+ThreadGroup.suspend    java-src/TG.java        /^    public final void 
suspend() {$/
+ThreadGroup.threads    java-src/TG.java        63
+ThreadGroup.toString   java-src/TG.java        /^    public String toString() 
{$/
+ThreadGroup.uncaughtException  java-src/TG.java        /^    public void 
uncaughtException(Thread t, Throwa/
+ThreadGroup.vmAllowSuspension  java-src/TG.java        60
+Time_to_position       c-src/emacs/src/keyboard.c      /^Time_to_position 
(Time encoded_pos)$/
+To_Lower       pas-src/common.pas      /^function To_Lower;(*(ch:char) : 
char;*)$/
+To_Start_Addr/f        ada-src/2ataspri.adb    /^      function To_Start_Addr 
is new$/
+To_TCB_Ptr/f   ada-src/2ataspri.adb    /^   function To_TCB_Ptr is new$/
+To_Upper       pas-src/common.pas      /^function To_Upper;(*(ch:char) : 
char;*)$/
+To_void_ptr/f  ada-src/2ataspri.adb    /^   function To_void_ptr is new$/
+Top    tex-src/gzip.texi       /address@hidden Top, , , (dir)$/
+Truc.Bidule/b  ada-src/etags-test-for.ada      /^package body Truc.Bidule is$/
+Truc.Bidule/b  ada-src/waroquiers.ada  /^package body Truc.Bidule is$/
+Truc.Bidule/s  ada-src/etags-test-for.ada      /^package Truc.Bidule is$/
+Truc.Bidule/s  ada-src/waroquiers.ada  /^package Truc.Bidule is$/
+Truc/s ada-src/etags-test-for.ada      /^package Truc is$/
+Truc/s ada-src/waroquiers.ada  /^package Truc is$/
+Type_Specific_Data/t   ada-src/etags-test-for.ada      /^   type 
Type_Specific_Data is record$/
+UCHAR  c-src/emacs/src/lisp.h  2424
+UNARY  y-src/cccp.c    18
+UNDEFINED      c-src/h.h       118
+UNEVALLED      c-src/emacs/src/lisp.h  2834
+UNGCPRO        c-src/emacs/src/lisp.h  3202
+UNGCPRO        c-src/emacs/src/lisp.h  3257
+UNGCPRO        c-src/emacs/src/lisp.h  3353
+UNLOCK c-src/emacs/src/gmalloc.c       /^#define UNLOCK()                      
        \\$/
+UNLOCK c-src/emacs/src/gmalloc.c       /^#define UNLOCK()$/
+UNLOCK_ALIGNED_BLOCKS  c-src/emacs/src/gmalloc.c       /^#define 
UNLOCK_ALIGNED_BLOCKS()                               \\$/
+UNLOCK_ALIGNED_BLOCKS  c-src/emacs/src/gmalloc.c       /^#define 
UNLOCK_ALIGNED_BLOCKS()$/
+UNPERM cp-src/cfront.H /^#define UNPERM(p) p->permanent=0$/
+UNSIGNED_CMP   c-src/emacs/src/lisp.h  /^#define UNSIGNED_CMP(a, op, b)        
                                        \\$/
+USE_LSB_TAG    c-src/emacs/src/lisp.h  271
+USE_LSB_TAG    c-src/emacs/src/lisp.h  /^DEFINE_GDB_SYMBOL_BEGIN (bool, 
USE_LSB_TAG)$/
+USE_PTHREAD    c-src/emacs/src/gmalloc.c       25
+USE_SAFE_ALLOCA        c-src/emacs/src/lisp.h  4560
+USE_STACK_CONS c-src/emacs/src/lisp.h  4689
+USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h  4652
+USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h  4658
+USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h  4659
+USE_STACK_STRING       c-src/emacs/src/lisp.h  4691
+U_CHAR cccp.y  38
+U_CHAR y-src/cccp.y    38
+Unlock/p       ada-src/2ataspri.adb    /^   procedure Unlock (L : in out Lock) 
is$/
+Unlock/p       ada-src/2ataspri.ads    /^   procedure Unlock (L : in out 
Lock);$/
+User   pyt-src/server.py       /^class User:$/
+UserEdit       pyt-src/server.py       /^class UserEdit(Frame):$/
+VALBITS        c-src/emacs/src/lisp.h  246
+VALMASK        c-src/emacs/src/lisp.h  829
+VALMASK        c-src/emacs/src/lisp.h  /^DEFINE_GDB_SYMBOL_BEGIN (EMACS_INT, 
VALMASK)$/
+VAL_MAX        c-src/emacs/src/lisp.h  263
+VECSIZE        c-src/emacs/src/lisp.h  /^#define VECSIZE(type)                 
                        \\$/
+VECTORLIKEP    c-src/emacs/src/lisp.h  /^# define VECTORLIKEP(x) 
lisp_h_VECTORLIKEP (x)$/
+VECTORP        c-src/emacs/src/lisp.h  /^VECTORP (Lisp_Object x)$/
+VERSION        c-src/etags.c   789
+VERSION        erl-src/gs_dialog.erl   /^-define(VERSION, '2001.1101').$/
+VERSION        objc-src/PackInsp.m     34
+Vabbrev_start_location c-src/abbrev.c  62
+Vabbrev_start_location_buffer  c-src/abbrev.c  65
+Vabbrev_table_name_list        c-src/abbrev.c  42
+ValToNmStr     pas-src/common.pas      /^function ValToNmStr; (*($/
+Value  cp-src/abstract.H       440
+Value::SetCollapsed    cp-src/abstract.C       /^void Value::SetCollapsed(char 
t)$/
+Value::SetDimensions   cp-src/abstract.C       /^void 
Value::SetDimensions(void)$/
+Value::SetFather       cp-src/abstract.C       /^void 
Value::SetFather(Tree_Node *f)$/
+Value::SetPosition     cp-src/abstract.C       /^void Value::SetPosition(Coord 
xx, Coord yy)$/
+Value::Value   cp-src/abstract.C       /^Value::Value(ID_Place *i, ID_Place 
*s)$/
+Value::ident   cp-src/abstract.H       442
+Value::sort_id cp-src/abstract.H       443
+Value_Expr     cp-src/abstract.H       135
+Value_Expr::SetDimensions      cp-src/abstract.C       /^void 
Value_Expr::SetDimensions(void)$/
+Value_Expr::SetFather  cp-src/abstract.C       /^void 
Value_Expr::SetFather(Tree_Node *f)$/
+Value_Expr::SetPosition        cp-src/abstract.C       /^void 
Value_Expr::SetPosition(Coord xx, Coord yy)$/
+Value_Expr::Value_Expr cp-src/abstract.C       /^Value_Expr::Value_Expr() $/
+Value_Expr_List        cp-src/abstract.H       149
+Value_Expr_List::SetCollapsed  cp-src/abstract.C       /^void 
Value_Expr_List::SetCollapsed(char t)$/
+Value_Expr_List::SetDimensions cp-src/abstract.C       /^void 
Value_Expr_List::SetDimensions(void)$/
+Value_Expr_List::SetFather     cp-src/abstract.C       /^void 
Value_Expr_List::SetFather(Tree_Node *f)$/
+Value_Expr_List::SetPosition   cp-src/abstract.C       /^void 
Value_Expr_List::SetPosition(Coord xx, Coord /
+Value_Expr_List::Value_Expr_List       cp-src/abstract.C       
/^Value_Expr_List::Value_Expr_List(Tree_Node *el, Va/
+Value_Expr_List::elem  cp-src/abstract.H       151
+Value_Expr_List::next  cp-src/abstract.H       152
+Vfundamental_mode_abbrev_table c-src/abbrev.c  51
+Vglobal_abbrev_table   c-src/abbrev.c  47
+Vlast_abbrev   c-src/abbrev.c  69
+Vlast_abbrev_text      c-src/abbrev.c  74
+Vlispy_mouse_stem      c-src/emacs/src/keyboard.c      5172
+Vpre_abbrev_expand_hook        c-src/abbrev.c  82
+WAIT_READING_MAX       c-src/emacs/src/lisp.h  4281
+WAIT_READING_MAX       c-src/emacs/src/lisp.h  4283
+WCHAR_TYPE_SIZE        cccp.y  99
+WCHAR_TYPE_SIZE        y-src/cccp.y    99
+WINDOWP        c-src/emacs/src/lisp.h  /^WINDOWP (Lisp_Object a)$/
+WINDOWSNT      c-src/etags.c   101
+WINDOWSNT      c-src/etags.c   102
+WINDOW_CONFIGURATIONP  c-src/emacs/src/lisp.h  /^WINDOW_CONFIGURATIONP 
(Lisp_Object a)$/
+WORKING        objc-src/PackInsp.m     368
+WorkingDays    cp-src/functions.cpp    /^int WorkingDays(Date a, Date b){$/
+Write_Lock/p   ada-src/2ataspri.adb    /^   procedure Write_Lock (L : in out 
Lock; Ceiling_/
+Write_Lock/p   ada-src/2ataspri.ads    /^   procedure Write_Lock (L : in out 
Lock; Ceiling_/
+X      c-src/h.h       100
+XBOOL_VECTOR   c-src/emacs/src/lisp.h  /^XBOOL_VECTOR (Lisp_Object a)$/
+XBUFFER        c-src/emacs/src/lisp.h  /^XBUFFER (Lisp_Object a)$/
+XBUFFER_OBJFWD c-src/emacs/src/lisp.h  /^XBUFFER_OBJFWD (union Lisp_Fwd *a)$/
+XCAR   c-src/emacs/src/lisp.h  /^# define XCAR(c) lisp_h_XCAR (c)$/
+XCDR   c-src/emacs/src/lisp.h  /^# define XCDR(c) lisp_h_XCDR (c)$/
+XCHAR_TABLE    c-src/emacs/src/lisp.h  /^XCHAR_TABLE (Lisp_Object a)$/
+XCHG_0 c-src/sysdep.h  47
+XCHG_1 c-src/sysdep.h  48
+XCHG_2 c-src/sysdep.h  49
+XCHG_3 c-src/sysdep.h  50
+XCHG_4 c-src/sysdep.h  51
+XCHG_5 c-src/sysdep.h  52
+XCONS  c-src/emacs/src/lisp.h  /^# define XCONS(a) lisp_h_XCONS (a)$/
+XDEFUN c.c     /^XDEFUN ("x-get-selection-internal", Fx_get_selecti/
+XFASTINT       c-src/emacs/src/lisp.h  /^#  define XFASTINT(a) lisp_h_XFASTINT 
(a)$/
+XFASTINT       c-src/emacs/src/lisp.h  /^XFASTINT (Lisp_Object a)$/
+XFINALIZER     c-src/emacs/src/lisp.h  /^XFINALIZER (Lisp_Object a)$/
+XFLOAT c-src/emacs/src/lisp.h  /^XFLOAT (Lisp_Object a)$/
+XFLOATINT      c-src/emacs/src/lisp.h  /^XFLOATINT (Lisp_Object n)$/
+XFLOAT_DATA    c-src/emacs/src/lisp.h  /^XFLOAT_DATA (Lisp_Object f)$/
+XFWDTYPE       c-src/emacs/src/lisp.h  /^XFWDTYPE (union Lisp_Fwd *a)$/
+XHASH  c-src/emacs/src/lisp.h  /^# define XHASH(a) lisp_h_XHASH (a)$/
+XHASH_TABLE    c-src/emacs/src/lisp.h  /^XHASH_TABLE (Lisp_Object a)$/
+XIL    c-src/emacs/src/lisp.h  /^# define XIL(i) lisp_h_XIL (i)$/
+XINT   c-src/emacs/src/lisp.h  /^#  define XINT(a) lisp_h_XINT (a)$/
+XINT   c-src/emacs/src/lisp.h  /^XINT (Lisp_Object a)$/
+XINTPTR        c-src/emacs/src/lisp.h  /^XINTPTR (Lisp_Object a)$/
+XLI    c-src/emacs/src/lisp.h  /^# define XLI(o) lisp_h_XLI (o)$/
+XLI_BUILTIN_LISPSYM    c-src/emacs/src/lisp.h  /^#define 
XLI_BUILTIN_LISPSYM(iname) TAG_SYMOFFSET (/
+XMARKER        c-src/emacs/src/lisp.h  /^XMARKER (Lisp_Object a)$/
+XMISC  c-src/emacs/src/lisp.h  /^XMISC (Lisp_Object a)$/
+XMISCANY       c-src/emacs/src/lisp.h  /^XMISCANY (Lisp_Object a)$/
+XMISCTYPE      c-src/emacs/src/lisp.h  /^XMISCTYPE (Lisp_Object a)$/
+XOVERLAY       c-src/emacs/src/lisp.h  /^XOVERLAY (Lisp_Object a)$/
+XPNTR  c-src/emacs/src/lisp.h  /^# define XPNTR(a) lisp_h_XPNTR (a)$/
+XPROCESS       c-src/emacs/src/lisp.h  /^XPROCESS (Lisp_Object a)$/
+XSAVE_FUNCPOINTER      c-src/emacs/src/lisp.h  /^XSAVE_FUNCPOINTER 
(Lisp_Object obj, int n)$/
+XSAVE_INTEGER  c-src/emacs/src/lisp.h  /^XSAVE_INTEGER (Lisp_Object obj, int 
n)$/
+XSAVE_OBJECT   c-src/emacs/src/lisp.h  /^XSAVE_OBJECT (Lisp_Object obj, int 
n)$/
+XSAVE_POINTER  c-src/emacs/src/lisp.h  /^XSAVE_POINTER (Lisp_Object obj, int 
n)$/
+XSAVE_VALUE    c-src/emacs/src/lisp.h  /^XSAVE_VALUE (Lisp_Object a)$/
+XSETBOOL_VECTOR        c-src/emacs/src/lisp.h  /^#define XSETBOOL_VECTOR(a, b) 
(XSETPSEUDOVECTOR (a/
+XSETBUFFER     c-src/emacs/src/lisp.h  /^#define XSETBUFFER(a, b) 
(XSETPSEUDOVECTOR (a, b, /
+XSETCDR        c-src/emacs/src/lisp.h  /^XSETCDR (Lisp_Object c, Lisp_Object 
n)$/
+XSETCHAR_TABLE c-src/emacs/src/lisp.h  /^#define XSETCHAR_TABLE(a, b) 
(XSETPSEUDOVECTOR (a,/
+XSETCOMPILED   c-src/emacs/src/lisp.h  /^#define XSETCOMPILED(a, b) 
(XSETPSEUDOVECTOR (a, b/
+XSETCONS       c-src/emacs/src/lisp.h  /^#define XSETCONS(a, b) ((a) = 
make_lisp_ptr (b, Li/
+XSETFASTINT    c-src/emacs/src/lisp.h  /^#define XSETFASTINT(a, b) ((a) = 
make_natnum (b))$/
+XSETFLOAT      c-src/emacs/src/lisp.h  /^#define XSETFLOAT(a, b) ((a) = 
make_lisp_ptr (b, L/
+XSETINT        c-src/emacs/src/lisp.h  /^#define XSETINT(a, b) ((a) = 
make_number (b))$/
+XSETMISC       c-src/emacs/src/lisp.h  /^#define XSETMISC(a, b) ((a) = 
make_lisp_ptr (b, Li/
+XSETPROCESS    c-src/emacs/src/lisp.h  /^#define XSETPROCESS(a, b) 
(XSETPSEUDOVECTOR (a, b,/
+XSETPSEUDOVECTOR       c-src/emacs/src/lisp.h  /^#define XSETPSEUDOVECTOR(a, 
b, code) \\$/
+XSETPVECTYPE   c-src/emacs/src/lisp.h  /^#define XSETPVECTYPE(v, code)         
                                \\$/
+XSETPVECTYPESIZE       c-src/emacs/src/lisp.h  /^#define XSETPVECTYPESIZE(v, 
code, lispsize, restsi/
+XSETSTRING     c-src/emacs/src/lisp.h  /^#define XSETSTRING(a, b) ((a) = 
make_lisp_ptr (b, /
+XSETSUBR       c-src/emacs/src/lisp.h  /^#define XSETSUBR(a, b) 
(XSETPSEUDOVECTOR (a, b, PV/
+XSETSUB_CHAR_TABLE     c-src/emacs/src/lisp.h  /^#define XSETSUB_CHAR_TABLE(a, 
b) (XSETPSEUDOVECTOR/
+XSETSYMBOL     c-src/emacs/src/lisp.h  /^#define XSETSYMBOL(a, b) ((a) = 
make_lisp_symbol (/
+XSETTERMINAL   c-src/emacs/src/lisp.h  /^#define XSETTERMINAL(a, b) 
(XSETPSEUDOVECTOR (a, b/
+XSETTYPED_PSEUDOVECTOR c-src/emacs/src/lisp.h  /^#define 
XSETTYPED_PSEUDOVECTOR(a, b, size, code)              /
+XSETVECTOR     c-src/emacs/src/lisp.h  /^#define XSETVECTOR(a, b) ((a) = 
make_lisp_ptr (b, /
+XSETWINDOW     c-src/emacs/src/lisp.h  /^#define XSETWINDOW(a, b) 
(XSETPSEUDOVECTOR (a, b, /
+XSETWINDOW_CONFIGURATION       c-src/emacs/src/lisp.h  /^#define 
XSETWINDOW_CONFIGURATION(a, b) \\$/
+XSET_HASH_TABLE        c-src/emacs/src/lisp.h  /^#define XSET_HASH_TABLE(VAR, 
PTR) \\$/
+XSTRING        c-src/emacs/src/lisp.h  /^XSTRING (Lisp_Object a)$/
+XSUBR  c-src/emacs/src/lisp.h  /^XSUBR (Lisp_Object a)$/
+XSUB_CHAR_TABLE        c-src/emacs/src/lisp.h  /^XSUB_CHAR_TABLE (Lisp_Object 
a)$/
+XSYMBOL        c-src/emacs/src/lisp.h  /^#  define XSYMBOL(a) lisp_h_XSYMBOL 
(a)$/
+XSYMBOL        c-src/emacs/src/lisp.h  /^XSYMBOL (Lisp_Object a)$/
+XTERMINAL      c-src/emacs/src/lisp.h  /^XTERMINAL (Lisp_Object a)$/
+XTYPE  c-src/emacs/src/lisp.h  /^#  define XTYPE(a) lisp_h_XTYPE (a)$/
+XTYPE  c-src/emacs/src/lisp.h  /^XTYPE (Lisp_Object a)$/
+XUNTAG c-src/emacs/src/lisp.h  /^#  define XUNTAG(a, type) lisp_h_XUNTAG (a, 
type)$/
+XUNTAG c-src/emacs/src/lisp.h  /^XUNTAG (Lisp_Object a, int type)$/
+XWINDOW        c-src/emacs/src/lisp.h  /^XWINDOW (Lisp_Object a)$/
+Y      c-src/h.h       100
+YACC   c-src/etags.c   2199
+YSRC   Makefile        /^YSRC=$(addprefix .\/y-src\/,parse.y parse.c atest.y /
+YYABORT        /usr/share/bison/bison.simple   153
+YYABORT        /usr/share/bison/bison.simple   153
+YYACCEPT       /usr/share/bison/bison.simple   152
+YYACCEPT       /usr/share/bison/bison.simple   152
+YYBACKUP       /usr/share/bison/bison.simple   /^#define YYBACKUP(Token, 
Value)                                        \\$/
+YYBACKUP       /usr/share/bison/bison.simple   /^#define YYBACKUP(Token, 
Value)                                        \\$/
+YYBISON        y-src/parse.c   4
+YYBISON        y-src/cccp.c    4
+YYDEBUG        parse.y 88
+YYDEBUG        cccp.y  122
+YYDPRINTF      /usr/share/bison/bison.simple   /^# define YYDPRINTF(Args)      
                \\$/
+YYDPRINTF      /usr/share/bison/bison.simple   /^# define YYDPRINTF(Args)$/
+YYDPRINTF      /usr/share/bison/bison.simple   /^# define YYDPRINTF(Args)      
                \\$/
+YYDPRINTF      /usr/share/bison/bison.simple   /^# define YYDPRINTF(Args)$/
+YYEMPTY        /usr/share/bison/bison.simple   150
+YYEMPTY        /usr/share/bison/bison.simple   150
+YYEOF  /usr/share/bison/bison.simple   151
+YYEOF  /usr/share/bison/bison.simple   151
+YYERRCODE      /usr/share/bison/bison.simple   178
+YYERRCODE      /usr/share/bison/bison.simple   178
+YYERROR        /usr/share/bison/bison.simple   154
+YYERROR        /usr/share/bison/bison.simple   154
+YYFAIL /usr/share/bison/bison.simple   158
+YYFAIL /usr/share/bison/bison.simple   158
+YYFINAL        parse.y 93
+YYFINAL        cccp.y  127
+YYFLAG parse.y 94
+YYFLAG cccp.y  128
+YYFPRINTF      /usr/share/bison/bison.simple   225
+YYFPRINTF      /usr/share/bison/bison.simple   225
+YYINITDEPTH    /usr/share/bison/bison.simple   244
+YYINITDEPTH    /usr/share/bison/bison.simple   244
+YYLAST parse.y 266
+YYLAST cccp.y  274
+YYLEX  /usr/share/bison/bison.simple   200
+YYLEX  /usr/share/bison/bison.simple   202
+YYLEX  /usr/share/bison/bison.simple   206
+YYLEX  /usr/share/bison/bison.simple   208
+YYLEX  /usr/share/bison/bison.simple   212
+YYLEX  /usr/share/bison/bison.simple   200
+YYLEX  /usr/share/bison/bison.simple   202
+YYLEX  /usr/share/bison/bison.simple   206
+YYLEX  /usr/share/bison/bison.simple   208
+YYLEX  /usr/share/bison/bison.simple   212
+YYLLOC_DEFAULT /usr/share/bison/bison.simple   /^# define 
YYLLOC_DEFAULT(Current, Rhs, N)              \\$/
+YYLLOC_DEFAULT /usr/share/bison/bison.simple   /^# define 
YYLLOC_DEFAULT(Current, Rhs, N)              \\$/
+YYMAXDEPTH     /usr/share/bison/bison.simple   255
+YYMAXDEPTH     /usr/share/bison/bison.simple   259
+YYMAXDEPTH     /usr/share/bison/bison.simple   255
+YYMAXDEPTH     /usr/share/bison/bison.simple   259
+YYNTBASE       parse.y 95
+YYNTBASE       cccp.y  129
+YYPARSE_PARAM_ARG      /usr/share/bison/bison.simple   351
+YYPARSE_PARAM_ARG      /usr/share/bison/bison.simple   354
+YYPARSE_PARAM_ARG      /usr/share/bison/bison.simple   358
+YYPARSE_PARAM_ARG      /usr/share/bison/bison.simple   351
+YYPARSE_PARAM_ARG      /usr/share/bison/bison.simple   354
+YYPARSE_PARAM_ARG      /usr/share/bison/bison.simple   358
+YYPARSE_PARAM_DECL     /usr/share/bison/bison.simple   352
+YYPARSE_PARAM_DECL     /usr/share/bison/bison.simple   355
+YYPARSE_PARAM_DECL     /usr/share/bison/bison.simple   359
+YYPARSE_PARAM_DECL     /usr/share/bison/bison.simple   352
+YYPARSE_PARAM_DECL     /usr/share/bison/bison.simple   355
+YYPARSE_PARAM_DECL     /usr/share/bison/bison.simple   359
+YYPOPSTACK     /usr/share/bison/bison.simple   445
+YYPOPSTACK     /usr/share/bison/bison.simple   447
+YYPOPSTACK     /usr/share/bison/bison.simple   445
+YYPOPSTACK     /usr/share/bison/bison.simple   447
+YYRECOVERING   /usr/share/bison/bison.simple   /^#define YYRECOVERING()  
(!!yyerrstatus)$/
+YYRECOVERING   /usr/share/bison/bison.simple   /^#define YYRECOVERING()  
(!!yyerrstatus)$/
+YYSIZE_T       /usr/share/bison/bison.simple   51
+YYSIZE_T       /usr/share/bison/bison.simple   56
+YYSIZE_T       /usr/share/bison/bison.simple   71
+YYSIZE_T       /usr/share/bison/bison.simple   75
+YYSIZE_T       /usr/share/bison/bison.simple   128
+YYSIZE_T       /usr/share/bison/bison.simple   131
+YYSIZE_T       /usr/share/bison/bison.simple   136
+YYSIZE_T       /usr/share/bison/bison.simple   140
+YYSIZE_T       /usr/share/bison/bison.simple   145
+YYSIZE_T       /usr/share/bison/bison.simple   51
+YYSIZE_T       /usr/share/bison/bison.simple   56
+YYSIZE_T       /usr/share/bison/bison.simple   71
+YYSIZE_T       /usr/share/bison/bison.simple   75
+YYSIZE_T       /usr/share/bison/bison.simple   128
+YYSIZE_T       /usr/share/bison/bison.simple   131
+YYSIZE_T       /usr/share/bison/bison.simple   136
+YYSIZE_T       /usr/share/bison/bison.simple   140
+YYSIZE_T       /usr/share/bison/bison.simple   145
+YYSTACK_ALLOC  /usr/share/bison/bison.simple   50
+YYSTACK_ALLOC  /usr/share/bison/bison.simple   55
+YYSTACK_ALLOC  /usr/share/bison/bison.simple   59
+YYSTACK_ALLOC  /usr/share/bison/bison.simple   78
+YYSTACK_ALLOC  /usr/share/bison/bison.simple   50
+YYSTACK_ALLOC  /usr/share/bison/bison.simple   55
+YYSTACK_ALLOC  /usr/share/bison/bison.simple   59
+YYSTACK_ALLOC  /usr/share/bison/bison.simple   78
+YYSTACK_BYTES  /usr/share/bison/bison.simple   /^#  define YYSTACK_BYTES(N) 
\\$/
+YYSTACK_BYTES  /usr/share/bison/bison.simple   /^#  define YYSTACK_BYTES(N) 
\\$/
+YYSTACK_BYTES  /usr/share/bison/bison.simple   /^#  define YYSTACK_BYTES(N) 
\\$/
+YYSTACK_BYTES  /usr/share/bison/bison.simple   /^#  define YYSTACK_BYTES(N) 
\\$/
+YYSTACK_FREE   /usr/share/bison/bison.simple   /^#  define YYSTACK_FREE(Ptr) 
do { \/* empty *\/; } wh/
+YYSTACK_FREE   /usr/share/bison/bison.simple   79
+YYSTACK_FREE   /usr/share/bison/bison.simple   /^#  define YYSTACK_FREE(Ptr) 
do { \/* empty *\/; } wh/
+YYSTACK_FREE   /usr/share/bison/bison.simple   79
+YYSTACK_GAP_MAX        /usr/share/bison/bison.simple   93
+YYSTACK_GAP_MAX        /usr/share/bison/bison.simple   93
+YYSTACK_RELOCATE       /usr/share/bison/bison.simple   /^# define 
YYSTACK_RELOCATE(Type, Stack)                                        \\$/
+YYSTACK_RELOCATE       /usr/share/bison/bison.simple   548
+YYSTACK_RELOCATE       /usr/share/bison/bison.simple   /^# define 
YYSTACK_RELOCATE(Type, Stack)                                        \\$/
+YYSTACK_RELOCATE       /usr/share/bison/bison.simple   548
+YYSTD  /usr/share/bison/bison.simple   /^# define YYSTD(x) std::x$/
+YYSTD  /usr/share/bison/bison.simple   /^# define YYSTD(x) x$/
+YYSTD  /usr/share/bison/bison.simple   /^# define YYSTD(x) std::x$/
+YYSTD  /usr/share/bison/bison.simple   /^# define YYSTD(x) x$/
+YYSTYPE        y-src/parse.y   71
+YYSTYPE        y-src/parse.y   72
+YYSTYPE        parse.y 71
+YYSTYPE        parse.y 72
+YYSTYPE        parse.y 85
+YYSTYPE        cccp.y  119
+YYTERROR       /usr/share/bison/bison.simple   177
+YYTERROR       /usr/share/bison/bison.simple   177
+YYTRANSLATE    parse.y /^#define YYTRANSLATE(x) ((unsigned)(x) <= 278 ? yyt/
+YYTRANSLATE    cccp.y  /^#define YYTRANSLATE(x) ((unsigned)(x) <= 269 ? yyt/
+YY_DECL_NON_LSP_VARIABLES      /usr/share/bison/bison.simple   374
+YY_DECL_NON_LSP_VARIABLES      /usr/share/bison/bison.simple   374
+YY_DECL_VARIABLES      /usr/share/bison/bison.simple   385
+YY_DECL_VARIABLES      /usr/share/bison/bison.simple   391
+YY_DECL_VARIABLES      /usr/share/bison/bison.simple   385
+YY_DECL_VARIABLES      /usr/share/bison/bison.simple   391
+Yacc_entries   c-src/etags.c   /^Yacc_entries (FILE *inf)$/
+Yacc_help      c-src/etags.c   693
+Yacc_suffixes  c-src/etags.c   691
+Z      c-src/h.h       100
+\      tex-src/texinfo.tex     /^\\def\\ {{\\fontdimen2\\font=\\tclosesave{} 
}}%$/
+\      tex-src/texinfo.tex     /^\\gdef\\sepspaces{\\def {\\ }}}$/
+\'     tex-src/texinfo.tex     /^\\def\\'{{'}}$/
+\*     tex-src/texinfo.tex     
/^\\def\\*{\\hfil\\break\\hbox{}\\ignorespaces}$/
+\.     tex-src/texinfo.tex     /^\\def\\.{.\\spacefactor=3000 }$/
+\1     c-src/abbrev.c  /^  DEFVAR_LISP ("abbrev-table-name-list", &Vabbrev_/
+\1     c-src/abbrev.c  /^  DEFVAR_LISP ("global-abbrev-table", &Vglobal_abb/
+\1     c-src/abbrev.c  /^  DEFVAR_LISP ("fundamental-mode-abbrev-table", &V/
+\1     c-src/abbrev.c  /^  DEFVAR_LISP ("last-abbrev", &Vlast_abbrev,
+    "/
+\1     c-src/abbrev.c  /^  DEFVAR_LISP ("last-abbrev-text", &Vlast_abbrev_t/
+\1     c-src/abbrev.c  /^  DEFVAR_INT ("last-abbrev-location", &last_abbrev/
+\1     c-src/abbrev.c  /^  DEFVAR_LISP ("abbrev-start-location", &Vabbrev_s/
+\1     c-src/abbrev.c  /^  DEFVAR_LISP ("abbrev-start-location-buffer", &Va/
+\1     c-src/abbrev.c  /^  DEFVAR_PER_BUFFER ("local-abbrev-table", &curren/
+\1     c-src/abbrev.c  /^  DEFVAR_BOOL ("abbrevs-changed", &abbrevs_changed/
+\1     c-src/abbrev.c  /^  DEFVAR_BOOL ("abbrev-all-caps", &abbrev_all_caps/
+\1     c-src/abbrev.c  /^  DEFVAR_LISP ("pre-abbrev-expand-hook", &Vpre_abb/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("internal--top-level-message", Vint/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("last-command-event", 
last_command_/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("last-nonmenu-event", 
last_nonmenu_/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("last-input-event", 
last_input_even/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("unread-command-events", Vunread_co/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("unread-post-input-method-events", /
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("unread-input-method-events", Vunre/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("meta-prefix-char", 
meta_prefix_cha/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_KBOARD ("last-command", 
Vlast_command,
+               /
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_KBOARD ("real-last-command", 
Vreal_last_c/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_KBOARD 
("last-repeatable-command", Vlast_/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("this-command", 
Vthis_command,
+          /
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("real-this-command", 
Vreal_this_com/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("this-command-keys-shift-translated/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("this-original-command", Vthis_orig/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_INT ("auto-save-interval", 
auto_save_inte/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("auto-save-timeout", 
Vauto_save_tim/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("echo-keystrokes", 
Vecho_keystrokes/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_INT ("polling-period", 
polling_period,
+        /
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("double-click-time", 
Vdouble_click_/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_INT ("double-click-fuzz", 
double_click_fu/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_INT ("num-input-keys", 
num_input_keys,
+        /
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_INT 
("num-nonmacro-input-events", num_non/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("last-event-frame", 
Vlast_event_fra/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("tty-erase-char", 
Vtty_erase_char,
+/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("help-char", 
Vhelp_char,
+              do/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("help-event-list", 
Vhelp_event_list/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("help-form", 
Vhelp_form,
+              do/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("prefix-help-command", 
Vprefix_help/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("top-level", 
Vtop_level,
+              do/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_KBOARD 
("keyboard-translate-table", Vkeyb/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_BOOL ("cannot-suspend", 
cannot_suspend,
+       /
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_BOOL ("menu-prompting", 
menu_prompting,
+       /
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("menu-prompt-more-char", menu_promp/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_INT 
("extra-keyboard-modifiers", extra_ke/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("deactivate-mark", 
Vdeactivate_mark/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("pre-command-hook", 
Vpre_command_ho/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("post-command-hook", 
Vpost_command_/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("echo-area-clear-hook", ...,
+            /
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("lucid-menu-bar-dirty-flag", Vlucid/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("menu-bar-final-items", Vmenu_bar_f/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("tool-bar-separator-image-expressio/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_KBOARD 
("overriding-terminal-local-map",
+/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("overriding-local-map", Voverriding/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("overriding-local-map-menu-flag", V/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("special-event-map", 
Vspecial_event/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("track-mouse", 
do_mouse_tracking,
+       /
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_KBOARD ("system-key-alist", 
Vsystem_key_a/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_KBOARD 
("local-function-key-map", Vlocal_/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_KBOARD ("input-decode-map", 
Vinput_decode/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("function-key-map", 
Vfunction_key_m/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("key-translation-map", 
Vkey_transla/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("deferred-action-list", Vdeferred_a/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("deferred-action-function", Vdeferr/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("delayed-warnings-list", Vdelayed_w/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("timer-list", 
Vtimer_list,
+              /
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("timer-idle-list", 
Vtimer_idle_list/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("input-method-function", Vinput_met/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("input-method-previous-message",
+        /
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("show-help-function", 
Vshow_help_fu/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("disable-point-adjustment", Vdisabl/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("global-disable-point-adjustment",
+/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("minibuffer-message-timeout", Vmini/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("throw-on-input", 
Vthrow_on_input,
+/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("command-error-function", Vcommand_/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("enable-disabled-menus-and-buttons"/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("select-active-regions",
+              Vs/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("saved-region-selection",
+              V/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP 
("selection-inhibit-update-commands"/
+\1     c-src/emacs/src/keyboard.c      /^  DEFVAR_LISP ("debug-on-event",
+               Vd/
+\:     tex-src/texinfo.tex     /^\\def\\:{\\spacefactor=1000 }$/
+\@     tex-src/texinfo.tex     /address@hidden \\char '100}}$/
+\@     tex-src/texinfo.tex     /address@hidden@}%$/
+\CHAPFopen     tex-src/texinfo.tex     /^\\def\\CHAPFopen{$/
+\CHAPFplain    tex-src/texinfo.tex     /^\\def\\CHAPFplain{$/
+\CHAPPAGodd    tex-src/texinfo.tex     /^\\def\\CHAPPAGodd{$/
+\CHAPPAGoff    tex-src/texinfo.tex     /^\\def\\CHAPPAGoff{$/
+\CHAPPAGon     tex-src/texinfo.tex     /^\\def\\CHAPPAGon{$/
+\ENVcheck      tex-src/texinfo.tex     /^\\def\\ENVcheck{%$/
+\Ealphaenumerate       tex-src/texinfo.tex     
/^\\def\\Ealphaenumerate{\\Eenumerate}$/
+\Ecapsenumerate        tex-src/texinfo.tex     
/^\\def\\Ecapsenumerate{\\Eenumerate}$/
+\Ecartouche    tex-src/texinfo.tex     /^\\def\\Ecartouche{%$/
+\Edescription  tex-src/texinfo.tex     /^\\def\\Edescription{\\Etable}% 
Neccessary kludge.$/
+\Edisplay      tex-src/texinfo.tex     
/^\\def\\Edisplay{\\endgroup\\afterenvbreak}%$/
+\Eexample      tex-src/texinfo.tex     /^\\def\\Eexample{\\Elisp}$/
+\Eflushleft    tex-src/texinfo.tex     
/^\\def\\Eflushleft{\\endgroup\\afterenvbreak}%$/
+\Eflushright   tex-src/texinfo.tex     
/^\\def\\Eflushright{\\endgroup\\afterenvbreak}%$/
+\Eformat       tex-src/texinfo.tex     
/^\\def\\Eformat{\\endgroup\\afterenvbreak}$/
+\Eftable       tex-src/texinfo.tex     
/^\\def\\Eftable{\\endgraf\\endgroup\\afterenvbreak}%$/
+\Egroup        tex-src/texinfo.tex     /^  \\def\\Egroup{\\egroup\\endgroup}%$/
+\Eifclear      tex-src/texinfo.tex     /^\\def\\Eifclear{}$/
+\Eifset        tex-src/texinfo.tex     /^\\def\\Eifset{}$/
+\Eiftex        tex-src/texinfo.tex     /^\\def\\Eiftex{}$/
+\Elisp tex-src/texinfo.tex     /^\\def\\Elisp{\\endgroup\\afterenvbreak}%$/
+\Equotation    tex-src/texinfo.tex     
/^\\def\\Equotation{\\par\\endgroup\\afterenvbreak}%$/
+\Esmallexample tex-src/texinfo.tex     /^\\def\\Esmallexample{\\Elisp}$/
+\Esmallexample tex-src/texinfo.tex     
/^\\global\\def\\Esmallexample{\\Esmalllisp}$/
+\Esmalllisp    tex-src/texinfo.tex     
/^\\def\\Esmalllisp{\\endgroup\\afterenvbreak}%$/
+\Etable        tex-src/texinfo.tex     
/^\\def\\Etable{\\endgraf\\endgroup\\afterenvbreak}%$/
+\Etitlepage    tex-src/texinfo.tex     /^\\def\\Etitlepage{%$/
+\Evtable       tex-src/texinfo.tex     
/^\\def\\Evtable{\\endgraf\\endgroup\\afterenvbreak}%$/
+\HEADINGSafter tex-src/texinfo.tex     
/^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/
+\HEADINGSdouble        tex-src/texinfo.tex     /^\\def\\HEADINGSdouble{$/
+\HEADINGSdoublex       tex-src/texinfo.tex     /^\\def\\HEADINGSdoublex{%$/
+\HEADINGSoff   tex-src/texinfo.tex     /^\\def\\HEADINGSoff{$/
+\HEADINGSon    tex-src/texinfo.tex     /^\\def\\HEADINGSon{\\HEADINGSdouble}$/
+\HEADINGSon    tex-src/texinfo.tex     
/^\\global\\def\\HEADINGSon{\\HEADINGSsingle}}$/
+\HEADINGSon    tex-src/texinfo.tex     
/^\\global\\def\\HEADINGSon{\\HEADINGSdouble}}$/
+\HEADINGSsingle        tex-src/texinfo.tex     /^\\def\\HEADINGSsingle{$/
+\HEADINGSsingleafter   tex-src/texinfo.tex     
/^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/
+\HEADINGSsinglex       tex-src/texinfo.tex     /^\\def\\HEADINGSsinglex{%$/
+\TeX   tex-src/texinfo.tex     /^\\def\\TeX{\\realbackslash TeX}%$/
+\TeX   tex-src/texinfo.tex     /^\\def\\TeX{\\realbackslash TeX}$/
+\Yappendixletterandtype        tex-src/texinfo.tex     
/^\\def\\Yappendixletterandtype{%$/
+\Ynothing      tex-src/texinfo.tex     /^\\def\\Ynothing{}$/
+\Ypagenumber   tex-src/texinfo.tex     /^\\def\\Ypagenumber{\\folio}$/
+\Ysectionnumberandtype tex-src/texinfo.tex     
/^\\def\\Ysectionnumberandtype{%$/
+\Ytitle        tex-src/texinfo.tex     /^\\def\\Ytitle{\\thischapter}$/
+\_     tex-src/texinfo.tex     /^\\def\\_{{\\realbackslash _}}%$/
+\_     tex-src/texinfo.tex     /^\\def\\_{\\lvvmode \\kern.06em \\vbox{\\hrule 
width.3em /
+\`     tex-src/texinfo.tex     /^\\def\\`{{`}}$/
+\aboveenvbreak tex-src/texinfo.tex     
/^\\def\\aboveenvbreak{{\\advance\\aboveenvskipamount by/
+\activedoublequote     tex-src/texinfo.tex     
/^\\def\\activedoublequote{{\\tt \\char '042}}$/
+\activeparens  tex-src/texinfo.tex     /^\\def\\activeparens{%$/
+\afourpaper    tex-src/texinfo.tex     /^\\def\\afourpaper{$/
+\afterenvbreak tex-src/texinfo.tex     /^\\def\\afterenvbreak{\\endgraf 
\\ifdim\\lastskip<\\above/
+\alphaenumerate        tex-src/texinfo.tex     
/^\\def\\alphaenumerate{\\enumerate{a}}$/
+\appendix      tex-src/texinfo.tex     
/^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/
+\appendixletter        tex-src/texinfo.tex     
/^\\def\\appendixletter{\\char\\the\\appendixno}$/
+\appendixnoderef       tex-src/texinfo.tex     
/^\\def\\appendixnoderef{\\ifx\\lastnode\\relax\\else$/
+\appendixsec   tex-src/texinfo.tex     
/^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/
+\appendixsection       tex-src/texinfo.tex     
/^\\outer\\def\\appendixsection{\\parsearg\\appendixsecti/
+\appendixsectionzzz    tex-src/texinfo.tex     /^\\def\\appendixsectionzzz 
#1{\\seccheck{appendixsecti/
+\appendixsetref        tex-src/texinfo.tex     /^\\def\\appendixsetref#1{%$/
+\appendixsubsec        tex-src/texinfo.tex     
/^\\outer\\def\\appendixsubsec{\\parsearg\\appendixsubsec/
+\appendixsubseczzz     tex-src/texinfo.tex     /^\\def\\appendixsubseczzz 
#1{\\seccheck{appendixsubsec/
+\appendixsubsubsec     tex-src/texinfo.tex     
/^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/
+\appendixsubsubseczzz  tex-src/texinfo.tex     /^\\def\\appendixsubsubseczzz 
#1{\\seccheck{appendixsub/
+\appendixzzz   tex-src/texinfo.tex     /^\\def\\appendixzzz 
#1{\\seccheck{appendix}%$/
+\asis  tex-src/texinfo.tex     /^\\def\\asis#1{#1}$/
+\author        tex-src/texinfo.tex     /^   
\\def\\author{\\parsearg\\authorzzz}%$/
+\authorfont    tex-src/texinfo.tex     /^   \\def\\authorfont{\\authorrm 
\\normalbaselineskip =/
+\authorzzz     tex-src/texinfo.tex     /^   
\\def\\authorzzz##1{\\ifseenauthor\\else\\vskip 0pt /
+\b     tex-src/texinfo.tex     /^\\def\\b#1{{\\bf #1}}$/
+\b     tex-src/texinfo.tex     /^\\def\\b##1{\\realbackslash b {##1}}%$/
+\b     tex-src/texinfo.tex     /^\\def\\b##1{\\realbackslash b {##1}}$/
+\balancecolumns        tex-src/texinfo.tex     /^\\def\\balancecolumns{%$/
+\begin tex-src/texinfo.tex     /^\\outer\\def\\begin{\\parsearg\\beginxxx}$/
+\begindoublecolumns    tex-src/texinfo.tex     
/^\\def\\begindoublecolumns{\\begingroup$/
+\beginxxx      tex-src/texinfo.tex     /^\\def\\beginxxx #1{%$/
+\bf    tex-src/texinfo.tex     /^\\def\\bf{\\realbackslash bf }%$/
+\bf    tex-src/texinfo.tex     /^\\def\\bf{\\realbackslash bf }$/
+\bullet        tex-src/texinfo.tex     /^\\def\\bullet{$\\ptexbullet$}$/
+\bye   tex-src/texinfo.tex     
/^\\outer\\def\\bye{\\pagealignmacro\\tracingstats=1\\ptex/
+\capsenumerate tex-src/texinfo.tex     /^\\def\\capsenumerate{\\enumerate{A}}$/
+\cartbot       tex-src/texinfo.tex     /^\\def\\cartbot{\\hbox to 
\\cartouter{\\hskip\\lskip$/
+\cartouche     tex-src/texinfo.tex     /^\\long\\def\\cartouche{%$/
+\carttop       tex-src/texinfo.tex     /^\\def\\carttop{\\hbox to 
\\cartouter{\\hskip\\lskip$/
+\cbl   tex-src/texinfo.tex     /^\\def\\cbl{{\\circle\\char'012\\hskip -6pt}}$/
+\cbr   tex-src/texinfo.tex     /^\\def\\cbr{{\\hskip 6pt\\circle\\char'011}}$/
+\center        tex-src/texinfo.tex     /^\\def\\center{\\parsearg\\centerzzz}$/
+\centerzzz     tex-src/texinfo.tex     /^\\def\\centerzzz #1{{\\advance\\hsize 
by -\\leftskip$/
+\chapbreak     tex-src/texinfo.tex     /^\\def\\chapbreak{\\dobreak 
\\chapheadingskip {-4000}}$/
+\chapentry     tex-src/texinfo.tex     
/^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/
+\chapentryfonts        tex-src/texinfo.tex     
/^\\def\\chapentryfonts{\\secfonts \\rm}$/
+\chapfonts     tex-src/texinfo.tex     /^\\def\\chapfonts{%$/
+\chapheading   tex-src/texinfo.tex     
/^\\def\\chapheading{\\parsearg\\chapheadingzzz}$/
+\chapheadingzzz        tex-src/texinfo.tex     /^\\def\\chapheadingzzz 
#1{\\chapbreak %$/
+\chapoddpage   tex-src/texinfo.tex     /^\\def\\chapoddpage{\\chappager 
\\ifodd\\pageno \\else \\h/
+\chappager     tex-src/texinfo.tex     
/^\\def\\chappager{\\par\\vfill\\supereject}$/
+\chapter       tex-src/texinfo.tex     
/^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/
+\chapternofonts        tex-src/texinfo.tex     /^\\def\\chapternofonts{%$/
+\chapterzzz    tex-src/texinfo.tex     /^\\def\\chapterzzz 
#1{\\seccheck{chapter}%$/
+\char  tex-src/texinfo.tex     /^\\def\\char{\\realbackslash char}%$/
+\char  tex-src/texinfo.tex     /^\\def\\char{\\realbackslash char}$/
+\chfopen       tex-src/texinfo.tex     /^\\def\\chfopen #1#2{\\chapoddpage 
{\\chapfonts$/
+\chfplain      tex-src/texinfo.tex     /^\\def\\chfplain #1#2{%$/
+\cindex        tex-src/texinfo.tex     /^\\def\\cindex {\\cpindex}$/
+\cindexsub     tex-src/texinfo.tex     /^\\def\\cindexsub 
{\\begingroup\\obeylines\\cindexsub}$/
+\cite  tex-src/texinfo.tex     /^\\def\\cite##1{\\realbackslash cite {##1}}%$/
+\cite  tex-src/texinfo.tex     /^\\def\\cite##1{\\realbackslash cite {##1}}$/
+\clear tex-src/texinfo.tex     /^\\def\\clear{\\parsearg\\clearxxx}$/
+\clearxxx      tex-src/texinfo.tex     /^\\def\\clearxxx #1{$/
+\code  tex-src/texinfo.tex     /^\\def\\code##1{\\realbackslash code {##1}}%$/
+\code  tex-src/texinfo.tex     /^\\def\\code##1{\\realbackslash code {##1}}$/
+\comment       tex-src/texinfo.tex     /^\\def\\comment{\\catcode 64=\\other 
\\catcode 123=\\othe/
+\commentxxx    tex-src/texinfo.tex     /^\\def\\commentxxx #1{\\catcode 64=0 
\\catcode 123=1 \\c/
+\contents      tex-src/texinfo.tex     /^\\outer\\def\\contents{%$/
+\copyright     tex-src/texinfo.tex     /^\\def\\copyright{\\realbackslash 
copyright }%$/
+\copyright     tex-src/texinfo.tex     /^\\def\\copyright{\\realbackslash 
copyright}$/
+\cropmarks     tex-src/texinfo.tex     
/^\\def\\cropmarks{\\let\\onepageout=\\croppageout }$/
+\croppageout   tex-src/texinfo.tex     /^\\def\\croppageout#1{\\hoffset=0pt % 
make sure this d/
+\ctl   tex-src/texinfo.tex     /^\\def\\ctl{{\\circle\\char'013\\hskip -6pt}}% 
6pt from /
+\ctr   tex-src/texinfo.tex     /^\\def\\ctr{{\\hskip 6pt\\circle\\char'010}}$/
+\ctrl  tex-src/texinfo.tex     /^\\def\\ctrl #1{{\\tt \\rawbackslash 
\\hat}#1}$/
+\defcodeindex  tex-src/texinfo.tex     
/^\\def\\defcodeindex{\\parsearg\\newcodeindex}$/
+\defcv tex-src/texinfo.tex     /^\\def\\defcv #1 {\\def\\defcvtype{#1}%$/
+\defcvarheader tex-src/texinfo.tex     /^\\def\\defcvarheader #1#2#3{%$/
+\defcvx        tex-src/texinfo.tex     /^\\def\\defcvx #1 address@hidden in 
invalid con/
+\deffn tex-src/texinfo.tex     
/^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/
+\deffnheader   tex-src/texinfo.tex     /^\\def\\deffnheader #1#2#3{\\doind 
{fn}{\\code{#2}}%$/
+\deffnx        tex-src/texinfo.tex     /^\\def\\deffnx #1 address@hidden in 
invalid con/
+\defindex      tex-src/texinfo.tex     
/^\\def\\defindex{\\parsearg\\newindex}$/
+\defivar       tex-src/texinfo.tex     
/^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/
+\defivarheader tex-src/texinfo.tex     /^\\def\\defivarheader #1#2#3{%$/
+\defivarx      tex-src/texinfo.tex     /^\\def\\defivarx #1 address@hidden in 
invalid/
+\defmac        tex-src/texinfo.tex     
/^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/
+\defmacheader  tex-src/texinfo.tex     /^\\def\\defmacheader #1#2{\\doind 
{fn}{\\code{#1}}% Mak/
+\defmacx       tex-src/texinfo.tex     /^\\def\\defmacx #1 address@hidden in 
invalid c/
+\defmethod     tex-src/texinfo.tex     
/^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/
+\defmethodheader       tex-src/texinfo.tex     /^\\def\\defmethodheader 
#1#2#3{%$/
+\defmethodx    tex-src/texinfo.tex     /^\\def\\defmethodx #1 address@hidden 
in inv/
+\defmethparsebody      tex-src/texinfo.tex     /^\\def\\defmethparsebody 
#1#2#3#4 {\\begingroup\\inENV /
+\defname       tex-src/texinfo.tex     /^\\def\\defname #1#2{%$/
+\defop tex-src/texinfo.tex     /^\\def\\defop #1 {\\def\\defoptype{#1}%$/
+\defopheader   tex-src/texinfo.tex     /^\\def\\defopheader #1#2#3{%$/
+\defopparsebody        tex-src/texinfo.tex     /^\\def\\defopparsebody 
#1#2#3#4#5 {\\begingroup\\inENV /
+\defopt        tex-src/texinfo.tex     
/^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/
+\defoptheader  tex-src/texinfo.tex     /^\\def\\defoptheader #1#2{\\doind 
{vr}{\\code{#1}}% Mak/
+\defoptx       tex-src/texinfo.tex     /^\\def\\defoptx #1 address@hidden in 
invalid c/
+\defopvarparsebody     tex-src/texinfo.tex     /^\\def\\defopvarparsebody 
#1#2#3#4#5 {\\begingroup\\inE/
+\defopx        tex-src/texinfo.tex     /^\\def\\defopx #1 address@hidden in 
invalid con/
+\defparsebody  tex-src/texinfo.tex     /^\\def\\defparsebody 
#1#2#3{\\begingroup\\inENV% Enviro/
+\defspec       tex-src/texinfo.tex     
/^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/
+\defspecheader tex-src/texinfo.tex     /^\\def\\defspecheader #1#2{\\doind 
{fn}{\\code{#1}}% Ma/
+\defspecx      tex-src/texinfo.tex     /^\\def\\defspecx #1 address@hidden in 
invalid/
+\deftp tex-src/texinfo.tex     
/^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/
+\deftpargs     tex-src/texinfo.tex     /^\\def\\deftpargs #1{\\bf 
\\defvarargs{#1}}$/
+\deftpheader   tex-src/texinfo.tex     /^\\def\\deftpheader #1#2#3{\\doind 
{tp}{\\code{#2}}%$/
+\deftpx        tex-src/texinfo.tex     /^\\def\\deftpx #1 address@hidden in 
invalid con/
+\deftypefn     tex-src/texinfo.tex     
/^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/
+\deftypefnheader       tex-src/texinfo.tex     /^\\def\\deftypefnheader 
#1#2#3{\\deftypefnheaderx{#1}{/
+\deftypefnheaderx      tex-src/texinfo.tex     /^\\def\\deftypefnheaderx 
#1#2#3 #4\\relax{%$/
+\deftypefnx    tex-src/texinfo.tex     /^\\def\\deftypefnx #1 address@hidden 
in inv/
+\deftypefun    tex-src/texinfo.tex     
/^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/
+\deftypefunargs        tex-src/texinfo.tex     /^\\def\\deftypefunargs #1{%$/
+\deftypefunheader      tex-src/texinfo.tex     /^\\def\\deftypefunheader 
#1#2{\\deftypefunheaderx{#1}#/
+\deftypefunheaderx     tex-src/texinfo.tex     /^\\def\\deftypefunheaderx #1#2 
#3\\relax{%$/
+\deftypeunx    tex-src/texinfo.tex     /^\\def\\deftypeunx #1 address@hidden 
in inv/
+\deftypevar    tex-src/texinfo.tex     
/^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/
+\deftypevarheader      tex-src/texinfo.tex     /^\\def\\deftypevarheader 
#1#2{%$/
+\deftypevarx   tex-src/texinfo.tex     /^\\def\\deftypevarx #1 address@hidden 
in i/
+\deftypevr     tex-src/texinfo.tex     
/^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/
+\deftypevrheader       tex-src/texinfo.tex     /^\\def\\deftypevrheader 
#1#2#3{\\doind {vr}{\\code{#3}}/
+\deftypevrx    tex-src/texinfo.tex     /^\\def\\deftypevrx #1 address@hidden 
in inv/
+\defun tex-src/texinfo.tex     
/^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/
+\defunargs     tex-src/texinfo.tex     /^\\def\\defunargs #1{\\functionparens 
\\sl$/
+\defunheader   tex-src/texinfo.tex     /^\\def\\defunheader #1#2{\\doind 
{fn}{\\code{#1}}% Make/
+\defunx        tex-src/texinfo.tex     /^\\def\\defunx #1 address@hidden in 
invalid con/
+\defvar        tex-src/texinfo.tex     
/^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/
+\defvarargs    tex-src/texinfo.tex     /^\\def\\defvarargs #1{\\normalparens 
#1%$/
+\defvarheader  tex-src/texinfo.tex     /^\\def\\defvarheader #1#2{\\doind 
{vr}{\\code{#1}}% Mak/
+\defvarparsebody       tex-src/texinfo.tex     /^\\def\\defvarparsebody 
#1#2#3{\\begingroup\\inENV% Env/
+\defvarx       tex-src/texinfo.tex     /^\\def\\defvarx #1 address@hidden in 
invalid c/
+\defvr tex-src/texinfo.tex     
/^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/
+\defvrheader   tex-src/texinfo.tex     /^\\def\\defvrheader #1#2#3{\\doind 
{vr}{\\code{#2}}%$/
+\defvrparsebody        tex-src/texinfo.tex     /^\\def\\defvrparsebody 
#1#2#3#4 {\\begingroup\\inENV %$/
+\defvrx        tex-src/texinfo.tex     /^\\def\\defvrx #1 address@hidden in 
invalid con/
+\description   tex-src/texinfo.tex     
/^\\def\\description{\\tablez{\\dontindex}{1}{}{}{}{}}$/
+\df    tex-src/texinfo.tex     /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = 
\\defbf \\bf}/
+\dfn   tex-src/texinfo.tex     /^\\def\\dfn##1{\\realbackslash dfn {##1}}$/
+\direntry      tex-src/texinfo.tex     
/^\\def\\direntry{\\begingroup\\direntryxxx}$/
+\direntryxxx   tex-src/texinfo.tex     /^\\long\\def\\direntryxxx #1\\end 
direntry{\\endgroup\\ig/
+\display       tex-src/texinfo.tex     /^\\def\\display{\\begingroup\\inENV 
%This group ends at/
+\dmn   tex-src/texinfo.tex     /^\\def\\dmn#1{\\thinspace #1}$/
+\dobreak       tex-src/texinfo.tex     
/^\\def\\dobreak#1#2{\\par\\ifdim\\lastskip<#1\\removelast/
+\dochapentry   tex-src/texinfo.tex     /^\\def\\dochapentry#1#2{%$/
+\docodeindex   tex-src/texinfo.tex     
/^\\def\\docodeindex#1{\\edef\\indexname{#1}\\parsearg\\si/
+\doind tex-src/texinfo.tex     /^\\def\\doind #1#2{%$/
+\doindex       tex-src/texinfo.tex     
/^\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\single/
+\donoderef     tex-src/texinfo.tex     
/^\\def\\donoderef{\\ifx\\lastnode\\relax\\else$/
+\dontindex     tex-src/texinfo.tex     /^\\def\\dontindex #1{}$/
+\dopageno      tex-src/texinfo.tex     /^\\def\\dopageno#1{{\\rm #1}}$/
+\doprintindex  tex-src/texinfo.tex     /^\\def\\doprintindex#1{%$/
+\dosecentry    tex-src/texinfo.tex     /^\\def\\dosecentry#1#2{%$/
+\dosetq        tex-src/texinfo.tex     /^\\def\\dosetq #1#2{{\\let\\folio=0 
\\turnoffactive%$/
+\doshortpageno tex-src/texinfo.tex     /^\\def\\doshortpageno#1{{\\rm #1}}$/
+\dosubind      tex-src/texinfo.tex     /^\\def\\dosubind #1#2#3{%$/
+\dosubsecentry tex-src/texinfo.tex     /^\\def\\dosubsecentry#1#2{%$/
+\dosubsubsecentry      tex-src/texinfo.tex     
/^\\def\\dosubsubsecentry#1#2{%$/
+\dots  tex-src/texinfo.tex     /^\\def\\dots{$\\ldots$}$/
+\dots  tex-src/texinfo.tex     /^\\def\\dots{\\realbackslash dots }%$/
+\dots  tex-src/texinfo.tex     /^\\def\\dots{\\realbackslash dots}$/
+\doublecolumnout       tex-src/texinfo.tex     
/^\\def\\doublecolumnout{\\splittopskip=\\topskip \\split/
+\emph  tex-src/texinfo.tex     /^\\def\\emph##1{\\realbackslash emph {##1}}$/
+\end   tex-src/texinfo.tex     /^\\def\\end{\\parsearg\\endxxx}$/
+\enddoublecolumns      tex-src/texinfo.tex     
/^\\def\\enddoublecolumns{\\output={\\balancecolumns}\\ej/
+\endxxx        tex-src/texinfo.tex     /^\\def\\endxxx #1{%$/
+\entry tex-src/texinfo.tex     /^\\def\\entry #1#2{\\begingroup$/
+\enumerate     tex-src/texinfo.tex     
/^\\def\\enumerate{\\parsearg\\enumeratezzz}$/
+\enumeratey    tex-src/texinfo.tex     /^\\def\\enumeratey #1 
#2\\endenumeratey{%$/
+\enumeratezzz  tex-src/texinfo.tex     /^\\def\\enumeratezzz #1{\\enumeratey 
#1  \\endenumerate/
+\equiv tex-src/texinfo.tex     /^\\def\\equiv{\\realbackslash equiv}$/
+\equiv tex-src/texinfo.tex     /^\\def\\equiv{\\leavevmode\\lower.1ex\\hbox to 
1em{\\hfil/
+\error tex-src/texinfo.tex     
/^\\def\\error{\\leavevmode\\lower.7ex\\copy\\errorbox}$/
+\errorE        tex-src/texinfo.tex     /^\\def\\errorE#1{$/
+\evenfooting   tex-src/texinfo.tex     
/^\\def\\evenfooting{\\parsearg\\evenfootingxxx}$/
+\evenheading   tex-src/texinfo.tex     
/^\\def\\evenheading{\\parsearg\\evenheadingxxx}$/
+\everyfooting  tex-src/texinfo.tex     
/^\\def\\everyfooting{\\parsearg\\everyfootingxxx}$/
+\everyheading  tex-src/texinfo.tex     
/^\\def\\everyheading{\\parsearg\\everyheadingxxx}$/
+\ewbot tex-src/texinfo.tex     /^\\def\\ewbot{\\vrule height0pt 
depth\\cornerthick widt/
+\ewtop tex-src/texinfo.tex     /^\\def\\ewtop{\\vrule height\\cornerthick 
depth0pt widt/
+\exdent        tex-src/texinfo.tex     /^\\def\\exdent{\\parsearg\\exdentyyy}$/
+\exdentyyy     tex-src/texinfo.tex     /^\\def\\exdentyyy 
#1{{\\hfil\\break\\hbox{\\kern -\\exdent/
+\expansion     tex-src/texinfo.tex     /^\\def\\expansion{\\realbackslash 
expansion}$/
+\expansion     tex-src/texinfo.tex     
/^\\def\\expansion{\\leavevmode\\raise.1ex\\hbox to 1em{\\/
+\file  tex-src/texinfo.tex     /^\\def\\file##1{\\realbackslash file {##1}}%$/
+\file  tex-src/texinfo.tex     /^\\def\\file##1{\\realbackslash file {##1}}$/
+\finalout      tex-src/texinfo.tex     /^\\def\\finalout{\\overfullrule=0pt}$/
+\findex        tex-src/texinfo.tex     /^\\def\\findex {\\fnindex}$/
+\finishtitlepage       tex-src/texinfo.tex     /^\\def\\finishtitlepage{%$/
+\flushcr       tex-src/texinfo.tex     /^\\def\\flushcr{\\ifx\\par\\lisppar 
\\def\\next##1{}\\else /
+\flushleft     tex-src/texinfo.tex     /^\\def\\flushleft{%$/
+\flushright    tex-src/texinfo.tex     /^\\def\\flushright{%$/
+\fnitemindex   tex-src/texinfo.tex     /^\\def\\fnitemindex #1{\\doind 
{fn}{\\code{#1}}}%$/
+\format        tex-src/texinfo.tex     /^\\def\\format{\\begingroup\\inENV 
%This group ends at /
+\frenchspacing tex-src/texinfo.tex     /^\\def\\frenchspacing{\\sfcode46=1000 
\\sfcode63=1000 \\/
+\ftable        tex-src/texinfo.tex     
/^\\def\\ftable{\\begingroup\\inENV\\obeylines\\obeyspaces/
+\gloggingall   tex-src/texinfo.tex     /^\\def\\gloggingall{\\begingroup 
\\globaldefs = 1 \\logg/
+\group tex-src/texinfo.tex     /^\\def\\group{\\begingroup$/
+\gtr   tex-src/texinfo.tex     /^\\def\\gtr{\\realbackslash gtr}%$/
+\gtr   tex-src/texinfo.tex     /^\\def\\gtr{\\realbackslash gtr}$/
+\hat   tex-src/texinfo.tex     /^\\def\\hat{\\realbackslash hat}%$/
+\hat   tex-src/texinfo.tex     /^\\def\\hat{\\realbackslash hat}$/
+\heading       tex-src/texinfo.tex     
/^\\def\\heading{\\parsearg\\secheadingi}$/
+\headings      tex-src/texinfo.tex     /^\\def\\headings #1 {\\csname 
HEADINGS#1\\endcsname}$/
+\i     tex-src/texinfo.tex     /^\\def\\i##1{\\realbackslash i {##1}}%$/
+\i     tex-src/texinfo.tex     /^\\def\\i##1{\\realbackslash i {##1}}$/
+\ifclear       tex-src/texinfo.tex     
/^\\def\\ifclear{\\begingroup\\ignoresections\\parsearg\\i/
+\ifclearfail   tex-src/texinfo.tex     
/^\\def\\ifclearfail{\\begingroup\\ignoresections\\ifclea/
+\ifclearfailxxx        tex-src/texinfo.tex     /^\\long\\def\\ifclearfailxxx 
#1\\end ifclear{\\endgroup\\/
+\ifclearxxx    tex-src/texinfo.tex     /^\\def\\ifclearxxx #1{\\endgroup$/
+\ifinfo        tex-src/texinfo.tex     
/^\\def\\ifinfo{\\begingroup\\ignoresections\\ifinfoxxx}$/
+\ifinfoxxx     tex-src/texinfo.tex     /^\\long\\def\\ifinfoxxx #1\\end 
ifinfo{\\endgroup\\ignore/
+\ifset tex-src/texinfo.tex     
/^\\def\\ifset{\\begingroup\\ignoresections\\parsearg\\ifs/
+\ifsetfail     tex-src/texinfo.tex     
/^\\def\\ifsetfail{\\begingroup\\ignoresections\\ifsetfai/
+\ifsetfailxxx  tex-src/texinfo.tex     /^\\long\\def\\ifsetfailxxx #1\\end 
ifset{\\endgroup\\igno/
+\ifsetxxx      tex-src/texinfo.tex     /^\\def\\ifsetxxx #1{\\endgroup$/
+\iftex tex-src/texinfo.tex     /^\\def\\iftex{}$/
+\ifusingtt     tex-src/texinfo.tex     /^\\def\\ifusingtt#1#2{\\ifdim 
\\fontdimen3\\the\\font=0pt/
+\ignore        tex-src/texinfo.tex     
/^\\def\\ignore{\\begingroup\\ignoresections$/
+\ignoresections        tex-src/texinfo.tex     /^\\def\\ignoresections{%$/
+\ignorexxx     tex-src/texinfo.tex     /^\\long\\def\\ignorexxx #1\\end 
ignore{\\endgroup\\ignore/
+\ii    tex-src/texinfo.tex     /^\\def\\ii#1{{\\it #1}}                % 
italic font$/
+\inENV tex-src/texinfo.tex     /^\\newif\\ifENV \\ENVfalse 
\\def\\inENV{\\ifENV\\relax\\els/
+\include       tex-src/texinfo.tex     
/^\\def\\include{\\parsearg\\includezzz}$/
+\includezzz    tex-src/texinfo.tex     /^\\def\\includezzz 
#1{{\\def\\thisfile{#1}\\input #1$/
+\indexbackslash        tex-src/texinfo.tex     /^  
\\def\\indexbackslash{\\rawbackslashxx}$/
+\indexdotfill  tex-src/texinfo.tex     /^\\def\\indexdotfill{\\cleaders$/
+\indexdummies  tex-src/texinfo.tex     /^\\def\\indexdummies{%$/
+\indexdummydots        tex-src/texinfo.tex     /^\\def\\indexdummydots{...}$/
+\indexdummyfont        tex-src/texinfo.tex     /^\\def\\indexdummyfont#1{#1}$/
+\indexdummytex tex-src/texinfo.tex     /^\\def\\indexdummytex{TeX}$/
+\indexfonts    tex-src/texinfo.tex     /^\\def\\indexfonts{%$/
+\indexnofonts  tex-src/texinfo.tex     /^\\def\\indexnofonts{%$/
+\infoappendix  tex-src/texinfo.tex     
/^\\def\\infoappendix{\\parsearg\\appendixzzz}$/
+\infoappendixsec       tex-src/texinfo.tex     
/^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/
+\infoappendixsubsec    tex-src/texinfo.tex     
/^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/
+\infoappendixsubsubsec tex-src/texinfo.tex     
/^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/
+\infochapter   tex-src/texinfo.tex     
/^\\def\\infochapter{\\parsearg\\chapterzzz}$/
+\inforef       tex-src/texinfo.tex     /^\\def\\inforef #1{\\inforefzzz 
#1,,,,**}$/
+\inforefzzz    tex-src/texinfo.tex     /^\\def\\inforefzzz #1,#2,#3,#4**{See 
Info file \\file{/
+\infosection   tex-src/texinfo.tex     
/^\\def\\infosection{\\parsearg\\sectionzzz}$/
+\infosubsection        tex-src/texinfo.tex     
/^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/
+\infosubsubsection     tex-src/texinfo.tex     
/^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/
+\infotop       tex-src/texinfo.tex     
/^\\def\\infotop{\\parsearg\\unnumberedzzz}$/
+\infounnumbered        tex-src/texinfo.tex     
/^\\def\\infounnumbered{\\parsearg\\unnumberedzzz}$/
+\infounnumberedsec     tex-src/texinfo.tex     
/^\\def\\infounnumberedsec{\\parsearg\\unnumberedseczzz}/
+\infounnumberedsubsec  tex-src/texinfo.tex     
/^\\def\\infounnumberedsubsec{\\parsearg\\unnumberedsubs/
+\infounnumberedsubsubsec       tex-src/texinfo.tex     
/^\\def\\infounnumberedsubsubsec{\\parsearg\\unnumbereds/
+\initial       tex-src/texinfo.tex     /^\\def\\initial #1{%$/
+\internalBitem tex-src/texinfo.tex     /^\\def\\internalBitem{\\smallbreak 
\\parsearg\\itemzzz}$/
+\internalBitemx        tex-src/texinfo.tex     /^\\def\\internalBitemx{\\par 
\\parsearg\\itemzzz}$/
+\internalBkitem        tex-src/texinfo.tex     
/^\\def\\internalBkitem{\\smallbreak \\parsearg\\kitemzzz/
+\internalBkitemx       tex-src/texinfo.tex     /^\\def\\internalBkitemx{\\par 
\\parsearg\\kitemzzz}$/
+\internalBxitem        tex-src/texinfo.tex     /^\\def\\internalBxitem 
"#1"{\\def\\xitemsubtopix{#1} \\s/
+\internalBxitemx       tex-src/texinfo.tex     /^\\def\\internalBxitemx 
"#1"{\\def\\xitemsubtopix{#1} \\/
+\internalsetq  tex-src/texinfo.tex     /^\\def\\internalsetq #1#2{'xrdef 
{#1}{\\csname #2\\endc/
+\item  tex-src/texinfo.tex     /address@hidden while not in a table}}/
+\itemcontents  tex-src/texinfo.tex     /^\\def\\itemcontents{#1}%$/
+\itemfont      tex-src/texinfo.tex     /^\\def\\itemfont{#2}%$/
+\itemize       tex-src/texinfo.tex     
/^\\def\\itemize{\\parsearg\\itemizezzz}$/
+\itemizeitem   tex-src/texinfo.tex     /^\\def\\itemizeitem{%$/
+\itemizey      tex-src/texinfo.tex     /^\\def\\itemizey #1#2{%$/
+\itemizezzz    tex-src/texinfo.tex     /^\\def\\itemizezzz #1{%$/
+\itemx tex-src/texinfo.tex     /address@hidden while not in a table/
+\itemzzz       tex-src/texinfo.tex     /^\\def\\itemzzz #1{\\begingroup %$/
+\kbd   tex-src/texinfo.tex     
/^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/
+\kbd   tex-src/texinfo.tex     /^\\def\\kbd##1{\\realbackslash kbd {##1}}%$/
+\kbd   tex-src/texinfo.tex     /^\\def\\kbd##1{\\realbackslash kbd {##1}}$/
+\kbdfoo        tex-src/texinfo.tex     
/^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/
+\key   tex-src/texinfo.tex     /^\\def\\key #1{{\\tt 
\\exhyphenpenalty=10000\\uppercase{/
+\key   tex-src/texinfo.tex     /^\\def\\key##1{\\realbackslash key {##1}}%$/
+\key   tex-src/texinfo.tex     /^\\def\\key##1{\\realbackslash key {##1}}$/
+\kindex        tex-src/texinfo.tex     /^\\def\\kindex {\\kyindex}$/
+\kitem tex-src/texinfo.tex     /address@hidden while not in a table/
+\kitemx        tex-src/texinfo.tex     /address@hidden while not in a tab/
+\kitemzzz      tex-src/texinfo.tex     /^\\def\\kitemzzz #1{\\dosubind 
{kw}{\\code{#1}}{for {\\b/
+\l     tex-src/texinfo.tex     /^\\def\\l#1{{\\li #1}\\null}           % $/
+\labelspace    tex-src/texinfo.tex     /^\\def\\labelspace{\\hskip1em 
\\relax}$/
+\lbrb  tex-src/texinfo.tex     /^\\def\\lbrb{{\\bf\\char`\\[}} 
\\def\\rbrb{{\\bf\\char`\\]}}$/
+\less  tex-src/texinfo.tex     /^\\def\\less{\\realbackslash less}%$/
+\less  tex-src/texinfo.tex     /^\\def\\less{\\realbackslash less}$/
+\linenumber    tex-src/texinfo.tex     /^  
\\def\\linenumber{\\the\\inputlineno:\\space}$/
+\lisp  tex-src/texinfo.tex     /^\\def\\lisp{\\aboveenvbreak$/
+\loggingall    tex-src/texinfo.tex     /^\\def\\loggingall{\\tracingcommands2 
\\tracingstats2 $/
+\losespace     tex-src/texinfo.tex     /^\\def\\losespace #1{#1}$/
+\lowercaseenumerate    tex-src/texinfo.tex     /^\\def\\lowercaseenumerate{%$/
+\lvvmode       tex-src/texinfo.tex     /^\\def\\lvvmode{\\vbox to 0pt{}}$/
+\majorheading  tex-src/texinfo.tex     
/^\\def\\majorheading{\\parsearg\\majorheadingzzz}$/
+\majorheadingzzz       tex-src/texinfo.tex     /^\\def\\majorheadingzzz #1{%$/
+\math  tex-src/texinfo.tex     /^\\def\\math#1{\\implicitmath 
#1\\implicitmath}$/
+\menu  tex-src/texinfo.tex     /^\\long\\def\\menu #1\\end menu{}$/
+\minus tex-src/texinfo.tex     /^\\def\\minus{$-$}$/
+\mylbrace      tex-src/texinfo.tex     /^\\def\\mylbrace {{\\tt \\char '173}}$/
+\myrbrace      tex-src/texinfo.tex     /^\\def\\myrbrace {{\\tt \\char '175}}$/
+\need  tex-src/texinfo.tex     /^\\def\\need{\\parsearg\\needx}$/
+\needx tex-src/texinfo.tex     /^\\def\\needx#1{%$/
+\newcodeindex  tex-src/texinfo.tex     /^\\def\\newcodeindex #1{$/
+\newindex      tex-src/texinfo.tex     /^\\def\\newindex #1{$/
+\next  tex-src/texinfo.tex     /^\\def\\next##1{}\\next}$/
+\next  tex-src/texinfo.tex     /^\\def\\next##1{}\\next}$/
+\next  tex-src/texinfo.tex     /^\\def\\next##1{}\\next}$/
+\next  tex-src/texinfo.tex     /^\\def\\next##1{}\\next}$/
+\next  tex-src/texinfo.tex     /^\\def\\next##1{}\\next}$/
+\next  tex-src/texinfo.tex     /^\\def\\next##1{}\\next}$/
+\nm    tex-src/testenv.tex     
/^\\newcommand{\\nm}[2]{\\nomenclature{#1}{#2}}$/
+\node  tex-src/texinfo.tex     /^\\def\\node{\\ENVcheck\\parsearg\\nodezzz}$/
+\nodexxx[      tex-src/texinfo.tex     
/^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/
+\nodezzz       tex-src/texinfo.tex     /^\\def\\nodezzz#1{\\nodexxx [#1,]}$/
+\nofillexdent  tex-src/texinfo.tex     
/^\\def\\nofillexdent{\\parsearg\\nofillexdentyyy}$/
+\nofillexdentyyy       tex-src/texinfo.tex     /^\\def\\nofillexdentyyy 
#1{{\\advance \\leftskip by -\\e/
+\normalbackslash       tex-src/texinfo.tex     
/^\\def\\normalbackslash{{\\tt\\rawbackslashxx}}$/
+\normalcaret   tex-src/texinfo.tex     /^\\def\\normalcaret{^}$/
+\normaldoublequote     tex-src/texinfo.tex     /^\\def\\normaldoublequote{"}$/
+\normalgreater tex-src/texinfo.tex     /^\\def\\normalgreater{>}$/
+\normalless    tex-src/texinfo.tex     /^\\def\\normalless{<}$/
+\normalplus    tex-src/texinfo.tex     /^\\def\\normalplus{+}$/
+\normaltilde   tex-src/texinfo.tex     /^\\def\\normaltilde{~}$/
+\normalunderscore      tex-src/texinfo.tex     /^\\def\\normalunderscore{_}$/
+\normalverticalbar     tex-src/texinfo.tex     /^\\def\\normalverticalbar{|}$/
+\nsbot tex-src/texinfo.tex     /^\\def\\nsbot{\\vbox$/
+\nstop tex-src/texinfo.tex     /^\\def\\nstop{\\vbox$/
+\numberedsec   tex-src/texinfo.tex     
/^\\outer\\def\\numberedsec{\\parsearg\\seczzz}$/
+\numberedsubsec        tex-src/texinfo.tex     
/^\\outer\\def\\numberedsubsec{\\parsearg\\numberedsubsec/
+\numberedsubseczzz     tex-src/texinfo.tex     /^\\def\\numberedsubseczzz 
#1{\\seccheck{subsection}%$/
+\numberedsubsubsec     tex-src/texinfo.tex     
/^\\outer\\def\\numberedsubsubsec{\\parsearg\\numberedsub/
+\numberedsubsubseczzz  tex-src/texinfo.tex     /^\\def\\numberedsubsubseczzz 
#1{\\seccheck{subsubsecti/
+\numericenumerate      tex-src/texinfo.tex     /^\\def\\numericenumerate{%$/
+\oddfooting    tex-src/texinfo.tex     
/^\\def\\oddfooting{\\parsearg\\oddfootingxxx}$/
+\oddheading    tex-src/texinfo.tex     
/^\\def\\oddheading{\\parsearg\\oddheadingxxx}$/
+\onepageout    tex-src/texinfo.tex     
/^\\def\\onepageout#1{\\hoffset=\\normaloffset$/
+\opencontents  tex-src/texinfo.tex     /^\\def\\opencontents{\\openout 
\\contentsfile = \\jobnam/
+\openindices   tex-src/texinfo.tex     /^\\def\\openindices{%$/
+\opnr  tex-src/texinfo.tex     /^\\def\\opnr{{\\sf\\char`\\(}} 
\\def\\clnr{{\\sf\\char`\\)}} /
+\page  tex-src/texinfo.tex     /^\\def\\page{\\par\\vfill\\supereject}$/
+\page  tex-src/texinfo.tex     /^   \\def\\page{%$/
+\pagebody      tex-src/texinfo.tex     /^\\def\\pagebody#1{\\vbox 
to\\pageheight{\\boxmaxdepth=\\/
+\pagesofar     tex-src/texinfo.tex     
/^\\def\\pagesofar{\\unvbox\\partialpage %$/
+\parsearg      tex-src/texinfo.tex     /^\\def\\parsearg 
#1{\\let\\next=#1\\begingroup\\obeylines/
+\parseargline  tex-src/texinfo.tex     /^\\def\\parseargline{\\begingroup 
\\obeylines \\parsearg/
+\parseargx     tex-src/texinfo.tex     /^\\def\\parseargx{%$/
+\pindex        tex-src/texinfo.tex     /^\\def\\pindex {\\pgindex}$/
+\plainsecheading       tex-src/texinfo.tex     /^\\def\\plainsecheading 
#1{\\secheadingi {#1}}$/
+\point tex-src/texinfo.tex     /^\\def\\point{$\\star$}$/
+\primary       tex-src/texinfo.tex     /^\\def\\primary #1{\\line{#1\\hfil}}$/
+\print tex-src/texinfo.tex     /^\\def\\print{\\realbackslash print}$/
+\print tex-src/texinfo.tex     /^\\def\\print{\\leavevmode\\lower.1ex\\hbox to 
1em{\\hfil/
+\printedmanual tex-src/texinfo.tex     /^\\def\\printedmanual{\\ignorespaces 
#5}%$/
+\printedmanual tex-src/texinfo.tex     /^section ``\\printednodename'' in 
\\cite{\\printedmanu/
+\printednodename       tex-src/texinfo.tex     
/^\\def\\printednodename{\\ignorespaces #3}%$/
+\printednodename       tex-src/texinfo.tex     
/^\\def\\printednodename{\\ignorespaces #1}%$/
+\printindex    tex-src/texinfo.tex     
/^\\def\\printindex{\\parsearg\\doprintindex}$/
+\pxref tex-src/texinfo.tex     /^\\def\\pxref#1{see \\xrefX[#1,,,,,,,]}$/
+\quotation     tex-src/texinfo.tex     /^\\def\\quotation{%$/
+\r     tex-src/texinfo.tex     /^\\def\\r#1{{\\rm #1}}         % roman font$/
+\r     tex-src/texinfo.tex     /^\\def\\r##1{\\realbackslash r {##1}}%$/
+\r     tex-src/texinfo.tex     /^\\def\\r##1{\\realbackslash r {##1}}$/
+\rawbackslashxx        tex-src/texinfo.tex     
/^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/
+\rawbackslashxx        tex-src/texinfo.tex     
/^\\def\\rawbackslashxx{\\indexbackslash}%$/
+\readauxfile   tex-src/texinfo.tex     /^\\def\\readauxfile{%$/
+\ref   tex-src/texinfo.tex     /^\\def\\ref#1{\\xrefX[#1,,,,,,,]}$/
+\refx  tex-src/texinfo.tex     /^\\def\\refx#1#2{%$/
+\resetmathfonts        tex-src/texinfo.tex     /^\\def\\resetmathfonts{%$/
+\result        tex-src/texinfo.tex     /^\\def\\result{\\realbackslash 
result}$/
+\result        tex-src/texinfo.tex     
/^\\def\\result{\\leavevmode\\raise.15ex\\hbox to 1em{\\hf/
+\rm    tex-src/texinfo.tex     /^\\def\\rm{\\realbackslash rm }%$/
+\samp  tex-src/texinfo.tex     /^\\def\\samp #1{`\\tclose{#1}'\\null}$/
+\samp  tex-src/texinfo.tex     /^\\def\\samp##1{\\realbackslash samp {##1}}%$/
+\samp  tex-src/texinfo.tex     /^\\def\\samp##1{\\realbackslash samp {##1}}$/
+\sc    tex-src/texinfo.tex     /^\\def\\sc#1{{\\smallcaps#1}}  % smallcaps 
font$/
+\seccheck      tex-src/texinfo.tex     /^\\def\\seccheck#1{\\if \\pageno<0 %$/
+\secentry      tex-src/texinfo.tex     /^      \\def\\secentry ##1##2##3##4{}$/
+\secentry      tex-src/texinfo.tex     
/^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/
+\secentryfonts tex-src/texinfo.tex     /^\\def\\secentryfonts{\\textfonts}$/
+\secfonts      tex-src/texinfo.tex     /^\\def\\secfonts{%$/
+\secheading    tex-src/texinfo.tex     /^\\def\\secheading 
#1#2#3{\\secheadingi {#2.#3\\enspace/
+\secheadingbreak       tex-src/texinfo.tex     
/^\\def\\secheadingbreak{\\dobreak \\secheadingskip {-10/
+\secheadingi   tex-src/texinfo.tex     /^\\def\\secheadingi #1{{\\advance 
\\secheadingskip by \\/
+\secondary     tex-src/texinfo.tex     /^\\def\\secondary #1#2{$/
+\seczzz        tex-src/texinfo.tex     /^\\def\\seczzz 
#1{\\seccheck{section}%$/
+\set   tex-src/texinfo.tex     /^\\def\\set{\\parsearg\\setxxx}$/
+\setchapternewpage     tex-src/texinfo.tex     /^\\def\\setchapternewpage #1 
{\\csname CHAPPAG#1\\endcs/
+\setchapterstyle       tex-src/texinfo.tex     /^\\def\\setchapterstyle #1 
{\\csname CHAPF#1\\endcsname/
+\setdeffont    tex-src/texinfo.tex     /^\\def\\setdeffont #1 {\\csname 
DEF#1\\endcsname}$/
+\setfilename   tex-src/texinfo.tex     /^\\def\\setfilename{%$/
+\setref        tex-src/texinfo.tex     /^\\def\\setref#1{%$/
+\settitle      tex-src/texinfo.tex     
/^\\def\\settitle{\\parsearg\\settitlezzz}$/
+\settitlezzz   tex-src/texinfo.tex     /^\\def\\settitlezzz 
#1{\\gdef\\thistitle{#1}}$/
+\setxxx        tex-src/texinfo.tex     /^\\def\\setxxx #1{$/
+\sf    tex-src/texinfo.tex     /^\\def\\sf{\\fam=\\sffam \\tensf}$/
+\sf    tex-src/texinfo.tex     /^\\def\\sf{\\realbackslash sf}%$/
+\shortchapentry        tex-src/texinfo.tex     
/^\\def\\shortchapentry#1#2#3{%$/
+\shortunnumberedentry  tex-src/texinfo.tex     
/^\\def\\shortunnumberedentry#1#2{%$/
+\singlecodeindexer     tex-src/texinfo.tex     /^\\def\\singlecodeindexer 
#1{\\doind{\\indexname}{\\code/
+\singleindexer tex-src/texinfo.tex     /^\\def\\singleindexer 
#1{\\doind{\\indexname}{#1}}$/
+\singlespace   tex-src/texinfo.tex     /^\\def\\singlespace{%$/
+\sl    tex-src/texinfo.tex     /^\\def\\sl{\\realbackslash sl }%$/
+\smallbook     tex-src/texinfo.tex     /^\\def\\smallbook{$/
+\smalllispx    tex-src/texinfo.tex     
/^\\def\\smalllispx{\\aboveenvbreak\\begingroup\\inENV$/
+\smartitalic   tex-src/texinfo.tex     /^\\def\\smartitalic#1{{\\sl 
#1}\\futurelet\\next\\smartit/
+\smartitalicx  tex-src/texinfo.tex     
/^\\def\\smartitalicx{\\ifx\\next,\\else\\ifx\\next-\\else\\i/
+\sp    tex-src/texinfo.tex     /^\\def\\sp{\\parsearg\\spxxx}$/
+\splitoff      tex-src/texinfo.tex     
/^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/
+\spxxx tex-src/texinfo.tex     /^\\def\\spxxx #1{\\par \\vskip 
#1\\baselineskip}$/
+\startcontents tex-src/texinfo.tex     /^\\def\\startcontents#1{%$/
+\startenumeration      tex-src/texinfo.tex     /^\\def\\startenumeration#1{%$/
+\subheading    tex-src/texinfo.tex     
/^\\def\\subheading{\\parsearg\\subsecheadingi}$/
+\subsecentry   tex-src/texinfo.tex     /^      \\def\\subsecentry 
##1##2##3##4##5{}$/
+\subsecentry   tex-src/texinfo.tex     
/^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/
+\subsecfonts   tex-src/texinfo.tex     /^\\def\\subsecfonts{%$/
+\subsecheading tex-src/texinfo.tex     /^\\def\\subsecheading 
#1#2#3#4{\\subsecheadingi {#2.#3/
+\subsecheadingbreak    tex-src/texinfo.tex     
/^\\def\\subsecheadingbreak{\\dobreak \\subsecheadingski/
+\subsecheadingi        tex-src/texinfo.tex     /^\\def\\subsecheadingi 
#1{{\\advance \\subsecheadingski/
+\subsubheading tex-src/texinfo.tex     
/^\\def\\subsubheading{\\parsearg\\subsubsecheadingi}$/
+\subsubsecentry        tex-src/texinfo.tex     /^      \\def\\subsubsecentry 
##1##2##3##4##5##6{}$/
+\subsubsecentry        tex-src/texinfo.tex     
/^\\def\\subsubsecentry#1#2#3#4#5#6{%$/
+\subsubsecfonts        tex-src/texinfo.tex     
/^\\def\\subsubsecfonts{\\subsecfonts} % Maybe this sho/
+\subsubsecheading      tex-src/texinfo.tex     /^\\def\\subsubsecheading 
#1#2#3#4#5{\\subsubsecheading/
+\subsubsecheadingi     tex-src/texinfo.tex     /^\\def\\subsubsecheadingi 
#1{{\\advance \\subsecheading/
+\subtitle      tex-src/texinfo.tex     /^   
\\def\\subtitle{\\parsearg\\subtitlezzz}%$/
+\subtitlefont  tex-src/texinfo.tex     /^   \\def\\subtitlefont{\\subtitlerm 
\\normalbaselinesk/
+\subtitlezzz   tex-src/texinfo.tex     /^   
\\def\\subtitlezzz##1{{\\subtitlefont \\rightline{#/
+\summarycontents       tex-src/texinfo.tex     
/^\\outer\\def\\summarycontents{%$/
+\supereject    tex-src/texinfo.tex     /^\\def\\supereject{\\par\\penalty 
-20000\\footnoteno =0 /
+\syncodeindex  tex-src/texinfo.tex     /^\\def\\syncodeindex #1 #2 {%$/
+\synindex      tex-src/texinfo.tex     /^\\def\\synindex #1 #2 {%$/
+\t     tex-src/texinfo.tex     /^\\def\\t#1{{\\tt 
\\exhyphenpenalty=10000\\rawbackslash /
+\t     tex-src/texinfo.tex     /^\\def\\t##1{\\realbackslash r {##1}}%$/
+\table tex-src/texinfo.tex     
/^\\def\\table{\\begingroup\\inENV\\obeylines\\obeyspaces\\/
+\tablez        tex-src/texinfo.tex     /^\\def\\tablez #1#2#3#4#5#6{%$/
+\tclose        tex-src/texinfo.tex     /^\\def\\tclose#1{{\\rm 
\\tcloserm=\\fontdimen2\\font \\tt /
+\tclose        tex-src/texinfo.tex     /^\\def\\tclose##1{\\realbackslash 
tclose {##1}}%$/
+\tclose        tex-src/texinfo.tex     /^\\def\\tclose##1{\\realbackslash 
tclose {##1}}$/
+\tex   tex-src/texinfo.tex     /^\\def\\tex{\\begingroup$/
+\texinfoversion        tex-src/texinfo.tex     /^\\def\\texinfoversion{2.73}$/
+\textfonts     tex-src/texinfo.tex     /^\\def\\textfonts{%$/
+\thearg        tex-src/texinfo.tex     /^  \\def\\thearg{#1}%$/
+\thearg        tex-src/texinfo.tex     /^  \\ifx\\thearg\\empty 
\\def\\thearg{1}\\fi$/
+\thischapter   tex-src/texinfo.tex     /^\\def\\thischapter{} 
\\def\\thissection{}$/
+\thischapter   tex-src/texinfo.tex     /^   
\\unnumbchapmacro{#1}\\def\\thischapter{}%$/
+\thischaptername       tex-src/texinfo.tex     /^\\def\\thischaptername{No 
Chapter Title}$/
+\thisfile      tex-src/texinfo.tex     /^\\def\\thisfile{}$/
+\thistitle     tex-src/texinfo.tex     /^\\def\\thistitle{No Title}$/
+\tie   tex-src/texinfo.tex     /^\\def\\tie{\\penalty 10000\\ }     % Save 
plain tex de/
+\tindex        tex-src/texinfo.tex     /^\\def\\tindex {\\tpindex}$/
+\title tex-src/texinfo.tex     /^   \\def\\title{\\parsearg\\titlezzz}%$/
+\titlefont     tex-src/texinfo.tex     /^\\def\\titlefont#1{{\\titlerm #1}}$/
+\titlepage     tex-src/texinfo.tex     /^\\def\\titlepage{\\begingroup 
\\parindent=0pt \\textfon/
+\titlezzz      tex-src/texinfo.tex     /^   
\\def\\titlezzz##1{\\leftline{\\titlefont{##1}}$/
+\today tex-src/texinfo.tex     /^\\def\\today{\\number\\day\\space$/
+\top   tex-src/texinfo.tex     /^\\outer\\def\\top{\\parsearg\\unnumberedzzz}$/
+\tt    tex-src/texinfo.tex     /^\\def\\tt{\\realbackslash tt}%$/
+\tt    tex-src/texinfo.tex     /^\\def\\tt{\\realbackslash tt}$/
+\turnoffactive tex-src/texinfo.tex     
/^\\def\\turnoffactive{\\let"=\\normaldoublequote$/
+\unnchfopen    tex-src/texinfo.tex     /^\\def\\unnchfopen #1{%$/
+\unnchfplain   tex-src/texinfo.tex     /^\\def\\unnchfplain #1{%$/
+\unnumbchapentry       tex-src/texinfo.tex     
/^\\def\\unnumbchapentry#1#2{\\dochapentry{#1}{#2}}$/
+\unnumbered    tex-src/texinfo.tex     
/^\\outer\\def\\unnumbered{\\parsearg\\unnumberedzzz}$/
+\unnumberedsec tex-src/texinfo.tex     
/^\\outer\\def\\unnumberedsec{\\parsearg\\unnumberedseczz/
+\unnumberedseczzz      tex-src/texinfo.tex     /^\\def\\unnumberedseczzz 
#1{\\seccheck{unnumberedsec}%/
+\unnumberedsubsec      tex-src/texinfo.tex     
/^\\outer\\def\\unnumberedsubsec{\\parsearg\\unnumberedsu/
+\unnumberedsubseczzz   tex-src/texinfo.tex     /^\\def\\unnumberedsubseczzz 
#1{\\seccheck{unnumberedsu/
+\unnumberedsubsubsec   tex-src/texinfo.tex     
/^\\outer\\def\\unnumberedsubsubsec{\\parsearg\\unnumbere/
+\unnumberedsubsubseczzz        tex-src/texinfo.tex     
/^\\def\\unnumberedsubsubseczzz #1{\\seccheck{unnumbere/
+\unnumberedzzz tex-src/texinfo.tex     /^\\def\\unnumberedzzz 
#1{\\seccheck{unnumbered}%$/
+\unnumbnoderef tex-src/texinfo.tex     
/^\\def\\unnumbnoderef{\\ifx\\lastnode\\relax\\else$/
+\unnumbsecentry        tex-src/texinfo.tex     /^      \\def\\unnumbsecentry 
##1##2{}$/
+\unnumbsecentry        tex-src/texinfo.tex     
/^\\def\\unnumbsecentry#1#2{\\dosecentry{#1}{#2}}$/
+\unnumbsetref  tex-src/texinfo.tex     /^\\def\\unnumbsetref#1{%$/
+\unnumbsubsecentry     tex-src/texinfo.tex     /^      
\\def\\unnumbsubsecentry ##1##2{}$/
+\unnumbsubsecentry     tex-src/texinfo.tex     
/^\\def\\unnumbsubsecentry#1#2{\\dosubsecentry{#1}{#2}}/
+\unnumbsubsubsecentry  tex-src/texinfo.tex     /^      
\\def\\unnumbsubsubsecentry ##1##2{}$/
+\unnumbsubsubsecentry  tex-src/texinfo.tex     
/^\\def\\unnumbsubsubsecentry#1#2{\\dosubsubsecentry{#1/
+\uppercaseenumerate    tex-src/texinfo.tex     /^\\def\\uppercaseenumerate{%$/
+\var   tex-src/texinfo.tex     /^\\def\\var##1{\\realbackslash var {##1}}%$/
+\var   tex-src/texinfo.tex     /^\\def\\var##1{\\realbackslash var {##1}}$/
+\vindex        tex-src/texinfo.tex     /^\\def\\vindex {\\vrindex}$/
+\vritemindex   tex-src/texinfo.tex     /^\\def\\vritemindex #1{\\doind 
{vr}{\\code{#1}}}%$/
+\vtable        tex-src/texinfo.tex     
/^\\def\\vtable{\\begingroup\\inENV\\obeylines\\obeyspaces/
+\w     tex-src/texinfo.tex     /^\\def\\w#1{\\leavevmode\\hbox{#1}}$/
+\w     tex-src/texinfo.tex     /^\\def\\w{\\realbackslash w }%$/
+\w     tex-src/texinfo.tex     /^\\def\\w{\\realbackslash w}$/
+\xitem tex-src/texinfo.tex     /address@hidden while not in a table/
+\xitemx        tex-src/texinfo.tex     /address@hidden while not in a tab/
+\xitemzzz      tex-src/texinfo.tex     /^\\def\\xitemzzz #1{\\dosubind 
{kw}{\\code{#1}}{for {\\b/
+\xkey  tex-src/texinfo.tex     /^\\def\\xkey{\\key}$/
+\xrdef tex-src/texinfo.tex     /^\\def\\xrdef #1#2{$/
+\xref  tex-src/texinfo.tex     /^\\def\\xref#1{See \\xrefX[#1,,,,,,,]}$/
+\xrefX[        tex-src/texinfo.tex     
/^\\def\\xrefX[#1,#2,#3,#4,#5,#6]{\\begingroup%$/
+^      tex-src/texinfo.tex     /^\\def^{{\\tt \\hat}}$/
+_      tex-src/texinfo.tex     /^\\def_{\\ifusingtt\\normalunderscore\\_}$/
+_GETOPT_H      c-src/getopt.h  19
+_GNU_SOURCE    c-src/etags.c   94
+_REGEX_H       c-src/emacs/src/regex.h 21
+_RE_SYNTAX_POSIX_COMMON        c-src/emacs/src/regex.h 221
+_Restrict_     c-src/emacs/src/regex.h 540
+_Restrict_     c-src/emacs/src/regex.h 542
+_Restrict_     c-src/emacs/src/regex.h 544
+_Restrict_arr_ c-src/emacs/src/regex.h 555
+_Restrict_arr_ c-src/emacs/src/regex.h 557
+_UCHAR_T       c-src/emacs/src/lisp.h  2423
+__COLORS       cp-src/screen.hpp       9
+__default_morecore     c-src/emacs/src/gmalloc.c       /^__default_morecore 
(ptrdiff_t increment)$/
+__init__       pyt-src/server.py       /^    def __init__(self):$/
+__init__       pyt-src/server.py       /^    def __init__(self):$/
+__init__       pyt-src/server.py       /^    def __init__(self):$/
+__init__       pyt-src/server.py       /^    def __init__(self, Master, text, 
textvar, widt/
+__init__       pyt-src/server.py       /^    def __init__(self, newlegend, 
list, editor, ma/
+__init__       pyt-src/server.py       /^    def __init__(self, host, 
sitelist, master=None/
+__init__       pyt-src/server.py       /^    def __init__(self, user, 
userlist, master=None/
+__init__       pyt-src/server.py       /^    def __init__(self, master=None):$/
+__ip   c.c     159
+__libc_atexit  c-src/exit.c    30
+__libc_atexit  c-src/exit.strange_suffix       30
+__malloc_extra_blocks  c-src/emacs/src/gmalloc.c       381
+__malloc_initialize    c-src/emacs/src/gmalloc.c       /^__malloc_initialize 
(void)$/
+__malloc_initialized   c-src/emacs/src/gmalloc.c       379
+__repr__       pyt-src/server.py       /^    def __repr__(self):$/
+__repr__       pyt-src/server.py       /^    def __repr__(self):$/
+__repr__       pyt-src/server.py       /^    def __repr__(self):$/
+__sbrk c-src/emacs/src/gmalloc.c       1513
+__str__        pyt-src/server.py       /^    def __str__(self):$/
+__str__        pyt-src/server.py       /^    def __str__(self):$/
+__str__        pyt-src/server.py       /^    def __str__(self):$/
+__up   c.c     160
+_aligned_blocks        c-src/emacs/src/gmalloc.c       1004
+_aligned_blocks_mutex  c-src/emacs/src/gmalloc.c       518
+_bytes_free    c-src/emacs/src/gmalloc.c       376
+_bytes_used    c-src/emacs/src/gmalloc.c       374
+_chunks_free   c-src/emacs/src/gmalloc.c       375
+_chunks_used   c-src/emacs/src/gmalloc.c       373
+_fraghead      c-src/emacs/src/gmalloc.c       370
+_free  c-src/emacs/src/gmalloc.c       /^_free (void *ptr)$/
+_free_internal c-src/emacs/src/gmalloc.c       /^_free_internal (void *ptr)$/
+_free_internal_nolock  c-src/emacs/src/gmalloc.c       /^_free_internal_nolock 
(void *ptr)$/
+_heapbase      c-src/emacs/src/gmalloc.c       355
+_heapindex     c-src/emacs/src/gmalloc.c       364
+_heapinfo      c-src/emacs/src/gmalloc.c       358
+_heaplimit     c-src/emacs/src/gmalloc.c       367
+_malloc        c-src/emacs/src/gmalloc.c       /^_malloc (size_t size)$/
+_malloc_internal       c-src/emacs/src/gmalloc.c       /^_malloc_internal 
(size_t size)$/
+_malloc_internal_nolock        c-src/emacs/src/gmalloc.c       
/^_malloc_internal_nolock (size_t size)$/
+_malloc_mutex  c-src/emacs/src/gmalloc.c       517
+_malloc_thread_enabled_p       c-src/emacs/src/gmalloc.c       519
+_realloc       c-src/emacs/src/gmalloc.c       /^_realloc (void *ptr, size_t 
size)$/
+_realloc_internal      c-src/emacs/src/gmalloc.c       /^_realloc_internal 
(void *ptr, size_t size)$/
+_realloc_internal_nolock       c-src/emacs/src/gmalloc.c       
/^_realloc_internal_nolock (void *ptr, size_t size)$/
+a      c.c     152
+a      c.c     180
+a      c.c     /^a()$/
+a      c.c     /^a ()$/
+a      c-src/h.h       40
+a      c-src/h.h       103
+a-forth-constant!      forth-src/test-forth.fth        /^99 constant 
a-forth-constant!$/
+a-forth-value? forth-src/test-forth.fth        /^55 value a-forth-value?$/
+a-forth-word   forth-src/test-forth.fth        /^: a-forth-word ( a b c -- 
a*b+c )  + * ;$/
+a-forth-word   forth-src/test-forth.fth        /^: a-forth-word ( a b c -- )$/
+a0     c-src/emacs/src/lisp.h  /^      Lisp_Object (*a0) (void);$/
+a1     c-src/emacs/src/lisp.h  /^      Lisp_Object (*a1) (Lisp_Object);$/
+a2     c-src/emacs/src/lisp.h  /^      Lisp_Object (*a2) (Lisp_Object, 
Lisp_Object)/
+a3     c-src/emacs/src/lisp.h  /^      Lisp_Object (*a3) (Lisp_Object, 
Lisp_Object,/
+a4     c-src/emacs/src/lisp.h  /^      Lisp_Object (*a4) (Lisp_Object, 
Lisp_Object,/
+a5     c-src/emacs/src/lisp.h  /^      Lisp_Object (*a5) (Lisp_Object, 
Lisp_Object,/
+a6     c-src/emacs/src/lisp.h  /^      Lisp_Object (*a6) (Lisp_Object, 
Lisp_Object,/
+a7     c-src/emacs/src/lisp.h  /^      Lisp_Object (*a7) (Lisp_Object, 
Lisp_Object,/
+a8     c-src/emacs/src/lisp.h  /^      Lisp_Object (*a8) (Lisp_Object, 
Lisp_Object,/
+aMANY  c-src/emacs/src/lisp.h  /^      Lisp_Object (*aMANY) (ptrdiff_t, 
Lisp_Object/
+aUNEVALLED     c-src/emacs/src/lisp.h  /^      Lisp_Object (*aUNEVALLED) 
(Lisp_Object args)/
+aa     c.c     269
+aa     c.c     279
+aaa    c.c     249
+aaa    c.c     269
+aaaaaa c-src/h.h       111
+abbrev-expansion       c-src/abbrev.c  /^DEFUN ("abbrev-expansion", 
Fabbrev_expansion, Sabb/
+abbrev-symbol  c-src/abbrev.c  /^DEFUN ("abbrev-symbol", Fabbrev_symbol, 
Sabbrev_sy/
+abbrev_all_caps        c-src/abbrev.c  57
+abbrevs_changed        c-src/abbrev.c  55
+abc    c-src/h.h       33
+abc    c-src/h.h       37
+abort-recursive-edit   c-src/emacs/src/keyboard.c      /^DEFUN 
("abort-recursive-edit", Fabort_recursive_ed/
+abs/f  ada-src/etags-test-for.ada      /^   function "abs"   (Right : Complex) 
return Real'/
+absolute_dirname       c-src/etags.c   /^absolute_dirname (char *file, char 
*dir)$/
+absolute_filename      c-src/etags.c   /^absolute_filename (char *file, char 
*dir)$/
+abstract_hh    cp-src/abstract.H       16
+abt    cp-src/c.C      55
+accent_key_syms        c-src/emacs/src/keyboard.c      4625
+access_keymap_keyremap c-src/emacs/src/keyboard.c      
/^access_keymap_keyremap (Lisp_Object map, Lisp_Obje/
+act    prol-src/natded.prolog  /^act(OutForm,OutSyn,Ws):-$/
+action prol-src/natded.prolog  /^action(KeyVals):-$/
+active_maps    c-src/emacs/src/keyboard.c      /^active_maps (Lisp_Object 
first_event)$/
+actout prol-src/natded.prolog  /^actout('Text',Trees):-$/
+addArchs:      objc-src/PackInsp.m     /^-(void)addArchs:(const char *)string$/
+addPOReader    php-src/lce_functions.php       /^      function 
addPOReader($d_name, &$por)$/
+add_active     prol-src/natded.prolog  /^add_active([],Cat,Goal):-$/
+add_command_key        c-src/emacs/src/keyboard.c      /^add_command_key 
(Lisp_Object key)$/
+add_edge       prol-src/natded.prolog  /^add_edge(Left,Right,Cat):-$/
+add_node       c-src/etags.c   /^add_node (node *np, node **cur_node_p)$/
+add_regex      c-src/etags.c   /^add_regex (char *regexp_pattern, language 
*lang)$/
+add_user_signal        c-src/emacs/src/keyboard.c      /^add_user_signal (int 
sig, const char *name)$/
+addnoise       html-src/algrthms.html  /^Adding Noise to the$/
+address        cccp.y  114
+address        y-src/cccp.y    113
+adjust_point_for_property      c-src/emacs/src/keyboard.c      
/^adjust_point_for_property (ptrdiff_t last_pt, bool/
+agent  cp-src/clheir.hpp       75
+agent::move    cp-src/clheir.cpp       /^void agent::move(int direction)$/
+agent::where   cp-src/clheir.hpp       77
+algorithms     html-src/algrthms.html  /^Description$/
+alias  c-src/emacs/src/lisp.h  688
+align  c-src/emacs/src/gmalloc.c       /^align (size_t size)$/
+alignas        c-src/emacs/src/lisp.h  /^# define alignas(alignment) \/* empty 
*\/$/
+aligned        c-src/emacs/src/gmalloc.c       199
+aligned_alloc  c-src/emacs/src/gmalloc.c       71
+aligned_alloc  c-src/emacs/src/gmalloc.c       /^aligned_alloc (size_t 
alignment, size_t size)$/
+aligned_alloc  c-src/emacs/src/gmalloc.c       1718
+alignlist      c-src/emacs/src/gmalloc.c       196
+all_kboards    c-src/emacs/src/keyboard.c      86
+allocate_kboard        c-src/emacs/src/keyboard.c      /^allocate_kboard 
(Lisp_Object type)$/
+allocated      c-src/emacs/src/regex.h 344
+an_extern_linkage      c-src/h.h       44
+an_extern_linkage      c-src/h.h       56
+an_extern_linkage_ptr  c-src/h.h       43
+analyze_regex  c-src/etags.c   /^analyze_regex (char *regex_arg)$/
+andkeyvalseq   prol-src/natded.prolog  /^andkeyvalseq(KeyVals) --> ['&'], 
keyvalseq(KeyVals/
+animals        c-src/h.h       81
+animals        cp-src/c.C      126
+any_kboard_state       c-src/emacs/src/keyboard.c      /^any_kboard_state ()$/
+appDidInit:    objcpp-src/SimpleCalc.M /^- appDidInit:sender$/
+append erl-src/lines.erl       /^append(Line, {L, List}) when list(List), L < 
?BREA/
+append erl-src/lists.erl       /^append(X,Y) -> erlang:append(X, Y).  %% A BIF 
at l/
+append prol-src/natded.prolog  /^append([],Xs,Xs).$/
+appendToDisplay:       objcpp-src/SimpleCalc.M /^- appendToDisplay:(const char 
*)theDigit$/
+append_list    prol-src/natded.prolog  /^append_list([],[]).$/
+append_string  pas-src/common.pas      /^procedure append_string;(*($/
+append_tool_bar_item   c-src/emacs/src/keyboard.c      /^append_tool_bar_item 
(void)$/
+appendix       perl-src/htlmify-cystic 24
+appendix_name  perl-src/htlmify-cystic 13
+appendix_toc   perl-src/htlmify-cystic 16
+apply_modifiers        c-src/emacs/src/keyboard.c      /^apply_modifiers (int 
modifiers, Lisp_Object base)$/
+apply_modifiers_uncached       c-src/emacs/src/keyboard.c      
/^apply_modifiers_uncached (int modifiers, char *bas/
+aref_addr      c-src/emacs/src/lisp.h  /^aref_addr (Lisp_Object array, 
ptrdiff_t idx)$/
+arg    c-src/h.h       13
+arg_type       c-src/etags.c   250
+arglist        cccp.y  41
+arglist        y-src/cccp.y    41
+argno  cccp.y  45
+argno  y-src/cccp.y    45
+args   c-src/h.h       30
+argsindent     tex-src/texinfo.tex     /^\\newskip\\defargsindent 
\\defargsindent=50pt$/
+argsindent     tex-src/texinfo.tex     /^\\dimen1=\\hsize \\advance \\dimen1 
by -\\defargsindent/
+argsindent     tex-src/texinfo.tex     /^\\parshape 2 0in \\dimen0 
\\defargsindent \\dimen1    /
+argument       c-src/etags.c   253
+argvals        prol-src/natded.prolog  /^argvals([]) --> [].$/
+array  c.c     190
+ascii  c-src/emacs/src/lisp.h  1598
+asort  cp-src/functions.cpp    /^void asort(int *a, int num){$/
+assemby-code-word      forth-src/test-forth.fth        /^code 
assemby-code-word ( dunno what it does )$/
+assert c-src/etags.c   135
+assert c-src/etags.c   /^# define assert(x) ((void) 0)$/
+at_end c-src/etags.c   249
+at_filename    c-src/etags.c   247
+at_language    c-src/etags.c   245
+at_least_one_member    prol-src/natded.prolog  
/^at_least_one_member(X,[X|_]):-!.$/
+at_regexp      c-src/etags.c   246
+at_stdin       c-src/etags.c   248
+atom   prol-src/natded.prolog  /^atom(X) --> [X], {atomic(X)}.$/
+atomval        prol-src/natded.prolog  /^atomval(X) --> atom(X).$/
+aultparindent  tex-src/texinfo.tex     /^\\newdimen\\defaultparindent 
\\defaultparindent = 15p/
+aultparindent  tex-src/texinfo.tex     /^\\parindent = \\defaultparindent$/
+aultparindent\hang\textindent  tex-src/texinfo.tex     
/^\\footstrut\\parindent=\\defaultparindent\\hang\\textin/
+auto_help      c-src/etags.c   699
+b      c.c     180
+b      c.c     259
+b      c.c     260
+b      c.c     262
+b      c.c     /^b ()$/
+b      c-src/h.h       41
+b      c-src/h.h       103
+b      c-src/h.h       104
+backslash=0    tex-src/texinfo.tex     /^\\let\\indexbackslash=0  %overridden 
during \\printin/
+balance_left   erl-src/lines.erl       /^balance_left(N_Tot, $/
+balance_right  erl-src/lines.erl       /^balance_right(N_Tot, $/
+bar    c-src//c.c      /^void bar() {while(0) {}}$/
+bar    c.c     143
+bar    c-src/h.h       19
+bas_syn        prol-src/natded.prolog  /^bas_syn(n(_)).$/
+base   c-src/emacs/src/lisp.h  2188
+base   cp-src/c.C      /^double base (void) const { return rng_base;  }$/
+basetype       cp-src/cfront.H 323
+basetype::b_bits       cp-src/cfront.H 341
+basetype::b_const      cp-src/cfront.H 335
+basetype::b_field      cp-src/cfront.H 346
+basetype::b_fieldtype  cp-src/cfront.H 348
+basetype::b_inline     cp-src/cfront.H 337
+basetype::b_long       cp-src/cfront.H 340
+basetype::b_name       cp-src/cfront.H 344
+basetype::b_offset     cp-src/cfront.H 342
+basetype::b_short      cp-src/cfront.H 339
+basetype::b_sto        cp-src/cfront.H 343
+basetype::b_table      cp-src/cfront.H 345
+basetype::b_typedef    cp-src/cfront.H 336
+basetype::b_unsigned   cp-src/cfront.H 334
+basetype::b_virtual    cp-src/cfront.H 338
+basetype::b_xname      cp-src/cfront.H 347
+bb     c.c     275
+bbb    c.c     251
+bbbbbb c-src/h.h       113
+been_warned    c-src/etags.c   222
+before_command_echo_length     c-src/emacs/src/keyboard.c      130
+before_command_key_count       c-src/emacs/src/keyboard.c      129
+begtoken       c-src/etags.c   /^#define       begtoken(c)     (_btk[CHAR 
(c)]) \/* c can star/
+behaviour_info erl-src/gs_dialog.erl   /^behaviour_info(callbacks) ->$/
+bf=cmbx10      tex-src/texinfo.tex     /^\\font\\defbf=cmbx10 scaled 
\\magstep1 %was 1314$/
+bind   pyt-src/server.py       /^    def bind(self, key, action):$/
+bind_polling_period    c-src/emacs/src/keyboard.c      /^bind_polling_period 
(int n)$/
+bits_word      c-src/emacs/src/lisp.h  123
+bits_word      c-src/emacs/src/lisp.h  127
+bla    c.c     /^int bla ()$/
+blah   tex-src/testenv.tex     /^\\section{blah}$/
+bletch el-src/TAGTEST.EL       /^(foo::defmumble bletch beuarghh)$/
+block  cp-src/cfront.H 694
+block::block   cp-src/cfront.H /^      block(loc ll, Pname nn, Pstmt ss) : 
(BLOCK,ll,ss)/
+blv    c-src/emacs/src/lisp.h  689
+blv_found      c-src/emacs/src/lisp.h  /^blv_found (struct 
Lisp_Buffer_Local_Value *blv)$/
+bodyindent     tex-src/texinfo.tex     /^\\newskip\\defbodyindent 
\\defbodyindent=.4in$/
+bodyindent     tex-src/texinfo.tex     /^\\advance\\dimen2 by 
-\\defbodyindent$/
+bodyindent     tex-src/texinfo.tex     /^\\advance\\dimen3 by 
-\\defbodyindent$/
+bodyindent     tex-src/texinfo.tex     /^\\advance\\leftskip by 
-\\defbodyindent$/
+bodyindent     tex-src/texinfo.tex     /^\\exdentamount=\\defbodyindent$/
+bodyindent     tex-src/texinfo.tex     /^\\advance\\leftskip by 
\\defbodyindent \\advance \\righ/
+bodyindent     tex-src/texinfo.tex     /^\\exdentamount=\\defbodyindent$/
+bodyindent     tex-src/texinfo.tex     /^\\advance\\leftskip by 
\\defbodyindent \\advance \\righ/
+bodyindent     tex-src/texinfo.tex     /^\\exdentamount=\\defbodyindent$/
+bodyindent     tex-src/texinfo.tex     /^\\advance\\leftskip by 
\\defbodyindent \\advance \\righ/
+bodyindent     tex-src/texinfo.tex     /^\\exdentamount=\\defbodyindent$/
+bodyindent     tex-src/texinfo.tex     /^\\advance\\leftskip by 
\\defbodyindent \\advance \\righ/
+bodyindent     tex-src/texinfo.tex     /^\\exdentamount=\\defbodyindent$/
+bodyindent     tex-src/texinfo.tex     /^\\advance\\leftskip by 
\\defbodyindent \\advance \\righ/
+bodyindent     tex-src/texinfo.tex     /^\\exdentamount=\\defbodyindent$/
+bodyindent     tex-src/texinfo.tex     /^\\advance\\leftskip by 
\\defbodyindent \\advance \\righ/
+bodyindent     tex-src/texinfo.tex     /^\\exdentamount=\\defbodyindent$/
+bool   c.c     222
+bool_header_size       c-src/emacs/src/lisp.h  1472
+bool_vector_bitref     c-src/emacs/src/lisp.h  /^bool_vector_bitref 
(Lisp_Object a, EMACS_INT i)$/
+bool_vector_bytes      c-src/emacs/src/lisp.h  /^bool_vector_bytes (EMACS_INT 
size)$/
+bool_vector_data       c-src/emacs/src/lisp.h  /^bool_vector_data (Lisp_Object 
a)$/
+bool_vector_ref        c-src/emacs/src/lisp.h  /^bool_vector_ref (Lisp_Object 
a, EMACS_INT i)$/
+bool_vector_set        c-src/emacs/src/lisp.h  /^bool_vector_set (Lisp_Object 
a, EMACS_INT i, bool /
+bool_vector_size       c-src/emacs/src/lisp.h  /^bool_vector_size (Lisp_Object 
a)$/
+bool_vector_uchar_data c-src/emacs/src/lisp.h  /^bool_vector_uchar_data 
(Lisp_Object a)$/
+bool_vector_words      c-src/emacs/src/lisp.h  /^bool_vector_words (EMACS_INT 
size)$/
+boolvar        c-src/emacs/src/lisp.h  2287
+bracelev       c-src/etags.c   2520
+bsp_DevId      c-src/h.h       25
+btowc  c-src/emacs/src/regex.h /^# define btowc(c) c$/
+buffer c-src/etags.c   238
+buffer c-src/emacs/src/regex.h 341
+buffer c-src/h.h       119
+build  prol-src/natded.prolog  /^build([],Left,Left).$/
+build_pure_c_string    c-src/emacs/src/lisp.h  /^build_pure_c_string (const 
char *str)$/
+build_string   c-src/emacs/src/lisp.h  /^build_string (const char *str)$/
+buildact       prol-src/natded.prolog  /^buildact([SynIn],Right,RightPlus1):-$/
+builtin_lisp_symbol    c-src/emacs/src/lisp.h  /^builtin_lisp_symbol (int 
index)$/
+burst  c-src/h.h       28
+busy   c-src/emacs/src/gmalloc.c       158
+button_down_location   c-src/emacs/src/keyboard.c      5210
+button_down_time       c-src/emacs/src/keyboard.c      5218
+byte_stack     c-src/emacs/src/lisp.h  3049
+bytecode_dest  c-src/emacs/src/lisp.h  3037
+bytecode_top   c-src/emacs/src/lisp.h  3036
+bytes_free     c-src/emacs/src/gmalloc.c       314
+bytes_total    c-src/emacs/src/gmalloc.c       310
+bytes_used     c-src/emacs/src/gmalloc.c       312
+c      c.c     180
+c      c-src/h.h       /^#define c() d$/
+c      c-src/h.h       106
+c      make-src/Makefile       222
+c_ext  c-src/etags.c   2271
+caccacacca     c.c     /^caccacacca (a,b,c,d,e,f,g)$/
+cacheLRUEntry_s        c.c     172
+cacheLRUEntry_t        c.c     177
+call   cp-src/cfront.H 535
+call::call     cp-src/cfront.H /^      call(Pexpr aa, Pexpr bb) : (CALL,aa,bb) 
{ this=0;/
+calloc c-src/emacs/src/gmalloc.c       66
+calloc c-src/emacs/src/gmalloc.c       70
+calloc c-src/emacs/src/gmalloc.c       /^calloc (size_t nmemb, size_t size)$/
+calloc c-src/emacs/src/gmalloc.c       1717
+can_be_null    c-src/emacs/src/regex.h 370
+cancel_echoing c-src/emacs/src/keyboard.c      /^cancel_echoing (void)$/
+canonicalize_filename  c-src/etags.c   /^canonicalize_filename (register char 
*fn)$/
+case_Lisp_Int  c-src/emacs/src/lisp.h  438
+cat    c-src/h.h       81
+cat    prol-src/natded.prolog  /^cat(A, address@hidden, Ass3, Qs3, 
tree(fe,A:address@hidden/
+cat_atoms      prol-src/natded.prolog  /^cat_atoms(A1,A2,A3):-$/
+cccccccccc     c-src/h.h       115
+cdiff  Makefile        /^cdiff: CTAGS.good CTAGS ${infiles}$/
+cdr    c-src/emacs/src/lisp.h  1159
+cell   y-src/parse.y   278
+cgrep  html-src/software.html  /^cgrep$/
+chain  c-src/emacs/src/lisp.h  1162
+chain  c-src/emacs/src/lisp.h  2396
+char_bits      c-src/emacs/src/lisp.h  2443
+char_table_specials    c-src/emacs/src/lisp.h  1692
+charset_unibyte        c-src/emacs/src/regex.h 410
+chartonmstr    pas-src/common.pas      /^function chartonmstr; (*($/
+check  Makefile        /^check:$/
+checkQuotation php-src/lce_functions.php       /^      function 
checkQuotation($str)$/
+check_cons_list        c-src/emacs/src/lisp.h  /^#  define check_cons_list() 
lisp_h_check_cons_list/
+checkhdr       c-src/emacs/src/gmalloc.c       /^checkhdr (const struct hdr 
*hdr)$/
+checkiso       html-src/software.html  /^checkiso$/
+childDidExit   objc-src/Subprocess.m   /^- childDidExit$/
+chunks_free    c-src/emacs/src/gmalloc.c       313
+chunks_used    c-src/emacs/src/gmalloc.c       311
+cjava  c-src/etags.c   2936
+classdef       cp-src/cfront.H 278
+classdef::bit_ass      cp-src/cfront.H 283
+classdef::c_body       cp-src/cfront.H 280
+classdef::clbase       cp-src/cfront.H 286
+classdef::conv cp-src/cfront.H 299
+classdef::csu  cp-src/cfront.H 281
+classdef::friend_list  cp-src/cfront.H 292
+classdef::has_ctor     cp-src/cfront.H /^      Pname   has_ctor()      { 
return memtbl->look("_ctor",0)/
+classdef::has_dtor     cp-src/cfront.H /^      Pname   has_dtor()      { 
return memtbl->look("_dtor",0)/
+classdef::has_itor     cp-src/cfront.H /^      Pname   has_itor()      { 
return itor; }$/
+classdef::in_class     cp-src/cfront.H 295
+classdef::is_simple    cp-src/cfront.H /^      TOK     is_simple()     { 
return (csu==CLASS)?0:csu; };$/
+classdef::itor cp-src/cfront.H 298
+classdef::mem_list     cp-src/cfront.H 288
+classdef::memtbl       cp-src/cfront.H 289
+classdef::obj_align    cp-src/cfront.H 282
+classdef::obj_size     cp-src/cfront.H 290
+classdef::pubbase      cp-src/cfront.H 279
+classdef::pubdef       cp-src/cfront.H 293
+classdef::real_size    cp-src/cfront.H 291
+classdef::string       cp-src/cfront.H 287
+classdef::this_type    cp-src/cfront.H 296
+classdef::tn_list      cp-src/cfront.H 294
+classdef::virt_count   cp-src/cfront.H 284
+classdef::virt_init    cp-src/cfront.H 297
+classifyLine   php-src/lce_functions.php       /^      function 
classifyLine($line)$/
+clear-abbrev-table     c-src/abbrev.c  /^DEFUN ("clear-abbrev-table", 
Fclear_abbrev_table, /
+clear-this-command-keys        c-src/emacs/src/keyboard.c      /^DEFUN 
("clear-this-command-keys", Fclear_this_comm/
+clearAllKey:   objcpp-src/SimpleCalc.M /^- clearAllKey:sender$/
+clearKey:      objcpp-src/SimpleCalc.M /^- clearKey:sender$/
+clear_event    c-src/emacs/src/keyboard.c      /^clear_event (struct 
input_event *event)$/
+clear_input_pending    c-src/emacs/src/keyboard.c      /^clear_input_pending 
(void)$/
+clear_screen   cp-src/screen.cpp       /^void clear_screen(void)$/
+clear_waiting_for_input        c-src/emacs/src/keyboard.c      
/^clear_waiting_for_input (void)$/
+cmd_error      c-src/emacs/src/keyboard.c      /^cmd_error (Lisp_Object data)$/
+cmd_error_internal     c-src/emacs/src/keyboard.c      /^cmd_error_internal 
(Lisp_Object data, const char */
+cmpfn  c-src/emacs/src/lisp.h  /^  bool (*cmpfn) (struct hash_table_test *t, 
Lisp_O/
+cmt    prol-src/natded.prolog  /^cmt:-$/
+cname  c-src/etags.c   2519
+cno    c-src/etags.c   224
+commaargvals   prol-src/natded.prolog  /^commaargvals(Args) -->$/
+command        c-src/etags.c   187
+command-error-default-function c-src/emacs/src/keyboard.c      /^DEFUN 
("command-error-default-function", Fcommand_/
+command_loop   c-src/emacs/src/keyboard.c      /^command_loop (void)$/
+command_loop_1 c-src/emacs/src/keyboard.c      /^command_loop_1 (void)$/
+command_loop_2 c-src/emacs/src/keyboard.c      /^command_loop_2 (Lisp_Object 
ignore)$/
+command_loop_level     c-src/emacs/src/keyboard.c      195
+comment        php-src/lce_functions.php       /^      function comment($line, 
$class)$/
+compile_empty  prol-src/natded.prolog  /^compile_empty:-$/
+compile_lex    prol-src/natded.prolog  /^compile_lex(File):-$/
+complete       prol-src/natded.prolog  /^complete(Cat):-$/
+complete-tag   el-src/emacs/lisp/progmodes/etags.el    /^(defun complete-tag 
()$/
+compressor     c-src/etags.c   188
+compressors    c-src/etags.c   457
+conalgorithm   html-src/algrthms.html  /^Convolutionally$/
+concat c-src/etags.c   /^concat (const char *s1, const char *s2, const char/
+concat erl-src/lists.erl       /^concat([H|T]) ->$/
+concatenatenamestrings pas-src/common.pas      /^function 
concatenatenamestrings; (*($/
+consider_token c-src/etags.c   /^consider_token (char *str, int len, int c, 
int *c_/
+constant       c-src/h.h       29
+constant       cccp.y  113
+constant       y-src/cccp.y    112
+constant_args  c-src/h.h       27
+constype       c-src/emacs/src/lisp.h  3739
+consult_lex    prol-src/natded.prolog  /^consult_lex:-$/
+contents       c-src/emacs/src/lisp.h  1372
+contents       c-src/emacs/src/lisp.h  1600
+contents       c-src/emacs/src/lisp.h  1624
+convert_from_list      erl-src/lines.erl       /^convert_from_list(L) when 
list(L) ->$/
+convert_to_list        erl-src/lines.erl       /^convert_to_list({_, List}) 
when list(List) ->$/
+count  c-src/emacs/src/lisp.h  1863
+count  erl-src/lines.erl       /^count({N, _}) ->$/
+count_layers   lua-src/allegro.lua     /^local function count_layers (layer)$/
+count_words    c-src/tab.c     /^static int            count_words(char *str, 
char delim)$/
+cow    cp-src/c.C      127
+cplpl  c-src/etags.c   2935
+createPOEntries        php-src/lce_functions.php       /^      function 
createPOEntries()$/
+createWidgets  pyt-src/server.py       /^    def createWidgets(self, host):$/
+createWidgets  pyt-src/server.py       /^    def createWidgets(self):$/
+cstack c-src/etags.c   2523
+curlb  c-src/etags.c   2929
+curlinepos     c-src/etags.c   2931
+current-idle-time      c-src/emacs/src/keyboard.c      /^DEFUN 
("current-idle-time", Fcurrent_idle_time, Sc/
+current-input-mode     c-src/emacs/src/keyboard.c      /^DEFUN 
("current-input-mode", Fcurrent_input_mode, /
+current_kboard c-src/emacs/src/keyboard.c      85
+current_lb_is_new      c-src/etags.c   2926
+cursor_position        cp-src/screen.cpp       /^void cursor_position(void)$/
+cursor_x       cp-src/screen.cpp       15
+cursor_y       cp-src/screen.cpp       15
+d      c.c     180
+d      c-src/emacs/src/lisp.h  4673
+d      c-src/emacs/src/lisp.h  4679
+data   c-src/emacs/src/lisp.h  1395
+data   c-src/emacs/src/lisp.h  2129
+data   c-src/emacs/src/lisp.h  2395
+dbg    erl-src/lines.erl       /^-define(dbg(Fmt, Args), ok=io:format("~p: " 
++ Fmt/
+dcl_context    cp-src/cfront.H 739
+dcl_context::c_this    cp-src/cfront.H 740
+dcl_context::cot       cp-src/cfront.H 743
+dcl_context::ftbl      cp-src/cfront.H 744
+dcl_context::nof       cp-src/cfront.H 745
+dcl_context::not       cp-src/cfront.H 742
+dcl_context::stack     cp-src/cfront.H /^      void    stack()         { cc++; 
*cc = *(cc-1); };$/
+dcl_context::tot       cp-src/cfront.H 741
+dcl_context::unstack   cp-src/cfront.H /^      void    unstack()       { cc--; 
};$/
+ddefineseen    c-src/etags.c   2462
+debian-bug     html-src/software.html  /^debian-bug.el$/
+decimalKey:    objcpp-src/SimpleCalc.M /^- decimalKey:sender$/
+decode_timer   c-src/emacs/src/keyboard.c      /^decode_timer (Lisp_Object 
timer, struct timespec */
+def    c-src/h.h       35
+def    c-src/h.h       38
+defalt c-src/emacs/src/lisp.h  1585
+default-tags-table-function    el-src/emacs/lisp/progmodes/etags.el    
/^(defvar default-tags-table-function nil$/
+default_C_entries      c-src/etags.c   /^default_C_entries (FILE *inf)$/
+default_C_help c-src/etags.c   515
+default_C_help c-src/etags.c   523
+default_C_suffixes     c-src/etags.c   512
+defcell        c-src/emacs/src/lisp.h  2351
+define-abbrev  c-src/abbrev.c  /^DEFUN ("define-abbrev", Fdefine_abbrev, 
Sdefine_ab/
+define-abbrev-table    c-src/abbrev.c  /^DEFUN ("define-abbrev-table", 
Fdefine_abbrev_table/
+define-global-abbrev   c-src/abbrev.c  /^DEFUN ("define-global-abbrev", 
Fdefine_global_abbr/
+define-mode-abbrev     c-src/abbrev.c  /^DEFUN ("define-mode-abbrev", 
Fdefine_mode_abbrev, /
+defined_GC_CHECK_STRING_BYTES  c-src/emacs/src/lisp.h  4663
+defined_GC_CHECK_STRING_BYTES  c-src/emacs/src/lisp.h  4665
+definedef      c-src/etags.c   2464
+defun_func1    c.c     /^defun_func1()$/
+delegate       objc-src/Subprocess.m   /^- delegate$/
+delete erl-src/lines.erl       /^delete(Lno, _) when Lno < 1 ->$/
+delete erl-src/lists.erl       /^delete(Item, [Item|Rest]) ->$/
+deleteItem     pyt-src/server.py       /^    def deleteItem(self):$/
+delete_kboard  c-src/emacs/src/keyboard.c      /^delete_kboard (KBOARD *kb)$/
+delete_nth     erl-src/lines.erl       /^delete_nth(1, [H|T]) ->$/
+deliver_input_available_signal c-src/emacs/src/keyboard.c      
/^deliver_input_available_signal (int sig)$/
+deliver_interrupt_signal       c-src/emacs/src/keyboard.c      
/^deliver_interrupt_signal (int sig)$/
+deliver_user_signal    c-src/emacs/src/keyboard.c      /^deliver_user_signal 
(int sig)$/
+depth  c-src/emacs/src/lisp.h  1618
+derived_analyses       prol-src/natded.prolog  /^derived_analyses([],[]).$/
+describe_abbrev        c-src/abbrev.c  /^describe_abbrev (sym, stream)$/
+detect_input_pending   c-src/emacs/src/keyboard.c      /^detect_input_pending 
(void)$/
+detect_input_pending_ignore_squeezables        c-src/emacs/src/keyboard.c      
/^detect_input_pending_ignore_squeezables (void)$/
+detect_input_pending_run_timers        c-src/emacs/src/keyboard.c      
/^detect_input_pending_run_timers (bool do_display)$/
+dialog_loop    erl-src/gs_dialog.erl   /^dialog_loop(Module, Window, Frame, 
Extra, Args) ->/
+dignorerest    c-src/etags.c   2463
+discard-input  c-src/emacs/src/keyboard.c      /^DEFUN ("discard-input", 
Fdiscard_input, Sdiscard_i/
+discard_mouse_events   c-src/emacs/src/keyboard.c      /^discard_mouse_events 
(void)$/
+discrete_location      cp-src/clheir.hpp       56
+discrete_location::assign_neighbor     cp-src/clheir.hpp       /^    void 
assign_neighbor(int direction, location */
+discrete_location::clear_neighbors     cp-src/clheir.cpp       /^void 
discrete_location::clear_neighbors(void)$/
+discrete_location::discrete_location   cp-src/clheir.hpp       /^    
discrete_location(int xi, int yi, int zi):$/
+discrete_location::neighbors   cp-src/clheir.hpp       59
+discrete_location::x   cp-src/clheir.hpp       58
+discrete_location::y   cp-src/clheir.hpp       58
+discrete_location::z   cp-src/clheir.hpp       58
+display        cp-src/conway.cpp       /^void display(void)$/
+disposetextstring      pas-src/common.pas      /^procedure 
disposetextstring;(*($/
+dnone  c-src/etags.c   2460
+doc    c-src/emacs/src/lisp.h  1689
+dog    c-src/h.h       81
+dotfill        tex-src/texinfo.tex     /^  \\null\\nobreak\\indexdotfill % 
Have leaders before/
+dotfill        tex-src/texinfo.tex     
/^\\noindent\\hskip\\secondaryindent\\hbox{#1}\\indexdotf/
+double_click_count     c-src/emacs/src/keyboard.c      5222
+drag_n_drop_syms       c-src/emacs/src/keyboard.c      4629
+dribble        c-src/emacs/src/keyboard.c      236
+dsharpseen     c-src/etags.c   2461
+dummies        tex-src/texinfo.tex     /^{\\indexdummies % Must do this here, 
since \\bf, etc/
+dummies        tex-src/texinfo.tex     /^{\\indexdummies % Must do this here, 
since \\bf, etc/
+dummydots      tex-src/texinfo.tex     /^\\let\\dots=\\indexdummydots$/
+dummyfont      tex-src/texinfo.tex     /^\\let\\w=\\indexdummyfont$/
+dummyfont      tex-src/texinfo.tex     /^\\let\\t=\\indexdummyfont$/
+dummyfont      tex-src/texinfo.tex     /^\\let\\r=\\indexdummyfont$/
+dummyfont      tex-src/texinfo.tex     /^\\let\\i=\\indexdummyfont$/
+dummyfont      tex-src/texinfo.tex     /^\\let\\b=\\indexdummyfont$/
+dummyfont      tex-src/texinfo.tex     /^\\let\\emph=\\indexdummyfont$/
+dummyfont      tex-src/texinfo.tex     /^\\let\\strong=\\indexdummyfont$/
+dummyfont      tex-src/texinfo.tex     /^\\let\\sc=\\indexdummyfont$/
+dummyfont      tex-src/texinfo.tex     /^\\let\\tclose=\\indexdummyfont$/
+dummyfont      tex-src/texinfo.tex     /^\\let\\code=\\indexdummyfont$/
+dummyfont      tex-src/texinfo.tex     /^\\let\\file=\\indexdummyfont$/
+dummyfont      tex-src/texinfo.tex     /^\\let\\samp=\\indexdummyfont$/
+dummyfont      tex-src/texinfo.tex     /^\\let\\kbd=\\indexdummyfont$/
+dummyfont      tex-src/texinfo.tex     /^\\let\\key=\\indexdummyfont$/
+dummyfont      tex-src/texinfo.tex     /^\\let\\var=\\indexdummyfont$/
+dummytex       tex-src/texinfo.tex     /^\\let\\TeX=\\indexdummytex$/
+dump   pyt-src/server.py       /^    def dump(self, folded):$/
+duplicate      erl-src/lists.erl       /^duplicate(N, X) when integer(N), N >= 
0 -> duplica/
+ea     cp-src/cfront.H 80
+ea::ea cp-src/cfront.H /^      ea(void* pp) { p = pp; }$/
+ea::ea cp-src/cfront.H /^      ea(int ii)   { i = ii; }$/
+ea::ea cp-src/cfront.H /^      ea() {}$/
+ea::ea cp-src/cfront.H /^      ea(int i)       { x; }$/
+ea::i  cp-src/cfront.H 83
+ea::p  cp-src/cfront.H 82
+eabs   c-src/emacs/src/lisp.h  /^#define eabs(x)         ((x) < 0 ? -(x) : 
(x))$/
+eassert        c-src/emacs/src/lisp.h  /^# define eassert(cond) ((void) (false 
&& (cond))) /
+eassert        c-src/emacs/src/lisp.h  /^# define eassert(cond)                
                                \\$/
+eassume        c-src/emacs/src/lisp.h  /^# define eassume(cond) assume (cond)$/
+eassume        c-src/emacs/src/lisp.h  /^# define eassume(cond)                
                                \\$/
+eax    c-src/sysdep.h  31
+eax    c-src/sysdep.h  33
+eax    c-src/sysdep.h  33
+echo_add_key   c-src/emacs/src/keyboard.c      /^echo_add_key (Lisp_Object c)$/
+echo_char      c-src/emacs/src/keyboard.c      /^echo_char (Lisp_Object c)$/
+echo_dash      c-src/emacs/src/keyboard.c      /^echo_dash (void)$/
+echo_kboard    c-src/emacs/src/keyboard.c      166
+echo_keystrokes_p      c-src/emacs/src/keyboard.c      /^echo_keystrokes_p 
(void)$/
+echo_length    c-src/emacs/src/keyboard.c      /^echo_length (void)$/
+echo_message_buffer    c-src/emacs/src/keyboard.c      171
+echo_now       c-src/emacs/src/keyboard.c      /^echo_now (void)$/
+echo_truncate  c-src/emacs/src/keyboard.c      /^echo_truncate (ptrdiff_t 
nchars)$/
+echoing        c-src/emacs/src/keyboard.c      154
+ediff% Makefile        /^ediff%: ETAGS.good% ETAGS ${infiles}$/
+editItem       pyt-src/server.py       /^    def editItem(self):$/
+editsite       pyt-src/server.py       /^    def editsite(self, site):$/
+edituser       pyt-src/server.py       /^    def edituser(self, user):$/
+egetenv        c-src/emacs/src/lisp.h  /^egetenv (const char *var)$/
+elist  cp-src/cfront.H 727
+elist::add     cp-src/cfront.H /^      void    add(Pexpr e)    { tail->e2 = e; 
tail = e; };$/
+elist::elist   cp-src/cfront.H /^              elist(Pexpr e)  { Nl++; head = 
tail = e; };$/
+elist::head    cp-src/cfront.H 728
+elist::tail    cp-src/cfront.H 729
+emacs_abort    c-src/emacs/src/lisp.h  /^extern _Noreturn void emacs_abort 
(void) NO_INLINE/
+end    c-src/emacs/src/regex.h 432
+end    c-src/emacs/src/keyboard.c      8753
+endtoken       c-src/etags.c   /^#define       endtoken(c)     (_etk[CHAR 
(c)]) \/* c ends tok/
+enter_critical_section c-src/h.h       116
+entry  perl-src/htlmify-cystic 218
+entry  perl-src/htlmify-cystic 234
+entry  perl-src/htlmify-cystic 245
+entry  perl-src/htlmify-cystic 252
+entry  perl-src/htlmify-cystic 268
+entry  perl-src/htlmify-cystic 276
+entry  perl-src/htlmify-cystic 281
+entry  perl-src/htlmify-cystic 296
+enumdef        cp-src/cfront.H 265
+enumdef::e_body        cp-src/cfront.H 266
+enumdef::enumdef       cp-src/cfront.H /^              enumdef(Pname n)        
{ base=ENUM; mem=n; };$/
+enumdef::mem   cp-src/cfront.H 268
+enumdef::no_of_enumerators     cp-src/cfront.H 267
+equalsKey:     objcpp-src/SimpleCalc.M /^- equalsKey:sender$/
+erlang_atom    c-src/etags.c   /^erlang_atom (char *s)$/
+erlang_attribute       c-src/etags.c   /^erlang_attribute (char *s)$/
+erlang_func    c-src/etags.c   /^erlang_func (char *s, char *last)$/
+error  c-src/etags.c   /^static void error (const char *, ...) ATTRIBUTE_FO/
+error  c-src/etags.c   /^error (const char *format, ...)$/
+error  c-src/emacs/src/lisp.h  /^extern _Noreturn void error (const char *, 
...) AT/
+error  cp-src/cfront.H 94
+error  cccp.y  /^error (msg)$/
+error  y-src/cccp.y    /^error (msg)$/
+error_signaled c-src/etags.c   264
+estmt  cp-src/cfront.H 662
+estmt::estmt   cp-src/cfront.H /^      estmt(TOK t, loc ll, Pexpr ee, Pstmt 
ss) : (t,ll,/
+etags  el-src/emacs/lisp/progmodes/etags.el    /^(defgroup etags nil "Tags 
tables."$/
+etags  html-src/software.html  /^Etags$/
+etags--xref-find-definitions   el-src/emacs/lisp/progmodes/etags.el    
/^(defun etags--xref-find-definitions (pattern &opti/
+etags--xref-limit      el-src/emacs/lisp/progmodes/etags.el    /^(defconst 
etags--xref-limit 1000)$/
+etags-file-of-tag      el-src/emacs/lisp/progmodes/etags.el    /^(defun 
etags-file-of-tag (&optional relative) ; Do/
+etags-goto-tag-location        el-src/emacs/lisp/progmodes/etags.el    
/^(defun etags-goto-tag-location (tag-info)$/
+etags-list-tags        el-src/emacs/lisp/progmodes/etags.el    /^(defun 
etags-list-tags (file) ; Doc string?$/
+etags-recognize-tags-table     el-src/emacs/lisp/progmodes/etags.el    
/^(defun etags-recognize-tags-table ()$/
+etags-snarf-tag        el-src/emacs/lisp/progmodes/etags.el    /^(defun 
etags-snarf-tag (&optional use-explicit) ; /
+etags-tags-apropos     el-src/emacs/lisp/progmodes/etags.el    /^(defun 
etags-tags-apropos (string) ; Doc string?$/
+etags-tags-apropos-additional  el-src/emacs/lisp/progmodes/etags.el    
/^(defun etags-tags-apropos-additional (regexp)$/
+etags-tags-completion-table    el-src/emacs/lisp/progmodes/etags.el    
/^(defun etags-tags-completion-table () ; Doc string/
+etags-tags-included-tables     el-src/emacs/lisp/progmodes/etags.el    
/^(defun etags-tags-included-tables () ; Doc string?/
+etags-tags-table-files el-src/emacs/lisp/progmodes/etags.el    /^(defun 
etags-tags-table-files () ; Doc string?$/
+etags-verify-tags-table        el-src/emacs/lisp/progmodes/etags.el    
/^(defun etags-verify-tags-table ()$/
+etags-xref-find        el-src/emacs/lisp/progmodes/etags.el    /^(defun 
etags-xref-find (action id)$/
+etags-xref-find-definitions-tag-order  el-src/emacs/lisp/progmodes/etags.el    
/^(defvar etags-xref-find-definitions-tag-order '(ta/
+etags_getcwd   c-src/etags.c   /^etags_getcwd (void)$/
+eval_dyn       c-src/emacs/src/keyboard.c      /^eval_dyn (Lisp_Object form)$/
+event-convert-list     c-src/emacs/src/keyboard.c      /^DEFUN 
("event-convert-list", Fevent_convert_list, /
+event-symbol-parse-modifiers   c-src/emacs/src/keyboard.c      /^DEFUN 
("internal-event-symbol-parse-modifiers", Fe/
+event_head     c-src/emacs/src/keyboard.c      11021
+event_to_kboard        c-src/emacs/src/keyboard.c      /^event_to_kboard 
(struct input_event *event)$/
+exact  c-src/emacs/src/gmalloc.c       200
+exit   c-src/exit.c    /^DEFUN(exit, (status), int status)$/
+exit   c-src/exit.strange_suffix       /^DEFUN(exit, (status), int status)$/
+exit-recursive-edit    c-src/emacs/src/keyboard.c      /^DEFUN 
("exit-recursive-edit", Fexit_recursive_edit/
+exit_critical_to_previous      c-src/h.h       117
+exp    y-src/parse.y   94
+exp    y-src/atest.y   2
+exp    y-src/cccp.y    156
+exp    y-src/cccp.y    185
+exp1   y-src/cccp.y    148
+exp_list       y-src/parse.y   262
+expand-abbrev  c-src/abbrev.c  /^DEFUN ("expand-abbrev", Fexpand_abbrev, 
Sexpand_ab/
+expandmng      prol-src/natded.prolog  /^expandmng(var(V),var(V)).$/
+expandmng_tree prol-src/natded.prolog  
/^expandmng_tree(tree(Rule,Syn:Sem,Trees),$/
+expandmng_trees        prol-src/natded.prolog  /^expandmng_trees([],[]).$/
+expandsyn      prol-src/natded.prolog  /^expandsyn(Syn,Syn):-$/
+explicitly-quoted-pending-delete-mode  el-src/TAGTEST.EL       /^(defalias 
(quote explicitly-quoted-pending-delete-/
+expr   cp-src/cfront.H 469
+expr::as_type  cp-src/cfront.H 499
+expr::cond     cp-src/cfront.H 497
+expr::e1       cp-src/cfront.H 485
+expr::e2       cp-src/cfront.H 490
+expr::fct_name cp-src/cfront.H 496
+expr::i1       cp-src/cfront.H 487
+expr::il       cp-src/cfront.H 501
+expr::mem      cp-src/cfront.H 498
+expr::n_initializer    cp-src/cfront.H 491
+expr::n_table  cp-src/cfront.H 500
+expr::string   cp-src/cfront.H 486
+expr::string2  cp-src/cfront.H 492
+expr::syn_class        cp-src/cfront.H 482
+expr::tp       cp-src/cfront.H 481
+expr::tp2      cp-src/cfront.H 495
+expression_value       cccp.y  68
+expression_value       y-src/cccp.y    68
+extras c-src/emacs/src/lisp.h  1603
+extvar c-src/h.h       109
+f      c-src//c.c      /^T f(){if(x){}$/
+f      c.c     145
+f      c.c     156
+f      c.c     168
+f      c.c     /^int f$/
+f      c-src/h.h       89
+f      cp-src/c.C      /^A<int>* f() {}$/
+f      cp-src/c.C      /^int f(A<int> x) {}$/
+f      cp-src/c.C      /^int A<int>::f(A<int>* x) {}$/
+f      cp-src/c.C      /^A<float,B<int> > A<B<float>,int>::f(A<int>* x) {}$/
+f1     c.c     /^     f1 () { \/* Do something. *\/; }$/
+f2     c.c     /^void f2 () { \/* Do something. *\/; }$/
+fast_string_match_ignore_case  c-src/emacs/src/lisp.h  
/^fast_string_match_ignore_case (Lisp_Object regexp,/
+fastmap        c-src/emacs/src/regex.h 355
+fastmap_accurate       c-src/emacs/src/regex.h 383
+fatal  c-src/etags.c   /^fatal (const char *s1, const char *s2)$/
+fatala c.c     /^void fatala () __attribute__ ((noreturn));$/
+fct    cp-src/cfront.H 365
+fct::argtype   cp-src/cfront.H 372
+fct::b_init    cp-src/cfront.H 380
+fct::body      cp-src/cfront.H 376
+fct::declared  cp-src/cfront.H /^      bit     declared() { return 
nargs_known; };$/
+fct::f_expr    cp-src/cfront.H 383
+fct::f_init    cp-src/cfront.H 377
+fct::f_inline  cp-src/cfront.H 370
+fct::f_result  cp-src/cfront.H 385
+fct::f_this    cp-src/cfront.H 374
+fct::f_virtual cp-src/cfront.H 369
+fct::last_expanded     cp-src/cfront.H 384
+fct::memof     cp-src/cfront.H 375
+fct::nargs     cp-src/cfront.H 367
+fct::nargs_known       cp-src/cfront.H 368
+fct::returns   cp-src/cfront.H 371
+fct::s_returns cp-src/cfront.H 373
+fdHandler      objc-src/Subprocess.m   /^fdHandler (int theFd, id self)$/
+fdHandler:     objc-src/Subprocess.m   /^- fdHandler:(int)theFd$/
+fdefunkey      c-src/etags.c   2409
+fdefunname     c-src/etags.c   2410
+fdesc  c-src/etags.c   201
+fdesc  c-src/etags.c   212
+fdp    c-src/etags.c   217
+field_of_play  cp-src/conway.cpp       18
+fignore        c-src/etags.c   2416
+file-of-tag    el-src/emacs/lisp/progmodes/etags.el    /^(defun file-of-tag 
(&optional relative)$/
+file-of-tag-function   el-src/emacs/lisp/progmodes/etags.el    /^(defvar 
file-of-tag-function nil$/
+fileJoin       php-src/lce_functions.php       /^  function fileJoin()$/
+file_index     perl-src/htlmify-cystic 33
+file_tocs      perl-src/htlmify-cystic 30
+filename_is_absolute   c-src/etags.c   /^filename_is_absolute (char *fn)$/
+filenames      c-src/etags.c   196
+find-tag       el-src/emacs/lisp/progmodes/etags.el    /^(defun find-tag 
(tagname &optional next-p regexp-p/
+find-tag-default-function      el-src/emacs/lisp/progmodes/etags.el    
/^(defcustom find-tag-default-function nil$/
+find-tag-history       el-src/emacs/lisp/progmodes/etags.el    /^(defvar 
find-tag-history nil) ; Doc string?$/
+find-tag-hook  el-src/emacs/lisp/progmodes/etags.el    /^(defcustom 
find-tag-hook nil$/
+find-tag-in-order      el-src/emacs/lisp/progmodes/etags.el    /^(defun 
find-tag-in-order (pattern$/
+find-tag-interactive   el-src/emacs/lisp/progmodes/etags.el    /^(defun 
find-tag-interactive (prompt &optional no-d/
+find-tag-marker-ring   el-src/emacs/lisp/progmodes/etags.el    /^(defvaralias 
'find-tag-marker-ring 'xref--marker-r/
+find-tag-marker-ring-length    el-src/emacs/lisp/progmodes/etags.el    
/^(define-obsolete-variable-alias 'find-tag-marker-r/
+find-tag-next-line-after-failure-p     el-src/emacs/lisp/progmodes/etags.el    
/^(defvar find-tag-next-line-after-failure-p nil$/
+find-tag-noselect      el-src/emacs/lisp/progmodes/etags.el    /^(defun 
find-tag-noselect (tagname &optional next-p/
+find-tag-other-frame   el-src/emacs/lisp/progmodes/etags.el    /^(defun 
find-tag-other-frame (tagname &optional nex/
+find-tag-other-window  el-src/emacs/lisp/progmodes/etags.el    /^(defun 
find-tag-other-window (tagname &optional ne/
+find-tag-regexp        el-src/emacs/lisp/progmodes/etags.el    /^(defun 
find-tag-regexp (regexp &optional next-p ot/
+find-tag-regexp-next-line-after-failure-p      
el-src/emacs/lisp/progmodes/etags.el    /^(defvar 
find-tag-regexp-next-line-after-failure-p /
+find-tag-regexp-search-function        el-src/emacs/lisp/progmodes/etags.el    
/^(defvar find-tag-regexp-search-function nil$/
+find-tag-regexp-tag-order      el-src/emacs/lisp/progmodes/etags.el    
/^(defvar find-tag-regexp-tag-order nil$/
+find-tag-search-function       el-src/emacs/lisp/progmodes/etags.el    
/^(defvar find-tag-search-function nil$/
+find-tag-tag   el-src/emacs/lisp/progmodes/etags.el    /^(defun find-tag-tag 
(string)$/
+find-tag-tag-order     el-src/emacs/lisp/progmodes/etags.el    /^(defvar 
find-tag-tag-order nil$/
+find_entries   c-src/etags.c   /^find_entries (FILE *inf)$/
+find_user_signal_name  c-src/emacs/src/keyboard.c      /^find_user_signal_name 
(int sig)$/
+findcats       prol-src/natded.prolog  /^findcats([],Left,Left).$/
+finlist        c-src/etags.c   2414
+first  c-src/emacs/src/gmalloc.c       151
+fitchtreelist  prol-src/natded.prolog  /^fitchtreelist([]).$/
+fixup_locale   c-src/emacs/src/lisp.h  /^INLINE void fixup_locale (void) {}$/
+flag   c-src/getopt.h  83
+flag2str       pyt-src/server.py       /^def flag2str(value, string):$/
+flat_length    erl-src/lists.erl       /^flat_length(List) ->$/
+flatten        erl-src/lists.erl       /^flatten(List) ->$/
+flistseen      c-src/etags.c   2415
+fn     c-src/exit.c    /^    void EXFUN((*fn[1]), (NOARGS));$/
+fn     c-src/exit.strange_suffix       /^    void EXFUN((*fn[1]), (NOARGS));$/
+fnin   y-src/parse.y   67
+fnin   parse.y 67
+focus_set      pyt-src/server.py       /^    def focus_set(self):$/
+foldl  erl-src/lists.erl       /^foldl(F, As, Last, [Hd|Tail]) ->$/
+foldr  erl-src/lists.erl       /^foldr(F, As, [Hd|Tail], Last) ->$/
+follow_key     c-src/emacs/src/keyboard.c      /^follow_key (Lisp_Object 
keymap, Lisp_Object key)$/
+fonts  tex-src/texinfo.tex     /^\\obeyspaces \\obeylines \\ninett 
\\indexfonts \\rawbac/
+fonts\rm       tex-src/texinfo.tex     /^  \\indexfonts\\rm \\tolerance=9500 
\\advance\\baseline/
+foo    c.c     150
+foo    c.c     166
+foo    c.c     167
+foo    c.c     178
+foo    c.c     189
+foo    c-src/h.h       18
+foo    cp-src/c.C      68
+foo    cp-src/c.C      79
+foo    f-src/entry.for /^       character*(*) function foo()$/
+foo    f-src/entry.strange_suffix      /^       character*(*) function foo()$/
+foo    f-src/entry.strange     /^       character*(*) function foo()$/
+foo    php-src/ptest.php       /^foo()$/
+foo::f cp-src/c.C      /^     void f() {}$/
+foo::x cp-src/c.C      80
+foobar c-src//c.c      /^int foobar() {;}$/
+foobar c.c     /^extern void foobar (void) __attribute__ ((section /
+foobar2        c-src/h.h       20
+foobar2_       c-src/h.h       16
+foperator      c-src/etags.c   2411
+force_auto_save_soon   c-src/emacs/src/keyboard.c      /^force_auto_save_soon 
(void)$/
+force_explicit_name    c-src/etags.c   265
+force_quit_count       c-src/emacs/src/keyboard.c      10387
+formatSize:inBuf:      objc-src/PackInsp.m     /^-(const char 
*)formatSize:(const char *)size inBuf/
+forstmt        cp-src/cfront.H 689
+forstmt::forstmt       cp-src/cfront.H /^      forstmt(loc ll, Pstmt fss, 
Pexpr ee1, Pexpr ee2, /
+found  c-src/emacs/src/lisp.h  2344
+fracas html-src/software.html  /^Fracas$/
+frag   c-src/emacs/src/gmalloc.c       152
+frame_local    c-src/emacs/src/lisp.h  2341
+free   c-src/emacs/src/gmalloc.c       67
+free   c-src/emacs/src/gmalloc.c       72
+free   c-src/emacs/src/gmalloc.c       166
+free   c-src/emacs/src/gmalloc.c       /^free (void *ptr)$/
+free   c-src/emacs/src/gmalloc.c       1719
+free_fdesc     c-src/etags.c   /^free_fdesc (register fdesc *fdp)$/
+free_for       prol-src/natded.prolog  /^free_for(var(_),_,_).$/
+free_regexps   c-src/etags.c   /^free_regexps (void)$/
+free_tree      c-src/etags.c   /^free_tree (register node *np)$/
+free_var       prol-src/natded.prolog  /^free_var(var(V),var(V)).$/
+freehook       c-src/emacs/src/gmalloc.c       /^freehook (void *ptr)$/
+fresh_vars     prol-src/natded.prolog  /^fresh_vars(var(V),var(V)).$/
+fstartlist     c-src/etags.c   2413
+func1  c.c     /^int func1$/
+func2  c.c     /^int func2 (a,b$/
+func_key_syms  c-src/emacs/src/keyboard.c      4626
+funcboo        c.c     /^bool funcboo ()$/
+funcpointer    c-src/emacs/src/lisp.h  2126
+funcptr        c-src/h.h       /^    fu   int (*funcptr) (void *ptr);$/
+function       c-src/etags.c   194
+function       c-src/emacs/src/lisp.h  694
+function       c-src/emacs/src/lisp.h  1685
+function       c-src/emacs/src/lisp.h  2197
+functionp      c-src/emacs/src/lisp.h  /^functionp (Lisp_Object object)$/
+fvdef  c-src/etags.c   2418
+fvextern       c-src/etags.c   2420
+fvnameseen     c-src/etags.c   2412
+fvnone c-src/etags.c   2408
+fwd    c-src/emacs/src/lisp.h  690
+fwd    c-src/emacs/src/lisp.h  2346
+galileo        html-src/software.html  /^GaliLEO$/
+gather pyt-src/server.py       /^    def gather(self):$/
+gather pyt-src/server.py       /^    def gather(self):$/
+gc_aset        c-src/emacs/src/lisp.h  /^gc_aset (Lisp_Object array, ptrdiff_t 
idx, Lisp_Ob/
+gcmarkbit      c-src/emacs/src/lisp.h  656
+gcpro  c-src/emacs/src/lisp.h  3042
+gcpro  c-src/emacs/src/lisp.h  3132
+gen    cp-src/cfront.H 410
+gen::fct_list  cp-src/cfront.H 411
+gen::string    cp-src/cfront.H 412
+gen_help_event c-src/emacs/src/keyboard.c      /^gen_help_event (Lisp_Object 
help, Lisp_Object fram/
+genalgorithm   html-src/algrthms.html  /^Generating the 
Data<\/font><\/i><\/b>$/
+generic_object cp-src/clheir.hpp       13
+generic_object::compute_next_state     cp-src/clheir.hpp       /^    virtual 
void compute_next_state(void) { }$/
+generic_object::generic_object cp-src/clheir.cpp       
/^generic_object::generic_object(void)$/
+generic_object::step   cp-src/clheir.hpp       /^    virtual void step(void) { 
}$/
+generic_object::where_in_registry      cp-src/clheir.hpp       15
+generic_object::~generic_object        cp-src/clheir.cpp       
/^generic_object::~generic_object(void)$/
+getArchs       objc-src/PackInsp.m     /^-(void)getArchs$/
+getDomainNames php-src/lce_functions.php       /^      function 
getDomainNames()$/
+getPOReader    php-src/lce_functions.php       /^      function 
&getPOReader($domain)$/
+getPath:forType:       objc-src/PackInsp.m     /^-(const char *)getPath:(char 
*)buf forType:(const /
+getTextDomains php-src/lce_functions.php       /^  function 
getTextDomains($lines)$/
+get_compressor_from_suffix     c-src/etags.c   /^get_compressor_from_suffix 
(char *file, char **ext/
+get_contiguous_space   c-src/emacs/src/gmalloc.c       /^get_contiguous_space 
(ptrdiff_t size, void *positi/
+get_current_dir_name   c-src/emacs/src/gmalloc.c       33
+get_input_pending      c-src/emacs/src/keyboard.c      /^get_input_pending 
(int flags)$/
+get_language_from_filename     c-src/etags.c   /^get_language_from_filename 
(char *file, int case_s/
+get_language_from_interpreter  c-src/etags.c   /^get_language_from_interpreter 
(char *interpreter)$/
+get_language_from_langname     c-src/etags.c   /^get_language_from_langname 
(const char *name)$/
+get_layer_by_name      lua-src/allegro.lua     /^local function 
get_layer_by_name (sprite, layer, n/
+get_tag        c-src/etags.c   /^get_tag (register char *bp, char **namepp)$/
+get_word       c-src/tab.c     /^static char           *get_word(char **str, 
char delim)$/
+getcjmp        c-src/emacs/src/keyboard.c      147
+getptys        objc-src/Subprocess.m   /^getptys (int *master, int *slave)$/
+gettext        php-src/lce_functions.php       /^      function 
gettext($msgid)$/
+ggg    c-src/h.h       10
+ghi1   c-src/h.h       36
+ghi2   c-src/h.h       39
+glider cp-src/conway.cpp       /^void glider(int x, int y)$/
+gnu    html-src/software.html  /^Free software that I wrote for the GNU 
project or /
+gobble_input   c-src/emacs/src/keyboard.c      /^gobble_input (void)$/
+goto-tag-location-function     el-src/emacs/lisp/progmodes/etags.el    
/^(defvar goto-tag-location-function nil$/
+goto_xy        cp-src/screen.cpp       /^void goto_xy(unsigned char x, 
unsigned char y)$/
+handleList     pyt-src/server.py       /^    def handleList(self, event):$/
+handleNew      pyt-src/server.py       /^    def handleNew(self, event):$/
+handle_async_input     c-src/emacs/src/keyboard.c      /^handle_async_input 
(void)$/
+handle_input_available_signal  c-src/emacs/src/keyboard.c      
/^handle_input_available_signal (int sig)$/
+handle_interrupt       c-src/emacs/src/keyboard.c      /^handle_interrupt 
(bool in_signal_handler)$/
+handle_interrupt_signal        c-src/emacs/src/keyboard.c      
/^handle_interrupt_signal (int sig)$/
+handle_user_signal     c-src/emacs/src/keyboard.c      /^handle_user_signal 
(int sig)$/
+handler        c-src/emacs/src/lisp.h  3023
+handlertype    c-src/emacs/src/lisp.h  3021
+has_arg        c-src/getopt.h  82
+hash   c-src/etags.c   /^hash (const char *str, int len)$/
+hash   c-src/emacs/src/lisp.h  1843
+hash_table_test        c-src/emacs/src/lisp.h  1805
+hashfn c-src/emacs/src/lisp.h  /^  EMACS_UINT (*hashfn) (struct 
hash_table_test *t,/
+hdr    c-src/emacs/src/gmalloc.c       1860
+head_table     c-src/emacs/src/keyboard.c      11027
+header c-src/emacs/src/lisp.h  1371
+header c-src/emacs/src/lisp.h  1388
+header c-src/emacs/src/lisp.h  1581
+header c-src/emacs/src/lisp.h  1610
+header c-src/emacs/src/lisp.h  1672
+header c-src/emacs/src/lisp.h  1826
+header_size    c-src/emacs/src/lisp.h  1471
+heapsize       c-src/emacs/src/gmalloc.c       361
+help   c-src/etags.c   193
+helpPanel:     objcpp-src/SimpleCalc.M /^- helpPanel:sender$/
+help_char_p    c-src/emacs/src/keyboard.c      /^help_char_p (Lisp_Object c)$/
+help_form_saved_window_configs c-src/emacs/src/keyboard.c      2156
+helpwin        pyt-src/server.py       /^def helpwin(helpdict):$/
+hide_cursor    cp-src/screen.cpp       /^void hide_cursor(void)$/
+htmltreelist   prol-src/natded.prolog  /^htmltreelist([]).$/
+hybrid_aligned_alloc   c-src/emacs/src/gmalloc.c       /^hybrid_aligned_alloc 
(size_t alignment, size_t siz/
+hybrid_calloc  c-src/emacs/src/gmalloc.c       /^hybrid_calloc (size_t nmemb, 
size_t size)$/
+hybrid_free    c-src/emacs/src/gmalloc.c       /^hybrid_free (void *ptr)$/
+hybrid_get_current_dir_name    c-src/emacs/src/gmalloc.c       
/^hybrid_get_current_dir_name (void)$/
+hybrid_malloc  c-src/emacs/src/gmalloc.c       /^hybrid_malloc (size_t size)$/
+hybrid_realloc c-src/emacs/src/gmalloc.c       /^hybrid_realloc (void *ptr, 
size_t size)$/
+hypothetical_mem       prol-src/natded.prolog  
/^hypothetical_mem(fi(N),Ass,_):-$/
+i      c-src//c.c      2
+i      c.c     169
+i      c-src/emacs/src/lisp.h  567
+i      c-src/emacs/src/lisp.h  4673
+i      c-src/emacs/src/lisp.h  4679
+ialpage        tex-src/texinfo.tex     /^\\newbox\\partialpage$/
+ialpage        tex-src/texinfo.tex     /^  address@hidden \\advance\\dimen@ 
by-\\ht\\parti/
+ialpage        tex-src/texinfo.tex     /^  address@hidden 
\\advance\\availdimen@ by/
+ialpage        tex-src/texinfo.tex     /^     address@hidden \\advance\\dimen@ 
by-\\ht\\pa/
+ialpage=       tex-src/texinfo.tex     /^  
\\output={\\global\\setbox\\partialpage=$/
+idx    c-src/emacs/src/lisp.h  3150
+ifstmt cp-src/cfront.H 672
+ifstmt::ifstmt cp-src/cfront.H /^      ifstmt(loc ll, Pexpr ee, Pstmt ss1, 
Pstmt ss2)$/
+ignore_case    c-src/etags.c   266
+ignore_mouse_drag_p    c-src/emacs/src/keyboard.c      1256
+iline  cp-src/cfront.H 780
+iline::arg     cp-src/cfront.H 785
+iline::fct_name        cp-src/cfront.H 781
+iline::i_next  cp-src/cfront.H 782
+iline::i_table cp-src/cfront.H 783
+iline::local   cp-src/cfront.H 784
+iline::tp      cp-src/cfront.H 786
+ill=\relax     tex-src/texinfo.tex     /^\\let\\refill=\\relax$/
+immediate_quit c-src/emacs/src/keyboard.c      174
+impatto        html-src/softwarelibero.html    /^Impatto pratico del software 
libero$/
+in_word_set    c-src/etags.c   /^in_word_set (register const char *str, 
register un/
+inattribute    c-src/etags.c   2400
+index  c-src/emacs/src/lisp.h  1856
+infabsdir      c-src/etags.c   206
+infabsname     c-src/etags.c   205
+infiles        Makefile        /^infiles = $(filter-out ${NONSRCS},${SRCS}) 
srclist/
+infname        c-src/etags.c   204
+info   c-src/emacs/src/gmalloc.c       157
+infoPanel:     objcpp-src/SimpleCalc.M /^- infoPanel:sender$/
+init   c-src/etags.c   /^init (void)$/
+init   objcpp-src/SimpleCalc.M /^- init$/
+init:  objc-src/Subprocess.m   /^- init:(const char *)subprocessString$/
+init:withDelegate:andPtySupport:andStdErr:     objc-src/Subprocess.m   /^    
andStdErr:(BOOL)wantsStdErr$/
+init_control   c.c     239
+init_kboard    c-src/emacs/src/keyboard.c      /^init_kboard (KBOARD *kb, 
Lisp_Object type)$/
+init_keyboard  c-src/emacs/src/keyboard.c      /^init_keyboard (void)$/
+init_registry  cp-src/clheir.cpp       /^void init_registry(void)$/
+init_tool_bar_items    c-src/emacs/src/keyboard.c      /^init_tool_bar_items 
(Lisp_Object reuse)$/
+inita  c.c     /^static void inita () {}$/
+initb  c.c     /^static void initb () {}$/
+initial_kboard c-src/emacs/src/keyboard.c      84
+initialize-new-tags-table      el-src/emacs/lisp/progmodes/etags.el    
/^(defun initialize-new-tags-table ()$/
+initialize_random_junk cccp.y  /^initialize_random_junk ()$/
+initialize_random_junk y-src/cccp.y    /^initialize_random_junk ()$/
+input-pending-p        c-src/emacs/src/keyboard.c      /^DEFUN 
("input-pending-p", Finput_pending_p, Sinput/
+input_available_clear_time     c-src/emacs/src/keyboard.c      324
+input_pending  c-src/emacs/src/keyboard.c      239
+input_polling_used     c-src/emacs/src/keyboard.c      /^input_polling_used 
(void)$/
+input_was_pending      c-src/emacs/src/keyboard.c      287
+insert erl-src/lines.erl       /^insert(Lno, _, _) when Lno < 1 ->$/
+insert-abbrev-table-description        c-src/abbrev.c  /^DEFUN 
("insert-abbrev-table-description", Finsert_/
+insert_after   erl-src/lines.erl       /^insert_after(Lno, _, _) when Lno < 1 
->$/
+insert_after_nth       erl-src/lines.erl       /^insert_after_nth(1, [H|T], X) 
->$/
+insert_nth     erl-src/lines.erl       /^insert_nth(1, L, X) ->$/
+insertname     pas-src/common.pas      /^function insertname;(*($/
+instr  y-src/parse.y   80
+instr  parse.y 80
+instruct       c-src/etags.c   2527
+integer        c-src/emacs/src/lisp.h  2127
+integer        cccp.y  113
+integer        y-src/cccp.y    112
+integer_overflow       cccp.y  /^integer_overflow ()$/
+integer_overflow       y-src/cccp.y    /^integer_overflow ()$/
+integertonmstr pas-src/common.pas      /^function integertonmstr; (* 
(TheInteger : integer)/
+intensity1     f-src/entry.for /^     & 
intensity1(efv,fv,svin,svquad,sfpv,maxp,val/
+intensity1     f-src/entry.strange_suffix      /^     & 
intensity1(efv,fv,svin,svquad,sfpv,maxp,val/
+intensity1     f-src/entry.strange     /^     & 
intensity1(efv,fv,svin,svquad,sfpv,maxp,val/
+interface_locate       c-src//c.c      /^interface_locate(void)$/
+intern c-src/emacs/src/lisp.h  /^intern (const char *str)$/
+intern_c_string        c-src/emacs/src/lisp.h  /^intern_c_string (const char 
*str)$/
+internal_last_event_frame      c-src/emacs/src/keyboard.c      228
+interpreters   c-src/etags.c   197
+interrupt_input        c-src/emacs/src/keyboard.c      328
+interrupt_input_blocked        c-src/emacs/src/keyboard.c      76
+interrupt_input_blocked        c-src/emacs/src/lisp.h  3048
+interrupts_deferred    c-src/emacs/src/keyboard.c      331
+intoken        c-src/etags.c   /^#define       intoken(c)      (_itk[CHAR 
(c)]) \/* c can be in/
+intspec        c-src/emacs/src/lisp.h  1688
+intvar c-src/emacs/src/lisp.h  2277
+invalidate_nodes       c-src/etags.c   /^invalidate_nodes (fdesc *badfdp, node 
**npp)$/
+ipc3dChannelType       cp-src/c.C      1
+ipc3dIslandHierarchy   cp-src/c.C      1
+ipc3dLinkControl       cp-src/c.C      1
+irregular_location     cp-src/clheir.hpp       47
+irregular_location::irregular_location cp-src/clheir.hpp       /^    
irregular_location(double xi, double yi, doubl/
+irregular_location::x  cp-src/clheir.hpp       49
+irregular_location::y  cp-src/clheir.hpp       49
+irregular_location::z  cp-src/clheir.hpp       49
+isComment      php-src/lce_functions.php       /^      function 
isComment($class)$/
+isHoliday      cp-src/functions.cpp    /^bool isHoliday ( Date d ){$/
+isLeap cp-src/functions.cpp    /^bool isLeap ( int year ){$/
+is_curly_brace_form    c-src/h.h       54
+is_explicit    c-src/h.h       49
+is_func        c-src/etags.c   221
+is_hor_space   cccp.y  953
+is_hor_space   y-src/cccp.y    953
+is_idchar      cccp.y  948
+is_idchar      y-src/cccp.y    948
+is_idstart     cccp.y  950
+is_idstart     y-src/cccp.y    950
+is_muldiv_operation    cp-src/c.C      /^is_muldiv_operation(pc)$/
+is_ordset      prol-src/ordsets.prolog /^is_ordset(X) :- var(X), !, fail.$/
+iso_lispy_function_keys        c-src/emacs/src/keyboard.c      5151
+isoperator     prol-src/natded.prolog  /^isoperator(Char):-$/
+isoptab        prol-src/natded.prolog  /^isoptab('%').$/
+iswhite        c-src/etags.c   /^#define       iswhite(c)      (_wht[CHAR 
(c)]) \/* c is white /
+item_properties        c-src/emacs/src/keyboard.c      7568
+ival   cp-src/cfront.H 531
+ival::ival     cp-src/cfront.H /^      ival(int ii) : (IVAL,0,0) {this=0; i1 = 
ii;}$/
+jmp    c-src/emacs/src/lisp.h  3044
+just_read_file c-src/etags.c   /^just_read_file (FILE *inf)$/
+kbd_buffer     c-src/emacs/src/keyboard.c      291
+kbd_buffer_events_waiting      c-src/emacs/src/keyboard.c      
/^kbd_buffer_events_waiting (void)$/
+kbd_buffer_get_event   c-src/emacs/src/keyboard.c      /^kbd_buffer_get_event 
(KBOARD **kbp,$/
+kbd_buffer_nr_stored   c-src/emacs/src/keyboard.c      /^kbd_buffer_nr_stored 
(void)$/
+kbd_buffer_store_event c-src/emacs/src/keyboard.c      
/^kbd_buffer_store_event (register struct input_even/
+kbd_buffer_store_event_hold    c-src/emacs/src/keyboard.c      
/^kbd_buffer_store_event_hold (register struct input/
+kbd_buffer_store_help_event    c-src/emacs/src/keyboard.c      
/^kbd_buffer_store_help_event (Lisp_Object frame, Li/
+kbd_buffer_unget_event c-src/emacs/src/keyboard.c      
/^kbd_buffer_unget_event (register struct input_even/
+kbd_fetch_ptr  c-src/emacs/src/keyboard.c      297
+kbd_store_ptr  c-src/emacs/src/keyboard.c      302
+kboard c-src/emacs/src/keyboard.c      860
+kboard_stack   c-src/emacs/src/keyboard.c      858
+kboard_stack   c-src/emacs/src/keyboard.c      864
+key_and_value  c-src/emacs/src/lisp.h  1868
+keydelete      erl-src/lists.erl       /^keydelete(Key, N, [H|T]) when 
element(N, H) == Key/
+keymap erl-src/lists.erl       /^keymap({Mod, Func}, Pos, List) ->$/
+keymember      erl-src/lists.erl       /^keymember(Key, N, [T|Ts]) when 
element(N, T) == Ke/
+keymerge       erl-src/lists.erl       /^keymerge(Index, X, Y) -> 
keymerge(Index, X, Y, [])/
+keyremap       c-src/emacs/src/keyboard.c      8742
+keyremap       c-src/emacs/src/keyboard.c      8754
+keyremap_step  c-src/emacs/src/keyboard.c      /^keyremap_step (Lisp_Object 
*keybuf, int bufsize, v/
+keyreplace     erl-src/lists.erl       /^keyreplace(Key,Pos,[],New) -> [];$/
+keys_of_keyboard       c-src/emacs/src/keyboard.c      /^keys_of_keyboard 
(void)$/
+keysearch      erl-src/lists.erl       /^keysearch(Key, N, [H|T]) when 
element(N, H) == Key/
+keysort        erl-src/lists.erl       /^keysort(Index, [X]) -> [X];$/
+keyval prol-src/natded.prolog  /^keyval(key(Key,Val)) --> [Key,'='], 
valseq(Val).$/
+keyvalcgi      prol-src/natded.prolog  /^keyvalcgi(Key,Val):-$/
+keyvalscgi     prol-src/natded.prolog  /^keyvalscgi(KeyVals),$/
+keyvalseq      prol-src/natded.prolog  /^keyvalseq([KeyVal|KeyVals]) --> $/
+keyword_parsing        cccp.y  73
+keyword_parsing        y-src/cccp.y    73
+keywords       cccp.y  115
+keywords       y-src/cccp.y    114
+keywords       y-src/cccp.y    306
+kind   c-src/emacs/src/keyboard.c      11024
+kind   c-src/h.h       46
+kset_echo_string       c-src/emacs/src/keyboard.c      /^kset_echo_string 
(struct kboard *kb, Lisp_Object v/
+kset_kbd_queue c-src/emacs/src/keyboard.c      /^kset_kbd_queue (struct kboard 
*kb, Lisp_Object val/
+kset_keyboard_translate_table  c-src/emacs/src/keyboard.c      
/^kset_keyboard_translate_table (struct kboard *kb, /
+kset_last_prefix_arg   c-src/emacs/src/keyboard.c      /^kset_last_prefix_arg 
(struct kboard *kb, Lisp_Obje/
+kset_last_repeatable_command   c-src/emacs/src/keyboard.c      
/^kset_last_repeatable_command (struct kboard *kb, L/
+kset_local_function_key_map    c-src/emacs/src/keyboard.c      
/^kset_local_function_key_map (struct kboard *kb, Li/
+kset_overriding_terminal_local_map     c-src/emacs/src/keyboard.c      
/^kset_overriding_terminal_local_map (struct kboard /
+kset_real_last_command c-src/emacs/src/keyboard.c      
/^kset_real_last_command (struct kboard *kb, Lisp_Ob/
+kset_system_key_syms   c-src/emacs/src/keyboard.c      /^kset_system_key_syms 
(struct kboard *kb, Lisp_Obje/
+lang   c-src/etags.c   208
+lang   c-src/etags.c   251
+lang   c-src/etags.c   259
+lang_names     c-src/etags.c   718
+language       c-src/etags.c   199
+last   erl-src/lists.erl       /^last([E]) ->$/
+last-tag       el-src/emacs/lisp/progmodes/etags.el    /^(defvar last-tag nil$/
+last_abbrev_point      c-src/abbrev.c  78
+last_auto_save c-src/emacs/src/keyboard.c      214
+last_heapinfo  c-src/emacs/src/gmalloc.c       402
+last_mouse_button      c-src/emacs/src/keyboard.c      5215
+last_mouse_x   c-src/emacs/src/keyboard.c      5216
+last_mouse_y   c-src/emacs/src/keyboard.c      5217
+last_non_minibuf_size  c-src/emacs/src/keyboard.c      207
+last_point_position    c-src/emacs/src/keyboard.c      217
+last_state_size        c-src/emacs/src/gmalloc.c       401
+last_undo_boundary     c-src/emacs/src/keyboard.c      1287
+lasta  c.c     272
+lastargmargin  tex-src/texinfo.tex     /^\\newskip\\deflastargmargin 
\\deflastargmargin=18pt$/
+lastargmargin  tex-src/texinfo.tex     /^\\setbox0=\\hbox{\\hskip 
\\deflastargmargin{\\rm #2}\\hs/
+lastb  c.c     278
+lb     c-src/etags.c   2923
+lbs    c-src/etags.c   2924
+lce    php-src/lce_functions.php       /^      function lce()$/
+lce    php-src/lce_functions.php       /^      function lce()$/
+lce_bindtextdomain     php-src/lce_functions.php       /^      function 
lce_bindtextdomain($d_name, $d_path/
+lce_bindtextdomain     php-src/lce_functions.php       /^      function 
lce_bindtextdomain($domain, $path)$/
+lce_dgettext   php-src/lce_functions.php       /^      function 
lce_dgettext($domain, $msgid)$/
+lce_dgettext   php-src/lce_functions.php       /^      function 
lce_dgettext($domain, $msgid)$/
+lce_geteditcode        php-src/lce_functions.php       /^  function 
lce_geteditcode($type, $name, $text, $r/
+lce_gettext    php-src/lce_functions.php       /^      function 
lce_gettext($msgid)$/
+lce_gettext    php-src/lce_functions.php       /^      function 
lce_gettext($msgid)$/
+lce_textdomain php-src/lce_functions.php       /^      function 
lce_textdomain($domain)$/
+lce_textdomain php-src/lce_functions.php       /^      function 
lce_textdomain($domain)$/
+leasqr html-src/software.html  /^Leasqr$/
+left   c-src/etags.c   216
+left_shift     cccp.y  /^left_shift (a, b)$/
+left_shift     y-src/cccp.y    /^left_shift (a, b)$/
+len    c-src/etags.c   237
+length c-src/etags.c   2495
+length cccp.y  44
+length cccp.y  114
+length y-src/cccp.y    44
+length y-src/cccp.y    113
+letter tex-src/texinfo.tex     /^\\chapmacro {#1}{Appendix \\appendixletter}%$/
+letter tex-src/texinfo.tex     /^  {#1}{Appendix 
\\appendixletter}{\\noexpand\\folio}}/
+letter tex-src/texinfo.tex     /^\\gdef\\thissection{#1}\\secheading 
{#1}{\\appendixlet/
+letter tex-src/texinfo.tex     
/^{#1}{\\appendixletter}{\\the\\secno}{\\noexpand\\folio}/
+letter tex-src/texinfo.tex     /^\\subsecheading 
{#1}{\\appendixletter}{\\the\\secno}{\\/
+letter tex-src/texinfo.tex     
/^{#1}{\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\/
+letter tex-src/texinfo.tex     /^  
{\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\th/
+letter tex-src/texinfo.tex     /^  {\\appendixletter}$/
+letter:        tex-src/texinfo.tex     /^\\xdef\\thischapter{Appendix 
\\appendixletter: \\noexp/
+level  c-src/emacs/src/lisp.h  3153
+lex    prol-src/natded.prolog  /^lex(W,SynOut,Sem):-$/
+lexptr cccp.y  332
+lexptr y-src/cccp.y    332
+licenze        html-src/softwarelibero.html    /^Licenze d'uso di un 
programma$/
+line   c-src/etags.c   2493
+line   perl-src/htlmify-cystic 37
+line   y-src/parse.y   86
+lineCount      php-src/lce_functions.php       /^      function 
lineCount($entry)$/
+linebuffer     c-src/etags.c   239
+linebuffer_init        c-src/etags.c   /^linebuffer_init (linebuffer *lbp)$/
+linebuffer_setlen      c-src/etags.c   /^linebuffer_setlen (linebuffer *lbp, 
int toksize)$/
+lineno c-src/etags.c   2506
+lineno c-src/emacs/src/lisp.h  3147
+linepos        c-src/etags.c   2507
+linepos        c-src/etags.c   2922
+links  html-src/software.html  /^Links to interesting software$/
+lisp_eval_depth        c-src/emacs/src/lisp.h  3045
+lisp_h_CHECK_LIST_CONS c-src/emacs/src/lisp.h  /^#define 
lisp_h_CHECK_LIST_CONS(x, y) CHECK_TYPE (C/
+lisp_h_CHECK_NUMBER    c-src/emacs/src/lisp.h  /^#define 
lisp_h_CHECK_NUMBER(x) CHECK_TYPE (INTEGER/
+lisp_h_CHECK_SYMBOL    c-src/emacs/src/lisp.h  /^#define 
lisp_h_CHECK_SYMBOL(x) CHECK_TYPE (SYMBOLP/
+lisp_h_CHECK_TYPE      c-src/emacs/src/lisp.h  /^#define lisp_h_CHECK_TYPE(ok, 
predicate, x) \\$/
+lisp_h_CONSP   c-src/emacs/src/lisp.h  /^#define lisp_h_CONSP(x) (XTYPE (x) == 
Lisp_Cons)$/
+lisp_h_EQ      c-src/emacs/src/lisp.h  /^#define lisp_h_EQ(x, y) (XLI (x) == 
XLI (y))$/
+lisp_h_FLOATP  c-src/emacs/src/lisp.h  /^#define lisp_h_FLOATP(x) (XTYPE (x) 
== Lisp_Float)/
+lisp_h_INTEGERP        c-src/emacs/src/lisp.h  /^#define lisp_h_INTEGERP(x) 
((XTYPE (x) & (Lisp_Int/
+lisp_h_MARKERP c-src/emacs/src/lisp.h  /^#define lisp_h_MARKERP(x) (MISCP (x) 
&& XMISCTYPE /
+lisp_h_MISCP   c-src/emacs/src/lisp.h  /^#define lisp_h_MISCP(x) (XTYPE (x) == 
Lisp_Misc)$/
+lisp_h_NILP    c-src/emacs/src/lisp.h  /^#define lisp_h_NILP(x) EQ (x, Qnil)$/
+lisp_h_SET_SYMBOL_VAL  c-src/emacs/src/lisp.h  /^#define 
lisp_h_SET_SYMBOL_VAL(sym, v) \\$/
+lisp_h_SYMBOLP c-src/emacs/src/lisp.h  /^#define lisp_h_SYMBOLP(x) (XTYPE (x) 
== Lisp_Symbo/
+lisp_h_SYMBOL_CONSTANT_P       c-src/emacs/src/lisp.h  /^#define 
lisp_h_SYMBOL_CONSTANT_P(sym) (XSYMBOL (sy/
+lisp_h_SYMBOL_VAL      c-src/emacs/src/lisp.h  /^#define 
lisp_h_SYMBOL_VAL(sym) \\$/
+lisp_h_VECTORLIKEP     c-src/emacs/src/lisp.h  /^#define lisp_h_VECTORLIKEP(x) 
(XTYPE (x) == Lisp_V/
+lisp_h_XCAR    c-src/emacs/src/lisp.h  /^#define lisp_h_XCAR(c) XCONS 
(c)->car$/
+lisp_h_XCDR    c-src/emacs/src/lisp.h  /^#define lisp_h_XCDR(c) XCONS 
(c)->u.cdr$/
+lisp_h_XCONS   c-src/emacs/src/lisp.h  /^#define lisp_h_XCONS(a) \\$/
+lisp_h_XFASTINT        c-src/emacs/src/lisp.h  /^# define lisp_h_XFASTINT(a) 
XINT (a)$/
+lisp_h_XHASH   c-src/emacs/src/lisp.h  /^#define lisp_h_XHASH(a) XUINT (a)$/
+lisp_h_XIL     c-src/emacs/src/lisp.h  /^# define lisp_h_XIL(i) ((Lisp_Object) 
{ i })$/
+lisp_h_XIL     c-src/emacs/src/lisp.h  /^# define lisp_h_XIL(i) (i)$/
+lisp_h_XINT    c-src/emacs/src/lisp.h  /^# define lisp_h_XINT(a) (XLI (a) >> 
INTTYPEBITS)$/
+lisp_h_XLI     c-src/emacs/src/lisp.h  /^# define lisp_h_XLI(o) ((o).i)$/
+lisp_h_XLI     c-src/emacs/src/lisp.h  /^# define lisp_h_XLI(o) (o)$/
+lisp_h_XPNTR   c-src/emacs/src/lisp.h  /^#define lisp_h_XPNTR(a) \\$/
+lisp_h_XSYMBOL c-src/emacs/src/lisp.h  /^# define lisp_h_XSYMBOL(a) \\$/
+lisp_h_XTYPE   c-src/emacs/src/lisp.h  /^# define lisp_h_XTYPE(a) ((enum 
Lisp_Type) (XLI (a/
+lisp_h_XUNTAG  c-src/emacs/src/lisp.h  /^# define lisp_h_XUNTAG(a, type) 
((void *) (intptr_/
+lisp_h_check_cons_list c-src/emacs/src/lisp.h  /^# define 
lisp_h_check_cons_list() ((void) 0)$/
+lisp_h_make_number     c-src/emacs/src/lisp.h  /^# define 
lisp_h_make_number(n) \\$/
+lispy_accent_codes     c-src/emacs/src/keyboard.c      4634
+lispy_accent_keys      c-src/emacs/src/keyboard.c      4741
+lispy_drag_n_drop_names        c-src/emacs/src/keyboard.c      5181
+lispy_function_keys    c-src/emacs/src/keyboard.c      4768
+lispy_function_keys    c-src/emacs/src/keyboard.c      5065
+lispy_kana_keys        c-src/emacs/src/keyboard.c      5026
+lispy_modifier_list    c-src/emacs/src/keyboard.c      /^lispy_modifier_list 
(int modifiers)$/
+lispy_multimedia_keys  c-src/emacs/src/keyboard.c      4962
+lispy_wheel_names      c-src/emacs/src/keyboard.c      5174
+list   c-src/emacs/src/gmalloc.c       186
+list-tags      el-src/emacs/lisp/progmodes/etags.el    /^(defun list-tags 
(file &optional _next-match)$/
+list-tags-function     el-src/emacs/lisp/progmodes/etags.el    /^(defvar 
list-tags-function nil$/
+list2i c-src/emacs/src/lisp.h  /^list2i (EMACS_INT x, EMACS_INT y)$/
+list3i c-src/emacs/src/lisp.h  /^list3i (EMACS_INT x, EMACS_INT y, EMACS_INT 
w)$/
+list4i c-src/emacs/src/lisp.h  /^list4i (EMACS_INT x, EMACS_INT y, EMACS_INT 
w, EMA/
+list_to_ord_set        prol-src/ordsets.prolog /^list_to_ord_set(List, Set) 
:-$/
+lno    c-src/etags.c   223
+load   objc-src/PackInsp.m     /^-load$/
+loadContentsOf:inTable:        objc-src/PackInsp.m     
/^-loadContentsOf:(const char *)type inTable:(HashTa/
+loadImage      objc-src/PackInsp.m     /^-loadImage$/
+loadKeyValuesFrom:inTable:     objc-src/PackInsp.m     
/^-loadKeyValuesFrom:(const char *)type inTable:(Has/
+loadPORManager php-src/lce_functions.php       /^  function &loadPORManager()$/
+loc    cp-src/cfront.H 67
+loc::file      cp-src/cfront.H 69
+loc::line      cp-src/cfront.H 70
+local_if_set   c-src/emacs/src/lisp.h  2338
+location       cp-src/clheir.hpp       33
+location::location     cp-src/clheir.hpp       /^    location() { }$/
+lookup cccp.y  /^lookup (name, len, hash)$/
+lookup y-src/cccp.y    /^lookup (name, len, hash)$/
+lowcase        c-src/etags.c   /^#define lowcase(c)    tolower (CHAR (c))$/
+lstmt  cp-src/cfront.H 680
+lstmt::lstmt   cp-src/cfront.H /^      lstmt(TOK bb, loc ll, Pname nn, Pstmt 
ss) : (bb,l/
+lucid_event_type_list_p        c-src/emacs/src/keyboard.c      
/^lucid_event_type_list_p (Lisp_Object object)$/
+mabort c-src/emacs/src/gmalloc.c       /^mabort (enum mcheck_status status)$/
+mach_host_self c-src/machsyscalls.h    /^SYSCALL (mach_host_self, -29,$/
+mach_msg_trap  c-src/machsyscalls.h    /^SYSCALL (mach_msg_trap, -25,$/
+mach_reply_port        c-src/machsyscalls.h    /^SYSCALL (mach_reply_port, 
-26,$/
+mach_task_self c-src/machsyscalls.h    /^SYSCALL (mach_task_self, -28,$/
+mach_thread_self       c-src/machsyscalls.h    /^SYSCALL (mach_thread_self, 
-27,$/
+magic  c-src/emacs/src/gmalloc.c       1863
+main::alarm    perl-src/mirror.pl      /^sub alarm$/
+main::bsplit   perl-src/mirror.pl      /^sub bsplit$/
+main::checkout_regexps perl-src/mirror.pl      /^sub checkout_regexps$/
+main::chown    perl-src/mirror.pl      /^sub chown$/
+main::clear_local      perl-src/mirror.pl      /^sub clear_local$/
+main::clear_remote     perl-src/mirror.pl      /^sub clear_remote$/
+main::command_line_override    perl-src/mirror.pl      /^sub 
command_line_override$/
+main::compare_dirs     perl-src/mirror.pl      /^sub compare_dirs$/
+main::compare_times    perl-src/mirror.pl      /^sub compare_times$/
+main::connect  perl-src/mirror.pl      /^sub connect$/
+main::create_assocs    perl-src/mirror.pl      /^sub create_assocs$/
+main::cwd      perl-src/mirror.pl      /^sub cwd$/
+main::delete_assocs    perl-src/mirror.pl      /^sub delete_assocs$/
+main::dir_exists       perl-src/mirror.pl      /^sub dir_exists$/
+main::dirpart  perl-src/mirror.pl      /^sub dirpart$/
+main::disconnect       perl-src/mirror.pl      /^sub disconnect$/
+main::do_all_transfers perl-src/mirror.pl      /^sub do_all_transfers$/
+main::do_delete        perl-src/mirror.pl      /^sub do_delete$/
+main::do_deletes       perl-src/mirror.pl      /^sub do_deletes$/
+main::do_mirror        perl-src/mirror.pl      /^sub do_mirror$/
+main::expand_symlink   perl-src/mirror.pl      /^sub expand_symlink$/
+main::f1       perl-src/kai-test.pl    /^sub f1 {$/
+main::f2       perl-src/kai-test.pl    /^sub main::f2 {$/
+main::f7       perl-src/kai-test.pl    /^sub f7 {$/
+main::file_end perl-src/htlmify-cystic /^sub file_end ()$/
+main::filename_to_tempname     perl-src/mirror.pl      /^sub 
filename_to_tempname$/
+main::filesize perl-src/mirror.pl      /^sub filesize$/
+main::find_prog        perl-src/mirror.pl      /^sub find_prog$/
+main::finish_appendices        perl-src/htlmify-cystic /^sub finish_appendices 
()$/
+main::finish_sections  perl-src/htlmify-cystic /^sub finish_sections ()$/
+main::finish_subsections       perl-src/htlmify-cystic /^sub 
finish_subsections ()$/
+main::finish_subsubsections    perl-src/htlmify-cystic /^sub 
finish_subsubsections ()$/
+main::fix_package      perl-src/mirror.pl      /^sub fix_package$/
+main::flatten_path     perl-src/mirror.pl      /^sub flatten_path$/
+main::get_local_directory_details      perl-src/mirror.pl      /^sub 
get_local_directory_details$/
+main::get_passwd       perl-src/mirror.pl      /^sub get_passwd$/
+main::get_remote_directory_details     perl-src/mirror.pl      /^sub 
get_remote_directory_details$/
+main::getopt   perl-src/yagrip.pl      /^sub getopt {$/
+main::handler  perl-src/mirror.pl      /^sub handler$/
+main::interpret_config perl-src/mirror.pl      /^sub interpret_config$/
+main::interpret_config_files   perl-src/mirror.pl      /^sub 
interpret_config_files$/
+main::istrue   perl-src/mirror.pl      /^sub istrue$/
+main::keep     perl-src/mirror.pl      /^sub keep$/
+main::log_upload       perl-src/mirror.pl      /^sub log_upload$/
+main::make_dir perl-src/mirror.pl      /^sub make_dir$/
+main::make_dirs        perl-src/mirror.pl      /^sub make_dirs$/
+main::make_symlinks    perl-src/mirror.pl      /^sub make_symlinks$/
+main::map_name perl-src/mirror.pl      /^sub map_name$/
+main::map_user_group   perl-src/mirror.pl      /^sub map_user_group$/
+main::mkdirs   perl-src/mirror.pl      /^sub mkdirs$/
+main::mksymlink        perl-src/mirror.pl      /^sub mksymlink$/
+main::msg      perl-src/mirror.pl      /^sub msg$/
+main::msg_version      perl-src/mirror.pl      /^sub msg_version$/
+main::myflock  perl-src/mirror.pl      /^sub myflock$/
+main::parse_line       perl-src/mirror.pl      /^sub parse_line$/
+main::parse_remote_details     perl-src/mirror.pl      /^sub 
parse_remote_details$/
+main::parse_remote_details_real        perl-src/mirror.pl      /^sub 
parse_remote_details_real$/
+main::parse_timeout    perl-src/mirror.pl      /^sub parse_timeout$/
+main::patch_ls_lR_file perl-src/mirror.pl      /^sub patch_ls_lR_file$/
+main::pr_variables     perl-src/mirror.pl      /^sub pr_variables$/
+main::prod     perl-src/mirror.pl      /^sub prod$/
+main::read_toc perl-src/htlmify-cystic /^sub read_toc ()$/
+main::real_dir_from_path       perl-src/mirror.pl      /^sub 
real_dir_from_path$/
+main::save_delete      perl-src/mirror.pl      /^sub save_delete$/
+main::save_mkdir       perl-src/mirror.pl      /^sub save_mkdir$/
+main::section_href     perl-src/htlmify-cystic /^sub section_href ($)$/
+main::section_name     perl-src/htlmify-cystic /^sub section_name ($)$/
+main::section_url      perl-src/htlmify-cystic /^sub section_url ()$/
+main::section_url_base perl-src/htlmify-cystic /^sub section_url_base ()$/
+main::section_url_name perl-src/htlmify-cystic /^sub section_url_name ()$/
+main::set_assoc_from_array     perl-src/mirror.pl      /^sub 
set_assoc_from_array$/
+main::set_attribs      perl-src/mirror.pl      /^sub set_attribs$/
+main::set_defaults     perl-src/mirror.pl      /^sub set_defaults$/
+main::set_timestamp    perl-src/mirror.pl      /^sub set_timestamp$/
+main::set_timestamps   perl-src/mirror.pl      /^sub set_timestamps$/
+main::set_variables    perl-src/mirror.pl      /^sub set_variables$/
+main::sys      perl-src/mirror.pl      /^sub sys$/
+main::t2str    perl-src/mirror.pl      /^sub t2str$/
+main::to_bytes perl-src/mirror.pl      /^sub to_bytes$/
+main::toc_line perl-src/htlmify-cystic /^sub toc_line ($)$/
+main::transfer_file    perl-src/mirror.pl      /^sub transfer_file$/
+main::trap_signals     perl-src/mirror.pl      /^sub trap_signals$/
+main::unix2vms perl-src/mirror.pl      /^sub unix2vms$/
+main::unlink_dbm       perl-src/mirror.pl      /^sub unlink_dbm$/
+main::upd_val  perl-src/mirror.pl      /^sub upd_val$/
+main::usage    perl-src/yagrip.pl      /^sub usage {$/
+main::utime    perl-src/mirror.pl      /^sub utime$/
+main::will_compress    perl-src/mirror.pl      /^sub will_compress$/
+main::will_split       perl-src/mirror.pl      /^sub will_split$/
+make-abbrev-table      c-src/abbrev.c  /^DEFUN ("make-abbrev-table", 
Fmake_abbrev_table, Sm/
+make_C_tag     c-src/etags.c   /^make_C_tag (bool isfun)$/
+make_coor      prol-src/natded.prolog  
/^make_coor(s(_),Alpha,Sem1,Sem2,address@hidden@Sem2).$/
+make_ctrl_char c-src/emacs/src/keyboard.c      /^make_ctrl_char (int c)$/
+make_fixnum_or_float   c-src/emacs/src/lisp.h  /^#define 
make_fixnum_or_float(val) \\$/
+make_formatted_string  c-src/emacs/src/lisp.h  /^extern Lisp_Object 
make_formatted_string (char *, /
+make_lisp_ptr  c-src/emacs/src/lisp.h  /^make_lisp_ptr (void *ptr, enum 
Lisp_Type type)$/
+make_lisp_symbol       c-src/emacs/src/lisp.h  /^make_lisp_symbol (struct 
Lisp_Symbol *sym)$/
+make_lispy_event       c-src/emacs/src/keyboard.c      /^make_lispy_event 
(struct input_event *event)$/
+make_lispy_focus_in    c-src/emacs/src/keyboard.c      /^make_lispy_focus_in 
(Lisp_Object frame)$/
+make_lispy_focus_out   c-src/emacs/src/keyboard.c      /^make_lispy_focus_out 
(Lisp_Object frame)$/
+make_lispy_movement    c-src/emacs/src/keyboard.c      /^make_lispy_movement 
(struct frame *frame, Lisp_Obj/
+make_lispy_position    c-src/emacs/src/keyboard.c      /^make_lispy_position 
(struct frame *f, Lisp_Object /
+make_lispy_switch_frame        c-src/emacs/src/keyboard.c      
/^make_lispy_switch_frame (Lisp_Object frame)$/
+make_number    c-src/emacs/src/lisp.h  /^#  define make_number(n) 
lisp_h_make_number (n)$/
+make_pointer_integer   c-src/emacs/src/lisp.h  /^make_pointer_integer (void 
*p)$/
+make_scroll_bar_position       c-src/emacs/src/keyboard.c      
/^make_scroll_bar_position (struct input_event *ev, /
+make_tag       c-src/etags.c   /^make_tag (const char *name,   \/* tag name, 
or NULL /
+make_uninit_sub_char_table     c-src/emacs/src/lisp.h  
/^make_uninit_sub_char_table (int depth, int min_cha/
+make_uninit_vector     c-src/emacs/src/lisp.h  /^make_uninit_vector (ptrdiff_t 
size)$/
+malloc c-src/emacs/src/gmalloc.c       64
+malloc c-src/emacs/src/gmalloc.c       68
+malloc c-src/emacs/src/gmalloc.c       /^extern void *malloc (size_t size) 
ATTRIBUTE_MALLOC/
+malloc c-src/emacs/src/gmalloc.c       /^malloc (size_t size)$/
+malloc c-src/emacs/src/gmalloc.c       1715
+malloc_atfork_handler_child    c-src/emacs/src/gmalloc.c       
/^malloc_atfork_handler_child (void)$/
+malloc_atfork_handler_parent   c-src/emacs/src/gmalloc.c       
/^malloc_atfork_handler_parent (void)$/
+malloc_atfork_handler_prepare  c-src/emacs/src/gmalloc.c       
/^malloc_atfork_handler_prepare (void)$/
+malloc_enable_thread   c-src/emacs/src/gmalloc.c       /^malloc_enable_thread 
(void)$/
+malloc_info    c-src/emacs/src/gmalloc.c       167
+malloc_initialize_1    c-src/emacs/src/gmalloc.c       /^malloc_initialize_1 
(void)$/
+mallochook     c-src/emacs/src/gmalloc.c       /^mallochook (size_t size)$/
+mao    c-src/h.h       101
+map    c-src/emacs/src/keyboard.c      8748
+map    erl-src/lists.erl       /^map(F, As, [Hd|Tail]) ->$/
+map_word       prol-src/natded.prolog  /^map_word([[_]|Ws],Exp):-$/
+mapping        html-src/algrthms.html  /^Mapping the Channel Symbols$/
+mapsyn prol-src/natded.prolog  /^mapsyn(A\/B,AM\/BM):-$/
+mark_kboards   c-src/emacs/src/keyboard.c      /^mark_kboards (void)$/
+max    c.c     /^max (int a, int b)$/
+max    c.c     /^__attribute__ ((always_inline)) max (int a, int b)/
+max    c-src/emacs/src/lisp.h  58
+max    c-src/emacs/src/lisp.h  /^#define max(a, b) ((a) > (b) ? (a) : (b))$/
+max    cp-src/conway.cpp       /^#define max(x,y)  ((x > y) ? x : y)$/
+max    erl-src/lists.erl       /^max([H|T]) -> max(T, H).$/
+max_args       c-src/emacs/src/lisp.h  1686
+max_num_directions     cp-src/clheir.hpp       31
+max_num_generic_objects        cp-src/clheir.cpp       9
+maxargs        c-src/emacs/src/lisp.h  2831
+maybe_gc       c-src/emacs/src/lisp.h  /^maybe_gc (void)$/
+mcheck c-src/emacs/src/gmalloc.c       /^mcheck (void (*func) (enum 
mcheck_status))$/
+mcheck_status  c-src/emacs/src/gmalloc.c       283
+mcheck_used    c-src/emacs/src/gmalloc.c       2012
+memalign       c-src/emacs/src/gmalloc.c       /^memalign (size_t alignment, 
size_t size)$/
+member erl-src/lists.erl       /^member(X, [X|_]) ->$/
+member prol-src/natded.prolog  /^member(X,[X|_]).$/
+memclear       c-src/emacs/src/lisp.h  /^memclear (void *p, ptrdiff_t nbytes)$/
+menu_bar_item  c-src/emacs/src/keyboard.c      /^menu_bar_item (Lisp_Object 
key, Lisp_Object item, /
+menu_bar_items c-src/emacs/src/keyboard.c      /^menu_bar_items (Lisp_Object 
old)$/
+menu_bar_items_index   c-src/emacs/src/keyboard.c      7369
+menu_bar_items_vector  c-src/emacs/src/keyboard.c      7368
+menu_bar_one_keymap_changed_items      c-src/emacs/src/keyboard.c      7363
+menu_item_eval_property        c-src/emacs/src/keyboard.c      
/^menu_item_eval_property (Lisp_Object sexpr)$/
+menu_item_eval_property_1      c-src/emacs/src/keyboard.c      
/^menu_item_eval_property_1 (Lisp_Object arg)$/
+menu_separator_name_p  c-src/emacs/src/keyboard.c      /^menu_separator_name_p 
(const char *label)$/
+merge  erl-src/lists.erl       /^merge(X, Y) -> merge(X, Y, []).$/
+metasource     c-src/etags.c   198
+min    c-src/emacs/src/gmalloc.c       /^#define min(a, b) ((a) < (b) ? (a) : 
(b))$/
+min    c-src/emacs/src/lisp.h  57
+min    c-src/emacs/src/lisp.h  /^#define min(a, b) ((a) < (b) ? (a) : (b))$/
+min    cp-src/conway.cpp       /^#define min(x,y)  ((x > y) ? y : x)$/
+min    erl-src/lists.erl       /^min([H|T]) -> min(T, H).$/
+min_args       c-src/emacs/src/lisp.h  1686
+min_char       c-src/emacs/src/lisp.h  1621
+miti   html-src/softwarelibero.html    /^Sfatiamo alcuni miti$/
+modifier_names c-src/emacs/src/keyboard.c      6319
+modifier_symbols       c-src/emacs/src/keyboard.c      6327
+modify_event_symbol    c-src/emacs/src/keyboard.c      /^modify_event_symbol 
(ptrdiff_t symbol_num, int mod/
+more_aligned_int       c.c     165
+morecore_nolock        c-src/emacs/src/gmalloc.c       /^morecore_nolock 
(size_t size)$/
+morecore_recursing     c-src/emacs/src/gmalloc.c       604
+mouse_syms     c-src/emacs/src/keyboard.c      4627
+mprobe c-src/emacs/src/gmalloc.c       /^mprobe (void *ptr)$/
+msgid  php-src/lce_functions.php       /^      function msgid($line, $class)$/
+msgstr php-src/lce_functions.php       /^      function msgstr($line, $class)$/
+mstats c-src/emacs/src/gmalloc.c       308
+mt     prol-src/natded.prolog  /^mt:-$/
+mtg    html-src/software.html  /^MTG$/
+multi_line     c-src/etags.c   267
+multibyte      c-src/emacs/src/regex.h 403
+my_printf      c.c     /^my_printf (void *my_object, const char *my_format,/
+my_struct      c.c     226
+my_struct      c-src/h.h       91
+my_typedef     c.c     228
+my_typedef     c-src/h.h       93
+n      c-src/exit.c    28
+n      c-src/exit.strange_suffix       28
+name   c-src/getopt.h  76
+name   c-src/getopt.h  78
+name   c-src/etags.c   192
+name   c-src/etags.c   218
+name   c-src/etags.c   261
+name   c-src/etags.c   2271
+name   c-src/emacs/src/keyboard.c      7241
+name   c-src/emacs/src/lisp.h  1808
+name   c-src/emacs/src/lisp.h  3144
+name   cp-src/cfront.H 557
+name   perl-src/htlmify-cystic 357
+name   tex-src/texinfo.tex     /^\\begingroup\\defname 
{#2}{#1}\\defunargs{#3}\\endgrou/
+name   tex-src/texinfo.tex     /^\\begingroup\\defname {#1}{Function}%$/
+name   tex-src/texinfo.tex     /^\\begingroup\\defname {\\code{#1} 
#2}{Function}%$/
+name   tex-src/texinfo.tex     /^\\begingroup\\defname {\\code{#2} #3}{#1}%$/
+name   tex-src/texinfo.tex     /^\\begingroup\\defname {#1}{Macro}%$/
+name   tex-src/texinfo.tex     /^\\begingroup\\defname {#1}{Special Form}%$/
+name   tex-src/texinfo.tex     /^\\begingroup\\defname {#2}{\\defoptype{} on 
#1}%$/
+name   tex-src/texinfo.tex     /^\\begingroup\\defname {#2}{Method on #1}%$/
+name   tex-src/texinfo.tex     /^\\begingroup\\defname {#2}{\\defcvtype{} of 
#1}%$/
+name   tex-src/texinfo.tex     /^\\begingroup\\defname {#2}{Instance Variable 
of #1}%/
+name   tex-src/texinfo.tex     /^\\begingroup\\defname 
{#2}{#1}\\defvarargs{#3}\\endgro/
+name   tex-src/texinfo.tex     /^\\begingroup\\defname {#1}{Variable}%$/
+name   tex-src/texinfo.tex     /^\\begingroup\\defname {#1}{User Option}%$/
+name   tex-src/texinfo.tex     /^\\begingroup\\defname {\\code{#1} 
#2}{Variable}%$/
+name   tex-src/texinfo.tex     /^\\begingroup\\defname {\\code{#2} #3}{#1}$/
+name   tex-src/texinfo.tex     /^\\begingroup\\defname 
{#2}{#1}\\deftpargs{#3}\\endgrou/
+name   cccp.y  43
+name   cccp.y  114
+name   cccp.y  114
+name   y-src/cccp.y    43
+name   y-src/cccp.y    113
+name   y-src/cccp.y    113
+name::lex_level        cp-src/cfront.H 565
+name::n_addr_taken     cp-src/cfront.H 567
+name::n_assigned_to    cp-src/cfront.H 569
+name::n_evaluated      cp-src/cfront.H 563
+name::n_list   cp-src/cfront.H 575
+name::n_offset cp-src/cfront.H 574
+name::n_oper   cp-src/cfront.H 558
+name::n_protect        cp-src/cfront.H 566
+name::n_qualifier      cp-src/cfront.H 578
+name::n_realscope      cp-src/cfront.H 579
+name::n_scope  cp-src/cfront.H 561
+name::n_stclass        cp-src/cfront.H 560
+name::n_sto    cp-src/cfront.H 559
+name::n_tbl_list       cp-src/cfront.H 576
+name::n_union  cp-src/cfront.H 562
+name::n_used   cp-src/cfront.H 568
+name::n_val    cp-src/cfront.H 571
+name::n_xref   cp-src/cfront.H 564
+name::take_addr        cp-src/cfront.H /^      void    take_addr()     { 
n_addr_taken++; };$/
+name::unhide   cp-src/cfront.H /^      void    unhide()        { n_key=0; 
n_list=0; };$/
+name::use      cp-src/cfront.H /^      void    use()           { n_used++; };$/
+name::where    cp-src/cfront.H 570
+name_list      cp-src/cfront.H 403
+name_list::f   cp-src/cfront.H 404
+name_list::l   cp-src/cfront.H 405
+name_list::name_list   cp-src/cfront.H /^      name_list(Pname ff, Plist ll) { 
f=ff; l=ll; };$/
+named  c-src/etags.c   2505
+namestringequal        pas-src/common.pas      /^function 
namestringequal;(*(var Name1,Name2 : Name/
+nestlev        c-src/etags.c   2525
+new    erl-src/lines.erl       /^new() ->$/
+new    objc-src/PackInsp.m     /^+new$/
+new    perl-src/htlmify-cystic 163
+new_tag        perl-src/htlmify-cystic 18
+newlb  c-src/etags.c   2930
+newlinepos     c-src/etags.c   2932
+newtextstring  pas-src/common.pas      /^function newtextstring; (*: 
TextString;*)$/
+next   c.c     174
+next   c-src/etags.c   203
+next   c-src/emacs/src/gmalloc.c       164
+next   c-src/emacs/src/gmalloc.c       188
+next   c-src/emacs/src/gmalloc.c       198
+next   c-src/emacs/src/keyboard.c      861
+next   c-src/emacs/src/keyboard.c      7246
+next   c-src/emacs/src/lisp.h  700
+next   c-src/emacs/src/lisp.h  1848
+next   c-src/emacs/src/lisp.h  2192
+next   c-src/emacs/src/lisp.h  3028
+next   c-src/emacs/src/lisp.h  3134
+next   cccp.y  42
+next   y-src/cccp.y    42
+next-file      el-src/emacs/lisp/progmodes/etags.el    /^(defun next-file 
(&optional initialize novisit)$/
+next-file-list el-src/emacs/lisp/progmodes/etags.el    /^(defvar 
next-file-list nil$/
+next_almost_prime      c-src/emacs/src/lisp.h  /^extern EMACS_INT 
next_almost_prime (EMACS_INT) ATT/
+next_free      c-src/emacs/src/lisp.h  1851
+next_weak      c-src/emacs/src/lisp.h  1875
+nextfree       c-src/emacs/src/lisp.h  3029
+nfree  c-src/emacs/src/gmalloc.c       150
+nl     c-src/etags.c   2521
+nlist  cp-src/cfront.H 708
+nlist::add     cp-src/cfront.H /^      void    add(Pname n)    { tail->n_list 
= n; tail = n; }/
+nlist::head    cp-src/cfront.H 709
+nlist::tail    cp-src/cfront.H 710
+no     tex-src/texinfo.tex     /^\\newcount \\appendixno  \\appendixno = 
address@hidden/
+no     tex-src/texinfo.tex     /^\\global\\advance \\appendixno by 1 
\\message{Appendix/
+no     tex-src/texinfo.tex     /^\\ifnum\\secno=0 
Appendix\\xreftie'char\\the\\appendixn/
+no.\the\secno  tex-src/texinfo.tex     /^\\else \\ifnum \\subsecno=0 
Section\\xreftie'char\\the\\/
+no.\the\secno.\the\subsecno    tex-src/texinfo.tex     
/^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/
+no.\the\secno.\the\subsecno.\the\subsubsecno   tex-src/texinfo.tex     
/^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/
+no_argument    c-src/getopt.h  89
+no_lang_help   c-src/etags.c   707
+no_sub c-src/emacs/src/regex.h 387
+nocase_tail    c-src/etags.c   /^nocase_tail (const char *cp)$/
+node   c-src/etags.c   225
+node   cp-src/cfront.H 165
+node::base     cp-src/cfront.H 166
+node::n_key    cp-src/cfront.H 167
+node::permanent        cp-src/cfront.H 168
+node_st        c-src/etags.c   214
+noderef        tex-src/texinfo.tex     /^\\appendixnoderef %$/
+noderef        tex-src/texinfo.tex     /^\\appendixnoderef %$/
+noderef        tex-src/texinfo.tex     /^\\appendixnoderef %$/
+noderef        tex-src/texinfo.tex     /^\\appendixnoderef %$/
+nofonts        tex-src/texinfo.tex     /^{\\indexnofonts$/
+nofonts        tex-src/texinfo.tex     /^{\\indexnofonts$/
+nofonts%       tex-src/texinfo.tex     /^{\\chapternofonts%$/
+nofonts%       tex-src/texinfo.tex     /^{\\chapternofonts%$/
+nofonts%       tex-src/texinfo.tex     /^{\\chapternofonts%$/
+nofonts%       tex-src/texinfo.tex     /^{\\chapternofonts%$/
+nofonts%       tex-src/texinfo.tex     /^{\\chapternofonts%$/
+nofonts%       tex-src/texinfo.tex     /^{\\chapternofonts%$/
+nofonts%       tex-src/texinfo.tex     /^{\\chapternofonts%$/
+nofonts%       tex-src/texinfo.tex     /^{\\chapternofonts%$/
+nofonts%       tex-src/texinfo.tex     /^{\\chapternofonts%$/
+nofonts%       tex-src/texinfo.tex     /^{\\chapternofonts%$/
+nofonts%       tex-src/texinfo.tex     /^{\\chapternofonts%$/
+nofonts%       tex-src/texinfo.tex     /^{\\chapternofonts%$/
+none_help      c-src/etags.c   703
+normalize      prol-src/natded.prolog  /^normalize(M,MNorm):-$/
+normalize_fresh        prol-src/natded.prolog  /^normalize_fresh(M,N):-$/
+normalize_tree prol-src/natded.prolog  
/^normalize_tree(tree(Rule,Syn:Sem,Trees),$/
+normalize_trees        prol-src/natded.prolog  /^normalize_trees([],[]).$/
+nosave pyt-src/server.py       /^    def nosave(self):$/
+nosave pyt-src/server.py       /^    def nosave(self):$/
+nosave pyt-src/server.py       /^    def nosave(self):$/
+not_bol        c-src/emacs/src/regex.h 391
+not_eol        c-src/emacs/src/regex.h 394
+not_single_kboard_state        c-src/emacs/src/keyboard.c      
/^not_single_kboard_state (KBOARD *kboard)$/
+notag2 c-src/torture.c 26
+notag2 c-src/dostorture.c      26
+notag4 c-src/torture.c 45
+notag4 c-src/dostorture.c      45
+notinname      c-src/etags.c   /^#define notinname(c)  (_nin[CHAR (c)]) \/* c 
is not /
+npending       c-src/emacs/src/keyboard.c      7244
+nth    erl-src/lines.erl       /^nth(L, _) when L < 1 ->$/
+nth    erl-src/lists.erl       /^nth(1, [H|T]) ->$/
+nthtail        erl-src/lists.erl       /^nthtail(1, [H|T]) ->$/
+ntool_bar_items        c-src/emacs/src/keyboard.c      7974
+numOfChannels  cp-src/c.C      1
+num_columns    cp-src/conway.cpp       16
+num_input_events       c-src/emacs/src/keyboard.c      210
+num_regs       c-src/emacs/src/regex.h 430
+num_rows       cp-src/conway.cpp       15
+numberKeys:    objcpp-src/SimpleCalc.M /^- numberKeys:sender$/
+number_len     c-src/etags.c   /^static int number_len (long) 
ATTRIBUTE_CONST;$/
+numbervars     prol-src/natded.prolog  /^numbervars(X):-$/
+nvars  c-src/emacs/src/lisp.h  3140
+objdef c-src/etags.c   2484
+object c-src/emacs/src/lisp.h  2128
+object_registry        cp-src/clheir.cpp       10
+objtag c-src/etags.c   2453
+objvar c-src/emacs/src/lisp.h  2297
+obstack_chunk_alloc    y-src/parse.y   46
+obstack_chunk_alloc    parse.y 46
+obstack_chunk_free     y-src/parse.y   47
+obstack_chunk_free     parse.y 47
+ocatseen       c-src/etags.c   2477
+octave_MDiagArray2_h   cp-src/MDiagArray2.h    29
+octave_Range_h cp-src/Range.h  24
+offset c-src/etags.c   2494
+offset c-src/emacs/src/lisp.h  2305
+offset c-src/emacs/src/lisp.h  2365
+oignore        c-src/etags.c   2483
+oimplementation        c-src/etags.c   2474
+oinbody        c-src/etags.c   2478
+ok:    objc-src/PackInsp.m     /^-ok:sender$/
+ok_to_echo_at_next_pause       c-src/emacs/src/keyboard.c      159
+omethodcolon   c-src/etags.c   2481
+omethodparm    c-src/etags.c   2482
+omethodsign    c-src/etags.c   2479
+omethodtag     c-src/etags.c   2480
+onone  c-src/etags.c   2472
+oparenseen     c-src/etags.c   2476
+open-dribble-file      c-src/emacs/src/keyboard.c      /^DEFUN 
("open-dribble-file", Fopen_dribble_file, So/
+open:  objc-src/PackInsp.m     /^-open:sender$/
+openInWorkspace        objc-src/PackInsp.m     /^static void 
openInWorkspace(const char *filename)$/
+operationKeys: objcpp-src/SimpleCalc.M /^- operationKeys:sender$/
+operator       cccp.y  438
+operator       y-src/cccp.y    438
+operator -     cp-src/c.C      /^void operator -(int, int) {}$/
+operator <<    cp-src/functions.cpp    /^ostream& operator <<  ( ostream &c, 
Date d ) {$/
+operator >>    cp-src/functions.cpp    /^istream& operator >> ( istream &i, 
Date & dd ){$/
+operator int   cp-src/c.C      /^void operator int(int, int) {}$/
+operator+      cp-src/c.C      /^void operator+(int, int) {}$/
+opparsebody\Edefop\defopx\defopheader\defoptype        tex-src/texinfo.tex     
/^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/
+oprotocol      c-src/etags.c   2473
+option c-src/getopt.h  73
+optional_argument      c-src/getopt.h  91
+opvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype   tex-src/texinfo.tex     
/^\\defopvarparsebody\\Edefcv\\defcvx\\defcvarheader\\def/
+ord_add_element        prol-src/ordsets.prolog /^ord_add_element([], Element, 
[Element]).$/
+ord_del_element        prol-src/ordsets.prolog /^ord_del_element([], _, []).$/
+ord_disjoint   prol-src/ordsets.prolog /^ord_disjoint(Set1, Set2) :-$/
+ord_intersect  prol-src/ordsets.prolog /^ord_intersect([Head1|Tail1], 
[Head2|Tail2]) :-$/
+ord_intersection       prol-src/ordsets.prolog /^ord_intersection([], _, []).$/
+ord_intersection       prol-src/ordsets.prolog /^ord_intersection([], Set2, 
[], Set2).$/
+ord_intersection       prol-src/ordsets.prolog /^ord_intersection(Sets, 
Intersection) :- $/
+ord_intersection2      prol-src/ordsets.prolog /^ord_intersection2(1, 
[Set|Sets], Set0, Sets0) :- !/
+ord_intersection3      prol-src/ordsets.prolog /^ord_intersection3(<, _, Set1, 
Head2, Tail2, Inters/
+ord_intersection4      prol-src/ordsets.prolog /^ord_intersection4(<, _, Set1, 
Head2, Tail2, Inters/
+ord_member     prol-src/ordsets.prolog /^ord_member(X, [E|Es]) :-$/
+ord_seteq      prol-src/ordsets.prolog /^ord_seteq(Set1, Set2) :-$/
+ord_setproduct prol-src/ordsets.prolog /^ord_setproduct([], _, []).$/
+ord_subset     prol-src/ordsets.prolog /^ord_subset([], _).$/
+ord_subtract   prol-src/ordsets.prolog /^ord_subtract(Set1, Set2, Union) :-$/
+ord_symdiff    prol-src/ordsets.prolog /^ord_symdiff([], Set2, Set2).$/
+ord_union      prol-src/ordsets.prolog /^ord_union(Set1, Set2, Union) :-$/
+ord_union      prol-src/ordsets.prolog /^ord_union([], Union) :- !, Union = 
[].$/
+ord_union4     prol-src/ordsets.prolog /^ord_union4(<, Head, Set1, Head2, 
Tail2, [Head|Unio/
+ord_union_all  prol-src/ordsets.prolog /^ord_union_all(1, [Set|Sets], Set, 
Sets) :- !.$/
+oss    html-src/softwarelibero.html    /^Il movimento open source$/
+otagseen       c-src/etags.c   2475
+output_file    perl-src/htlmify-cystic 35
+output_files   perl-src/htlmify-cystic 32
+outputtable    html-src/algrthms.html  /^Output$/
+outsyn prol-src/natded.prolog  /^outsyn(['Any'],_).$/
+p      c-src/emacs/src/lisp.h  4673
+p      c-src/emacs/src/lisp.h  4679
+p/f    ada-src/etags-test-for.ada      /^   function p pragma Import (C,$/
+p/f    ada-src/etags-test-for.ada      /^function p ("p");$/
+pD     c-src/emacs/src/lisp.h  165
+pD     c-src/emacs/src/lisp.h  167
+pD     c-src/emacs/src/lisp.h  169
+pD     c-src/emacs/src/lisp.h  171
+pI     c-src/emacs/src/lisp.h  94
+pI     c-src/emacs/src/lisp.h  99
+pI     c-src/emacs/src/lisp.h  106
+pMd    c-src/emacs/src/lisp.h  150
+pMd    c-src/emacs/src/lisp.h  155
+pMu    c-src/emacs/src/lisp.h  151
+pMu    c-src/emacs/src/lisp.h  156
+p_next c-src/etags.c   258
+pagesize       c-src/emacs/src/gmalloc.c       1703
+pair   cp-src/cfront.H 703
+pair::pair     cp-src/cfront.H /^      pair(loc ll, Pstmt a, Pstmt b) : 
(PAIR,ll,a) { th/
+parent c-src/emacs/src/keyboard.c      8745
+parent c-src/emacs/src/lisp.h  1590
+parse  prol-src/natded.prolog  /^parse(Ws,Cat):-$/
+parseFromVars  php-src/lce_functions.php       /^      function 
parseFromVars($prefix)$/
+parse_c_expression     cccp.y  /^parse_c_expression (string)$/
+parse_c_expression     y-src/cccp.y    /^parse_c_expression (string)$/
+parse_cgi      prol-src/natded.prolog  /^parse_cgi(TokenList,KeyVals):-$/
+parse_error    y-src/parse.y   81
+parse_error    parse.y 81
+parse_escape   cccp.y  /^parse_escape (string_ptr)$/
+parse_escape   y-src/cccp.y    /^parse_escape (string_ptr)$/
+parse_hash     y-src/parse.y   63
+parse_hash     parse.y 63
+parse_menu_item        c-src/emacs/src/keyboard.c      /^parse_menu_item 
(Lisp_Object item, int inmenubar)$/
+parse_modifiers        c-src/emacs/src/keyboard.c      /^parse_modifiers 
(Lisp_Object symbol)$/
+parse_modifiers_uncached       c-src/emacs/src/keyboard.c      
/^parse_modifiers_uncached (Lisp_Object symbol, ptrd/
+parse_number   cccp.y  /^parse_number (olen)$/
+parse_number   y-src/cccp.y    /^parse_number (olen)$/
+parse_return   y-src/parse.y   73
+parse_return   parse.y 73
+parse_return_error     cccp.y  70
+parse_return_error     y-src/cccp.y    70
+parse_solitary_modifier        c-src/emacs/src/keyboard.c      
/^parse_solitary_modifier (Lisp_Object symbol)$/
+parse_tool_bar_item    c-src/emacs/src/keyboard.c      /^parse_tool_bar_item 
(Lisp_Object key, Lisp_Object /
+pat    c-src/etags.c   262
+pattern        c-src/etags.c   260
+pdlcount       c-src/emacs/src/lisp.h  3046
+pending-delete-mode    el-src/TAGTEST.EL       /^(defalias 
'pending-delete-mode 'delete-selection-m/
+pending_funcalls       c-src/emacs/src/keyboard.c      4377
+pending_signals        c-src/emacs/src/keyboard.c      80
+pfatal c-src/etags.c   /^pfatal (const char *s1)$/
+pfdset c-src/h.h       57
+pfnote c-src/etags.c   /^pfnote (char *name, bool is_func, char *linestart,/
+plain_C_entries        c-src/etags.c   /^plain_C_entries (FILE *inf)$/
+plain_C_suffixes       c-src/etags.c   643
+plainc c-src/etags.c   2934
+plist  c-src/emacs/src/lisp.h  697
+plusvalseq     prol-src/natded.prolog  /^plusvalseq([]) --> [].$/
+pointer        c-src/emacs/src/lisp.h  2125
+poll_for_input c-src/emacs/src/keyboard.c      /^poll_for_input (struct atimer 
*timer)$/
+poll_for_input_1       c-src/emacs/src/keyboard.c      /^poll_for_input_1 
(void)$/
+poll_suppress_count    c-src/emacs/src/keyboard.c      1908
+poll_suppress_count    c-src/emacs/src/lisp.h  3047
+poll_timer     c-src/emacs/src/keyboard.c      1915
+pop-tag-mark   el-src/emacs/lisp/progmodes/etags.el    /^(defalias 
'pop-tag-mark 'xref-pop-marker-stack)$/
+pop_kboard     c-src/emacs/src/keyboard.c      /^pop_kboard (void)$/
+popclass_above c-src/etags.c   /^popclass_above (int bracelev)$/
+position_to_Time       c-src/emacs/src/keyboard.c      /^position_to_Time 
(ptrdiff_t pos)$/
+posix_memalign c-src/emacs/src/gmalloc.c       /^posix_memalign (void 
**memptr, size_t alignment, s/
+posn-at-point  c-src/emacs/src/keyboard.c      /^DEFUN ("posn-at-point", 
Fposn_at_point, Sposn_at_p/
+posn-at-x-y    c-src/emacs/src/keyboard.c      /^DEFUN ("posn-at-x-y", 
Fposn_at_x_y, Sposn_at_x_y, /
+possible_sum_sign      cccp.y  /^#define possible_sum_sign(a, b, sum) ((((a) ^ 
(b))/
+possible_sum_sign      y-src/cccp.y    /^#define possible_sum_sign(a, b, sum) 
((((a) ^ (b))/
+post   pyt-src/server.py       /^    def post(self):$/
+post   pyt-src/server.py       /^    def post(self):$/
+pot_etags_version      c-src/etags.c   81
+pp1    c-src/torture.c /^int pp1($/
+pp1    c-src/dostorture.c      /^int pp1($/
+pp2    c-src/torture.c /^pp2$/
+pp2    c-src/dostorture.c      /^pp2$/
+pp3    c-src/torture.c /^pp3(int bar)$/
+pp3    c-src/dostorture.c      /^pp3(int bar)$/
+pp_bas_cat     prol-src/natded.prolog  /^pp_bas_cat(Cat):-$/
+pp_cat prol-src/natded.prolog  /^pp_cat(Syn:Sem):-$/
+pp_exp prol-src/natded.prolog  /^pp_exp('NIL'):-$/
+pp_exps        prol-src/natded.prolog  /^pp_exps([]).$/
+pp_html_fitch_tree     prol-src/natded.prolog  
/^pp_html_fitch_tree(tree(der,Root,[ders(Words)]),M,/
+pp_html_table_fitch_tree       prol-src/natded.prolog  
/^pp_html_table_fitch_tree(T):-$/
+pp_html_table_tree     prol-src/natded.prolog  /^pp_html_table_tree(T):-$/
+pp_html_tree   prol-src/natded.prolog  /^pp_html_tree(ass(Syn,V,'$VAR'(N))):-$/
+pp_html_trees  prol-src/natded.prolog  /^pp_html_trees([T|Ts],N,M):-$/
+pp_lam prol-src/natded.prolog  /^pp_lam(Var^Alpha):-$/
+pp_lam_bracket prol-src/natded.prolog  /^pp_lam_bracket(A^B):-$/
+pp_lam_paren   prol-src/natded.prolog  /^pp_lam_paren(Var^Alpha):-$/
+pp_paren       prol-src/natded.prolog  /^pp_paren(C):-$/
+pp_rule        prol-src/natded.prolog  /^pp_rule(fe):-write('\/E').$/
+pp_syn prol-src/natded.prolog  /^pp_syn(A\/B):-$/
+pp_syn_back    prol-src/natded.prolog  /^pp_syn_back(A\/B):-$/
+pp_syn_paren   prol-src/natded.prolog  /^pp_syn_paren(A\/B):-$/
+pp_tree        prol-src/natded.prolog  /^pp_tree(T):-$/
+pp_trees       prol-src/natded.prolog  /^pp_trees([T|Ts],Column):-$/
+pp_word        prol-src/natded.prolog  /^pp_word(W):-$/
+pp_word_list   prol-src/natded.prolog  /^pp_word_list([]).$/
+pp_word_list_rest      prol-src/natded.prolog  /^pp_word_list_rest([]).$/
+predicate      c-src/emacs/src/lisp.h  2307
+prefix erl-src/lists.erl       /^prefix([X|PreTail], [X|Tail]) ->$/
+prev   c.c     175
+prev   c-src/emacs/src/gmalloc.c       165
+prev   c-src/emacs/src/gmalloc.c       189
+prev   c-src/emacs/src/lisp.h  2191
+printClassification    php-src/lce_functions.php       /^      function 
printClassification()$/
+print_help     c-src/etags.c   /^print_help (argument *argbuffer)$/
+print_language_names   c-src/etags.c   /^print_language_names (void)$/
+print_version  c-src/etags.c   /^print_version (void)$/
+printmax_t     c-src/emacs/src/lisp.h  148
+printmax_t     c-src/emacs/src/lisp.h  153
+proc   c-src/h.h       87
+process_file   c-src/etags.c   /^process_file (FILE *fh, char *fn, language 
*lang)$/
+process_file_name      c-src/etags.c   /^process_file_name (char *file, 
language *lang)$/
+process_pending_signals        c-src/emacs/src/keyboard.c      
/^process_pending_signals (void)$/
+process_special_events c-src/emacs/src/keyboard.c      
/^process_special_events (void)$/
+process_tool_bar_item  c-src/emacs/src/keyboard.c      /^process_tool_bar_item 
(Lisp_Object key, Lisp_Objec/
+prolog_atom    c-src/etags.c   /^prolog_atom (char *s, size_t pos)$/
+prolog_pr      c-src/etags.c   /^prolog_pr (char *s, char *last)$/
+prolog_skip_comment    c-src/etags.c   /^prolog_skip_comment (linebuffer *plb, 
FILE *inf)$/
+prop   c-src/etags.c   209
+protect_malloc_state   c-src/emacs/src/gmalloc.c       /^protect_malloc_state 
(int protect_p)$/
+pthread_mutexattr_setprio_ceiling/f    ada-src/2ataspri.adb    /^   function 
pthread_mutexattr_setprio_ceiling$/
+pthread_mutexattr_setprotocol/f        ada-src/2ataspri.adb    /^   function 
pthread_mutexattr_setprotocol$/
+ptr    cp-src/cfront.H 435
+ptr::memof     cp-src/cfront.H 437
+ptr::ptr       cp-src/cfront.H /^      ptr(TOK b, Ptype t, bit r = 0) { Nt++; 
base=b; ty/
+ptr::rdo       cp-src/cfront.H 438
+purpose        c-src/emacs/src/lisp.h  1594
+push_kboard    c-src/emacs/src/keyboard.c      /^push_kboard (struct kboard 
*k)$/
+pushclass_above        c-src/etags.c   /^pushclass_above (int bracelev, char 
*str, int len)/
+put_entries    c-src/etags.c   /^put_entries (register node *np)$/
+pvec_type      c-src/emacs/src/lisp.h  780
+pvtyp  cp-src/cfront.H 419
+pvtyp::typ     cp-src/cfront.H 420
+qexpr  cp-src/cfront.H 543
+qexpr::qexpr   cp-src/cfront.H /^      qexpr(Pexpr ee, Pexpr ee1, Pexpr ee2) : 
(QUEST,ee/
+quantizing     html-src/algrthms.html  /^Quantizing the Received$/
+questo ../c/c.web      34
+quit_char      c-src/emacs/src/keyboard.c      192
+quit_throw_to_read_char        c-src/emacs/src/keyboard.c      
/^quit_throw_to_read_char (bool from_signal)$/
+r0     c-src/sysdep.h  54
+r1     c-src/sysdep.h  55
+r_alloc        c-src/emacs/src/lisp.h  /^extern void *r_alloc (void **, 
size_t) ATTRIBUTE_A/
+range_exp      y-src/parse.y   268
+range_exp_list y-src/parse.y   272
+raw_keybuf     c-src/emacs/src/keyboard.c      116
+raw_keybuf_count       c-src/emacs/src/keyboard.c      117
+rbtp   c.c     240
+re_iswctype    c-src/emacs/src/regex.h 602
+re_nsub        c-src/emacs/src/regex.h 364
+re_pattern_buffer      c-src/emacs/src/regex.h 335
+re_pattern_buffer      c-src/h.h       119
+re_registers   c-src/emacs/src/regex.h 428
+re_wchar_t     c-src/emacs/src/regex.h 600
+re_wchar_t     c-src/emacs/src/regex.h 623
+re_wctype      c-src/emacs/src/regex.h 601
+re_wctype_t    c-src/emacs/src/regex.h 599
+re_wctype_t    c-src/emacs/src/regex.h 618
+re_wctype_to_bit       c-src/emacs/src/regex.h /^# define re_wctype_to_bit(cc) 
0$/
+read   php-src/lce_functions.php       /^      function read()$/
+read-key-sequence      c-src/emacs/src/keyboard.c      /^DEFUN 
("read-key-sequence", Fread_key_sequence, Sr/
+read-key-sequence-vector       c-src/emacs/src/keyboard.c      /^DEFUN 
("read-key-sequence-vector", Fread_key_seque/
+read_char      c-src/emacs/src/keyboard.c      /^read_char (int commandflag, 
Lisp_Object map,$/
+read_char_help_form_unwind     c-src/emacs/src/keyboard.c      
/^read_char_help_form_unwind (void)$/
+read_char_minibuf_menu_prompt  c-src/emacs/src/keyboard.c      
/^read_char_minibuf_menu_prompt (int commandflag,$/
+read_char_x_menu_prompt        c-src/emacs/src/keyboard.c      
/^read_char_x_menu_prompt (Lisp_Object map,$/
+read_decoded_event_from_main_queue     c-src/emacs/src/keyboard.c      
/^read_decoded_event_from_main_queue (struct timespe/
+read_event_from_main_queue     c-src/emacs/src/keyboard.c      
/^read_event_from_main_queue (struct timespec *end_t/
+read_key_sequence      c-src/emacs/src/keyboard.c      /^read_key_sequence 
(Lisp_Object *keybuf, int bufsiz/
+read_key_sequence_cmd  c-src/emacs/src/keyboard.c      232
+read_key_sequence_remapped     c-src/emacs/src/keyboard.c      233
+read_key_sequence_vs   c-src/emacs/src/keyboard.c      /^read_key_sequence_vs 
(Lisp_Object prompt, Lisp_Obj/
+read_menu_command      c-src/emacs/src/keyboard.c      /^read_menu_command 
(void)$/
+readable_events        c-src/emacs/src/keyboard.c      /^readable_events (int 
flags)$/
+readline       c-src/etags.c   /^readline (linebuffer *lbp, FILE *stream)$/
+readline_internal      c-src/etags.c   /^readline_internal (linebuffer *lbp, 
register FILE /
+realloc        c-src/emacs/src/gmalloc.c       65
+realloc        c-src/emacs/src/gmalloc.c       69
+realloc        c-src/emacs/src/gmalloc.c       /^realloc (void *ptr, size_t 
size)$/
+realloc        c-src/emacs/src/gmalloc.c       1716
+reallochook    c-src/emacs/src/gmalloc.c       /^reallochook (void *ptr, 
size_t size)$/
+recent-keys    c-src/emacs/src/keyboard.c      /^DEFUN ("recent-keys", 
Frecent_keys, Srecent_keys, /
+recent_keys    c-src/emacs/src/keyboard.c      100
+recent_keys_index      c-src/emacs/src/keyboard.c      94
+record_asynch_buffer_change    c-src/emacs/src/keyboard.c      
/^record_asynch_buffer_change (void)$/
+record_auto_save       c-src/emacs/src/keyboard.c      /^record_auto_save 
(void)$/
+record_char    c-src/emacs/src/keyboard.c      /^record_char (Lisp_Object c)$/
+record_menu_key        c-src/emacs/src/keyboard.c      /^record_menu_key 
(Lisp_Object c)$/
+record_single_kboard_state     c-src/emacs/src/keyboard.c      
/^record_single_kboard_state ()$/
+record_xmalloc c-src/emacs/src/lisp.h  /^extern void *record_xmalloc (size_t) 
ATTRIBUTE_ALL/
+recover_top_level_message      c-src/emacs/src/keyboard.c      138
+recursion-depth        c-src/emacs/src/keyboard.c      /^DEFUN 
("recursion-depth", Frecursion_depth, Srecur/
+recursive-edit c-src/emacs/src/keyboard.c      /^DEFUN ("recursive-edit", 
Frecursive_edit, Srecursi/
+recursive_edit_1       c-src/emacs/src/keyboard.c      /^recursive_edit_1 
(void)$/
+recursive_edit_unwind  c-src/emacs/src/keyboard.c      /^recursive_edit_unwind 
(Lisp_Object buffer)$/
+reduce prol-src/natded.prolog  /^reduce((X^M)@N,L):-     % beta reduction$/
+reduce_subterm prol-src/natded.prolog  /^reduce_subterm(M,M2):-$/
+ref    cp-src/cfront.H 547
+ref::ref       cp-src/cfront.H /^      ref(TOK ba, Pexpr a, Pname b) : 
(ba,a,0) { this=0/
+refreshPort    pyt-src/server.py       /^    def refreshPort(self):$/
+reg_errcode_t  c.c     279
+reg_errcode_t  c-src/emacs/src/regex.h 323
+reg_syntax_t   c-src/emacs/src/regex.h 43
+regex  c-src/etags.c   219
+regex  make-src/Makefile       204
+regex  make-src/Makefile       207
+regex  make-src/Makefile       213
+regex  make-src/Makefile       216
+regex  make-src/Makefile       219
+regex_t        c-src/emacs/src/regex.h 416
+regex_tag_multiline    c-src/etags.c   /^regex_tag_multiline (void)$/
+regexfile      Makefile        /^regexfile: Makefile$/
+regexp c-src/etags.c   256
+regexp c-src/etags.c   268
+registerAction:        objcpp-src/SimpleCalc.M /^- registerAction:(SEL)action$/
+register_heapinfo      c-src/emacs/src/gmalloc.c       /^register_heapinfo 
(void)$/
+regmatch_t     c-src/emacs/src/regex.h 451
+regoff_t       c-src/emacs/src/regex.h 423
+regs   c-src/etags.c   263
+regs   cp-src/screen.cpp       16
+regs_allocated c-src/emacs/src/regex.h 379
+regset c-src/h.h       31
+regular_top_level_message      c-src/emacs/src/keyboard.c      143
+rehash_size    c-src/emacs/src/lisp.h  1835
+rehash_threshold       c-src/emacs/src/lisp.h  1839
+relative_filename      c-src/etags.c   /^relative_filename (char *file, char 
*dir)$/
+removeexp      prol-src/natded.prolog  /^removeexp(E,E,'NIL'):-!.$/
+reorder_modifiers      c-src/emacs/src/keyboard.c      /^reorder_modifiers 
(Lisp_Object symbol)$/
+replace        erl-src/lines.erl       /^replace(Lno, _, _) when Lno < 1 ->$/
+replace_nth    erl-src/lines.erl       /^replace_nth(1, [H|T], X) ->$/
+request        c.c     /^request request (a, b)$/
+requeued_events_pending_p      c-src/emacs/src/keyboard.c      
/^requeued_events_pending_p (void)$/
+required_argument      c-src/getopt.h  90
+reset-this-command-lengths     c-src/emacs/src/keyboard.c      /^DEFUN 
("reset-this-command-lengths", Freset_this_c/
+restore_getcjmp        c-src/emacs/src/keyboard.c      /^restore_getcjmp 
(sys_jmp_buf temp)$/
+restore_kboard_configuration   c-src/emacs/src/keyboard.c      
/^restore_kboard_configuration (int was_locked)$/
+return_to_command_loop c-src/emacs/src/keyboard.c      135
+reverse        erl-src/lists.erl       /^reverse(X) ->$/
+reverse        prol-src/natded.prolog  /^reverse([],Ws,Ws).$/
+revert:        objc-src/PackInsp.m     /^-revert:sender$/
+right  c-src/etags.c   216
+right_shift    cccp.y  /^right_shift (a, b)$/
+right_shift    y-src/cccp.y    /^right_shift (a, b)$/
+ring1  c.c     241
+ring2  c.c     242
+rm_eo  c-src/emacs/src/regex.h 450
+rm_so  c-src/emacs/src/regex.h 449
+rtint  c-src/h.h       60
+rtint  c-src/h.h       68
+rtstr  c-src/h.h       61
+rtstr  c-src/h.h       69
+rtunion_def    c-src/h.h       58
+rtunion_def    c-src/h.h       64
+rtx    c-src/h.h       62
+rtxnp  c-src/h.h       71
+rtxp   c-src/h.h       70
+s      c-src/emacs/src/lisp.h  4672
+s      c-src/emacs/src/lisp.h  4678
+s1     cp-src/c.C      32
+s1::counter    cp-src/c.C      33
+s2     cp-src/c.C      35
+s2::counter    cp-src/c.C      36
+safe_run_hook_funcall  c-src/emacs/src/keyboard.c      /^safe_run_hook_funcall 
(ptrdiff_t nargs, Lisp_Objec/
+safe_run_hooks c-src/emacs/src/keyboard.c      /^safe_run_hooks (Lisp_Object 
hook)$/
+safe_run_hooks_1       c-src/emacs/src/keyboard.c      /^safe_run_hooks_1 
(ptrdiff_t nargs, Lisp_Object *ar/
+safe_run_hooks_error   c-src/emacs/src/keyboard.c      /^safe_run_hooks_error 
(Lisp_Object error, ptrdiff_t/
+save   pyt-src/server.py       /^    def save(self):$/
+save   pyt-src/server.py       /^    def save(self):$/
+save   pyt-src/server.py       /^    def save(self):$/
+save_getcjmp   c-src/emacs/src/keyboard.c      /^save_getcjmp (sys_jmp_buf 
temp)$/
+save_type      c-src/emacs/src/lisp.h  /^save_type (struct Lisp_Save_Value *v, 
int n)$/
+savenstr       c-src/etags.c   /^savenstr (const char *cp, int len)$/
+savestr        c-src/etags.c   /^savestr (const char *cp)$/
+scan_separators        c-src/etags.c   /^scan_separators (char *name)$/
+scolonseen     c-src/etags.c   2447
+scratch        c-src/sysdep.h  56
+scroll_bar_parts       c-src/emacs/src/keyboard.c      5189
+sec=\relax     tex-src/texinfo.tex     /^\\let\\appendixsec=\\relax$/
+section        perl-src/htlmify-cystic 25
+section=\relax tex-src/texinfo.tex     /^\\let\\appendixsection=\\relax$/
+section_name   perl-src/htlmify-cystic 12
+section_toc    perl-src/htlmify-cystic 15
+select prol-src/natded.prolog  /^select(X,[X|Xs],Xs).$/
+select-tags-table      el-src/emacs/lisp/progmodes/etags.el    /^(defun 
select-tags-table ()$/
+select-tags-table-mode el-src/emacs/lisp/progmodes/etags.el    
/^(define-derived-mode select-tags-table-mode specia/
+select-tags-table-mode-map     el-src/emacs/lisp/progmodes/etags.el    
/^(defvar select-tags-table-mode-map ; Doc string?$/
+select-tags-table-quit el-src/emacs/lisp/progmodes/etags.el    /^(defun 
select-tags-table-quit ()$/
+select-tags-table-select       el-src/emacs/lisp/progmodes/etags.el    
/^(defun select-tags-table-select (button)$/
+select_last    prol-src/natded.prolog  /^select_last([X],X,[]).$/
+send:  objc-src/Subprocess.m   /^- send:(const char *)string$/
+send:withNewline:      objc-src/Subprocess.m   /^- send:(const char *)string 
withNewline:(BOOL)want/
+separator_names        c-src/emacs/src/keyboard.c      7372
+seq    erl-src/lists.erl       /^seq(Min, Max) when integer(Min), 
integer(Max), Min/
+serializeToVars        php-src/lce_functions.php       /^      function 
serializeToVars($prefix)$/
+serializeToVars        php-src/lce_functions.php       /^      function 
serializeToVars($prefix)$/
+set-input-interrupt-mode       c-src/emacs/src/keyboard.c      /^DEFUN 
("set-input-interrupt-mode", Fset_input_inte/
+set-input-meta-mode    c-src/emacs/src/keyboard.c      /^DEFUN 
("set-input-meta-mode", Fset_input_meta_mode/
+set-input-mode c-src/emacs/src/keyboard.c      /^DEFUN ("set-input-mode", 
Fset_input_mode, Sset_inp/
+set-output-flow-control        c-src/emacs/src/keyboard.c      /^DEFUN 
("set-output-flow-control", Fset_output_flow/
+set-quit-char  c-src/emacs/src/keyboard.c      /^DEFUN ("set-quit-char", 
Fset_quit_char, Sset_quit_/
+setDelegate:   objc-src/Subprocess.m   /^- setDelegate:anObject$/
+setRevertButtonTitle   objc-src/PackInsp.m     /^-setRevertButtonTitle$/
+set_char_table_contents        c-src/emacs/src/lisp.h  
/^set_char_table_contents (Lisp_Object table, ptrdif/
+set_char_table_defalt  c-src/emacs/src/lisp.h  /^set_char_table_defalt 
(Lisp_Object table, Lisp_Obj/
+set_char_table_extras  c-src/emacs/src/lisp.h  /^set_char_table_extras 
(Lisp_Object table, ptrdiff_/
+set_char_table_purpose c-src/emacs/src/lisp.h  /^set_char_table_purpose 
(Lisp_Object table, Lisp_Ob/
+set_hash_key_slot      c-src/emacs/src/lisp.h  /^set_hash_key_slot (struct 
Lisp_Hash_Table *h, ptrd/
+set_hash_value_slot    c-src/emacs/src/lisp.h  /^set_hash_value_slot (struct 
Lisp_Hash_Table *h, pt/
+set_overlay_plist      c-src/emacs/src/lisp.h  /^set_overlay_plist 
(Lisp_Object overlay, Lisp_Objec/
+set_poll_suppress_count        c-src/emacs/src/keyboard.c      
/^set_poll_suppress_count (int count)$/
+set_prop       c-src/emacs/src/keyboard.c      /^set_prop (ptrdiff_t idx, 
Lisp_Object val)$/
+set_save_integer       c-src/emacs/src/lisp.h  /^set_save_integer (Lisp_Object 
obj, int n, ptrdiff_/
+set_save_pointer       c-src/emacs/src/lisp.h  /^set_save_pointer (Lisp_Object 
obj, int n, void *va/
+set_string_intervals   c-src/emacs/src/lisp.h  /^set_string_intervals 
(Lisp_Object s, INTERVAL i)$/
+set_sub_char_table_contents    c-src/emacs/src/lisp.h  
/^set_sub_char_table_contents (Lisp_Object table, pt/
+set_symbol_function    c-src/emacs/src/lisp.h  /^set_symbol_function 
(Lisp_Object sym, Lisp_Object /
+set_symbol_next        c-src/emacs/src/lisp.h  /^set_symbol_next (Lisp_Object 
sym, struct Lisp_Symb/
+set_symbol_plist       c-src/emacs/src/lisp.h  /^set_symbol_plist (Lisp_Object 
sym, Lisp_Object pli/
+set_waiting_for_input  c-src/emacs/src/keyboard.c      /^set_waiting_for_input 
(struct timespec *time_to_cl/
+setref tex-src/texinfo.tex     
/^\\expandafter\\expandafter\\expandafter\\appendixsetre/
+shouldLoad     objc-src/PackInsp.m     /^-(BOOL)shouldLoad$/
+should_see_this_array_type     cp-src/c.C      156
+should_see_this_function_pointer       cp-src/c.C      153
+should_see_this_one_enclosed_in_extern_C       cp-src/c.C      149
+show   erl-src/gs_dialog.erl   /^show(Module, Title, Message, Args) ->$/
+showError      objc-src/Subprocess.m   /^showError (const char *errorString, 
id theDelegate/
+showInfo:      objc-src/PackInsp.m     /^-showInfo:sender$/
+show_help_echo c-src/emacs/src/keyboard.c      /^show_help_echo (Lisp_Object 
help, Lisp_Object wind/
+sig    c-src/emacs/src/keyboard.c      7238
+signal_handler c-src/h.h       82
+signal_handler1        c-src/h.h       83
+signal_handler_t       c-src/h.h       94
+simulation     html-src/software.html  /^Software that I wrote for supporting 
my research a/
+single_kboard  c-src/emacs/src/keyboard.c      89
+single_kboard_state    c-src/emacs/src/keyboard.c      /^single_kboard_state 
()$/
+site   cp-src/conway.hpp       5
+site::alive    cp-src/conway.hpp       7
+site::clear    cp-src/conway.hpp       /^    void clear(void) { alive = 0; }$/
+site::compute_next_state       cp-src/conway.hpp       /^    void 
compute_next_state(void)$/
+site::next_alive       cp-src/conway.hpp       7
+site::read     cp-src/conway.hpp       /^    char read() { return alive; }$/
+site::set      cp-src/conway.hpp       /^    void set(void) { alive = 1; }$/
+site::site     cp-src/conway.hpp       /^    site(int xi, int yi): x(xi), 
y(yi), alive(0) {/
+site::step     cp-src/conway.hpp       /^    void step(void) { alive = 
next_alive; }$/
+site::total_surrounding        cp-src/conway.cpp       /^int 
site::total_surrounding(void)$/
+site::x        cp-src/conway.hpp       7
+site::y        cp-src/conway.hpp       7
+size   c-src/etags.c   236
+size   c-src/etags.c   2522
+size   c-src/emacs/src/gmalloc.c       156
+size   c-src/emacs/src/gmalloc.c       163
+size   c-src/emacs/src/gmalloc.c       1862
+size   c-src/emacs/src/lisp.h  1364
+size   c-src/emacs/src/lisp.h  1390
+skeyseen       c-src/etags.c   2445
+skip_name      c-src/etags.c   /^skip_name (char *cp)$/
+skip_non_spaces        c-src/etags.c   /^skip_non_spaces (char *cp)$/
+skip_spaces    c-src/etags.c   /^skip_spaces (char *cp)$/
+slist  cp-src/cfront.H 718
+slist::add     cp-src/cfront.H /^      void    add(Pstmt s)    { tail->s_list 
= s; tail = s; }/
+slist::head    cp-src/cfront.H 719
+slist::slist   cp-src/cfront.H /^              slist(Pstmt s)  { Nl++; head = 
tail = s; };$/
+slist::tail    cp-src/cfront.H 720
+snarf-tag-function     el-src/emacs/lisp/progmodes/etags.el    /^(defvar 
snarf-tag-function nil$/
+snone  c-src/etags.c   2443
+some_mouse_moved       c-src/emacs/src/keyboard.c      /^some_mouse_moved 
(void)$/
+sort   erl-src/lists.erl       /^sort([X]) -> [X];$/
+space  tex-src/texinfo.tex     /^    {#2\\labelspace 
#1}\\dotfill\\doshortpageno{#3}}%/
+space  tex-src/texinfo.tex     /^  
\\dosubsubsecentry{#2.#3.#4.#5\\labelspace#1}{#6}}/
+specbind_tag   c-src/emacs/src/lisp.h  2943
+specbinding    c-src/emacs/src/lisp.h  2955
+specialsymbol  prol-src/natded.prolog  /^specialsymbol(C1,C2,S):-$/
+split_and_keysort      erl-src/lists.erl       /^split_and_keysort([A,B|T], X, 
Y, Index) ->$/
+split_and_sort erl-src/lists.erl       /^split_and_sort([A,B|T], X, Y) ->$/
+split_at       erl-src/lines.erl       /^split_at(Pos, L) ->$/
+splitexp       prol-src/natded.prolog  /^splitexp(E,E,('NIL','NIL')):-!.$/
+srclist        Makefile        /^srclist: Makefile$/
+ss3    c.c     255
+sss1   c.c     252
+sss2   c.c     253
+sstab  prol-src/natded.prolog  /^sstab(2,'C',',').$/
+st_C_attribute c-src/etags.c   2209
+st_C_class     c-src/etags.c   2212
+st_C_define    c-src/etags.c   2213
+st_C_enum      c-src/etags.c   2213
+st_C_extern    c-src/etags.c   2213
+st_C_gnumacro  c-src/etags.c   2208
+st_C_ignore    c-src/etags.c   2209
+st_C_javastruct        c-src/etags.c   2210
+st_C_objend    c-src/etags.c   2207
+st_C_objimpl   c-src/etags.c   2207
+st_C_objprot   c-src/etags.c   2207
+st_C_operator  c-src/etags.c   2211
+st_C_struct    c-src/etags.c   2213
+st_C_template  c-src/etags.c   2212
+st_C_typedef   c-src/etags.c   2213
+st_none        c-src/etags.c   2206
+stack  c.c     155
+stagseen       c-src/etags.c   2446
+start  c-src/emacs/src/regex.h 431
+start  c-src/emacs/src/keyboard.c      8753
+start  php-src/lce_functions.php       /^      function start($line, $class)$/
+start  y-src/cccp.y    143
+start_polling  c-src/emacs/src/keyboard.c      /^start_polling (void)$/
+start_up       prol-src/natded.prolog  /^start_up:-$/
+state_protected_p      c-src/emacs/src/gmalloc.c       400
+statetable     html-src/algrthms.html  /^Next$/
+step_everybody cp-src/clheir.cpp       /^void step_everybody(void)$/
+stmt   cp-src/cfront.H 615
+stmt::case_list        cp-src/cfront.H 636
+stmt::case_value       cp-src/cfront.H 624
+stmt::d        cp-src/cfront.H 621
+stmt::e        cp-src/cfront.H 628
+stmt::e2       cp-src/cfront.H 622
+stmt::else_stmt        cp-src/cfront.H 635
+stmt::empty    cp-src/cfront.H 637
+stmt::for_init cp-src/cfront.H 634
+stmt::has_default      cp-src/cfront.H 623
+stmt::memtbl   cp-src/cfront.H 632
+stmt::own_tbl  cp-src/cfront.H 629
+stmt::ret_tp   cp-src/cfront.H 625
+stmt::s        cp-src/cfront.H 617
+stmt::s2       cp-src/cfront.H 630
+stmt::s_list   cp-src/cfront.H 618
+stmt::where    cp-src/cfront.H 619
+stop_polling   c-src/emacs/src/keyboard.c      /^stop_polling (void)$/
+store_user_signal_events       c-src/emacs/src/keyboard.c      
/^store_user_signal_events (void)$/
+strcaseeq      c-src/etags.c   /^#define strcaseeq(s,t)        (assert 
((s)!=NULL && (t)!=/
+streq  c-src/etags.c   /^#define streq(s,t)    (assert ((s)!=NULL || (t)!=NULL/
+string_intervals       c-src/emacs/src/lisp.h  /^string_intervals (Lisp_Object 
s)$/
+stripLine      php-src/lce_functions.php       /^      function 
stripLine($line, $class)$/
+stripname      pas-src/common.pas      /^function stripname; (* ($/
+strncaseeq     c-src/etags.c   /^#define strncaseeq(s,t,n) (assert ((s)!=NULL 
&& (t/
+strneq c-src/etags.c   /^#define strneq(s,t,n) (assert ((s)!=NULL || (t)!=N/
+structdef      c-src/etags.c   2448
+stuff_buffered_input   c-src/emacs/src/keyboard.c      /^stuff_buffered_input 
(Lisp_Object stuffstring)$/
+sublist        erl-src/lists.erl       /^sublist(List, S, L) when L >= 0 ->$/
+subprocess:output:     objc-src/PackInsp.m     /^-subprocess:(Subprocess 
*)sender output:(char *)bu/
+subprocessDone:        objc-src/PackInsp.m     /^-subprocessDone:(Subprocess 
*)sender$/
+subsec=\relax  tex-src/texinfo.tex     /^\\let\\appendixsubsec=\\relax$/
+subsection     perl-src/htlmify-cystic 26
+subsection=\relax      tex-src/texinfo.tex     
/^\\let\\appendixsubsection=\\relax$/
+subsection_marker      perl-src/htlmify-cystic 161
+subst  prol-src/natded.prolog  /^subst(var(Y),var(X),M,N):-$/
+substitute     c-src/etags.c   /^substitute (char *in, char *out, struct 
re_registe/
+subsubsec=\relax       tex-src/texinfo.tex     
/^\\let\\appendixsubsubsec=\\relax$/
+subsubsection  perl-src/htlmify-cystic 27
+subsubsection=\relax   tex-src/texinfo.tex     
/^\\let\\appendixsubsubsection=\\relax$/
+subtree        prol-src/natded.prolog  /^subtree(T,T).$/
+suffix c-src/etags.c   186
+suffix erl-src/lists.erl       /^suffix(Suffix, Suffix) ->$/
+suffixes       c-src/etags.c   195
+suggest_asking_for_help        c-src/etags.c   /^suggest_asking_for_help 
(void)$/
+sum    erl-src/lists.erl       /^sum(L)          -> sum(L, 0).$/
+suspend-emacs  c-src/emacs/src/keyboard.c      /^DEFUN ("suspend-emacs", 
Fsuspend_emacs, Ssuspend_e/
+sval   cccp.y  117
+sval   y-src/cccp.y    116
+swallow_events c-src/emacs/src/keyboard.c      /^swallow_events (bool 
do_display)$/
+switch_line_buffers    c-src/etags.c   /^#define switch_line_buffers() (curndx 
= 1 - curndx/
+sxhash_combine c-src/emacs/src/lisp.h  /^sxhash_combine (EMACS_UINT x, 
EMACS_UINT y)$/
+sym_type       c-src/etags.c   2204
+symbol_interned        c-src/emacs/src/lisp.h  639
+symbol_name    c-src/emacs/src/lisp.h  1687
+symbol_redirect        c-src/emacs/src/lisp.h  646
+syms_of_abbrev c-src/abbrev.c  /^syms_of_abbrev ()$/
+syms_of_keyboard       c-src/emacs/src/keyboard.c      /^syms_of_keyboard 
(void)$/
+synchronize_system_messages_locale     c-src/emacs/src/lisp.h  /^INLINE void 
synchronize_system_messages_locale (vo/
+synchronize_system_time_locale c-src/emacs/src/lisp.h  /^INLINE void 
synchronize_system_time_locale (void) /
+syntax c-src/emacs/src/regex.h 350
+sys_jmp_buf    c-src/emacs/src/lisp.h  2906
+sys_jmp_buf    c-src/emacs/src/lisp.h  2910
+sys_jmp_buf    c-src/emacs/src/lisp.h  2916
+sys_longjmp    c-src/emacs/src/lisp.h  /^# define sys_longjmp(j, v) _longjmp 
(j, v)$/
+sys_longjmp    c-src/emacs/src/lisp.h  /^# define sys_longjmp(j, v) siglongjmp 
(j, v)$/
+sys_longjmp    c-src/emacs/src/lisp.h  /^# define sys_longjmp(j, v) longjmp 
(j, v)$/
+sys_setjmp     c-src/emacs/src/lisp.h  /^# define sys_setjmp(j) _setjmp (j)$/
+sys_setjmp     c-src/emacs/src/lisp.h  /^# define sys_setjmp(j) sigsetjmp (j, 
0)$/
+sys_setjmp     c-src/emacs/src/lisp.h  /^# define sys_setjmp(j) setjmp (j)$/
+syscall_error  c-src/sysdep.h  34
+t1     cp-src/c.C      34
+t2     cp-src/c.C      38
+tab_count_words        c-src/tab.c     /^int                   
tab_count_words(char **tab)$/
+tab_delete_first       c-src/tab.c     /^int                   
tab_delete_first(char **tab)$/
+tab_fill       c-src/tab.c     /^char                  **tab_fill(char *str, 
char delim)$/
+tab_free       c-src/tab.c     /^void                  tab_free(char **tab)$/
+table  cp-src/cfront.H 175
+table::entries cp-src/cfront.H 184
+table::free_slot       cp-src/cfront.H 183
+table::hashsize        cp-src/cfront.H 182
+table::hashtbl cp-src/cfront.H 185
+table::init_stat       cp-src/cfront.H 177
+table::max     cp-src/cfront.H /^      int     max()                   { 
return free_slot-1; };$/
+table::next    cp-src/cfront.H 189
+table::real_block      cp-src/cfront.H 186
+table::set_name        cp-src/cfront.H /^      void    set_name(Pname n)       
{ t_name = n; };$/
+table::set_scope       cp-src/cfront.H /^      void    set_scope(Ptable t)     
{ next = t; };$/
+table::size    cp-src/cfront.H 181
+table::t_name  cp-src/cfront.H 190
+tag-any-match-p        el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tag-any-match-p (_tag)$/
+tag-exact-file-name-match-p    el-src/emacs/lisp/progmodes/etags.el    
/^(defun tag-exact-file-name-match-p (tag)$/
+tag-exact-match-p      el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tag-exact-match-p (tag)$/
+tag-file-name-match-p  el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tag-file-name-match-p (tag)$/
+tag-find-file-of-tag   el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tag-find-file-of-tag (file) ; Doc string?$/
+tag-find-file-of-tag-noselect  el-src/emacs/lisp/progmodes/etags.el    
/^(defun tag-find-file-of-tag-noselect (file)$/
+tag-implicit-name-match-p      el-src/emacs/lisp/progmodes/etags.el    
/^(defun tag-implicit-name-match-p (tag)$/
+tag-lines-already-matched      el-src/emacs/lisp/progmodes/etags.el    
/^(defvar tag-lines-already-matched nil$/
+tag-partial-file-name-match-p  el-src/emacs/lisp/progmodes/etags.el    
/^(defun tag-partial-file-name-match-p (_tag)$/
+tag-re-match-p el-src/emacs/lisp/progmodes/etags.el    /^(defun tag-re-match-p 
(re)$/
+tag-symbol-match-p     el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tag-symbol-match-p (tag)$/
+tag-word-match-p       el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tag-word-match-p (tag)$/
+tag1   c-src/torture.c /^(*tag1 (sig, handler)) ()$/
+tag1   c-src/dostorture.c      /^(*tag1 (sig, handler)) ()$/
+tag1   c-src/h.h       110
+tag2   c-src/torture.c /^(*tag2 (sig, handler)) ()$/
+tag2   c-src/dostorture.c      /^(*tag2 (sig, handler)) ()$/
+tag3   c-src/torture.c /^(*tag3 (int sig, void (*handler) (int))) (int)$/
+tag3   c-src/dostorture.c      /^(*tag3 (int sig, void (*handler) (int))) 
(int)$/
+tag4   c-src/torture.c /^(*tag4 (int sig, void (*handler) (int))) (int)$/
+tag4   c-src/dostorture.c      /^(*tag4 (int sig, void (*handler) (int))) 
(int)$/
+tag5   c-src/torture.c /^tag5 (handler, arg)$/
+tag5   c-src/dostorture.c      /^tag5 (handler, arg)$/
+tag6   c-src/torture.c /^tag6 (void (*handler) (void *), void *arg)$/
+tag6   c-src/dostorture.c      /^tag6 (void (*handler) (void *), void *arg)$/
+tag_or_ch      c-src/emacs/src/lisp.h  3026
+taggedfname    c-src/etags.c   207
+tags-add-tables        el-src/emacs/lisp/progmodes/etags.el    /^(defcustom 
tags-add-tables 'ask-user$/
+tags-apropos   el-src/emacs/lisp/progmodes/etags.el    /^(defun tags-apropos 
(regexp)$/
+tags-apropos-additional-actions        el-src/emacs/lisp/progmodes/etags.el    
/^(defcustom tags-apropos-additional-actions nil$/
+tags-apropos-function  el-src/emacs/lisp/progmodes/etags.el    /^(defvar 
tags-apropos-function nil$/
+tags-apropos-verbose   el-src/emacs/lisp/progmodes/etags.el    /^(defcustom 
tags-apropos-verbose nil$/
+tags-case-fold-search  el-src/emacs/lisp/progmodes/etags.el    /^(defcustom 
tags-case-fold-search 'default$/
+tags-complete-tags-table-file  el-src/emacs/lisp/progmodes/etags.el    
/^(defun tags-complete-tags-table-file (string predi/
+tags-completion-at-point-function      el-src/emacs/lisp/progmodes/etags.el    
/^(defun tags-completion-at-point-function ()$/
+tags-completion-table  el-src/emacs/lisp/progmodes/etags.el    /^(defvar 
tags-completion-table nil$/
+tags-completion-table  el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tags-completion-table ()$/
+tags-completion-table-function el-src/emacs/lisp/progmodes/etags.el    
/^(defvar tags-completion-table-function nil$/
+tags-compression-info-list     el-src/emacs/lisp/progmodes/etags.el    
/^(defcustom tags-compression-info-list$/
+tags-expand-table-name el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tags-expand-table-name (file)$/
+tags-file-name el-src/emacs/lisp/progmodes/etags.el    /^(defvar 
tags-file-name nil$/
+tags-included-tables   el-src/emacs/lisp/progmodes/etags.el    /^(defvar 
tags-included-tables nil$/
+tags-included-tables   el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tags-included-tables ()$/
+tags-included-tables-function  el-src/emacs/lisp/progmodes/etags.el    
/^(defvar tags-included-tables-function nil$/
+tags-lazy-completion-table     el-src/emacs/lisp/progmodes/etags.el    
/^(defun tags-lazy-completion-table ()$/
+tags-location-ring     el-src/emacs/lisp/progmodes/etags.el    /^(defvar 
tags-location-ring (make-ring xref-marker-/
+tags-loop-continue     el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tags-loop-continue (&optional first-time)$/
+tags-loop-eval el-src/emacs/lisp/progmodes/etags.el    /^(defun tags-loop-eval 
(form)$/
+tags-loop-operate      el-src/emacs/lisp/progmodes/etags.el    /^(defvar 
tags-loop-operate nil$/
+tags-loop-revert-buffers       el-src/emacs/lisp/progmodes/etags.el    
/^(defcustom tags-loop-revert-buffers nil$/
+tags-loop-scan el-src/emacs/lisp/progmodes/etags.el    /^(defvar 
tags-loop-scan$/
+tags-next-table        el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tags-next-table ()$/
+tags-query-replace     el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tags-query-replace (from to &optional delim/
+tags-recognize-empty-tags-table        el-src/emacs/lisp/progmodes/etags.el    
/^(defun tags-recognize-empty-tags-table ()$/
+tags-reset-tags-tables el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tags-reset-tags-tables ()$/
+tags-revert-without-query      el-src/emacs/lisp/progmodes/etags.el    
/^(defcustom tags-revert-without-query nil$/
+tags-search    el-src/emacs/lisp/progmodes/etags.el    /^(defun tags-search 
(regexp &optional file-list-for/
+tags-select-tags-table el-src/emacs/lisp/progmodes/etags.el    
/^(define-button-type 'tags-select-tags-table$/
+tags-table-check-computed-list el-src/emacs/lisp/progmodes/etags.el    
/^(defun tags-table-check-computed-list ()$/
+tags-table-computed-list       el-src/emacs/lisp/progmodes/etags.el    
/^(defvar tags-table-computed-list nil$/
+tags-table-computed-list-for   el-src/emacs/lisp/progmodes/etags.el    
/^(defvar tags-table-computed-list-for nil$/
+tags-table-extend-computed-list        el-src/emacs/lisp/progmodes/etags.el    
/^(defun tags-table-extend-computed-list ()$/
+tags-table-files       el-src/emacs/lisp/progmodes/etags.el    /^(defvar 
tags-table-files nil$/
+tags-table-files       el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tags-table-files ()$/
+tags-table-files-function      el-src/emacs/lisp/progmodes/etags.el    
/^(defvar tags-table-files-function nil$/
+tags-table-format-functions    el-src/emacs/lisp/progmodes/etags.el    
/^(defvar tags-table-format-functions '(etags-recogn/
+tags-table-including   el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tags-table-including (this-file core-only)$/
+tags-table-list        el-src/emacs/lisp/progmodes/etags.el    /^(defcustom 
tags-table-list nil$/
+tags-table-list-member el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tags-table-list-member (file list)$/
+tags-table-list-pointer        el-src/emacs/lisp/progmodes/etags.el    
/^(defvar tags-table-list-pointer nil$/
+tags-table-list-started-at     el-src/emacs/lisp/progmodes/etags.el    
/^(defvar tags-table-list-started-at nil$/
+tags-table-mode        el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tags-table-mode ()$/
+tags-table-set-list    el-src/emacs/lisp/progmodes/etags.el    /^(defvar 
tags-table-set-list nil$/
+tags-tag-face  el-src/emacs/lisp/progmodes/etags.el    /^(defcustom 
tags-tag-face 'default$/
+tags-verify-table      el-src/emacs/lisp/progmodes/etags.el    /^(defun 
tags-verify-table (file)$/
+tags-with-face el-src/emacs/lisp/progmodes/etags.el    /^(defmacro 
tags-with-face (face &rest body)$/
+target_multibyte       c-src/emacs/src/regex.h 407
+tcpdump        html-src/software.html  /^tcpdump$/
+temporarily_switch_to_single_kboard    c-src/emacs/src/keyboard.c      
/^temporarily_switch_to_single_kboard (struct frame /
+tend   c-src/etags.c   2432
+terminate:     objc-src/Subprocess.m   /^- terminate:sender$/
+terminateInput objc-src/Subprocess.m   /^- terminateInput$/
+test   c-src/emacs/src/lisp.h  1871
+test   cp-src/c.C      86
+test   erl-src/gs_dialog.erl   /^test() ->$/
+test   php-src/ptest.php       /^test $/
+test::dummy1   cp-src/burton.cpp       /^::dummy::dummy test::dummy1(void)$/
+test::dummy2   cp-src/burton.cpp       /^::dummy::dummy 
test::dummy2(::CORBA::Long dummy)$/
+test::dummy3   cp-src/burton.cpp       /^::dummy::dummy test::dummy3(char* 
name, ::CORBA::L/
+test::f        cp-src/c.C      /^  int f(){return 0;};         \/\/ first 
comment$/
+test::ff       cp-src/c.C      /^  int ff(){return 1;};$/
+test::g        cp-src/c.C      /^  int g(){return 2;};$/
+test_undefined c-src/emacs/src/keyboard.c      /^test_undefined (Lisp_Object 
binding)$/
+texpr  cp-src/cfront.H 527
+texpr::texpr   cp-src/cfront.H /^      texpr(TOK bb, Ptype tt, Pexpr ee) : 
(bb,ee,0) {th/
+text_expr      cp-src/cfront.H 551
+text_expr::text_expr   cp-src/cfront.H /^      text_expr(char* a, char* b) : 
(TEXT,0,0) { string/
+texttreelist   prol-src/natded.prolog  /^texttreelist([]).$/
+thing_to_list  erl-src/lists.erl       /^thing_to_list(X) when integer(X) -> 
integer_to_lis/
+this   c-src/a/b/b.c   1
+this-command-keys      c-src/emacs/src/keyboard.c      /^DEFUN 
("this-command-keys", Fthis_command_keys, St/
+this-command-keys-vector       c-src/emacs/src/keyboard.c      /^DEFUN 
("this-command-keys-vector", Fthis_command_k/
+this-single-command-keys       c-src/emacs/src/keyboard.c      /^DEFUN 
("this-single-command-keys", Fthis_single_co/
+this-single-command-raw-keys   c-src/emacs/src/keyboard.c      /^DEFUN 
("this-single-command-raw-keys", Fthis_singl/
+this_command_key_count c-src/emacs/src/keyboard.c      108
+this_command_key_count_reset   c-src/emacs/src/keyboard.c      112
+this_command_keys      c-src/emacs/src/keyboard.c      107
+this_file_toc  perl-src/htlmify-cystic 29
+this_single_command_key_start  c-src/emacs/src/keyboard.c      125
+tignore        c-src/etags.c   2433
+timer_check    c-src/emacs/src/keyboard.c      /^timer_check (void)$/
+timer_check_2  c-src/emacs/src/keyboard.c      /^timer_check_2 (Lisp_Object 
timers, Lisp_Object idl/
+timer_idleness_start_time      c-src/emacs/src/keyboard.c      335
+timer_last_idleness_start_time c-src/emacs/src/keyboard.c      340
+timer_resume_idle      c-src/emacs/src/keyboard.c      /^timer_resume_idle 
(void)$/
+timer_start_idle       c-src/emacs/src/keyboard.c      /^timer_start_idle 
(void)$/
+timer_stop_idle        c-src/emacs/src/keyboard.c      /^timer_stop_idle 
(void)$/
+timers_run     c-src/emacs/src/keyboard.c      320
+tinbody        c-src/etags.c   2431
+tkeyseen       c-src/etags.c   2429
+tnone  c-src/etags.c   2428
+toggleDescription      objc-src/PackInsp.m     /^-toggleDescription$/
+tok    c-src/etags.c   2491
+token  c-src/etags.c   2508
+token  cccp.y  437
+token  cccp.y  439
+token  y-src/cccp.y    437
+token  y-src/cccp.y    439
+tokenize       prol-src/natded.prolog  
/^tokenize([C1,C2,C3|Cs],Xs-Ys,TsResult):-     % spe/
+tokenizeatom   prol-src/natded.prolog  /^tokenizeatom(Atom,Ws):-$/
+tokentab2      cccp.y  442
+tokentab2      y-src/cccp.y    442
+tool_bar_item_properties       c-src/emacs/src/keyboard.c      7970
+tool_bar_items c-src/emacs/src/keyboard.c      /^tool_bar_items (Lisp_Object 
reuse, int *nitems)$/
+tool_bar_items_vector  c-src/emacs/src/keyboard.c      7965
+toolkit_menubar_in_use c-src/emacs/src/keyboard.c      
/^toolkit_menubar_in_use (struct frame *f)$/
+top-level      c-src/emacs/src/keyboard.c      /^DEFUN ("top-level", 
Ftop_level, Stop_level, 0, 0, /
+top_level_1    c-src/emacs/src/keyboard.c      /^top_level_1 (Lisp_Object 
ignore)$/
+top_level_2    c-src/emacs/src/keyboard.c      /^top_level_2 (void)$/
+total_keys     c-src/emacs/src/keyboard.c      97
+total_size_of_entries  c-src/etags.c   /^total_size_of_entries (register node 
*np)$/
+totally_unblock_input  c-src/emacs/src/keyboard.c      /^totally_unblock_input 
(void)$/
+tpcmd  c-src/h.h       8
+tpcmd  c-src/h.h       15
+track-mouse    c-src/emacs/src/keyboard.c      /^DEFUN 
("internal--track-mouse", Ftrack_mouse, Stra/
+tracking_off   c-src/emacs/src/keyboard.c      /^tracking_off (Lisp_Object 
old_value)$/
+traffic_light  cp-src/conway.cpp       /^void traffic_light(int x, int y)$/
+translate      c-src/emacs/src/regex.h 361
+tt     prol-src/natded.prolog  /^tt:-$/
+tt=cmtt10      tex-src/texinfo.tex     /^\\font\\deftt=cmtt10 scaled 
\\magstep1$/
+tty_read_avail_input   c-src/emacs/src/keyboard.c      /^tty_read_avail_input 
(struct terminal *terminal,$/
+ttypeseen      c-src/etags.c   2430
+typdef c-src/etags.c   2434
+type   c-src/etags.c   2271
+type   c-src/emacs/src/gmalloc.c       145
+type   c-src/emacs/src/lisp.h  2276
+type   c-src/emacs/src/lisp.h  2286
+type   c-src/emacs/src/lisp.h  2296
+type   c-src/emacs/src/lisp.h  2304
+type   c-src/emacs/src/lisp.h  2364
+type   c-src/emacs/src/lisp.h  3025
+type   cp-src/cfront.H 236
+type::addrof   cp-src/cfront.H /^inline Pptr type::addrof() { return new 
ptr(PTR,th/
+type::defined  cp-src/cfront.H 237
+type::integral cp-src/cfront.H /^      TOK     integral(TOK oo)        { 
return kind(oo,I); };$/
+type::num_ptr  cp-src/cfront.H /^      TOK     num_ptr(TOK oo)         { 
return kind(oo,P); };$/
+type::numeric  cp-src/cfront.H /^      TOK     numeric(TOK oo)         { 
return kind(oo,N); };$/
+typefunargs    tex-src/texinfo.tex     /^\\deftypefunargs {#3}\\endgroup %$/
+typefunargs    tex-src/texinfo.tex     /^\\deftypefunargs {#4}\\endgroup %$/
+typemargin     tex-src/texinfo.tex     /^\\newskip\\deftypemargin 
\\deftypemargin=12pt$/
+typemargin     tex-src/texinfo.tex     /^\\rlap{\\rightline{{\\rm #2}\\hskip 
\\deftypemargin}}}%/
+u      c-src/emacs/src/lisp.h  2397
+u_any  c-src/emacs/src/lisp.h  2214
+u_boolfwd      c-src/emacs/src/lisp.h  2371
+u_buffer_objfwd        c-src/emacs/src/lisp.h  2373
+u_finalizer    c-src/emacs/src/lisp.h  2219
+u_free c-src/emacs/src/lisp.h  2215
+u_intfwd       c-src/emacs/src/lisp.h  2370
+u_kboard_objfwd        c-src/emacs/src/lisp.h  2374
+u_marker       c-src/emacs/src/lisp.h  2216
+u_objfwd       c-src/emacs/src/lisp.h  2372
+u_overlay      c-src/emacs/src/lisp.h  2217
+u_save_value   c-src/emacs/src/lisp.h  2218
+unargs tex-src/texinfo.tex     /^\\defunargs {#2}\\endgroup %$/
+unargs tex-src/texinfo.tex     /^\\defunargs {#2}\\endgroup %$/
+unargs tex-src/texinfo.tex     /^\\defunargs {#2}\\endgroup %$/
+unargs tex-src/texinfo.tex     /^\\defunargs {#3}\\endgroup %$/
+unargs tex-src/texinfo.tex     /^\\defunargs {#3}\\endgroup %$/
+unblock_input  c-src/emacs/src/keyboard.c      /^unblock_input (void)$/
+unblock_input_to       c-src/emacs/src/keyboard.c      /^unblock_input_to (int 
level)$/
+unchar c-src/h.h       99
+unexpand-abbrev        c-src/abbrev.c  /^DEFUN ("unexpand-abbrev", 
Funexpand_abbrev, Sunexp/
+unread_switch_frame    c-src/emacs/src/keyboard.c      204
+unsignedp      cccp.y  113
+unsignedp      y-src/cccp.y    112
+uprintmax_t    c-src/emacs/src/lisp.h  149
+uprintmax_t    c-src/emacs/src/lisp.h  154
+usecharno      c-src/etags.c   210
+used   c-src/emacs/src/regex.h 347
+used_syntax    c-src/emacs/src/regex.h 398
+user_cmp_function      c-src/emacs/src/lisp.h  1814
+user_error     c-src/emacs/src/keyboard.c      /^user_error (const char *msg)$/
+user_hash_function     c-src/emacs/src/lisp.h  1811
+user_signal_info       c-src/emacs/src/keyboard.c      7235
+user_signals   c-src/emacs/src/keyboard.c      7250
+usfreelock_ptr/t       ada-src/etags-test-for.ada      /^   type 
usfreelock_ptr is access$/
+val    c-src/getopt.h  84
+val    c-src/emacs/src/lisp.h  691
+val    c-src/emacs/src/lisp.h  3027
+val    prol-src/natded.prolog  /^val(X) --> ['['], valseq(X), [']'].$/
+valcell        c-src/emacs/src/lisp.h  2357
+valid  c-src/etags.c   220
+valid  c-src/etags.c   2502
+validate       php-src/lce_functions.php       /^      function 
validate($value)$/
+validate       php-src/lce_functions.php       /^      function 
validate($value)$/
+valloc c-src/emacs/src/gmalloc.c       /^valloc (size_t size)$/
+valseq prol-src/natded.prolog  /^valseq([Val|Vals]) --> val(Val), 
plusvalseq(Vals)./
+value  c-src/emacs/src/lisp.h  687
+value  cccp.y  113
+value  y-src/cccp.y    112
+var    c-src/emacs/src/keyboard.c      11023
+var    c-src/emacs/src/lisp.h  3137
+varargs        tex-src/texinfo.tex     /^\\defvarargs {#3}\\endgroup %$/
+varargs        tex-src/texinfo.tex     /^\\defvarargs {#3}\\endgroup %$/
+varargs        tex-src/texinfo.tex     /^\\defvarargs {#2}\\endgroup %$/
+varargs        tex-src/texinfo.tex     /^\\defvarargs {#2}\\endgroup %$/
+vcopy  c-src/emacs/src/lisp.h  /^vcopy (Lisp_Object v, ptrdiff_t offset, 
Lisp_Objec/
+vec    cp-src/cfront.H 423
+vec::dim       cp-src/cfront.H 426
+vec::size      cp-src/cfront.H 427
+vec::vec       cp-src/cfront.H /^      vec(Ptype t, Pexpr e) { Nt++; base=VEC; 
typ=t; di/
+vectorlike_header      c-src/emacs/src/lisp.h  1343
+verify-tags-table-function     el-src/emacs/lisp/progmodes/etags.el    
/^(defvar verify-tags-table-function nil$/
+verify_ascii   c-src/emacs/src/lisp.h  /^# define verify_ascii(str) (str)$/
+vignore        c-src/etags.c   2417
+visit-tags-table       el-src/emacs/lisp/progmodes/etags.el    /^(defun 
visit-tags-table (file &optional local)$/
+visit-tags-table-buffer        el-src/emacs/lisp/progmodes/etags.el    
/^(defun visit-tags-table-buffer (&optional cont)$/
+void   c-src/emacs/src/lisp.h  /^INLINE void (check_cons_list) (void) { 
lisp_h_chec/
+voidfuncptr    c-src/emacs/src/lisp.h  2108
+voidval        cccp.y  116
+voidval        y-src/cccp.y    115
+wait_status_ptr_t      c.c     161
+waiting_for_input      c-src/emacs/src/keyboard.c      150
+warning        cccp.y  /^warning (msg)$/
+warning        y-src/cccp.y    /^warning (msg)$/
+weak   c-src/emacs/src/lisp.h  1830
+weak_alias     c-src/emacs/src/gmalloc.c       /^weak_alias (free, cfree)$/
+what   c-src/etags.c   252
+wheel_syms     c-src/emacs/src/keyboard.c      4628
+where  c-src/emacs/src/lisp.h  2348
+width  make-src/Makefile       186
+width  make-src/Makefile       189
+width  make-src/Makefile       192
+width  make-src/Makefile       195
+windowWillClose:       objcpp-src/SimpleCalc.M /^- windowWillClose:sender$/
+wipe_kboard    c-src/emacs/src/keyboard.c      /^wipe_kboard (KBOARD *kb)$/
+womboid        c-src/h.h       63
+womboid        c-src/h.h       75
+word_size      c-src/emacs/src/lisp.h  1473
+write  php-src/lce_functions.php       /^      function write()$/
+write  php-src/lce_functions.php       /^      function write($save="yes")$/
+write_abbrev   c-src/abbrev.c  /^write_abbrev (sym, stream)$/
+write_classname        c-src/etags.c   /^write_classname (linebuffer *cn, 
const char *quali/
+write_lex      prol-src/natded.prolog  /^write_lex(File):-$/
+write_lex_cat  prol-src/natded.prolog  /^write_lex_cat(File):-$/
+write_xyc      cp-src/screen.cpp       /^void write_xyc(int x, int y, char c)$/
+writebreak     prol-src/natded.prolog  /^writebreak([]).$/
+writebreaklex  prol-src/natded.prolog  /^writebreaklex([]).$/
+writecat       prol-src/natded.prolog  
/^writecat(np(ind(sng),nm(_)),np,[],[]):-!.$/
+writelist      prol-src/natded.prolog  /^writelist([der(Ws)|Ws2]):-$/
+writelistsubs  prol-src/natded.prolog  /^writelistsubs([],X):-$/
+writenamestring        pas-src/common.pas      /^procedure 
writenamestring;(*($/
+writesubs      prol-src/natded.prolog  /^writesubs([]).$/
+writesups      prol-src/natded.prolog  /^writesups([]).$/
+written        c-src/etags.c   211
+x      c.c     153
+x      c.c     179
+x      c.c     188
+x      c.c     189
+x      tex-src/texinfo.tex     /^\\refx{#1-snt}{} [\\printednodename], 
page\\tie\\refx{/
+x-get-selection-internal       c.c     /^DEFUN ("x-get-selection-internal", 
Fx_get_selectio/
+x-get-selection-internal       c.c     /^       Fx_get_selection_internal, 
Sx_get_selection/
+xcar_addr      c-src/emacs/src/lisp.h  /^xcar_addr (Lisp_Object c)$/
+xcdr_addr      c-src/emacs/src/lisp.h  /^xcdr_addr (Lisp_Object c)$/
+xmalloc        c-src/etags.c   /^xmalloc (size_t size)$/
+xnew   c-src/etags.c   /^#define xnew(n, Type)      ((Type *) xmalloc ((n) /
+xrealloc       c-src/etags.c   /^xrealloc (void *ptr, size_t size)$/
+xref-etags-location    el-src/emacs/lisp/progmodes/etags.el    /^(defclass 
xref-etags-location (xref-location)$/
+xref-location-line     el-src/emacs/lisp/progmodes/etags.el    /^(cl-defmethod 
xref-location-line ((l xref-etags-lo/
+xref-location-marker   el-src/emacs/lisp/progmodes/etags.el    /^(cl-defmethod 
xref-location-marker ((l xref-etags-/
+xref-make-etags-location       el-src/emacs/lisp/progmodes/etags.el    
/^(defun xref-make-etags-location (tag-info file)$/
+xrnew  c-src/etags.c   /^#define xrnew(op, n, Type) ((op) = (Type *) xreall/
+xx     Makefile        /^xx="this line is here because of a fontlock bug$/
+y-get-selection-internal       c.c     /^      Fy_get_selection_internal, 
Sy_get_selection_/
+yyalloc        /usr/share/bison/bison.simple   83
+yyalloc        /usr/share/bison/bison.simple   83
+yycheck        parse.y 330
+yycheck        cccp.y  301
+yyclearin      /usr/share/bison/bison.simple   149
+yyclearin      /usr/share/bison/bison.simple   149
+yydebug        /usr/share/bison/bison.simple   237
+yydebug        /usr/share/bison/bison.simple   237
+yydefact       parse.y 219
+yydefact       cccp.y  239
+yydefgoto      parse.y 237
+yydefgoto      cccp.y  251
+yyerrhandle    /usr/share/bison/bison.simple   848
+yyerrhandle    /usr/share/bison/bison.simple   848
+yyerrlab1      /usr/share/bison/bison.simple   823
+yyerrlab1      /usr/share/bison/bison.simple   823
+yyerrok        /usr/share/bison/bison.simple   148
+yyerrok        /usr/share/bison/bison.simple   148
+yyerror        cccp.y  /^yyerror (s)$/
+yyerror        y-src/cccp.y    /^yyerror (s)$/
+yyerrstatus    /usr/share/bison/bison.simple   846
+yyerrstatus    /usr/share/bison/bison.simple   846
+yylex  cccp.y  /^yylex ()$/
+yylex  y-src/cccp.y    /^yylex ()$/
+yyls   /usr/share/bison/bison.simple   88
+yyls   /usr/share/bison/bison.simple   88
+yylsp  /usr/share/bison/bison.simple   748
+yylsp  /usr/share/bison/bison.simple   921
+yylsp  /usr/share/bison/bison.simple   748
+yylsp  /usr/share/bison/bison.simple   921
+yymemcpy       /usr/share/bison/bison.simple   264
+yymemcpy       /usr/share/bison/bison.simple   /^yymemcpy (char *yyto, const 
char *yyfrom, YYSIZE_T/
+yymemcpy       /usr/share/bison/bison.simple   264
+yymemcpy       /usr/share/bison/bison.simple   /^yymemcpy (char *yyto, const 
char *yyfrom, YYSIZE_T/
+yyn    /usr/share/bison/bison.simple   755
+yyn    /usr/share/bison/bison.simple   861
+yyn    /usr/share/bison/bison.simple   895
+yyn    /usr/share/bison/bison.simple   903
+yyn    /usr/share/bison/bison.simple   755
+yyn    /usr/share/bison/bison.simple   861
+yyn    /usr/share/bison/bison.simple   895
+yyn    /usr/share/bison/bison.simple   903
+yynewstate     /usr/share/bison/bison.simple   763
+yynewstate     /usr/share/bison/bison.simple   925
+yynewstate     /usr/share/bison/bison.simple   763
+yynewstate     /usr/share/bison/bison.simple   925
+yypact parse.y 242
+yypact cccp.y  256
+yyparse        /usr/share/bison/bison.simple   /^yyparse (YYPARSE_PARAM_ARG)$/
+yyparse        /usr/share/bison/bison.simple   /^yyparse (YYPARSE_PARAM_ARG)$/
+yypgoto        parse.y 260
+yypgoto        cccp.y  268
+yyprhs parse.y 134
+yyprhs cccp.y  167
+yyr1   parse.y 197
+yyr1   cccp.y  219
+yyr2   parse.y 207
+yyr2   cccp.y  228
+yyresult       /usr/share/bison/bison.simple   932
+yyresult       /usr/share/bison/bison.simple   939
+yyresult       /usr/share/bison/bison.simple   947
+yyresult       /usr/share/bison/bison.simple   932
+yyresult       /usr/share/bison/bison.simple   939
+yyresult       /usr/share/bison/bison.simple   947
+yyreturn       /usr/share/bison/bison.simple   933
+yyreturn       /usr/share/bison/bison.simple   940
+yyreturn       /usr/share/bison/bison.simple   933
+yyreturn       /usr/share/bison/bison.simple   940
+yyrhs  parse.y 142
+yyrhs  cccp.y  174
+yyrline        parse.y 171
+yyrline        cccp.y  195
+yyss   /usr/share/bison/bison.simple   85
+yyss   /usr/share/bison/bison.simple   85
+yystate        /usr/share/bison/bison.simple   757
+yystate        /usr/share/bison/bison.simple   761
+yystate        /usr/share/bison/bison.simple   875
+yystate        /usr/share/bison/bison.simple   924
+yystate        /usr/share/bison/bison.simple   757
+yystate        /usr/share/bison/bison.simple   761
+yystate        /usr/share/bison/bison.simple   875
+yystate        /usr/share/bison/bison.simple   924
+yystpcpy       /usr/share/bison/bison.simple   316
+yystpcpy       /usr/share/bison/bison.simple   /^yystpcpy (char *yydest, const 
char *yysrc)$/
+yystpcpy       /usr/share/bison/bison.simple   316
+yystpcpy       /usr/share/bison/bison.simple   /^yystpcpy (char *yydest, const 
char *yysrc)$/
+yystrlen       /usr/share/bison/bison.simple   293
+yystrlen       /usr/share/bison/bison.simple   /^yystrlen (const char *yystr)$/
+yystrlen       /usr/share/bison/bison.simple   293
+yystrlen       /usr/share/bison/bison.simple   /^yystrlen (const char *yystr)$/
+yystype        cccp.y  118
+yytable        parse.y 269
+yytable        cccp.y  277
+yytname        parse.y 185
+yytname        cccp.y  208
+yytranslate    parse.y 101
+yytranslate    cccp.y  135
+yyvs   /usr/share/bison/bison.simple   86
+yyvs   /usr/share/bison/bison.simple   86
+yyvsp  /usr/share/bison/bison.simple   746
+yyvsp  /usr/share/bison/bison.simple   919
+yyvsp  /usr/share/bison/bison.simple   746
+yyvsp  /usr/share/bison/bison.simple   919
+z      c.c     144
+z      c.c     164
+zf     erl-src/lists.erl       /^zf(F, As, [H|T]) ->$/
+|      tex-src/texinfo.tex     /^\\def|{{\\tt \\char '174}}$/
+~      tex-src/texinfo.tex     /^\\def~{{\\tt \\char '176}}$/
diff --git a/test/etags/ETAGS.good_1 b/test/etags/ETAGS.good_1
new file mode 100644
index 0000000..95bb70c
--- /dev/null
+++ b/test/etags/ETAGS.good_1
@@ -0,0 +1,5214 @@
+
+Makefile,701
+ADASRC=1,0
+ASRC=2,91
+CSRC=3,139
+CPSRC=7,410
+ELSRC=10,624
+ERLSRC=11,694
+FORTHSRC=12,759
+FSRC=13,809
+HTMLSRC=14,881
+JAVASRC=15,974
+LUASRC=16,1062
+MAKESRC=17,1105
+OBJCSRC=18,1147
+OBJCPPSRC=19,1228
+PASSRC=20,1291
+PERLSRC=21,1333
+PHPSRC=22,1413
+PSSRC=23,1485
+PROLSRC=24,1525
+PYTSRC=25,1587
+TEXSRC=26,1628
+YSRC=27,1707
+SRCS=28,1772
+NONSRCS=32,2024
+ETAGS_PROG=34,2098
+CTAGS_PROG=35,2129
+REGEX=37,2161
+xx=38,2207
+RUN=40,2256
+OPTIONS=42,2262
+ARGS=43,2314
+infiles 45,2332
+check:check47,2394
+ediff%:ediff%55,2697
+cdiff:cdiff58,2798
+ETAGS:ETAGS61,2895
+CTAGS:CTAGS64,2965
+srclist:srclist67,3043
+regexfile:regexfile71,3134
+.PRECIOUS:.PRECIOUS77,3311
+FRC:FRC79,3345
+
+ada-src/etags-test-for.ada,1969
+   type LL_Task_Procedure_Access LL_Task_Procedure_Access/t1,0
+   function Body_RequiredBody_Required/f3,78
+   type Type_Specific_Data Type_Specific_Data/t11,280
+   function "abs"abs/f19,504
+   type Barrier_Function_Pointer Barrier_Function_Pointer/t21,577
+   function "="=/f27,722
+   type usfreelock_ptr usfreelock_ptr/t30,803
+   function p p/f33,891
+   procedure LL_Wrapper LL_Wrapper/p37,1054
+function p p/f39,1094
+package Pkg1 Pkg1/s44,1203
+  type Private_T Private_T/t46,1220
+  package Inner1 Inner1/s48,1250
+    procedure Private_T;Private_T/p49,1270
+  package Inner2 Inner2/s52,1310
+    task Private_T;Private_T/k53,1330
+  type Public_T Public_T/t56,1365
+  procedure Pkg1_Proc1;Pkg1_Proc1/p62,1450
+  procedure Pkg1_Proc2 Pkg1_Proc2/p64,1475
+  function Pkg1_Func1 Pkg1_Func1/f66,1514
+  function Pkg1_Func2 Pkg1_Func2/f68,1553
+  package Pkg1_Pkg1 Pkg1_Pkg1/s71,1622
+    procedure Pkg1_Pkg1_Proc1;Pkg1_Pkg1_Proc1/p72,1645
+  task type Task_Type Task_Type/k75,1694
+  type Private_T Private_T/t82,1786
+package body Pkg1 Pkg1/b89,1882
+  procedure Pkg1_Proc1 Pkg1_Proc1/p91,1904
+  package body Inner1 Inner1/b96,1956
+    procedure Private_T Private_T/p97,1981
+  package body Inner2 Inner2/b103,2054
+    task body Private_T Private_T/b104,2079
+  task body Task_Type Task_Type/b112,2181
+  procedure Pkg1_Proc2 Pkg1_Proc2/p126,2367
+  function Pkg1_Func1 Pkg1_Func1/f132,2445
+  function Pkg1_Func2 Pkg1_Func2/f134,2496
+  package body Pkg1_Pkg1 Pkg1_Pkg1/b140,2596
+package body Pkg1_Pkg1 Pkg1_Pkg1/b146,2663
+  procedure Pkg1_Pkg1_Proc1 Pkg1_Pkg1_Proc1/p147,2689
+function  Pkg1_Func1 Pkg1_Func1/f155,2778
+package Truc Truc/s162,2887
+package Truc.Bidule Truc.Bidule/s166,2929
+  protected Bidule Bidule/t168,2953
+  protected type Machin_T Machin_T/t172,3007
+package body Truc.Bidule Truc.Bidule/b178,3087
+  protected body Bidule Bidule/b179,3115
+  protected Machin_T Machin_T/t186,3207
+
+ada-src/2ataspri.adb,2190
+package body System.Task_Primitives System.Task_Primitives/b64,2603
+   package RTE RTE/s69,2712
+   package TSL TSL/s70,2759
+   function To_void_ptr To_void_ptr/f86,3287
+   function To_TCB_Ptr To_TCB_Ptr/f89,3366
+   function 
pthread_mutexattr_setprotocolpthread_mutexattr_setprotocol/f92,3444
+   function 
pthread_mutexattr_setprio_ceilingpthread_mutexattr_setprio_ceiling/f99,3728
+   procedure Abort_WrapperAbort_Wrapper/p115,4302
+   procedure LL_Wrapper LL_Wrapper/p122,4526
+   procedure Initialize_LL_Tasks Initialize_LL_Tasks/p131,4830
+   function Self Self/f160,5586
+   procedure Initialize_LockInitialize_Lock/p174,5958
+   procedure Finalize_Lock Finalize_Lock/p210,6927
+   procedure Write_Lock Write_Lock/p226,7338
+   procedure Read_Lock Read_Lock/p239,7700
+   procedure Unlock Unlock/p246,7850
+   procedure Initialize_Cond Initialize_Cond/p258,8160
+   procedure Finalize_Cond Finalize_Cond/p286,8979
+   procedure Cond_Wait Cond_Wait/p300,9303
+   procedure Cond_Timed_WaitCond_Timed_Wait/p312,9661
+   procedure Cond_Signal Cond_Signal/p343,10510
+   procedure Set_PrioritySet_Priority/p355,10836
+   procedure Set_Own_Priority Set_Own_Priority/p372,11243
+   function Get_Priority Get_Priority/f385,11598
+   function Get_Own_Priority Get_Own_Priority/f398,12023
+   procedure Create_LL_TaskCreate_LL_Task/p412,12438
+      function To_Start_Addr To_Start_Addr/f426,12873
+   procedure Exit_LL_Task Exit_LL_Task/p491,14995
+   procedure Abort_Task Abort_Task/p500,15158
+   procedure Test_Abort Test_Abort/p518,15716
+   procedure Install_Abort_Handler Install_Abort_Handler/p527,15878
+   procedure Abort_WrapperAbort_Wrapper/p557,16939
+      function Address_To_Call_State Address_To_Call_State/f562,17062
+   procedure Install_Error_Handler Install_Error_Handler/p573,17351
+   procedure LL_Assert LL_Assert/p599,18146
+   procedure LL_Wrapper LL_Wrapper/p608,18299
+   procedure Initialize_TAS_Cell Initialize_TAS_Cell/p630,19010
+   procedure Finalize_TAS_Cell Finalize_TAS_Cell/p635,19129
+   procedure Clear Clear/p640,19236
+   procedure Test_And_Set Test_And_Set/p645,19330
+   function  Is_Set Is_Set/f659,19676
+
+ada-src/2ataspri.ads,2313
+package System.Task_Primitives System.Task_Primitives/s58,3169
+   type LL_Task_Procedure_Access LL_Task_Procedure_Access/t62,3253
+   type Pre_Call_State Pre_Call_State/t64,3331
+   type Task_Storage_Size Task_Storage_Size/t66,3378
+   type Machine_Exceptions Machine_Exceptions/t68,3433
+   type Error_Information Error_Information/t70,3499
+   type Lock Lock/t72,3569
+   type Condition_Variable Condition_Variable/t73,3594
+   type Task_Control_Block Task_Control_Block/t81,3955
+   type TCB_Ptr TCB_Ptr/t89,4241
+   function Address_To_TCB_Ptr Address_To_TCB_Ptr/f93,4333
+   procedure Initialize_LL_Tasks Initialize_LL_Tasks/p96,4425
+   function Self Self/f100,4602
+   procedure Initialize_Lock Initialize_Lock/p103,4707
+   procedure Finalize_Lock Finalize_Lock/p107,4879
+   procedure Write_Lock Write_Lock/p111,5034
+   procedure Read_Lock Read_Lock/p118,5428
+   procedure Unlock Unlock/p128,5995
+   procedure Initialize_Cond Initialize_Cond/p135,6300
+   procedure Finalize_Cond Finalize_Cond/p138,6413
+   procedure Cond_Wait Cond_Wait/p142,6591
+   procedure Cond_Timed_WaitCond_Timed_Wait/p155,7396
+   procedure Cond_Signal Cond_Signal/p164,7812
+   procedure Set_Priority Set_Priority/p169,8040
+   procedure Set_Own_Priority Set_Own_Priority/p173,8200
+   function Get_Priority Get_Priority/f177,8348
+   function Get_Own_Priority Get_Own_Priority/f181,8504
+   procedure Create_LL_TaskCreate_LL_Task/p185,8647
+   procedure Exit_LL_Task;Exit_LL_Task/p198,9282
+   procedure Abort_Task Abort_Task/p203,9516
+   procedure Test_Abort;Test_Abort/p210,9878
+   type Abort_Handler_Pointer Abort_Handler_Pointer/t217,10233
+   procedure Install_Abort_Handler Install_Abort_Handler/p219,10312
+   procedure Install_Error_Handler Install_Error_Handler/p226,10741
+   procedure LL_Assert LL_Assert/p231,10983
+   type Proc Proc/t238,11240
+   type TAS_Cell TAS_Cell/t242,11328
+   procedure Initialize_TAS_Cell Initialize_TAS_Cell/p249,11670
+   procedure Finalize_TAS_Cell Finalize_TAS_Cell/p255,11941
+   procedure Clear Clear/p260,12157
+   procedure Test_And_Set Test_And_Set/p267,12462
+   function  Is_Set Is_Set/f275,12877
+   type Lock Lock/t283,13155
+   type Condition_Variable Condition_Variable/t288,13267
+   type TAS_Cell TAS_Cell/t293,13389
+
+ada-src/waroquiers.ada,1503
+package Pkg1 Pkg1/s3,89
+  type Private_T Private_T/t5,106
+  package Inner1 Inner1/s7,136
+    procedure Private_T;Private_T/p8,156
+  package Inner2 Inner2/s11,196
+    task Private_T;Private_T/k12,216
+  type Public_T Public_T/t15,251
+  procedure Pkg1_Proc1;Pkg1_Proc1/p21,336
+  procedure Pkg1_Proc2 Pkg1_Proc2/p23,361
+  function Pkg1_Func1 Pkg1_Func1/f25,400
+  function Pkg1_Func2 Pkg1_Func2/f27,439
+  package Pkg1_Pkg1 Pkg1_Pkg1/s30,508
+    procedure Pkg1_Pkg1_Proc1;Pkg1_Pkg1_Proc1/p31,531
+  task type Task_Type Task_Type/k34,580
+  type Private_T Private_T/t40,671
+package body Pkg1 Pkg1/b46,766
+  procedure Pkg1_Proc1 Pkg1_Proc1/p48,788
+  package body Inner1 Inner1/b53,840
+    procedure Private_T Private_T/p54,865
+  package body Inner2 Inner2/b60,938
+    task body Private_T Private_T/b61,963
+  task body Task_Type Task_Type/b68,1064
+  procedure Pkg1_Proc2 Pkg1_Proc2/p82,1250
+  function Pkg1_Func1 Pkg1_Func1/f88,1328
+  function Pkg1_Func2 Pkg1_Func2/f90,1379
+  package body Pkg1_Pkg1 Pkg1_Pkg1/b96,1479
+package body Pkg1_Pkg1 Pkg1_Pkg1/b100,1544
+  procedure Pkg1_Pkg1_Proc1 Pkg1_Pkg1_Proc1/p101,1570
+function  Pkg1_Func1 Pkg1_Func1/f107,1657
+package Truc Truc/s112,1764
+package Truc.Bidule Truc.Bidule/s116,1816
+  protected Bidule Bidule/t125,1964
+  protected type Machin_T Machin_T/t131,2046
+package body Truc.Bidule Truc.Bidule/b138,2153
+  protected body Bidule Bidule/b139,2181
+  protected body Machin_T Machin_T/b146,2281
+
+c-src/abbrev.c,1432
+Lisp_Object Vabbrev_table_name_list;42,1416
+Lisp_Object Vglobal_abbrev_table;47,1561
+Lisp_Object Vfundamental_mode_abbrev_table;51,1672
+int abbrevs_changed;55,1773
+int abbrev_all_caps;57,1795
+Lisp_Object Vabbrev_start_location;62,1944
+Lisp_Object Vabbrev_start_location_buffer;65,2033
+Lisp_Object Vlast_abbrev;69,2142
+Lisp_Object Vlast_abbrev_text;74,2311
+int last_abbrev_point;78,2401
+Lisp_Object Vpre_abbrev_expand_hook,82,2474
+Lisp_Object Vpre_abbrev_expand_hook, Qpre_abbrev_expand_hook;82,2474
+DEFUN ("make-abbrev-table", Fmake_abbrev_table,make-abbrev-table84,2538
+DEFUN ("clear-abbrev-table", Fclear_abbrev_table,clear-abbrev-table91,2730
+DEFUN ("define-abbrev", Fdefine_abbrev,define-abbrev106,3111
+DEFUN ("define-global-abbrev", 
Fdefine_global_abbrev,define-global-abbrev148,4430
+DEFUN ("define-mode-abbrev", Fdefine_mode_abbrev,define-mode-abbrev159,4801
+DEFUN ("abbrev-symbol", Fabbrev_symbol,abbrev-symbol173,5269
+DEFUN ("abbrev-expansion", Fabbrev_expansion,abbrev-expansion201,6233
+DEFUN ("expand-abbrev", Fexpand_abbrev,expand-abbrev217,6748
+DEFUN ("unexpand-abbrev", Funexpand_abbrev,unexpand-abbrev388,11669
+write_abbrev 425,12876
+describe_abbrev 444,13311
+DEFUN ("insert-abbrev-table-description", 
Finsert_abbrev_table_description,insert-abbrev-table-description465,13826
+DEFUN ("define-abbrev-table", 
Fdefine_abbrev_table,define-abbrev-table505,14982
+syms_of_abbrev 539,16059
+
+c-src/torture.c,197
+(*tag1 tag118,452
+#define notag2 26,553
+(*tag2 tag229,630
+(*tag3 tag339,772
+#define notag4 45,861
+(*tag4 tag448,955
+tag5 57,1081
+tag6 66,1208
+int pp1(74,1317
+pp287,1419
+pp3(100,1518
+
+c-src/getopt.h,147
+#define _GETOPT_H 19,801
+struct option73,2797
+#define        no_argument     89,3124
+#define required_argument      90,3147
+#define optional_argument      91,3175
+
+c-src/etags.c,10045
+char pot_etags_version[pot_etags_version81,3470
+#  undef DEBUG84,3552
+#  define DEBUG 85,3567
+#  define DEBUG 87,3594
+#  define NDEBUG       88,3617
+# define _GNU_SOURCE 94,3705
+# undef MSDOS100,3876
+# undef  WINDOWSNT101,3890
+# define WINDOWSNT102,3909
+# undef MSDOS106,3968
+# define MSDOS 107,3982
+# define MSDOS 110,4032
+# define MAXPATHLEN 115,4111
+# undef HAVE_NTGUI116,4141
+# undef  DOS_NT117,4160
+# define DOS_NT118,4176
+# undef  assert        135,4482
+# define assert(136,4541
+# undef  CTAGS146,4857
+# define CTAGS 147,4872
+# define CTAGS 149,4898
+#define streq(152,4927
+#define strcaseeq(153,4996
+#define strneq(154,5075
+#define strncaseeq(155,5151
+#define CHARS 157,5238
+#define CHAR(158,5278
+#define        iswhite(159,5329
+#define notinname(160,5394
+#define        begtoken(161,5469
+#define        intoken(162,5542
+#define        endtoken(163,5614
+#define ISALNUM(165,5684
+#define ISALPHA(166,5722
+#define ISDIGIT(167,5760
+#define ISLOWER(168,5798
+#define lowcase(170,5837
+#define xnew(179,6015
+#define xrnew(180,6083
+typedef void Lang_function 182,6164
+} compressor;188,6365
+} language;199,6835
+typedef struct fdesc201,6848
+} fdesc;212,7366
+typedef struct node_st214,7376
+} node;225,7894
+} linebuffer;239,8248
+    at_language,245,8344
+    at_regexp,246,8393
+    at_filename,247,8437
+    at_stdin,248,8473
+    at_end     249,8516
+} argument;253,8698
+typedef struct regexp256,8758
+} regexp;268,9325
+static void error 311,10780
+# undef STDIN408,15073
+#define STDIN 411,15095
+static compressor compressors[compressors457,17664
+static const char *Ada_suffixes Ada_suffixes473,17907
+static const char Ada_help 475,17977
+static const char *Asm_suffixes Asm_suffixes493,18580
+static const char Asm_help 504,18976
+static const char *default_C_suffixes default_C_suffixes512,19312
+static const char default_C_help 515,19413
+static const char default_C_help 523,19850
+static const char *Cplusplus_suffixes Cplusplus_suffixes535,20460
+static const char Cplusplus_help 540,20658
+static const char *Cjava_suffixes Cjava_suffixes549,21113
+static char Cjava_help 551,21172
+static const char *Cobol_suffixes Cobol_suffixes556,21337
+static char Cobol_help 558,21402
+static const char *Cstar_suffixes Cstar_suffixes562,21543
+static const char *Erlang_suffixes Erlang_suffixes565,21607
+static const char Erlang_help 567,21673
+const char *Forth_suffixes Forth_suffixes571,21799
+static const char Forth_help 573,21857
+static const char *Fortran_suffixes Fortran_suffixes577,22008
+static const char Fortran_help 579,22085
+static const char *HTML_suffixes HTML_suffixes582,22190
+static const char HTML_help 584,22264
+static const char *Lisp_suffixes Lisp_suffixes589,22452
+static const char Lisp_help 591,22556
+static const char *Lua_suffixes Lua_suffixes598,22871
+static const char Lua_help 600,22934
+static const char *Makefile_filenames Makefile_filenames603,23010
+static const char Makefile_help 605,23133
+static const char *Objc_suffixes Objc_suffixes609,23277
+static const char Objc_help 613,23399
+static const char *Pascal_suffixes Pascal_suffixes619,23714
+static const char Pascal_help 621,23778
+static const char *Perl_suffixes Perl_suffixes626,23966
+static const char *Perl_interpreters Perl_interpreters628,24028
+static const char Perl_help 630,24100
+static const char *PHP_suffixes PHP_suffixes637,24451
+static const char PHP_help 639,24523
+static const char *plain_C_suffixes plain_C_suffixes643,24678
+static const char *PS_suffixes PS_suffixes647,24762
+static const char PS_help 649,24848
+static const char *Prolog_suffixes Prolog_suffixes652,24931
+static const char Prolog_help 654,24993
+static const char *Python_suffixes Python_suffixes658,25107
+static const char Python_help 660,25165
+static const char *Scheme_suffixes Scheme_suffixes665,25347
+static const char Scheme_help 667,25460
+static const char *TeX_suffixes TeX_suffixes672,25683
+static const char TeX_help 674,25781
+static const char *Texinfo_suffixes Texinfo_suffixes686,26316
+static const char Texinfo_help 688,26395
+static const char *Yacc_suffixes Yacc_suffixes691,26492
+static const char Yacc_help 693,26606
+static const char auto_help 699,26856
+static const char none_help 703,27020
+static const char no_lang_help 707,27143
+static language lang_names 718,27355
+print_language_names 753,29532
+# define EMACS_NAME 786,30755
+# define VERSION 789,30811
+print_version 792,30869
+# define PRINT_UNDOCUMENTED_OPTIONS_HELP 804,31173
+print_help 808,31250
+main 981,37438
+get_compressor_from_suffix 1319,46217
+get_language_from_langname 1355,47158
+get_language_from_interpreter 1377,47545
+get_language_from_filename 1399,47976
+process_file_name 1433,48834
+process_file 1555,51665
+init 1632,54150
+find_entries 1656,54901
+make_tag 1814,59707
+pfnote 1856,60942
+free_tree 1917,62744
+free_fdesc 1935,63029
+add_node 1955,63472
+invalidate_nodes 2035,65537
+static int number_len 2068,66193
+total_size_of_entries 2087,66694
+put_entries 2107,67154
+#define C_EXT  2193,68995
+#define C_PLAIN 2194,69037
+#define C_PLPL 2195,69070
+#define C_STAR 2196,69104
+#define C_JAVA 2197,69137
+#define C_AUTO 2198,69172
+#define YACC   2199,69242
+enum sym_type2204,69312
+  st_none,2206,69328
+  st_C_objprot,2207,69339
+  st_C_objprot, st_C_objimpl,2207,69339
+  st_C_objprot, st_C_objimpl, st_C_objend,2207,69339
+  st_C_gnumacro,2208,69382
+  st_C_ignore,2209,69399
+  st_C_ignore, st_C_attribute,2209,69399
+  st_C_javastruct,2210,69430
+  st_C_operator,2211,69449
+  st_C_class,2212,69466
+  st_C_class, st_C_template,2212,69466
+  st_C_struct,2213,69495
+  st_C_struct, st_C_extern,2213,69495
+  st_C_struct, st_C_extern, st_C_enum,2213,69495
+  st_C_struct, st_C_extern, st_C_enum, st_C_define,2213,69495
+  st_C_struct, st_C_extern, st_C_enum, st_C_define, st_C_typedef2213,69495
+struct C_stab_entry 2271,71278
+hash 2275,71409
+in_word_set 2321,72937
+      TOTAL_KEYWORDS 2325,73018
+      MIN_WORD_LENGTH 2326,73045
+      MAX_WORD_LENGTH 2327,73072
+      MIN_HASH_VALUE 2328,73100
+      MAX_HASH_VALUE 2329,73126
+C_symtype 2387,74985
+static bool inattribute;2400,75234
+  fvnone,2408,75435
+  fdefunkey,2409,75466
+  fdefunname,2410,75512
+  foperator,2411,75556
+  fvnameseen,2412,75613
+  fstartlist,2413,75666
+  finlist,2414,75722
+  flistseen,2415,75765
+  fignore,2416,75813
+  vignore      2417,75856
+} fvdef;2418,75901
+static bool fvextern;2420,75911
+  tnone,2428,76089
+  tkeyseen,2429,76119
+  ttypeseen,2430,76160
+  tinbody,2431,76199
+  tend,2432,76238
+  tignore      2433,76279
+} typdef;2434,76320
+  snone,2443,76499
+  skeyseen,2445,76575
+  stagseen,2446,76620
+  scolonseen   2447,76661
+} structdef;2448,76715
+static const char *objtag objtag2453,76809
+  dnone,2460,76942
+  dsharpseen,2461,76972
+  ddefineseen,2462,77025
+  dignorerest  2463,77070
+} definedef;2464,77112
+  onone,2472,77267
+  oprotocol,2473,77297
+  oimplementation,2474,77347
+  otagseen,2475,77395
+  oparenseen,2476,77431
+  ocatseen,2477,77486
+  oinbody,2478,77525
+  omethodsign,2479,77568
+  omethodtag,2480,77626
+  omethodcolon,2481,77666
+  omethodparm,2482,77709
+  oignore      2483,77755
+} objdef;2484,77787
+static struct tok2491,77944
+} token;2508,78626
+} cstack;2523,79136
+#define nestlev        2525,79264
+#define instruct       2527,79369
+pushclass_above 2531,79489
+popclass_above 2550,79948
+write_classname 2564,80162
+consider_token 2613,81341
+} lbs[lbs2924,88532
+#define current_lb_is_new 2926,88543
+#define switch_line_buffers(2927,88588
+#define curlb 2929,88641
+#define newlb 2930,88672
+#define curlinepos 2931,88703
+#define newlinepos 2932,88744
+#define plainc 2934,88786
+#define cplpl 2935,88830
+#define cjava 2936,88861
+#define CNL_SAVE_DEFINEDEF(2938,88905
+#define CNL(2947,89117
+make_C_tag 2960,89375
+C_entries 2986,90194
+default_C_entries 3833,110156
+plain_C_entries 3840,110276
+Cplusplus_entries 3847,110364
+Cjava_entries 3854,110460
+Cstar_entries 3861,110550
+Yacc_entries 3868,110642
+#define LOOP_ON_INPUT_LINES(3875,110720
+#define LOOKING_AT(3884,111056
+#define LOOKING_AT_NOCASE(3891,111461
+just_read_file 3901,111861
+F_takeprec 3914,112039
+F_getit 3937,112366
+Fortran_functions 3961,112840
+Ada_getit 4052,114669
+Ada_funcs 4115,116044
+Asm_labels 4228,118582
+Perl_functions 4261,119549
+Python_functions 4357,122057
+PHP_functions 4387,122684
+Cobol_paragraphs 4466,124471
+Makefile_targets 4494,125029
+Pascal_functions 4529,125950
+L_getit 4709,130318
+Lisp_functions 4725,130664
+Lua_functions 4785,131850
+PS_functions 4811,132385
+Forth_words 4841,133053
+Scheme_functions 4877,134092
+static linebuffer *TEX_toktab TEX_toktab4908,134781
+static const char *TEX_defenv TEX_defenv4912,134974
+static char TEX_esc 4920,135261
+static char TEX_opgrp 4921,135289
+static char TEX_clgrp 4922,135318
+TeX_commands 4928,135395
+#define TEX_LESC 4986,136652
+#define TEX_SESC 4987,136674
+TEX_mode 4992,136804
+TEX_decode_env 5026,137509
+Texinfo_nodes 5071,138554
+HTML_labels 5094,139013
+Prolog_functions 5219,142347
+prolog_skip_comment 5255,143128
+prolog_pr 5281,143736
+prolog_atom 5319,144628
+Erlang_functions 5379,145666
+erlang_func 5438,146965
+erlang_attribute 5476,147642
+erlang_atom 5496,148061
+scan_separators 5534,149080
+analyze_regex 5586,150460
+add_regex 5654,152050
+substitute 5767,154797
+free_regexps 5814,155837
+regex_tag_multiline 5836,156291
+nocase_tail 5913,158263
+get_tag 5928,158519
+readline_internal 5959,159455
+readline 6037,161296
+savestr 6230,167243
+savenstr 6240,167473
+skip_spaces 6249,167679
+skip_non_spaces 6258,167833
+skip_name 6267,167983
+fatal 6277,168156
+pfatal 6284,168253
+suggest_asking_for_help 6291,168332
+error 6300,168554
+concat 6313,168846
+etags_getcwd 6329,169259
+relative_filename 6350,169725
+absolute_filename 6389,170751
+absolute_dirname 6453,172416
+filename_is_absolute 6472,172845
+canonicalize_filename 6484,173096
+# define ISUPPER(6491,173235
+linebuffer_init 6514,173656
+linebuffer_setlen 6524,173887
+xmalloc 6536,174148
+xrealloc 6545,174314
+
+c-src/exit.c,47
+  } __libc_atexit;30,1011
+DEFUN(exit,38,1252
+
+c-src/exit.strange_suffix,47
+  } __libc_atexit;30,1011
+DEFUN(exit,38,1252
+
+c-src/sysdep.h,491
+#define        ENTRY(21,865
+#define        PSEUDO(26,972
+    movl $SYS_##syscall_nam$SYS_##syscall_na31,1132
+    movl $SYS_##syscall_name, %eax;eax31,1132
+    int $0x80;32,1180
+    test %eax,eax33,1210
+    test %eax, %eax;eax33,1210
+    jl syscall_error;34,1245
+#define        XCHG_0  47,1562
+#define        XCHG_1  48,1606
+#define        XCHG_2  49,1648
+#define        XCHG_3  50,1691
+#define        XCHG_4  51,1734
+#define        XCHG_5  52,1777
+#define        r0      54,1821
+#define        r1      55,1875
+#define scratch 56,1932
+#define MOVE(57,2001
+
+c-src/tab.c,196
+static int             count_words(15,263
+static char            *get_word(get_word35,553
+void                   tab_free(59,966
+char                   **tab_fill(tab_fill70,1129
+int                    tab_delete_first(91,1638
+int                    tab_count_words(103,1820
+
+c-src/dostorture.c,197
+(*tag1 tag118,451
+#define notag2 26,552
+(*tag2 tag229,629
+(*tag3 tag339,771
+#define notag4 45,860
+(*tag4 tag448,954
+tag5 57,1080
+tag6 66,1207
+int pp1(74,1316
+pp287,1418
+pp3(100,1517
+
+c-src/emacs/src/gmalloc.c,3539
+#define USE_PTHREAD25,1002
+#undef get_current_dir_name33,1126
+#undef malloc64,2110
+#undef realloc65,2124
+#undef calloc66,2139
+#undef free67,2153
+#define malloc 68,2165
+#define realloc 69,2188
+#define calloc 70,2213
+#define aligned_alloc 71,2236
+#define free 72,2273
+#define DUMPED 80,2472
+#define ALLOCATED_BEFORE_DUMPING(81,2507
+extern void *malloc malloc94,2718
+#define INT_BIT        124,3934
+#define BLOCKLOG       125,3977
+#define BLOCKSIZE      126,4018
+#define BLOCKIFY(127,4052
+#define HEAP   131,4215
+#define FINAL_FREE_BLOCKS      135,4391
+  } malloc_info;167,5388
+#define BLOCK(176,5620
+#define ADDRESS(177,5682
+struct list186,5939
+struct alignlist196,6153
+#define LOCK(223,7064
+#define UNLOCK(228,7195
+#define LOCK_ALIGNED_BLOCKS(233,7329
+#define UNLOCK_ALIGNED_BLOCKS(238,7484
+#define LOCK(244,7649
+#define UNLOCK(245,7664
+#define LOCK_ALIGNED_BLOCKS(246,7681
+#define UNLOCK_ALIGNED_BLOCKS(247,7711
+enum mcheck_status283,9092
+    MCHECK_DISABLED 285,9115
+    MCHECK_OK,286,9187
+    MCHECK_FREE,287,9226
+    MCHECK_HEAD,288,9270
+    MCHECK_TAIL        289,9334
+struct mstats308,10153
+char *_heapbase;_heapbase355,11829
+malloc_info *_heapinfo;_heapinfo358,11927
+static size_t heapsize;361,11983
+size_t _heapindex;364,12047
+size_t _heaplimit;367,12109
+struct list _fraghead[_fraghead370,12171
+size_t _chunks_used;373,12229
+size_t _bytes_used;374,12250
+size_t _chunks_free;375,12270
+size_t _bytes_free;376,12291
+int __malloc_initialized;379,12340
+size_t __malloc_extra_blocks;381,12367
+static int state_protected_p;400,12912
+static size_t last_state_size;401,12942
+static malloc_info *last_heapinfo;last_heapinfo402,12973
+protect_malloc_state 405,13014
+#define PROTECT_MALLOC_STATE(426,13627
+#define PROTECT_MALLOC_STATE(429,13697
+align 435,13794
+get_contiguous_space 466,14616
+register_heapinfo 497,15325
+pthread_mutex_t _malloc_mutex 517,15879
+pthread_mutex_t _aligned_blocks_mutex 518,15938
+int _malloc_thread_enabled_p;519,16005
+malloc_atfork_handler_prepare 522,16048
+malloc_atfork_handler_parent 529,16139
+malloc_atfork_handler_child 536,16233
+malloc_enable_thread 544,16375
+malloc_initialize_1 563,16961
+__malloc_initialize 594,17793
+static int morecore_recursing;604,17926
+morecore_nolock 609,18066
+_malloc_internal_nolock 722,21584
+_malloc_internal 920,28102
+malloc 932,28247
+_malloc 961,29140
+_free 967,29196
+_realloc 973,29240
+struct alignlist *_aligned_blocks _aligned_blocks1004,30345
+_free_internal_nolock 1009,30474
+_free_internal 1255,38476
+free 1265,38603
+weak_alias 1277,38799
+#define min(1306,39813
+_realloc_internal_nolock 1319,40309
+_realloc_internal 1435,43563
+realloc 1447,43726
+calloc 1478,44894
+#define        __sbrk  1513,46042
+__default_morecore 1525,46511
+aligned_alloc 1557,47522
+memalign 1647,49704
+posix_memalign 1656,49909
+static size_t pagesize;1703,51317
+valloc 1706,51349
+#undef malloc1715,51490
+#undef realloc1716,51504
+#undef calloc1717,51519
+#undef aligned_alloc1718,51533
+#undef free1719,51554
+hybrid_malloc 1736,52083
+hybrid_calloc 1744,52188
+hybrid_free 1752,52319
+hybrid_aligned_alloc 1765,52626
+hybrid_realloc 1780,52984
+hybrid_get_current_dir_name 1811,53797
+#define MAGICWORD      1854,55206
+#define MAGICFREE      1855,55261
+#define MAGICBYTE      1856,55316
+#define MALLOCFLOOD    1857,55348
+#define FREEFLOOD      1858,55382
+struct hdr1860,55415
+checkhdr 1867,55581
+freehook 1891,56022
+mallochook 1927,56804
+reallochook 1944,57143
+mabort 1978,57901
+static int mcheck_used 2012,58586
+mcheck 2015,58619
+mprobe 2035,59138
+
+c-src/emacs/src/regex.h,3761
+#define _REGEX_H 21,836
+typedef unsigned long reg_syntax_t;43,1577
+#define RE_BACKSLASH_ESCAPE_IN_LISTS 47,1749
+#define RE_BK_PLUS_QM 52,1969
+#define RE_CHAR_CLASSES 58,2298
+#define RE_CONTEXT_INDEP_ANCHORS 72,3032
+#define RE_CONTEXT_INDEP_OPS 80,3458
+#define RE_CONTEXT_INVALID_OPS 84,3658
+#define RE_DOT_NEWLINE 88,3801
+#define RE_DOT_NOT_NULL 92,3937
+#define RE_HAT_LISTS_NOT_NEWLINE 96,4082
+#define RE_INTERVALS 101,4292
+#define RE_LIMITED_OPS 105,4441
+#define RE_NEWLINE_ALT 109,4583
+#define RE_NO_BK_BRACES 114,4773
+#define RE_NO_BK_PARENS 118,4964
+#define RE_NO_BK_REFS 122,5120
+#define RE_NO_BK_VBAR 126,5316
+#define RE_NO_EMPTY_RANGES 132,5610
+#define RE_UNMATCHED_RIGHT_PAREN_ORD 136,5766
+#define RE_NO_POSIX_BACKTRACKING 140,5937
+#define RE_NO_GNU_OPS 144,6133
+#define RE_FRUGAL 147,6253
+#define RE_SHY_GROUPS 150,6360
+#define RE_NO_NEWLINE_ANCHOR 153,6468
+#define RE_DEBUG 161,6884
+#define RE_SYNTAX_EMACS        183,7684
+#define RE_SYNTAX_AWK  186,7780
+#define RE_SYNTAX_GNU_AWK      193,8084
+#define RE_SYNTAX_POSIX_AWK 197,8255
+#define RE_SYNTAX_GREP 201,8393
+#define RE_SYNTAX_EGREP        206,8549
+#define RE_SYNTAX_POSIX_EGREP  212,8765
+#define RE_SYNTAX_ED 216,8910
+#define RE_SYNTAX_SED 218,8954
+#define _RE_SYNTAX_POSIX_COMMON        221,9072
+#define RE_SYNTAX_POSIX_BASIC  225,9215
+#define RE_SYNTAX_POSIX_MINIMAL_BASIC  231,9508
+#define RE_SYNTAX_POSIX_EXTENDED       234,9598
+#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED       242,9967
+# undef RE_DUP_MAX253,10454
+#define RE_DUP_MAX 256,10540
+#define REG_EXTENDED 263,10762
+#define REG_ICASE 267,10886
+#define REG_NEWLINE 272,11070
+#define REG_NOSUB 276,11248
+#define REG_NOTBOL 286,11614
+#define REG_NOTEOL 289,11688
+  REG_ENOSYS 297,11859
+  REG_NOERROR 300,11941
+  REG_NOMATCH,301,11976
+  REG_BADPAT,305,12123
+  REG_ECOLLATE,306,12162
+  REG_ECTYPE,307,12203
+  REG_EESCAPE,308,12255
+  REG_ESUBREG,309,12298
+  REG_EBRACK,310,12345
+  REG_EPAREN,311,12391
+  REG_EBRACE,312,12436
+  REG_BADBR,313,12472
+  REG_ERANGE,314,12519
+  REG_ESPACE,315,12560
+  REG_BADRPT,316,12601
+  REG_EEND,319,12693
+  REG_ESIZE,320,12728
+  REG_ERPAREN,321,12790
+  REG_ERANGEX  322,12859
+} reg_errcode_t;323,12911
+# define RE_TRANSLATE_TYPE 332,13273
+struct re_pattern_buffer335,13315
+#define REGS_UNALLOCATED 376,14889
+#define REGS_REALLOCATE 377,14916
+#define REGS_FIXED 378,14942
+typedef struct re_pattern_buffer regex_t;416,16098
+typedef ssize_t regoff_t;423,16492
+struct re_registers428,16652
+# define RE_NREGS 440,16942
+} regmatch_t;451,17317
+#  define _Restrict_ 540,20886
+#  define _Restrict_ 542,20979
+#  define _Restrict_544,21018
+#  define _Restrict_arr_ 555,21418
+#  define _Restrict_arr_557,21461
+#  define CHAR_CLASS_MAX_LENGTH 593,22470
+#  define CHAR_CLASS_MAX_LENGTH 597,22648
+typedef wctype_t re_wctype_t;599,22692
+typedef wchar_t re_wchar_t;600,22722
+# define re_wctype 601,22750
+# define re_iswctype 602,22776
+# define re_wctype_to_bit(603,22806
+# define CHAR_CLASS_MAX_LENGTH 605,22844
+# define btowc(606,22906
+typedef enum { RECC_ERROR 609,22953
+              RECC_ALNUM,610,22984
+              RECC_ALNUM, RECC_ALPHA,610,22984
+              RECC_ALNUM, RECC_ALPHA, RECC_WORD,610,22984
+              RECC_GRAPH,611,23027
+              RECC_GRAPH, RECC_PRINT,611,23027
+              RECC_LOWER,612,23059
+              RECC_LOWER, RECC_UPPER,612,23059
+              RECC_PUNCT,613,23091
+              RECC_PUNCT, RECC_CNTRL,613,23091
+              RECC_DIGIT,614,23123
+              RECC_DIGIT, RECC_XDIGIT,614,23123
+              RECC_BLANK,615,23156
+              RECC_BLANK, RECC_SPACE,615,23156
+              RECC_MULTIBYTE,616,23188
+              RECC_MULTIBYTE, RECC_NONASCII,616,23188
+              RECC_ASCII,617,23227
+              RECC_ASCII, RECC_UNIBYTE617,23227
+} re_wctype_t;618,23260
+typedef int re_wchar_t;623,23387
+
+c-src/emacs/src/keyboard.c,13565
+volatile int interrupt_input_blocked;76,1808
+volatile bool pending_signals;80,1944
+#define KBD_BUFFER_SIZE 82,1976
+KBOARD *initial_kboard;initial_kboard84,2006
+KBOARD *current_kboard;current_kboard85,2030
+static KBOARD *all_kboards;all_kboards86,2054
+static bool single_kboard;89,2154
+#define NUM_RECENT_KEYS 91,2182
+static int recent_keys_index;94,2269
+static int total_keys;97,2357
+static Lisp_Object recent_keys;100,2443
+Lisp_Object this_command_keys;107,2777
+ptrdiff_t this_command_key_count;108,2808
+static bool this_command_key_count_reset;112,2922
+static Lisp_Object raw_keybuf;116,3074
+static int raw_keybuf_count;117,3105
+#define GROW_RAW_KEYBUF        119,3135
+static ptrdiff_t this_single_command_key_start;125,3350
+static ptrdiff_t before_command_key_count;129,3498
+static ptrdiff_t before_command_echo_length;130,3541
+sigjmp_buf return_to_command_loop;135,3677
+static Lisp_Object recover_top_level_message;138,3791
+static Lisp_Object regular_top_level_message;143,3930
+static sys_jmp_buf getcjmp;147,4031
+bool waiting_for_input;150,4095
+static bool echoing;154,4186
+static struct kboard 
*ok_to_echo_at_next_pause;ok_to_echo_at_next_pause159,4328
+struct kboard *echo_kboard;echo_kboard166,4632
+Lisp_Object echo_message_buffer;171,4744
+bool immediate_quit;174,4837
+int quit_char;192,5623
+EMACS_INT command_loop_level;195,5680
+Lisp_Object unread_switch_frame;204,6108
+static ptrdiff_t last_non_minibuf_size;207,6216
+uintmax_t num_input_events;210,6334
+static EMACS_INT last_auto_save;214,6428
+static ptrdiff_t last_point_position;217,6523
+Lisp_Object internal_last_event_frame;228,7028
+static Lisp_Object read_key_sequence_cmd;232,7168
+static Lisp_Object read_key_sequence_remapped;233,7210
+static FILE *dribble;dribble236,7310
+bool input_pending;239,7368
+static bool input_was_pending;287,10022
+static struct input_event kbd_buffer[kbd_buffer291,10107
+static struct input_event *kbd_fetch_ptr;kbd_fetch_ptr297,10386
+static struct input_event * volatile kbd_store_ptr;302,10601
+unsigned timers_run;320,11296
+struct timespec 
*input_available_clear_time;input_available_clear_time324,11408
+bool interrupt_input;328,11573
+bool interrupts_deferred;331,11671
+static struct timespec timer_idleness_start_time;335,11746
+static struct timespec timer_last_idleness_start_time;340,11916
+#define READABLE_EVENTS_DO_TIMERS_NOW  346,12046
+#define READABLE_EVENTS_FILTER_EVENTS  347,12094
+#define READABLE_EVENTS_IGNORE_SQUEEZABLES     348,12142
+kset_echo_string 392,14088
+kset_kbd_queue 397,14184
+kset_keyboard_translate_table 402,14276
+kset_last_prefix_arg 407,14399
+kset_last_repeatable_command 412,14504
+kset_local_function_key_map 417,14625
+kset_overriding_terminal_local_map 422,14744
+kset_real_last_command 427,14877
+kset_system_key_syms 432,14986
+echo_add_key 443,15249
+echo_char 527,17527
+echo_dash 541,17813
+echo_now 586,19140
+cancel_echoing 635,20614
+echo_length 648,20922
+echo_truncate 660,21253
+add_command_key 672,21582
+recursive_edit_1 697,22406
+record_auto_save 742,23848
+force_auto_save_soon 751,24016
+DEFUN ("recursive-edit", Frecursive_edit,recursive-edit759,24137
+recursive_edit_unwind 804,25747
+any_kboard_state 817,26013
+single_kboard_state 838,26665
+not_single_kboard_state 848,26803
+struct kboard_stack858,27065
+static struct kboard_stack *kboard_stack;kboard_stack864,27138
+push_kboard 867,27186
+pop_kboard 879,27375
+temporarily_switch_to_single_kboard 914,28263
+record_single_kboard_state 943,29437
+restore_kboard_configuration 952,29621
+cmd_error 970,30077
+cmd_error_internal 1024,31510
+DEFUN ("command-error-default-function", 
Fcommand_error_default_function,command-error-default-function1043,32030
+command_loop 1094,33916
+command_loop_2 1134,35135
+top_level_2 1146,35339
+top_level_1 1152,35417
+DEFUN ("top-level", Ftop_level,top-level1164,35787
+user_error 1183,36288
+DEFUN ("exit-recursive-edit", 
Fexit_recursive_edit,exit-recursive-edit1189,36429
+DEFUN ("abort-recursive-edit", 
Fabort_recursive_edit,abort-recursive-edit1201,36819
+tracking_off 1216,37281
+DEFUN ("internal--track-mouse", Ftrack_mouse,track-mouse1234,37816
+bool ignore_mouse_drag_p;1256,38392
+some_mouse_moved 1259,38441
+Lisp_Object last_undo_boundary;1287,39032
+command_loop_1 1294,39273
+read_menu_command 1649,50889
+adjust_point_for_property 1678,51617
+safe_run_hooks_1 1831,57339
+safe_run_hooks_error 1841,57569
+safe_run_hook_funcall 1878,58576
+safe_run_hooks 1893,59058
+int poll_suppress_count;1908,59397
+static struct atimer *poll_timer;poll_timer1915,59487
+poll_for_input_1 1919,59589
+poll_for_input 1930,59789
+start_polling 1942,60053
+input_polling_used 1979,61091
+stop_polling 1994,61390
+set_poll_suppress_count 2009,61759
+bind_polling_period 2029,62141
+make_ctrl_char 2048,62492
+show_help_echo 2113,64455
+static Lisp_Object help_form_saved_window_configs;2156,65638
+read_char_help_form_unwind 2158,65701
+#define STOP_POLLING   2166,65959
+#define RESUME_POLLING 2170,66084
+read_event_from_main_queue 2175,66229
+read_decoded_event_from_main_queue 2249,68417
+#define MAX_ENCODED_BYTES 2254,68664
+echo_keystrokes_p 2342,71556
+read_char 2376,72848
+record_menu_key 3225,98949
+help_char_p 3258,99674
+record_char 3273,99953
+save_getcjmp 3412,104235
+restore_getcjmp 3418,104326
+readable_events 3430,104697
+int stop_character EXTERNALLY_VISIBLE;3497,106437
+event_to_kboard 3500,106493
+kbd_buffer_nr_stored 3522,107142
+kbd_buffer_store_event 3534,107483
+kbd_buffer_store_event_hold 3550,108025
+kbd_buffer_unget_event 3684,111617
+#define INPUT_EVENT_POS_MAX 3698,112018
+#define INPUT_EVENT_POS_MIN 3701,112147
+position_to_Time 3706,112287
+Time_to_position 3716,112514
+gen_help_event 3738,113171
+kbd_buffer_store_help_event 3756,113611
+discard_mouse_events 3773,113976
+kbd_buffer_events_waiting 3803,114711
+clear_event 3823,115068
+kbd_buffer_get_event 3836,115408
+process_special_events 4258,127881
+swallow_events 4322,129705
+timer_start_idle 4339,130098
+timer_stop_idle 4355,130576
+timer_resume_idle 4363,130720
+struct input_event last_timer_event EXTERNALLY_VISIBLE;4372,130912
+Lisp_Object pending_funcalls;4377,131172
+decode_timer 4381,131293
+timer_check_2 4414,132246
+timer_check 4572,136817
+DEFUN ("current-idle-time", Fcurrent_idle_time,current-idle-time4607,137662
+static Lisp_Object accent_key_syms;4625,138239
+static Lisp_Object func_key_syms;4626,138275
+static Lisp_Object mouse_syms;4627,138309
+static Lisp_Object wheel_syms;4628,138340
+static Lisp_Object drag_n_drop_syms;4629,138371
+static const int lispy_accent_codes[lispy_accent_codes4634,138516
+static const char *const lispy_accent_keys[lispy_accent_keys4741,139878
+#define FUNCTION_KEY_OFFSET 4766,140314
+const char *const lispy_function_keys[lispy_function_keys4768,140347
+static const char *const 
lispy_multimedia_keys[lispy_multimedia_keys4962,148901
+static const char *const lispy_kana_keys[lispy_kana_keys5026,150135
+#define FUNCTION_KEY_OFFSET 5061,151751
+static const char *const lispy_function_keys[lispy_function_keys5065,151894
+#define ISO_FUNCTION_KEY_OFFSET 5149,154429
+static const char *const 
iso_lispy_function_keys[iso_lispy_function_keys5151,154469
+static Lisp_Object Vlispy_mouse_stem;5172,155328
+static const char *const lispy_wheel_names[lispy_wheel_names5174,155367
+static const char *const 
lispy_drag_n_drop_names[lispy_drag_n_drop_names5181,155619
+static short const scroll_bar_parts[scroll_bar_parts5189,155885
+static Lisp_Object button_down_location;5210,156910
+static int last_mouse_button;5215,157065
+static int last_mouse_x;5216,157095
+static int last_mouse_y;5217,157120
+static Time button_down_time;5218,157145
+static int double_click_count;5222,157229
+make_lispy_position 5228,157390
+toolkit_menubar_in_use 5456,163953
+make_scroll_bar_position 5469,164321
+make_lispy_event 5485,164967
+make_lispy_movement 6104,183531
+make_lispy_switch_frame 6131,184262
+make_lispy_focus_in 6137,184369
+make_lispy_focus_out 6145,184495
+parse_modifiers_uncached 6163,184945
+#define SINGLE_LETTER_MOD(6185,185465
+#undef SINGLE_LETTER_MOD6212,185906
+#define MULTI_LETTER_MOD(6214,185932
+#undef MULTI_LETTER_MOD6231,186400
+apply_modifiers_uncached 6273,187574
+static const char *const modifier_names[modifier_names6319,189193
+#define NUM_MOD_NAMES 6325,189399
+static Lisp_Object modifier_symbols;6327,189449
+lispy_modifier_list 6331,189586
+#define KEY_TO_CHAR(6353,190252
+parse_modifiers 6356,190328
+DEFUN ("internal-event-symbol-parse-modifiers", 
Fevent_symbol_parse_modifiers,event-symbol-parse-modifiers6399,191517
+apply_modifiers 6422,192391
+reorder_modifiers 6491,194720
+modify_event_symbol 6536,196528
+DEFUN ("event-convert-list", 
Fevent_convert_list,event-convert-list6628,199244
+parse_solitary_modifier 6695,201135
+#define SINGLE_LETTER_MOD(6701,201258
+#define MULTI_LETTER_MOD(6705,201343
+#undef SINGLE_LETTER_MOD6763,202641
+#undef MULTI_LETTER_MOD6764,202666
+lucid_event_type_list_p 6775,202889
+get_input_pending 6814,203960
+record_asynch_buffer_change 6834,204579
+gobble_input 6872,205702
+tty_read_avail_input 6967,208310
+handle_async_input 7149,214039
+process_pending_signals 7165,214359
+unblock_input_to 7177,214645
+unblock_input 7200,215277
+totally_unblock_input 7209,215445
+handle_input_available_signal 7217,215529
+deliver_input_available_signal 7226,215700
+struct user_signal_info7235,215865
+static struct user_signal_info *user_signals user_signals7250,216090
+add_user_signal 7253,216149
+handle_user_signal 7275,216598
+deliver_user_signal 7316,217558
+find_user_signal_name 7322,217659
+store_user_signal_events 7334,217841
+static Lisp_Object menu_bar_one_keymap_changed_items;7363,218416
+static Lisp_Object menu_bar_items_vector;7368,218630
+static int menu_bar_items_index;7369,218672
+static const char *separator_names[separator_names7372,218707
+menu_separator_name_p 7393,219148
+menu_bar_items 7426,219852
+Lisp_Object item_properties;7568,224603
+menu_bar_item 7571,224645
+menu_item_eval_property_1 7647,227175
+eval_dyn 7658,227465
+menu_item_eval_property 7666,227675
+parse_menu_item 7686,228341
+static Lisp_Object tool_bar_items_vector;7965,236336
+static Lisp_Object tool_bar_item_properties;7970,236510
+static int ntool_bar_items;7974,236606
+tool_bar_items 7990,237083
+process_tool_bar_item 8075,239892
+#define PROP(8112,240969
+set_prop 8114,241038
+parse_tool_bar_item 8167,242453
+#undef PROP8379,248844
+init_tool_bar_items 8387,248969
+append_tool_bar_item 8401,249261
+read_char_x_menu_prompt 8443,250771
+read_char_minibuf_menu_prompt 8503,252445
+#define PUSH_C_STR(8527,253014
+follow_key 8726,258553
+active_maps 8733,258695
+typedef struct keyremap8742,259021
+} keyremap;8754,259464
+access_keymap_keyremap 8764,259808
+keyremap_step 8811,261450
+test_undefined 8867,262934
+read_key_sequence 8916,264861
+read_key_sequence_vs 9826,295821
+DEFUN ("read-key-sequence", Fread_key_sequence,read-key-sequence9885,297294
+DEFUN ("read-key-sequence-vector", 
Fread_key_sequence_vector,read-key-sequence-vector9938,299982
+detect_input_pending 9950,300488
+detect_input_pending_ignore_squeezables 9959,300654
+detect_input_pending_run_timers 9967,300870
+clear_input_pending 9985,301362
+requeued_events_pending_p 9997,301732
+DEFUN ("input-pending-p", Finput_pending_p,input-pending-p10002,301813
+DEFUN ("recent-keys", Frecent_keys,recent-keys10024,302596
+DEFUN ("this-command-keys", Fthis_command_keys,this-command-keys10055,303517
+DEFUN ("this-command-keys-vector", 
Fthis_command_keys_vector,this-command-keys-vector10068,303958
+DEFUN ("this-single-command-keys", 
Fthis_single_command_keys,this-single-command-keys10080,304380
+DEFUN ("this-single-command-raw-keys", 
Fthis_single_command_raw_keys,this-single-command-raw-keys10096,304955
+DEFUN ("reset-this-command-lengths", 
Freset_this_command_lengths,reset-this-command-lengths10109,305495
+DEFUN ("clear-this-command-keys", 
Fclear_this_command_keys,clear-this-command-keys10136,306510
+DEFUN ("recursion-depth", Frecursion_depth,recursion-depth10158,307069
+DEFUN ("open-dribble-file", Fopen_dribble_file,open-dribble-file10169,307406
+DEFUN ("discard-input", Fdiscard_input,discard-input10203,308447
+DEFUN ("suspend-emacs", Fsuspend_emacs,suspend-emacs10225,308949
+stuff_buffered_input 10285,311045
+set_waiting_for_input 10323,312016
+clear_waiting_for_input 10337,312390
+handle_interrupt_signal 10351,312754
+deliver_interrupt_signal 10378,313642
+static int volatile force_quit_count;10387,313932
+handle_interrupt 10401,314414
+quit_throw_to_read_char 10541,318711
+DEFUN ("set-input-interrupt-mode", 
Fset_input_interrupt_mode,set-input-interrupt-mode10562,319288
+DEFUN ("set-output-flow-control", 
Fset_output_flow_control,set-output-flow-control10609,320516
+DEFUN ("set-input-meta-mode", 
Fset_input_meta_mode,set-input-meta-mode10643,321432
+DEFUN ("set-quit-char", Fset_quit_char,set-quit-char10694,322706
+DEFUN ("set-input-mode", Fset_input_mode,set-input-mode10729,323570
+DEFUN ("current-input-mode", 
Fcurrent_input_mode,current-input-mode10750,324459
+DEFUN ("posn-at-x-y", Fposn_at_x_y,posn-at-x-y10787,325837
+DEFUN ("posn-at-point", Fposn_at_point,posn-at-point10824,327060
+init_kboard 10861,328214
+allocate_kboard 10893,329284
+wipe_kboard 10909,329637
+delete_kboard 10917,329751
+init_keyboard 10942,330281
+struct event_head11021,332696
+static const struct event_head head_table[head_table11027,332747
+syms_of_keyboard 11045,333577
+keys_of_keyboard 11841,367115
+mark_kboards 11916,370434
+
+c-src/emacs/src/lisp.h,20567
+#define EMACS_LISP_H22,800
+#define DECLARE_GDB_SYM(47,1421
+# define DEFINE_GDB_SYMBOL_BEGIN(49,1508
+# define DEFINE_GDB_SYMBOL_END(50,1578
+# define DEFINE_GDB_SYMBOL_BEGIN(52,1625
+# define DEFINE_GDB_SYMBOL_END(53,1702
+#undef min57,1790
+#undef max58,1801
+#define max(59,1812
+#define min(60,1854
+#define ARRAYELTS(63,1936
+#define GCTYPEBITS 67,2079
+DEFINE_GDB_SYMBOL_BEGIN GCTYPEBITS66,2037
+# define NONPOINTER_BITS 78,2567
+# define NONPOINTER_BITS 80,2600
+typedef int EMACS_INT;91,3023
+typedef unsigned int EMACS_UINT;92,3046
+#  define EMACS_INT_MAX 93,3079
+#  define pI 94,3111
+typedef long int EMACS_INT;96,3203
+typedef unsigned long EMACS_UINT;97,3231
+#  define EMACS_INT_MAX 98,3265
+#  define pI 99,3298
+typedef long long int EMACS_INT;103,3477
+typedef unsigned long long int EMACS_UINT;104,3510
+#  define EMACS_INT_MAX 105,3553
+#  define pI 106,3587
+enum {  BOOL_VECTOR_BITS_PER_CHAR 114,3804
+#define BOOL_VECTOR_BITS_PER_CHAR 115,3840
+typedef size_t bits_word;123,4165
+# define BITS_WORD_MAX 124,4191
+enum { BITS_PER_BITS_WORD 125,4223
+typedef unsigned char bits_word;127,4290
+# define BITS_WORD_MAX 128,4323
+enum { BITS_PER_BITS_WORD 129,4386
+    BITS_PER_CHAR 136,4570
+    BITS_PER_SHORT 137,4605
+    BITS_PER_LONG 138,4657
+    BITS_PER_EMACS_INT 139,4712
+typedef intmax_t printmax_t;148,5089
+typedef uintmax_t uprintmax_t;149,5118
+# define pMd 150,5149
+# define pMu 151,5170
+typedef EMACS_INT printmax_t;153,5197
+typedef EMACS_UINT uprintmax_t;154,5227
+# define pMd 155,5259
+# define pMu 156,5278
+# define pD 165,5664
+# define pD 167,5709
+# define pD 169,5756
+# define pD 171,5779
+# define eassert(200,7062
+# define eassume(201,7140
+# define eassert(208,7319
+# define eassume(212,7450
+enum Lisp_Bits239,8519
+#define GCALIGNMENT 243,8647
+    VALBITS 246,8742
+    INTTYPEBITS 249,8838
+    FIXNUM_BITS 252,8945
+#define VAL_MAX 263,9327
+#define USE_LSB_TAG 271,9777
+DEFINE_GDB_SYMBOL_BEGIN USE_LSB_TAG270,9733
+# define alignas(281,10077
+# define GCALIGNED 288,10227
+# define GCALIGNED 290,10292
+# define lisp_h_XLI(327,11642
+# define lisp_h_XIL(328,11673
+# define lisp_h_XLI(330,11724
+# define lisp_h_XIL(331,11751
+#define lisp_h_CHECK_LIST_CONS(333,11785
+#define lisp_h_CHECK_NUMBER(334,11856
+#define lisp_h_CHECK_SYMBOL(335,11927
+#define lisp_h_CHECK_TYPE(336,11996
+#define lisp_h_CONSP(338,12107
+#define lisp_h_EQ(339,12156
+#define lisp_h_FLOATP(340,12201
+#define lisp_h_INTEGERP(341,12252
+#define lisp_h_MARKERP(342,12333
+#define lisp_h_MISCP(343,12408
+#define lisp_h_NILP(344,12457
+#define lisp_h_SET_SYMBOL_VAL(345,12493
+#define lisp_h_SYMBOL_CONSTANT_P(347,12607
+#define lisp_h_SYMBOL_VAL(348,12671
+#define lisp_h_SYMBOLP(350,12772
+#define lisp_h_VECTORLIKEP(351,12825
+#define lisp_h_XCAR(352,12886
+#define lisp_h_XCDR(353,12924
+#define lisp_h_XCONS(354,12964
+#define lisp_h_XHASH(356,13059
+#define lisp_h_XPNTR(357,13093
+# define lisp_h_check_cons_list(360,13221
+# define lisp_h_make_number(363,13289
+# define lisp_h_XFASTINT(365,13392
+# define lisp_h_XINT(366,13429
+# define lisp_h_XSYMBOL(367,13478
+# define lisp_h_XTYPE(371,13631
+# define lisp_h_XUNTAG(372,13696
+# define XLI(381,14086
+# define XIL(382,14117
+# define CHECK_LIST_CONS(383,14148
+# define CHECK_NUMBER(384,14209
+# define CHECK_SYMBOL(385,14258
+# define CHECK_TYPE(386,14307
+# define CONSP(387,14382
+# define EQ(388,14417
+# define FLOATP(389,14452
+# define INTEGERP(390,14489
+# define MARKERP(391,14530
+# define MISCP(392,14569
+# define NILP(393,14604
+# define SET_SYMBOL_VAL(394,14637
+# define SYMBOL_CONSTANT_P(395,14700
+# define SYMBOL_VAL(396,14763
+# define SYMBOLP(397,14812
+# define VECTORLIKEP(398,14851
+# define XCAR(399,14898
+# define XCDR(400,14931
+# define XCONS(401,14964
+# define XHASH(402,14999
+# define XPNTR(403,15034
+#  define check_cons_list(405,15097
+#  define make_number(408,15176
+#  define XFASTINT(409,15224
+#  define XINT(410,15266
+#  define XSYMBOL(411,15300
+#  define XTYPE(412,15340
+#  define XUNTAG(413,15376
+#define LISP_MACRO_DEFUN(421,15672
+#define LISP_MACRO_DEFUN_VOID(425,15845
+#define INTMASK 437,16289
+#define case_Lisp_Int 438,16342
+#define ENUM_BF(445,16681
+#define ENUM_BF(447,16722
+enum Lisp_Type451,16763
+    Lisp_Symbol 454,16851
+    Lisp_Misc 458,16993
+    Lisp_Int0 461,17067
+    Lisp_Int1 462,17086
+    Lisp_String 466,17264
+    Lisp_Vectorlike 472,17543
+    Lisp_Cons 475,17632
+    Lisp_Float 477,17670
+enum Lisp_Misc_Type485,18016
+    Lisp_Misc_Free 487,18040
+    Lisp_Misc_Marker,488,18069
+    Lisp_Misc_Overlay,489,18091
+    Lisp_Misc_Save_Value,490,18114
+    Lisp_Misc_Finalizer,491,18140
+    Lisp_Misc_Float,494,18275
+    Lisp_Misc_Limit496,18359
+enum Lisp_Fwd_Type502,18543
+    Lisp_Fwd_Int,504,18566
+    Lisp_Fwd_Bool,505,18619
+    Lisp_Fwd_Obj,506,18670
+    Lisp_Fwd_Buffer_Obj,507,18729
+    Lisp_Fwd_Kboard_Obj        508,18800
+typedef struct { EMACS_INT i; } Lisp_Object;567,21781
+#define LISP_INITIALLY(569,21827
+#undef CHECK_LISP_OBJECT_TYPE571,21858
+enum CHECK_LISP_OBJECT_TYPE 572,21888
+enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE 572,21888
+typedef EMACS_INT Lisp_Object;577,22064
+#define LISP_INITIALLY(578,22095
+enum CHECK_LISP_OBJECT_TYPE 579,22125
+enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE 579,22125
+#define LISP_INITIALLY_ZERO 582,22226
+enum symbol_interned639,24199
+  SYMBOL_UNINTERNED 641,24222
+  SYMBOL_INTERNED 642,24247
+  SYMBOL_INTERNED_IN_INITIAL_OBARRAY 643,24270
+enum symbol_redirect646,24315
+  SYMBOL_PLAINVAL 648,24338
+  SYMBOL_VARALIAS 649,24362
+  SYMBOL_LOCALIZED 650,24386
+  SYMBOL_FORWARDED 651,24410
+struct Lisp_Symbol654,24437
+  ENUM_BF 663,24793
+#define EXFUN(707,26252
+#define DEFUN_ARGS_MANY        712,26446
+#define DEFUN_ARGS_UNEVALLED   713,26498
+#define DEFUN_ARGS_0   714,26541
+#define DEFUN_ARGS_1   715,26569
+#define DEFUN_ARGS_2   716,26604
+#define DEFUN_ARGS_3   717,26652
+#define DEFUN_ARGS_4   718,26713
+#define DEFUN_ARGS_5   719,26787
+#define DEFUN_ARGS_6   721,26880
+#define DEFUN_ARGS_7   723,26986
+#define DEFUN_ARGS_8   725,27105
+#define TAG_PTR(729,27296
+#define TAG_SYMOFFSET(734,27543
+#define XLI_BUILTIN_LISPSYM(741,27842
+#define DEFINE_LISP_SYMBOL(746,28101
+# define DEFINE_NON_NIL_Q_SYMBOL_MACROS 755,28572
+LISP_MACRO_DEFUN 762,28777
+# define ARRAY_MARK_FLAG 768,29024
+# define PSEUDOVECTOR_FLAG 774,29267
+enum pvec_type780,29568
+  PVEC_NORMAL_VECTOR,782,29585
+  PVEC_FREE,783,29607
+  PVEC_PROCESS,784,29620
+  PVEC_FRAME,785,29636
+  PVEC_WINDOW,786,29650
+  PVEC_BOOL_VECTOR,787,29665
+  PVEC_BUFFER,788,29685
+  PVEC_HASH_TABLE,789,29700
+  PVEC_TERMINAL,790,29719
+  PVEC_WINDOW_CONFIGURATION,791,29736
+  PVEC_SUBR,792,29765
+  PVEC_OTHER,793,29778
+  PVEC_COMPILED,795,29856
+  PVEC_CHAR_TABLE,796,29873
+  PVEC_SUB_CHAR_TABLE,797,29892
+  PVEC_FONT 798,29915
+enum More_Lisp_Bits801,29991
+    PSEUDOVECTOR_SIZE_BITS 808,30382
+    PSEUDOVECTOR_SIZE_MASK 809,30415
+    PSEUDOVECTOR_REST_BITS 813,30625
+    PSEUDOVECTOR_REST_MASK 814,30658
+    PSEUDOVECTOR_AREA_BITS 818,30823
+    PVEC_TYPE_MASK 819,30901
+# define VALMASK 829,31302
+DEFINE_GDB_SYMBOL_BEGIN VALMASK828,31257
+#define MOST_POSITIVE_FIXNUM 834,31532
+#define MOST_NEGATIVE_FIXNUM 835,31592
+XINT 874,32684
+XFASTINT 889,33035
+XSYMBOL 899,33263
+XTYPE 910,33481
+XUNTAG 918,33661
+LISP_MACRO_DEFUN 927,33857
+LISP_MACRO_DEFUN 940,34242
+#define FIXNUM_OVERFLOW_P(958,34855
+LISP_MACRO_DEFUN FIXNUM_OVERFLOW_P952,34632
+LISP_MACRO_DEFUN 970,35171
+XSTRING 980,35391
+#define SYMBOL_INDEX(988,35575
+XFLOAT 991,35636
+XPROCESS 1000,35778
+XWINDOW 1007,35895
+XTERMINAL 1014,36012
+XSUBR 1021,36134
+XBUFFER 1028,36245
+XCHAR_TABLE 1035,36369
+XSUB_CHAR_TABLE 1042,36506
+XBOOL_VECTOR 1049,36648
+make_lisp_ptr 1058,36827
+make_lisp_symbol 1066,37013
+builtin_lisp_symbol 1074,37197
+#define XSETINT(1079,37279
+#define XSETFASTINT(1080,37325
+#define XSETCONS(1081,37375
+#define XSETVECTOR(1082,37435
+#define XSETSTRING(1083,37503
+#define XSETSYMBOL(1084,37567
+#define XSETFLOAT(1085,37621
+#define XSETMISC(1086,37683
+#define XSETPVECTYPE(1090,37772
+#define XSETPVECTYPESIZE(1092,37888
+#define XSETPSEUDOVECTOR(1099,38185
+#define XSETTYPED_PSEUDOVECTOR(1105,38369
+#define XSETWINDOW_CONFIGURATION(1110,38579
+#define XSETPROCESS(1112,38675
+#define XSETWINDOW(1113,38741
+#define XSETTERMINAL(1114,38805
+#define XSETSUBR(1115,38873
+#define XSETCOMPILED(1116,38933
+#define XSETBUFFER(1117,39001
+#define XSETCHAR_TABLE(1118,39065
+#define XSETBOOL_VECTOR(1119,39137
+#define XSETSUB_CHAR_TABLE(1120,39211
+XINTPTR 1128,39581
+make_pointer_integer 1134,39661
+LISP_MACRO_DEFUN_VOID 1143,39826
+typedef struct interval *INTERVAL;INTERVAL1149,39987
+xcar_addr 1174,40760
+xcdr_addr 1179,40837
+LISP_MACRO_DEFUN 1185,40931
+XSETCDR 1198,41307
+CAR 1205,41457
+CDR 1212,41591
+CAR_SAFE 1221,41791
+CDR_SAFE 1226,41877
+STRING_MULTIBYTE 1243,42250
+#define STRING_BYTES_BOUND 1261,43057
+#define STRING_SET_UNIBYTE(1265,43201
+#define STRING_SET_MULTIBYTE(1275,43516
+SDATA 1286,43830
+SSDATA 1291,43908
+SREF 1297,44037
+SSET 1302,44128
+SCHARS 1307,44242
+STRING_BYTES 1316,44415
+SBYTES 1326,44595
+STRING_SET_CHARS 1331,44681
+struct vectorlike_header1343,45232
+struct Lisp_Vector1369,46482
+    ALIGNOF_STRUCT_LISP_VECTOR1378,46681
+struct Lisp_Bool_Vector1384,46864
+bool_vector_size 1399,47385
+bool_vector_data 1407,47523
+bool_vector_uchar_data 1413,47617
+bool_vector_words 1421,47803
+bool_vector_bytes 1428,47998
+bool_vector_bitref 1437,48238
+bool_vector_ref 1445,48478
+bool_vector_set 1453,48618
+    header_size 1471,49047
+    bool_header_size 1472,49106
+    word_size 1473,49171
+AREF 1479,49284
+aref_addr 1485,49391
+ASIZE 1491,49501
+ASET 1497,49583
+gc_aset 1504,49742
+enum { NIL_IS_ZERO 1515,50269
+memclear 1520,50464
+#define VECSIZE(1531,50762
+#define PSEUDOVECSIZE(1538,51047
+#define UNSIGNED_CMP(1546,51480
+#define ASCII_CHAR_P(1552,51734
+enum CHARTAB_SIZE_BITS1565,52489
+    CHARTAB_SIZE_BITS_0 1567,52516
+    CHARTAB_SIZE_BITS_1 1568,52545
+    CHARTAB_SIZE_BITS_2 1569,52574
+    CHARTAB_SIZE_BITS_3 1570,52603
+struct Lisp_Char_Table1575,52672
+struct Lisp_Sub_Char_Table1606,53752
+CHAR_TABLE_REF_ASCII 1628,54566
+CHAR_TABLE_REF 1648,55113
+CHAR_TABLE_SET 1658,55402
+struct Lisp_Subr1670,55786
+enum char_table_specials1692,56798
+    CHAR_TABLE_STANDARD_SLOTS 1697,56993
+    SUB_CHAR_TABLE_OFFSET 1701,57214
+CHAR_TABLE_EXTRA_SLOTS 1707,57377
+LISP_MACRO_DEFUN 1723,57921
+SYMBOL_BLV 1732,58181
+SYMBOL_FWD 1738,58316
+LISP_MACRO_DEFUN_VOID 1744,58428
+SET_SYMBOL_BLV 1754,58691
+SET_SYMBOL_FWD 1760,58850
+SYMBOL_NAME 1767,59001
+SYMBOL_INTERNED_P 1775,59130
+SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P 1783,59299
+#define DEFSYM(1796,59809
+LISP_MACRO_DEFUN DEFSYM1792,59630
+struct hash_table_test1805,60062
+struct Lisp_Hash_Table1823,60555
+XHASH_TABLE 1880,62531
+#define XSET_HASH_TABLE(1885,62602
+HASH_TABLE_P 1889,62703
+HASH_KEY 1896,62860
+HASH_VALUE 1903,63040
+HASH_NEXT 1911,63254
+HASH_HASH 1918,63431
+HASH_INDEX 1926,63677
+HASH_TABLE_SIZE 1933,63826
+enum DEFAULT_HASH_SIZE 1940,63956
+enum DEFAULT_HASH_SIZE { DEFAULT_HASH_SIZE 1940,63956
+static double const DEFAULT_REHASH_THRESHOLD 1946,64176
+static double const DEFAULT_REHASH_SIZE 1950,64299
+sxhash_combine 1956,64465
+SXHASH_REDUCE 1964,64648
+struct Lisp_Misc_Any   1971,64806
+  ENUM_BF 1973,64866
+struct Lisp_Marker1978,64980
+  ENUM_BF 1980,65001
+struct Lisp_Overlay2021,66838
+    ENUM_BF 2034,67346
+    SAVE_UNUSED,2047,67641
+    SAVE_INTEGER,2048,67658
+    SAVE_FUNCPOINTER,2049,67676
+    SAVE_POINTER,2050,67698
+    SAVE_OBJECT2051,67716
+enum { SAVE_SLOT_BITS 2055,67801
+enum { SAVE_VALUE_SLOTS 2058,67898
+enum { SAVE_TYPE_BITS 2062,68006
+enum Lisp_Save_Type2064,68072
+    SAVE_TYPE_INT_INT 2066,68096
+    SAVE_TYPE_INT_INT_INT2067,68169
+    SAVE_TYPE_OBJ_OBJ 2069,68259
+    SAVE_TYPE_OBJ_OBJ_OBJ 2070,68330
+    SAVE_TYPE_OBJ_OBJ_OBJ_OBJ2071,68411
+    SAVE_TYPE_PTR_INT 2073,68506
+    SAVE_TYPE_PTR_OBJ 2074,68579
+    SAVE_TYPE_PTR_PTR 2075,68651
+    SAVE_TYPE_FUNCPTR_PTR_OBJ2076,68724
+    SAVE_TYPE_MEMORY 2080,68882
+typedef void (*voidfuncptr)voidfuncptr2108,69836
+struct Lisp_Save_Value2110,69873
+    ENUM_BF 2112,69900
+save_type 2134,70752
+XSAVE_POINTER 2143,70982
+set_save_pointer 2149,71144
+XSAVE_FUNCPOINTER 2155,71326
+XSAVE_INTEGER 2164,71546
+set_save_integer 2170,71708
+XSAVE_OBJECT 2179,71929
+struct Lisp_Finalizer2186,72106
+struct Lisp_Free2201,72581
+    ENUM_BF 2203,72602
+union Lisp_Misc2212,72882
+XMISC 2223,73181
+XMISCANY 2229,73270
+XMISCTYPE 2236,73379
+XMARKER 2242,73467
+XOVERLAY 2249,73582
+XSAVE_VALUE 2256,73703
+XFINALIZER 2263,73832
+struct Lisp_Intfwd2274,74117
+struct Lisp_Boolfwd2284,74411
+struct Lisp_Objfwd2294,74702
+struct Lisp_Buffer_Objfwd2302,74934
+struct Lisp_Buffer_Local_Value2334,76470
+struct Lisp_Kboard_Objfwd2362,77729
+union Lisp_Fwd2368,77838
+XFWDTYPE 2378,78084
+XBUFFER_OBJFWD 2384,78180
+struct Lisp_Float2391,78316
+XFLOAT_DATA 2401,78434
+    IEEE_FLOATING_POINT2415,78943
+#define _UCHAR_T2423,79266
+typedef unsigned char UCHAR;2424,79283
+enum Lisp_Compiled2429,79366
+    COMPILED_ARGLIST 2431,79389
+    COMPILED_BYTECODE 2432,79415
+    COMPILED_CONSTANTS 2433,79442
+    COMPILED_STACK_DEPTH 2434,79470
+    COMPILED_DOC_STRING 2435,79500
+    COMPILED_INTERACTIVE 2436,79529
+enum char_bits2443,79831
+    CHAR_ALT 2445,79850
+    CHAR_SUPER 2446,79876
+    CHAR_HYPER 2447,79904
+    CHAR_SHIFT 2448,79932
+    CHAR_CTL 2449,79960
+    CHAR_META 2450,79986
+    CHAR_MODIFIER_MASK 2452,80014
+    CHARACTERBITS 2457,80209
+LISP_MACRO_DEFUN 2462,80267
+NATNUMP 2470,80409
+RANGED_INTEGERP 2476,80490
+#define TYPE_RANGED_INTEGERP(2481,80612
+LISP_MACRO_DEFUN 2486,80797
+VECTORP 2500,81270
+OVERLAYP 2505,81373
+SAVE_VALUEP 2510,81472
+FINALIZERP 2516,81578
+AUTOLOADP 2522,81682
+BUFFER_OBJFWDP 2528,81773
+PSEUDOVECTOR_TYPEP 2534,81871
+PSEUDOVECTORP 2542,82124
+WINDOW_CONFIGURATIONP 2558,82476
+PROCESSP 2564,82586
+WINDOWP 2570,82670
+TERMINALP 2576,82752
+SUBRP 2582,82838
+COMPILEDP 2588,82916
+BUFFERP 2594,83002
+CHAR_TABLE_P 2600,83084
+SUB_CHAR_TABLE_P 2606,83175
+BOOL_VECTOR_P 2612,83274
+FRAMEP 2618,83367
+IMAGEP 2625,83484
+ARRAYP 2632,83589
+CHECK_LIST 2638,83708
+LISP_MACRO_DEFUN_VOID 2643,83789
+CHECK_STRING_CAR 2653,84086
+CHECK_CONS 2658,84190
+CHECK_VECTOR 2663,84270
+CHECK_BOOL_VECTOR 2668,84356
+CHECK_VECTOR_OR_STRING 2674,84533
+CHECK_ARRAY 2683,84707
+CHECK_BUFFER 2688,84815
+CHECK_WINDOW 2693,84901
+CHECK_PROCESS 2699,85007
+CHECK_NATNUM 2705,85103
+#define CHECK_RANGED_INTEGER(2710,85180
+#define CHECK_TYPE_RANGED_INTEGER(2721,85563
+#define CHECK_NUMBER_COERCE_MARKER(2729,85833
+XFLOATINT 2738,86086
+CHECK_NUMBER_OR_FLOAT 2744,86157
+#define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(2749,86256
+CHECK_NUMBER_CAR 2760,86666
+CHECK_NUMBER_CDR 2768,86788
+#define DEFUN(2803,88383
+#define DEFUN(2812,88851
+FUNCTIONP 2822,89206
+enum maxargs2831,89401
+    MANY 2833,89418
+    UNEVALLED 2834,89433
+#define CALLMANY(2838,89536
+#define CALLN(2844,89889
+#define DEFVAR_LISP(2869,91094
+#define DEFVAR_LISP_NOPRO(2874,91266
+#define DEFVAR_BOOL(2879,91448
+#define DEFVAR_INT(2884,91621
+#define DEFVAR_BUFFER_DEFAULTS(2890,91792
+#define DEFVAR_KBOARD(2896,91996
+typedef jmp_buf sys_jmp_buf;2906,92320
+# define sys_setjmp(2907,92349
+# define sys_longjmp(2908,92384
+typedef sigjmp_buf sys_jmp_buf;2910,92456
+# define sys_setjmp(2911,92488
+# define sys_longjmp(2912,92528
+typedef jmp_buf sys_jmp_buf;2916,92687
+# define sys_setjmp(2917,92716
+# define sys_longjmp(2918,92750
+enum specbind_tag 2943,93802
+  SPECPDL_UNWIND,2944,93822
+  SPECPDL_UNWIND_PTR,2945,93891
+  SPECPDL_UNWIND_INT,2946,93942
+  SPECPDL_UNWIND_VOID,2947,93990
+  SPECPDL_BACKTRACE,2948,94044
+  SPECPDL_LET,2949,94102
+  SPECPDL_LET_LOCAL,2951,94232
+  SPECPDL_LET_DEFAULT  2952,94289
+union specbinding2955,94361
+    ENUM_BF 2957,94383
+      ENUM_BF 2959,94440
+      ENUM_BF 2964,94570
+      ENUM_BF 2969,94693
+      ENUM_BF 2974,94811
+      ENUM_BF 2978,94916
+      ENUM_BF 2983,95091
+enum handlertype 3021,96407
+enum handlertype { CATCHER,3021,96407
+enum handlertype { CATCHER, CONDITION_CASE 3021,96407
+struct handler3023,96454
+#define PUSH_HANDLER(3053,97443
+#define QUIT   3101,99220
+#define QUITP 3112,99470
+struct gcpro3132,100313
+#define GC_USE_GCPROS_AS_BEFORE        3171,101294
+#define GC_MAKE_GCPROS_NOOPS   3172,101329
+#define GC_MARK_STACK_CHECK_GCPROS     3173,101361
+#define GC_USE_GCPROS_CHECK_ZOMBIES    3174,101398
+#define GC_MARK_STACK 3177,101459
+#define BYTE_MARK_STACK 3181,101559
+#define GCPRO1(3190,101830
+#define GCPRO2(3191,101870
+#define GCPRO3(3192,101936
+#define GCPRO4(3194,102031
+#define GCPRO5(3196,102151
+#define GCPRO6(3198,102296
+#define GCPRO7(3201,102471
+#define UNGCPRO 3202,102550
+#define GCPRO1(3208,102650
+#define GCPRO2(3212,102772
+#define GCPRO3(3217,102964
+#define GCPRO4(3223,103226
+#define GCPRO5(3230,103557
+#define GCPRO6(3238,103958
+#define GCPRO7(3247,104428
+#define UNGCPRO 3257,104968
+#define GCPRO1(3263,105062
+#define GCPRO2(3269,105296
+#define GCPRO3(3278,105714
+#define GCPRO4(3289,106271
+#define GCPRO5(3302,106969
+#define GCPRO6(3317,107809
+#define GCPRO7(3334,108790
+#define UNGCPRO        3353,109913
+#define RETURN_UNGCPRO(3363,110180
+vcopy 3384,110654
+set_hash_key_slot 3393,110929
+set_hash_value_slot 3399,111068
+set_symbol_function 3408,111303
+set_symbol_plist 3414,111418
+set_symbol_next 3420,111521
+blv_found 3428,111694
+set_overlay_plist 3437,111877
+string_intervals 3445,112028
+set_string_intervals 3453,112150
+set_char_table_defalt 3462,112352
+set_char_table_purpose 3467,112464
+set_char_table_extras 3475,112633
+set_char_table_contents 3482,112842
+set_sub_char_table_contents 3489,113037
+enum Arith_Comparison 3497,113300
+  ARITH_EQUAL,3498,113324
+  ARITH_NOTEQUAL,3499,113339
+  ARITH_LESS,3500,113357
+  ARITH_GRTR,3501,113371
+  ARITH_LESS_OR_EQUAL,3502,113385
+  ARITH_GRTR_OR_EQUAL3503,113408
+#define INTEGER_TO_CONS(3511,113759
+#define CONS_TO_INTEGER(3529,114622
+enum { NEXT_ALMOST_PRIME_LIMIT 3573,116326
+extern EMACS_INT next_almost_prime 3574,116365
+enum constype 3739,123817
+enum constype {CONSTYPE_HEAP,CONSTYPE_HEAP3739,123817
+enum constype {CONSTYPE_HEAP, CONSTYPE_PURE}CONSTYPE_PURE3739,123817
+list2i 3745,124007
+list3i 3751,124116
+list4i 3757,124255
+extern Lisp_Object make_formatted_string 3767,124631
+build_pure_c_string 3792,125659
+build_string 3801,125864
+make_uninit_vector 3820,126435
+make_uninit_sub_char_table 3833,126654
+#define ALLOCATE_PSEUDOVECTOR(3850,127198
+#define ALLOCATE_ZEROED_PSEUDOVECTOR(3858,127534
+INLINE void 3890,128940
+extern void *r_alloc r_alloc3895,129061
+#define FLOAT_TO_STRING_BUFSIZE 3927,130524
+intern 3968,132131
+intern_c_string 3974,132219
+extern _Noreturn void error 4034,135598
+fast_string_match_ignore_case 4136,140086
+INLINE void fixup_locale 4241,143851
+INLINE void synchronize_system_messages_locale 4242,143886
+INLINE void synchronize_system_time_locale 4243,143943
+#define IS_DAEMON 4257,144416
+#define DAEMON_RUNNING 4258,144456
+#define IS_DAEMON 4261,144555
+#define DAEMON_RUNNING 4262,144600
+# define WAIT_READING_MAX 4281,145419
+# define WAIT_READING_MAX 4283,145491
+extern _Noreturn void emacs_abort 4374,148383
+egetenv 4532,152806
+#define eabs(4545,153302
+#define make_fixnum_or_float(4550,153435
+enum MAX_ALLOCA 4556,153686
+enum MAX_ALLOCA { MAX_ALLOCA 4556,153686
+extern void *record_xmalloc record_xmalloc4558,153731
+#define USE_SAFE_ALLOCA        4560,153797
+#define AVAIL_ALLOCA(4564,153930
+#define SAFE_ALLOCA(4568,154041
+#define SAFE_NALLOCA(4576,154382
+#define SAFE_ALLOCA_STRING(4590,154858
+#define SAFE_FREE(4598,155110
+#define SAFE_ALLOCA_LISP(4625,155688
+# define USE_STACK_LISP_OBJECTS 4652,156810
+# undef USE_STACK_LISP_OBJECTS4658,156976
+# define USE_STACK_LISP_OBJECTS 4659,157007
+enum { defined_GC_CHECK_STRING_BYTES 4663,157082
+enum { defined_GC_CHECK_STRING_BYTES 4665,157135
+union Aligned_Cons4670,157269
+union Aligned_String4676,157349
+    USE_STACK_CONS 4689,157704
+    USE_STACK_STRING 4691,157810
+#define STACK_CONS(4699,158147
+#define AUTO_CONS_EXPR(4701,158244
+#define AUTO_CONS(4709,158607
+#define AUTO_LIST1(4710,158678
+#define AUTO_LIST2(4712,158786
+#define AUTO_LIST3(4716,158941
+#define AUTO_LIST4(4720,159116
+# define verify_ascii(4732,159507
+#define AUTO_STRING(4740,159815
+#define FOR_EACH_TAIL(4752,160279
+#define FOR_EACH_ALIST_VALUE(4766,160770
+maybe_gc 4774,161057
+functionp 4784,161296
+
+c-src/machsyscalls.c,23
+#define        SYSCALL(6,113
+
+c-src/machsyscalls.h,159
+SYSCALL (mach_msg_trap,1,0
+SYSCALL (mach_reply_port,13,314
+SYSCALL (mach_thread_self,18,377
+SYSCALL (mach_task_self,23,441
+SYSCALL (mach_host_self,28,503
+
+c-src/h.h,1850
+   ELEM_I/ELEM_I3,15
+} Fails_t;5,85
+typedef void Lang_function 6,96
+typedef struct tpcmd8,147
+#define ggg 10,170
+tpcmd;15,209
+typedef struct foobar2_ 16,216
+} foobar2;20,307
+    DEVICE_SWP,23,333
+    DEVICE_LAST24,349
+} bsp_DevId;25,365
+  struct constant_args 27,394
+} args;30,457
+typedef int *regset;regset31,465
+typedef int INT;32,486
+typedef union abc33,503
+} ghi1;36,534
+typedef union abc 37,542
+} ghi2;39,573
+typedef struct a 40,581
+} b;41,600
+#define c(42,605
+typedef struct an_extern_linkage 
*an_extern_linkage_ptr;an_extern_linkage_ptr43,619
+typedef struct an_extern_linkage 44,676
+} an_extern_linkage;56,1054
+typedef struct pollfd   pfdset[pfdset57,1075
+typedef union rtunion_def58,1119
+  } womboid 63,1206
+typedef union rtunion_def64,1220
+womboid75,1330
+enum {dog,dog81,1416
+enum {dog, cat}cat81,1416
+enum {dog, cat} animals;81,1416
+typedef void (_CALLBACK_ *signal_handler)signal_handler82,1441
+typedef void (_CALLBACK_ *signal_handler1)signal_handler183,1489
+/* comment */ #define ANSIC84,1538
+ #define ANSIC85,1566
+typedef void (proc)87,1588
+typedef void OperatorFun(88,1612
+typedef int f(89,1648
+struct my_struct 91,1691
+typedef struct my_struct my_typedef;93,1713
+typedef RETSIGTYPE (*signal_handler_t)signal_handler_t94,1750
+  Date 04 May 87 235311 PDT 96,1802
+typedef unsigned char unchar;99,1880
+typedef int X,100,1910
+typedef int X, Y,100,1910
+typedef int X, Y, Z;100,1910
+typedef mio mao;101,1931
+typedef struct a 103,1966
+typedef struct a { } b;103,1966
+typedef struct b104,1990
+} c;106,2009
+int extvar;109,2053
+#define tag1110,2065
+#define aaaaaa 111,2078
+#define bbbbbb\bbbbbb113,2102
+#define cccccccccc115,2125
+#define enter_critical_section 116,2144
+#define exit_critical_to_previous      117,2199
+#define UNDEFINED118,2259
+struct re_pattern_buffer 119,2277
+
+cp-src/c.C,2225
+template <typename ipc3dIslandHierarchy,1,0
+template <typename ipc3dIslandHierarchy, typename ipc3dChannelType,1,0
+template <typename ipc3dIslandHierarchy, typename ipc3dChannelType, unsigned 
numOfChannels,1,0
+template <typename ipc3dIslandHierarchy, typename ipc3dChannelType, unsigned 
numOfChannels, typename ipc3dLinkControl,1,0
+class CMultiChannelCSC19_3D2,151
+        void execute(CMultiChannelCSC19_3D::execute11,493
+int main 25,1026
+double base 26,1088
+typedef struct s1 32,1251
+} t1;34,1287
+struct s2 35,1293
+typedef struct s2 t2;38,1324
+class A 39,1346
+  enum { rosso,A::rosso40,1356
+  enum { rosso, giallo,A::giallo40,1356
+  enum { rosso, giallo, verde A::verde40,1356
+const A& A::operator+(43,1431
+void operator+(44,1467
+void operator -(operator -45,1495
+void operator int(operator int46,1524
+A<int>* f(48,1556
+int f(49,1571
+int A<int>::f(f50,1590
+A<float,B<int> > A<B<float>,int>::f(f51,1618
+template <class C, int n> class AT 52,1668
+class AU 53,1716
+class B<B54,1735
+class B<int> { void f(B::f54,1735
+const A::B::T& abt 55,1765
+class A 56,1791
+class A { class B A::B56,1791
+class A 57,1826
+  A operator+(A::operator+59,1860
+is_muldiv_operation(61,1887
+domain foo 68,1955
+     void f(foo::f69,1968
+void A::A(72,1989
+struct A 73,2004
+struct B 74,2022
+void B::B(75,2041
+void BE_Node::BE_Node(76,2056
+class BE_Node 77,2083
+struct foo 79,2102
+class test 86,2156
+  int f(test::f87,2169
+  int ff(test::ff89,2231
+  int g(test::g90,2254
+class  AST_Root 92,2278
+AST_ConcreteType::AST_ConcreteType(99,2393
+AST_Array::AST_Array(107,2532
+     void f(::f115,2733
+struct A 117,2753
+A::~A(120,2777
+struct B 122,2789
+    ~B(B::~B123,2800
+enum {dog,::dog126,2817
+enum {dog, cat}::cat126,2817
+enum {dog, cat} animals;126,2817
+struct {int teats;} cow;127,2842
+class Boo 129,2868
+    enum {dog,Boo::dog130,2880
+    enum {dog, cat}Boo::cat130,2880
+    foo(Boo::foo133,2954
+    Boo(Boo::Boo137,2995
+Boo::Boo(141,3070
+typedef int should_see_this_one_enclosed_in_extern_C;149,3155
+typedef int 
(*should_see_this_function_pointer)should_see_this_function_pointer153,3228
+typedef int should_see_this_array_type[should_see_this_array_type156,3310
+
+cp-src/abstract.C,11317
+Half_Container::Half_Container(34,703
+void Half_Container::SetPosition(45,941
+void Half_Container::SetDimensions(58,1259
+void Half_Container::SetFather(81,1697
+void Half_Container::SetCollapsed(87,1787
+Specification::Specification(98,1958
+void Specification::SetPosition(119,2453
+void Specification::SetDimensions(164,3742
+void Specification::SetFather(188,4616
+void Specification::SetPath(202,4908
+Coord Specification::GetMaxX(212,5125
+Coord Specification::GetMaxY(215,5174
+Process::Process(222,5298
+void Process::SetPosition(242,5697
+void Process::SetDimensions(291,6959
+void Process::SetFather(315,7913
+void Process::SetPath(326,8123
+Coord Process::GetMaxX(335,8323
+Coord Process::GetMaxY(338,8365
+Choice::Choice(346,8482
+void Choice::SetPosition(357,8698
+void Choice::SetDimensions(405,10053
+void Choice::ChangeH(466,12014
+void Choice::ChangeW(495,12947
+void Choice::SetFather(522,13700
+void Choice::SetTextual(532,13918
+void Choice::SetCollapsed(540,14041
+int Choice::Get_Textual_H(549,14168
+int Choice::Get_Textual_W(557,14408
+void Choice::SetTerminalPos(566,14615
+Stop::Stop(588,15087
+void Stop::SetPosition(595,15207
+void Stop::SetDimensions(605,15373
+void Stop::SetFather(644,16369
+void Stop::SetTextual(652,16537
+void Stop::SetCollapsed(655,16616
+Exit::Exit(667,16768
+void Exit::SetPosition(676,16935
+void Exit::SetDimensions(687,17164
+void Exit::SetFather(695,17350
+Exit_Bex::Exit_Bex(703,17476
+void Exit_Bex::SetPosition(713,17678
+void Exit_Bex::SetDimensions(740,18430
+void Exit_Bex::SetFather(798,20444
+void Exit_Bex::SetTextual(807,20646
+void Exit_Bex::SetCollapsed(814,20757
+NoExit::NoExit(826,20943
+void NoExit::SetPosition(835,21092
+void NoExit::SetDimensions(845,21266
+void NoExit::SetFather(852,21359
+ID_Place::ID_Place(861,21488
+void ID_Place::SetIdent(875,21745
+void ID_Place::SetPosition(886,21936
+void ID_Place::SetDimensions(897,22173
+void ID_Place::SetFather(928,23017
+ID_Place::~ID_Place(932,23073
+void ID_Place::SetVisible(935,23112
+void ID_Place::ClearID(941,23193
+ID_List::ID_List(953,23379
+void ID_List::SetPosition(967,23644
+void ID_List::SetDimensions(999,24385
+void ID_List::SetFather(1038,25456
+void ID_List::SetCollapsed(1047,25595
+void ID_List::HideMe(1056,25734
+void ID_List::SetRBubble(1065,25862
+void ID_List::SetAlignement(1073,25980
+int ID_List::GetCardinality(1082,26123
+void ID_List::SetVisible(1093,26291
+void ID_List::BuildSigSorts(1103,26518
+void ID_List::ClearIDs(1126,27081
+Id_Decl::Id_Decl(1139,27280
+void Id_Decl::SetPosition(1156,27659
+void Id_Decl::SetDimensions(1174,28016
+void Id_Decl::SetFather(1191,28417
+void Id_Decl::SetCollapsed(1200,28568
+Id_Decl_List::Id_Decl_List(1214,28799
+void Id_Decl_List::SetPosition(1227,29069
+void Id_Decl_List::SetDimensions(1245,29424
+void Id_Decl_List::SetFather(1262,29844
+void Id_Decl_List::SetCollapsed(1271,29988
+Comment::Comment(1286,30209
+void Comment::SetComment(1299,30446
+void Comment::SetFather(1317,30800
+void Comment::SetPosition(1321,30854
+void Comment::SetDimensions(1331,31031
+Comment::~Comment(1345,31265
+Comment_List::Comment_List(1352,31382
+void Comment_List::SetPosition(1362,31541
+void Comment_List::SetDimensions(1380,31860
+void Comment_List::SetFather(1392,32139
+Parallel::Parallel(1406,32360
+void Parallel::SetPosition(1417,32573
+void Parallel::SetDimensions(1473,34272
+void Parallel::SetTextual(1534,36167
+int Parallel::Get_Textual_W(1543,36313
+int Parallel::Get_Textual_H(1559,36722
+void Parallel::SetTerminalPos(1570,37191
+void Parallel::SetFather(1590,37698
+void Parallel::SetCollapsed(1601,37950
+Ident_Eq::Ident_Eq(1615,38177
+void Ident_Eq::SetPosition(1632,38546
+void Ident_Eq::SetDimensions(1647,38851
+void Ident_Eq::SetFather(1662,39191
+void Ident_Eq::SetCollapsed(1669,39295
+Ident_Eq_List::Ident_Eq_List(1681,39480
+void Ident_Eq_List::SetPosition(1694,39753
+void Ident_Eq_List::SetDimensions(1712,40111
+void Ident_Eq_List::SetCollapsed(1729,40538
+void Ident_Eq_List::SetFather(1738,40683
+Local_Def::Local_Def(1751,40904
+void Local_Def::SetPosition(1761,41102
+void Local_Def::SetDimensions(1791,41833
+void Local_Def::SetFather(1832,43262
+void Local_Def::SetCollapsed(1839,43370
+void Local_Def::SetTextual(1848,43504
+Hide::Hide(1860,43681
+void Hide::SetPosition(1871,43872
+void Hide::SetDimensions(1901,44569
+void Hide::SetFather(1944,45771
+void Hide::SetCollapsed(1951,45873
+void Hide::SetTextual(1961,46003
+Interl::Interl(1972,46175
+void Interl::SetPosition(1982,46361
+void Interl::SetDimensions(1993,46593
+void Interl::SetFather(2021,47103
+Syncr::Syncr(2031,47257
+void Syncr::SetPosition(2041,47438
+void Syncr::SetDimensions(2051,47609
+void Syncr::SetFather(2079,48153
+Enable::Enable(2090,48436
+void Enable::SetPosition(2102,48690
+void Enable::SetDimensions(2169,50473
+void Enable::SetTextual(2243,53017
+void Enable::SetTerminalPos(2251,53140
+int Enable::Get_Textual_W(2271,53720
+int Enable::Get_Textual_H(2282,53985
+void Enable::SetFather(2285,54104
+void Enable::SetCollapsed(2298,54418
+Disable::Disable(2314,54780
+void Disable::SetPosition(2325,55001
+void Disable::SetDimensions(2376,56251
+void Disable::SetFather(2436,58064
+void Disable::SetCollapsed(2446,58284
+void Disable::SetTextual(2455,58412
+void Disable::SetTerminalPos(2463,58536
+int Disable::Get_Textual_W(2479,58987
+int Disable::Get_Textual_H(2488,59190
+Gen_Paral::Gen_Paral(2500,59630
+void Gen_Paral::SetPosition(2513,59899
+void Gen_Paral::SetDimensions(2540,60659
+void Gen_Paral::SetFather(2590,62171
+void Gen_Paral::SetCollapsed(2597,62290
+Action_Pref::Action_Pref(2609,62583
+void Action_Pref::SetPosition(2620,62829
+void Action_Pref::SetDimensions(2669,63937
+void Action_Pref::SetFather(2724,65777
+void Action_Pref::SetCollapsed(2734,66010
+void Action_Pref::SetTextual(2743,66147
+Internal::Internal(2757,66484
+void Internal::SetPosition(2768,66658
+void Internal::SetDimensions(2778,66838
+void Internal::SetFather(2806,67442
+Communication::Communication(2816,67702
+void Communication::SetPosition(2827,67956
+void Communication::SetDimensions(2897,70390
+void Communication::SetFather(2935,71706
+void Communication::SetCollapsed(2942,71837
+void Communication::SetTextual(2949,71968
+NoGuard::NoGuard(2961,72262
+void NoGuard::SetPosition(2974,72462
+void NoGuard::SetDimensions(2984,72639
+void NoGuard::SetFather(2987,72678
+Guard::Guard(2996,72929
+void Guard::SetPosition(3008,73118
+void Guard::SetDimensions(3022,73428
+void Guard::SetFather(3044,73894
+void Guard::SetCollapsed(3050,73974
+NoExperiment::NoExperiment(3062,74258
+void NoExperiment::SetPosition(3075,74478
+void NoExperiment::SetDimensions(3085,74670
+void NoExperiment::SetFather(3088,74714
+Experiment::Experiment(3097,74978
+void Experiment::SetPosition(3110,75245
+void Experiment::SetDimensions(3128,75611
+void Experiment::SetFather(3150,76066
+void Experiment::SetCollapsed(3157,76188
+void Experiment::SetTextual(3165,76311
+Proc_Inst::Proc_Inst(3175,76476
+void Proc_Inst::SetPosition(3191,76777
+void Proc_Inst::SetDimensions(3236,77965
+void Proc_Inst::SetFather(3286,79596
+void Proc_Inst::SetCollapsed(3294,79739
+void Proc_Inst::SetTextual(3304,79909
+Value_Expr::Value_Expr(3316,80100
+void Value_Expr::SetPosition(3329,80327
+void Value_Expr::SetDimensions(3340,80572
+void Value_Expr::SetFather(3343,80614
+Value_Expr_List::Value_Expr_List(3351,80755
+void Value_Expr_List::SetPosition(3364,81042
+void Value_Expr_List::SetDimensions(3382,81406
+void Value_Expr_List::SetFather(3399,81830
+void Value_Expr_List::SetCollapsed(3408,81977
+Sum_Ident::Sum_Ident(3423,82203
+void Sum_Ident::SetPosition(3435,82445
+void Sum_Ident::SetDimensions(3466,83196
+void Sum_Ident::SetFather(3509,84540
+void Sum_Ident::SetCollapsed(3516,84653
+void Sum_Ident::SetTextual(3525,84793
+void Sum_Ident::SetTerminalPos(3532,84897
+Value::Value(3552,85432
+void Value::SetPosition(3569,85792
+void Value::SetDimensions(3583,86091
+void Value::SetFather(3606,86628
+void Value::SetCollapsed(3613,86731
+Term::Term(3626,86908
+void Term::SetPosition(3646,87323
+void Term::SetDimensions(3671,87942
+void Term::SetFather(3697,88599
+void Term::SetCollapsed(3705,88732
+Exit_Entry::Exit_Entry(3719,88947
+void Exit_Entry::SetPosition(3732,89176
+void Exit_Entry::SetDimensions(3743,89421
+void Exit_Entry::SetFather(3746,89463
+Exit_Entry_List::Exit_Entry_List(3754,89604
+void Exit_Entry_List::SetPosition(3766,89875
+void Exit_Entry_List::SetDimensions(3785,90304
+void Exit_Entry_List::SetFather(3802,90753
+void Exit_Entry_List::SetCollapsed(3811,90900
+Sum_Gate::Sum_Gate(3826,91125
+void Sum_Gate::SetPosition(3837,91363
+void Sum_Gate::SetDimensions(3873,92120
+void Sum_Gate::SetFather(3915,93438
+void Sum_Gate::SetCollapsed(3922,93549
+void Sum_Gate::SetTextual(3931,93687
+void Sum_Gate::SetTerminalPos(3938,93790
+Gate_Decl::Gate_Decl(3959,94421
+void Gate_Decl::SetPosition(3977,94900
+void Gate_Decl::SetDimensions(3995,95298
+void Gate_Decl::SetFather(4011,95694
+void Gate_Decl::SetCollapsed(4020,95871
+Gate_Decl_List::Gate_Decl_List(4034,96130
+void Gate_Decl_List::SetPosition(4047,96414
+void Gate_Decl_List::SetDimensions(4065,96779
+void Gate_Decl_List::SetFather(4082,97207
+void Gate_Decl_List::SetCollapsed(4091,97353
+Par::Par(4106,97572
+void Par::SetPosition(4126,97957
+void Par::SetDimensions(4174,99236
+void Par::SetFather(4226,100814
+void Par::SetCollapsed(4234,100943
+void Par::SetTextual(4245,101100
+Sort_Id_Exit::Sort_Id_Exit(4258,101329
+void Sort_Id_Exit::SetPosition(4270,101556
+void Sort_Id_Exit::SetDimensions(4283,101834
+void Sort_Id_Exit::SetFather(4297,102142
+void Sort_Id_Exit::SetCollapsed(4303,102228
+Equality::Equality(4314,102512
+Equality::Equality(4327,102736
+void Equality::SetPosition(4340,102987
+void Equality::SetDimensions(4357,103329
+void Equality::SetFather(4377,103720
+void Equality::SetCollapsed(4387,103858
+Guarded::Guarded(4401,104167
+void Guarded::SetPosition(4413,104384
+void Guarded::SetDimensions(4441,105084
+void Guarded::SetFather(4482,106273
+void Guarded::SetCollapsed(4489,106377
+void Guarded::SetTextual(4499,106509
+Exper_Off::Exper_Off(4510,106813
+void Exper_Off::SetPosition(4523,107035
+void Exper_Off::SetDimensions(4533,107220
+void Exper_Off::SetFather(4536,107261
+Exper_Off_List::Exper_Off_List(4544,107521
+void Exper_Off_List::SetPosition(4557,107802
+void Exper_Off_List::SetDimensions(4575,108167
+void Exper_Off_List::SetFather(4592,108594
+void Exper_Off_List::SetCollapsed(4601,108740
+Exclam::Exclam(4616,109087
+void Exclam::SetPosition(4629,109300
+void Exclam::SetDimensions(4641,109541
+void Exclam::SetFather(4655,109830
+void Exclam::SetCollapsed(4661,109912
+Query::Query(4673,110194
+void Query::SetPosition(4686,110399
+void Query::SetDimensions(4698,110636
+void Query::SetFather(4712,110918
+void Query::SetCollapsed(4718,110997
+Definition::Definition(4729,111279
+void Definition::SetPosition(4741,111448
+void Definition::SetDimensions(4752,111658
+void Definition::SetFather(4766,111896
+void Definition::SetPath(4777,112089
+Proc_List::Proc_List(4790,112374
+void Proc_List::SetPosition(4799,112505
+void Proc_List::SetDimensions(4809,112686
+void Proc_List::SetFather(4815,112767
+void Proc_List::SetPath(4824,112908
+char *Proc_List::GetPath(Proc_List::GetPath4832,113068
+
+cp-src/abstract.H,2253
+#define abstract_hh16,453
+class ID_Place:ID_Place23,536
+ char *GetIdent(ID_Place::GetIdent41,857
+ void SetRBubble(ID_Place::SetRBubble42,891
+ char GetRBubble(ID_Place::GetRBubble43,934
+class ID_List:ID_List47,1012
+class Id_Decl:Id_Decl73,1540
+class Id_Decl_List:Id_Decl_List89,1829
+class Comment:Comment105,2140
+class Comment_List:Comment_List122,2440
+class Value_Expr:Value_Expr135,2694
+class Value_Expr_List:Value_Expr_List149,2911
+class Exit_Entry:Exit_Entry165,3244
+class Exit_Entry_List:Exit_Entry_List179,3460
+class Exper_Off:Exper_Off195,3793
+class Exper_Off_List:Exper_Off_List207,3977
+class Gate_Decl:Gate_Decl223,4323
+class Gate_Decl_List:Gate_Decl_List239,4630
+class Ident_Eq:Ident_Eq255,4957
+class Ident_Eq_List:Ident_Eq_List271,5270
+class Half_Container:Half_Container287,5608
+class Specification:Specification308,5954
+class Process:Process337,6609
+ char GetNesting(Process::GetNesting363,7186
+class Proc_List:Proc_List367,7257
+class Definition:Definition382,7574
+ char *GetPath(Definition::GetPath397,7940
+class Exit:Exit407,8071
+class NoExit:NoExit421,8305
+class Value:Value440,8560
+class Term:Term456,8841
+class Equality:Equality473,9169
+class Sort_Id_Exit:Sort_Id_Exit490,9504
+class NoGuard:NoGuard511,9837
+class Guard:Guard524,10045
+class NoExperiment:NoExperiment545,10368
+class Experiment:Experiment558,10591
+ Tree_Node *GetGuard(Experiment::GetGuard574,10962
+class Exclam:Exclam578,11053
+class Query:Query593,11324
+class Internal:Internal614,11643
+class Communication:Communication627,11854
+class Gen_Paral:Gen_Paral652,12337
+ void HideGate(Gen_Paral::HideGate668,12634
+class Interl:Interl672,12730
+class Syncr:Syncr685,12929
+class Action_Pref:Action_Pref704,13185
+class Enable:Enable723,13577
+class Disable:Disable746,14097
+class Choice:Choice768,14561
+class Stop:Stop793,15054
+class Exit_Bex:Exit_Bex810,15338
+class Hide:Hide829,15707
+class Guarded:Guarded848,16047
+class Proc_Inst:Proc_Inst867,16425
+class Parallel:Parallel888,16870
+ char GetOperType(Parallel::GetOperType910,17343
+class Local_Def:Local_Def914,17429
+class Par:Par933,17801
+class Sum_Gate:Sum_Gate952,18180
+class Sum_Ident:Sum_Ident972,18613
+
+cp-src/cfront.H,2555
+struct loc     67,1948
+struct ea 80,2150
+       ea(ea::ea86,2249
+       ea(ea::ea87,2275
+       ea(ea::ea88,2301
+       ea(ea::ea89,2310
+overload error;94,2349
+#define DEL(161,4040
+#define PERM(162,4092
+#define UNPERM(163,4123
+struct node 165,4157
+struct table 175,4321
+       void    set_scope(table::set_scope198,4988
+       void    set_name(table::set_name199,5029
+       int     max(table::max201,5091
+#define DEFINED 230,5655
+#define SIMPLIFIED 231,5712
+#define DEF_SEEN 232,5754
+#define IN_ERROR 234,5859
+struct type 236,5881
+       TOK     integral(type::integral255,6278
+       TOK     numeric(type::numeric256,6324
+       TOK     num_ptr(type::num_ptr257,6370
+struct enumdef 265,6500
+               enumdef(enumdef::enumdef269,6586
+struct classdef 278,6732
+       TOK     is_simple(classdef::is_simple302,7506
+       Pname   has_ctor(classdef::has_ctor314,7759
+       Pname   has_dtor(classdef::has_dtor315,7813
+       Pname   has_itor(classdef::has_itor316,7867
+struct basetype 323,7935
+struct fct 365,8857
+       bit     declared(fct::declared396,9724
+struct name_list 403,9827
+       name_list(name_list::name_list406,9866
+struct gen 410,9931
+struct pvtyp 419,10071
+struct vec 423,10109
+       vec(vec::vec429,10182
+struct ptr 435,10289
+       ptr(ptr::ptr440,10419
+inline Pptr type::addrof(447,10546
+struct expr 469,11113
+struct texpr 527,12108
+       texpr(texpr::texpr528,12149
+struct ival 531,12218
+       ival(ival::ival532,12258
+struct call 535,12308
+       call(call::call536,12338
+struct qexpr 543,12453
+       qexpr(qexpr::qexpr544,12500
+struct ref 547,12582
+       ref(ref::ref548,12632
+struct text_expr 551,12697
+       text_expr(text_expr::text_expr552,12731
+struct name 557,12884
+       void    unhide(name::unhide592,13929
+       void    use(name::use596,14025
+       void    take_addr(name::take_addr598,14069
+struct stmt 615,14374
+struct estmt 662,15111
+       estmt(estmt::estmt669,15303
+struct ifstmt 672,15379
+       ifstmt(ifstmt::ifstmt676,15484
+struct lstmt 680,15586
+       lstmt(lstmt::lstmt686,15650
+struct forstmt 689,15728
+       forstmt(forstmt::forstmt690,15759
+struct block 694,15880
+       block(block::block695,15919
+struct pair 703,16060
+       pair(pair::pair704,16096
+struct nlist 708,16173
+       void    add(nlist::add712,16230
+struct slist 718,16344
+               slist(slist::slist721,16385
+       void    add(slist::add722,16430
+struct elist 727,16521
+               elist(elist::elist730,16562
+       void    add(elist::add731,16607
+struct dcl_context 739,16739
+       void    stack(dcl_context::stack747,17023
+       void    unstack(dcl_context::unstack748,17064
+#define MAXCONT        751,17095
+const MIA 779,17690
+struct iline 780,17705
+#define FUDGE111 791,17985
+#define DB(831,18890
+#define DB(833,18920
+
+cp-src/burton.cpp,103
+::dummy::dummy test::dummy1(1,0
+::dummy::dummy test::dummy2(6,64
+::dummy::dummy test::dummy3(11,143
+
+cp-src/functions.cpp,807
+void Date::setDate 5,148
+void Date::plus 32,939
+void Date::minus 42,1229
+void Date::shift 52,1407
+Date & Date::operator = Date::operator =62,1628
+Date & Date::operator += Date::operator +=69,1789
+Date & Date::operator -= Date::operator -=78,1939
+Date & Date::operator ++ Date::operator ++87,2080
+Date & Date::operator -- Date::operator --96,2216
+int Date::operator - Date::operator -104,2331
+int Date::operator < Date::operator <112,2483
+int Date::operator > Date::operator >116,2557
+int Date::operator == Date::operator ==120,2631
+ostream& operator << operator <<124,2707
+istream& operator >> operator >>133,2943
+bool isLeap 159,3543
+bool isHoliday 163,3629
+void asort(173,3865
+void ReadVacation 186,4064
+void Debug 201,4523
+int WorkingDays(211,4867
+Date StartDay(226,5129
+
+cp-src/MDiagArray2.h,709
+#define octave_MDiagArray2_h 29,870
+#undef LTGT35,967
+#define LTGT39,1031
+#define LTGT 42,1051
+class MDiagArray2 78,2022
+  MDiagArray2 MDiagArray2::MDiagArray282,2077
+  MDiagArray2 MDiagArray2::MDiagArray286,2154
+  MDiagArray2 MDiagArray2::MDiagArray287,2198
+  MDiagArray2 MDiagArray2::MDiagArray288,2254
+  MDiagArray2 MDiagArray2::MDiagArray289,2329
+  MDiagArray2 MDiagArray2::MDiagArray290,2387
+  MDiagArray2 MDiagArray2::MDiagArray291,2450
+  ~MDiagArray2 MDiagArray2::~MDiagArray293,2515
+  MDiagArray2<T>& operator = MDiagArray2::operator =95,2542
+  operator MArray2<T> MDiagArray2::operator MArray2<T>101,2667
+#undef LTGT144,3874
+#define INSTANTIATE_MDIAGARRAY_FRIENDS(146,3887
+
+cp-src/Pctest.h,507
+#define PCTEST_H24,837
+    PctestActionValid,::PctestActionValid47,1286
+    PctestActionValidLasthop,::PctestActionValidLasthop49,1370
+    PctestActionFiltered,::PctestActionFiltered51,1481
+    PctestActionAbort  ::PctestActionAbort53,1566
+} PctestActionType;54,1616
+class Pctest 56,1637
+    Pctest(Pctest::Pctest59,1663
+    virtual ~Pctest(Pctest::~Pctest65,1813
+    virtual char *GetTargetName(Pctest::GetTargetName77,2171
+    virtual PctestActionType GetAction(Pctest::GetAction86,2555
+
+cp-src/Range.h,424
+#define octave_Range_h 24,765
+Range35,891
+  Range Range::Range39,909
+  Range Range::Range42,995
+  Range Range::Range46,1130
+  Range Range::Range50,1248
+  double base Range::base54,1376
+  double limit Range::limit55,1425
+  double inc Range::inc56,1475
+  int nelem Range::nelem57,1523
+  void set_base Range::set_base68,1728
+  void set_limit Range::set_limit69,1774
+  void set_inc Range::set_inc70,1821
+
+cp-src/screen.cpp,228
+unsigned char cursor_x,15,548
+unsigned char cursor_x, cursor_y;15,548
+static union REGS regs;16,582
+void goto_xy(18,607
+void hide_cursor(27,774
+void cursor_position(32,836
+void clear_screen(41,997
+void write_xyc(55,1247
+
+cp-src/screen.hpp,667
+#define __COLORS9,401
+enum COLORS 11,419
+    BLACK,COLORS::BLACK12,433
+    BLUE,COLORS::BLUE13,471
+    GREEN,COLORS::GREEN14,481
+    CYAN,COLORS::CYAN15,492
+    RED,COLORS::RED16,502
+    MAGENTA,COLORS::MAGENTA17,511
+    BROWN,COLORS::BROWN18,524
+    LIGHTGRAY,COLORS::LIGHTGRAY19,535
+    DARKGRAY,COLORS::DARKGRAY20,550
+    LIGHTBLUE,COLORS::LIGHTBLUE21,589
+    LIGHTGREEN,COLORS::LIGHTGREEN22,604
+    LIGHTCYAN,COLORS::LIGHTCYAN23,620
+    LIGHTRED,COLORS::LIGHTRED24,635
+    LIGHTMAGENTA,COLORS::LIGHTMAGENTA25,649
+    YELLOW,COLORS::YELLOW26,667
+    WHITECOLORS::WHITE27,679
+#define SCREEN_FP(31,700
+#define SCREEN_START 33,795
+
+cp-src/conway.cpp,270
+#define max(12,357
+#define min(13,393
+const int num_rows 15,430
+const int num_columns 16,470
+class site *field_of_play[field_of_play18,499
+int site::total_surrounding(20,550
+void display(37,958
+void glider(50,1239
+void traffic_light(59,1478
+void main(67,1633
+
+cp-src/conway.hpp,244
+class site:site5,235
+    site(site::site10,344
+    char read(site::read12,410
+    void set(site::set13,444
+    void clear(site::clear14,478
+    void compute_next_state(site::compute_next_state15,514
+    void step(site::step22,717
+
+cp-src/clheir.cpp,307
+const int max_num_generic_objects 9,298
+generic_object * object_registry[object_registry10,340
+void init_registry(12,400
+void step_everybody(19,527
+void discrete_location::clear_neighbors(31,852
+generic_object::generic_object(36,981
+generic_object::~generic_object(48,1255
+void agent::move(53,1353
+
+cp-src/clheir.hpp,609
+class generic_object13,520
+    virtual void compute_next_state(generic_object::compute_next_state21,842
+    virtual void step(generic_object::step22,888
+const int max_num_directions 31,1219
+class location:location33,1289
+    location(location::location43,1642
+class irregular_location:irregular_location47,1686
+    irregular_location(irregular_location::irregular_location51,1762
+class discrete_location:discrete_location56,1889
+    discrete_location(discrete_location::discrete_location62,2044
+    void assign_neighbor(discrete_location::assign_neighbor66,2184
+class agent:agent75,2508
+
+cp-src/fail.C,365
+struct A 7,263
+          struct B A::B8,274
+                  struct C A::B::C9,289
+                          C(A::B::C::C11,318
+                          operator int(A::B::C::operator int12,342
+                  typedef C T;A::B::T14,389
+          typedef B T2;A::T216,414
+class A 23,453
+       class B A::B24,463
+               class C A::B::C25,474
+               int f(A::B::f26,488
+int A::B::f(31,521
+main(37,571
+       class D 41,622
+               D(D::D43,659
+
+el-src/TAGTEST.EL,148
+(foo::defmumble bletch 1,0
+(defalias 'pending-delete-mode pending-delete-mode5,102
+(defalias (quote explicitly-quoted-pending-delete-mode)8,175
+
+el-src/emacs/lisp/progmodes/etags.el,5069
+(defvar tags-file-name 34,1034
+(defgroup etags 43,1498
+(defcustom tags-case-fold-search 47,1566
+(defcustom tags-table-list 59,2051
+(defcustom tags-compression-info-list69,2449
+(defcustom tags-add-tables 88,3231
+(defcustom tags-revert-without-query 98,3627
+(defvar tags-table-computed-list 103,3778
+(defvar tags-table-computed-list-for 112,4262
+(defvar tags-table-list-pointer 117,4510
+(defvar tags-table-list-started-at 121,4701
+(defvar tags-table-set-list 124,4821
+(defcustom find-tag-hook 129,5000
+(defcustom find-tag-default-function 137,5263
+(define-obsolete-variable-alias 
'find-tag-marker-ring-lengthfind-tag-marker-ring-length145,5602
+(defcustom tags-tag-face 148,5699
+(defcustom tags-apropos-verbose 154,5834
+(defcustom tags-apropos-additional-actions 160,5998
+(defvaralias 'find-tag-marker-ring find-tag-marker-ring183,6917
+(defvar default-tags-table-function 189,7097
+(defvar tags-location-ring 194,7323
+(defvar tags-table-files 201,7599
+(defvar tags-completion-table 206,7766
+(defvar tags-included-tables 209,7858
+(defvar next-file-list 212,7953
+(defvar tags-table-format-functions 217,8059
+(defvar file-of-tag-function 224,8440
+(defvar tags-table-files-function 228,8634
+(defvar tags-completion-table-function 230,8745
+(defvar snarf-tag-function 232,8840
+(defvar goto-tag-location-function 236,9049
+(defvar find-tag-regexp-search-function 239,9222
+(defvar find-tag-regexp-tag-order 241,9343
+(defvar find-tag-regexp-next-line-after-failure-p 243,9452
+(defvar find-tag-search-function 245,9572
+(defvar find-tag-tag-order 247,9679
+(defvar find-tag-next-line-after-failure-p 249,9774
+(defvar list-tags-function 251,9880
+(defvar tags-apropos-function 253,9968
+(defvar tags-included-tables-function 255,10062
+(defvar verify-tags-table-function 257,10181
+(defun initialize-new-tags-table 260,10292
+(defun tags-table-mode 276,10980
+(defun visit-tags-table 285,11245
+(defun tags-table-check-computed-list 321,12783
+(defun tags-table-extend-computed-list 360,14654
+(defun tags-expand-table-name 400,16367
+(defun tags-table-list-member 409,16710
+(defun tags-verify-table 421,17182
+(defun tags-table-including 470,19302
+(defun tags-next-table 522,21346
+(defun visit-tags-table-buffer 543,22203
+(defun tags-reset-tags-tables 712,28513
+(defun file-of-tag 731,29170
+(defun tags-table-files 740,29519
+(defun tags-included-tables 749,29869
+(defun tags-completion-table 755,30115
+(defun tags-lazy-completion-table 783,31309
+(defun tags-completion-at-point-function 799,31944
+(defun find-tag-tag 818,32694
+(defvar last-tag 837,33367
+(defun find-tag-interactive 840,33426
+(defvar find-tag-history 852,33841
+(defun find-tag-noselect 860,34011
+(defun find-tag 932,37125
+(defun find-tag-other-window 959,38341
+(defun find-tag-other-frame 1000,40269
+(defun find-tag-regexp 1025,41443
+(defalias 'pop-tag-mark pop-tag-mark1049,42605
+(defvar tag-lines-already-matched 1052,42656
+(defun find-tag-in-order 1055,42763
+(defun tag-find-file-of-tag-noselect 1167,47109
+(defun tag-find-file-of-tag 1200,48955
+(defun etags-recognize-tags-table 1208,49181
+(defun etags-verify-tags-table 1241,50812
+(defun etags-file-of-tag 1246,51010
+(defun etags-tags-completion-table 1256,51345
+(defun etags-snarf-tag 1286,52551
+(defun etags-goto-tag-location 1324,54120
+(defun etags-list-tags 1388,56563
+(defmacro tags-with-face 1423,57838
+(defun etags-tags-apropos-additional 1431,58171
+(defun etags-tags-apropos 1465,59408
+(defun etags-tags-table-files 1527,61617
+(defun etags-tags-included-tables 1542,62053
+(defun tags-recognize-empty-tags-table 1559,62593
+(defun tag-exact-file-name-match-p 1587,63739
+(defun tag-file-name-match-p 1596,64132
+(defun tag-exact-match-p 1609,64688
+(defun tag-implicit-name-match-p 1620,65256
+(defun tag-symbol-match-p 1633,65856
+(defun tag-word-match-p 1643,66292
+(defun tag-partial-file-name-match-p 1652,66690
+(defun tag-any-match-p 1662,67134
+(defun tag-re-match-p 1667,67318
+(defcustom tags-loop-revert-buffers 1675,67567
+(defun next-file 1685,67976
+(defvar tags-loop-operate 1760,70890
+(defvar tags-loop-scan1763,70984
+(defun tags-loop-eval 1771,71314
+(defun tags-loop-continue 1782,71643
+(defun tags-search 1850,73949
+(defun tags-query-replace 1871,74775
+(defun tags-complete-tags-table-file 1896,75999
+(defun list-tags 1906,76378
+(defun tags-apropos 1934,77331
+(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78157
+(defun select-tags-table 1964,78396
+(defvar select-tags-table-mode-map 2019,80523
+(define-derived-mode select-tags-table-mode 2030,80906
+(defun select-tags-table-select 2034,81090
+(defun select-tags-table-quit 2043,81456
+(defun complete-tag 2049,81611
+(defconst etags--xref-limit 2074,82552
+(defvar etags-xref-find-definitions-tag-order 2076,82587
+(defun etags-xref-find 2082,82877
+(defun etags--xref-find-definitions 2096,83406
+(defclass xref-etags-location 2129,85121
+(defun xref-make-etags-location 2135,85344
+(cl-defmethod xref-location-marker 2139,85499
+(cl-defmethod xref-location-line 2146,85743
+
+erl-src/gs_dialog.erl,98
+-define(VERSION2,32
+behaviour_info(51,2177
+show(124,5458
+dialog_loop(219,9529
+test(252,10806
+
+erl-src/lines.erl,386
+-define(BREAK66,2377
+-define(dbg68,2437
+new(73,2565
+count(80,2686
+nth(87,2815
+append(104,3301
+replace(119,3816
+insert(138,4559
+insert_after(165,5501
+delete(192,6456
+convert_to_list(215,7110
+convert_from_list(220,7259
+replace_nth(229,7518
+insert_nth(234,7618
+insert_after_nth(239,7711
+delete_nth(244,7828
+split_at(252,8027
+balance_left(267,8451
+balance_right(282,8865
+
+erl-src/lists.erl,593
+member(21,663
+append(30,790
+reverse(48,1099
+nth(59,1310
+nthtail(64,1382
+prefix(73,1546
+suffix(83,1707
+last(92,1882
+seq(101,2058
+sum(109,2265
+duplicate(116,2432
+min(124,2628
+max(132,2837
+sublist(141,3083
+delete(152,3329
+sort(161,3483
+split_and_sort(165,3559
+merge(175,3811
+concat(190,4219
+thing_to_list(195,4300
+flatten(204,4606
+flat_length(222,5003
+keymember(239,5451
+keysearch(246,5609
+keydelete(253,5770
+keyreplace(260,5923
+keysort(266,6113
+split_and_keysort(270,6229
+keymerge(277,6504
+keymap(288,6851
+map(311,7829
+foldl(315,7919
+foldr(320,8037
+zf(325,8155
+
+f-src/entry.for,172
+      LOGICAL FUNCTION PRTPKG 3,75
+       ENTRY  SETPRT 194,3866
+       ENTRY  MSGSEL 395,8478
+     & intensity1(577,12231
+       character*(*) function foo(579,12307
+
+f-src/entry.strange_suffix,172
+      LOGICAL FUNCTION PRTPKG 3,75
+       ENTRY  SETPRT 194,3866
+       ENTRY  MSGSEL 395,8478
+     & intensity1(577,12231
+       character*(*) function foo(579,12307
+
+f-src/entry.strange,103
+       ENTRY  MSGSEL 193,4382
+     & intensity1(375,8135
+       character*(*) function foo(377,8211
+
+forth-src/test-forth.fth,408
+: a-forth-word 20,301
+99 constant a-forth-constant!22,343
+55 value a-forth-value?23,373
+create :a-forth-dictionary-entry24,397
+defer #a-defer-word27,460
+: (another-forth-word)(another-forth-word29,481
+   9   field   >field136,582
+   5   field   >field237,605
+constant (a-forth-constant(a-forth-constant38,628
+2000 buffer: #some-storage41,657
+code assemby-code-word 43,685
+: a-forth-word 50,870
+
+html-src/softwarelibero.html,198
+Cos'� il software libero?4,38
+Licenze d'uso di un programmalicenze65,2474
+Sfatiamo alcuni miti138,6064
+Il movimento open sourceoss191,7968
+Impatto pratico del software liberoimpatto231,9986
+
+html-src/index.shtml,104
+&nbsp;8,281
+In evidenza15,446
+Comunicati e iniziative32,974
+Ultime notizie dall'associazione63,2027
+
+html-src/algrthms.html,467
+Tutorial on Convolutional Coding with Viterbi Decoding--Description of the 
Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and 
Quantizing Algorithms7,276
+Descriptionalgorithms10,477
+Generating the Datagenalgorithm48,1953
+Convolutionallyconalgorithm55,2463
+Nextstatetable262,11331
+Outputoutputtable350,13571
+Mapping the Channel Symbolsmapping433,15786
+Adding Noise to theaddnoise439,16174
+Quantizing the Receivedquantizing469,18637
+
+html-src/software.html,438
+Francesco Potort� Software Page9,280
+Software that I wrote for supporting my research activitysimulation36,1400
+MTGmtg41,1484
+Fracasfracas65,2626
+GaliLEOgalileo101,4234
+Leasqrleasqr114,4679
+Free software that I wrote for the GNU project or for my personal or 
workgnu142,6067
+Etagsetags148,6182
+checkiso161,6731
+cgrep178,7549
+debian-bug.eldebian-bug190,7981
+tcpdump205,8566
+Links to interesting softwarelinks216,8893
+
+java-src/AWTEMul.java,4356
+public class AWTEventMulticaster 63,2111
+    protected 
AWTEventMulticaster(AWTEventMulticaster.AWTEventMulticaster77,2555
+    protected EventListener remove(AWTEventMulticaster.remove86,2820
+    public void componentResized(AWTEventMulticaster.componentResized102,3294
+    public void componentMoved(AWTEventMulticaster.componentMoved112,3626
+    public void componentShown(AWTEventMulticaster.componentShown122,3952
+    public void componentHidden(AWTEventMulticaster.componentHidden132,4280
+    public void componentAdded(AWTEventMulticaster.componentAdded142,4619
+    public void componentRemoved(AWTEventMulticaster.componentRemoved152,4959
+    public void focusGained(AWTEventMulticaster.focusGained162,5281
+    public void focusLost(AWTEventMulticaster.focusLost172,5572
+    public void keyTyped(AWTEventMulticaster.keyTyped182,5853
+    public void keyPressed(AWTEventMulticaster.keyPressed192,6129
+    public void keyReleased(AWTEventMulticaster.keyReleased202,6413
+    public void mouseClicked(AWTEventMulticaster.mouseClicked212,6704
+    public void mousePressed(AWTEventMulticaster.mousePressed222,7004
+    public void mouseReleased(AWTEventMulticaster.mouseReleased232,7306
+    public void mouseEntered(AWTEventMulticaster.mouseEntered242,7609
+    public void mouseExited(AWTEventMulticaster.mouseExited252,7907
+    public void mouseDragged(AWTEventMulticaster.mouseDragged262,8204
+    public void mouseMoved(AWTEventMulticaster.mouseMoved272,8512
+    public void windowOpened(AWTEventMulticaster.windowOpened282,8819
+    public void windowClosing(AWTEventMulticaster.windowClosing292,9125
+    public void windowClosed(AWTEventMulticaster.windowClosed302,9432
+    public void windowIconified(AWTEventMulticaster.windowIconified312,9742
+    public void 
windowDeiconified(AWTEventMulticaster.windowDeiconified322,10064
+    public void windowActivated(AWTEventMulticaster.windowActivated332,10389
+    public void 
windowDeactivated(AWTEventMulticaster.windowDeactivated342,10712
+    public void actionPerformed(AWTEventMulticaster.actionPerformed352,11037
+    public void 
itemStateChanged(AWTEventMulticaster.itemStateChanged362,11356
+    public void 
adjustmentValueChanged(AWTEventMulticaster.adjustmentValueChanged372,11690
+    public void 
textValueChanged(AWTEventMulticaster.textValueChanged376,11874
+    public static ComponentListener add(AWTEventMulticaster.add387,12225
+    public static ContainerListener add(AWTEventMulticaster.add397,12571
+    public static FocusListener add(AWTEventMulticaster.add407,12901
+    public static KeyListener add(AWTEventMulticaster.add417,13207
+    public static MouseListener add(AWTEventMulticaster.add427,13513
+    public static MouseMotionListener add(AWTEventMulticaster.add437,13855
+    public static WindowListener add(AWTEventMulticaster.add447,14197
+    public static ActionListener add(AWTEventMulticaster.add457,14519
+    public static ItemListener add(AWTEventMulticaster.add467,14833
+    public static AdjustmentListener add(AWTEventMulticaster.add477,15163
+    public static TextListener add(AWTEventMulticaster.add480,15310
+    public static ComponentListener 
remove(AWTEventMulticaster.remove490,15664
+    public static ContainerListener 
remove(AWTEventMulticaster.remove500,16044
+    public static FocusListener remove(AWTEventMulticaster.remove510,16408
+    public static KeyListener remove(AWTEventMulticaster.remove520,16748
+    public static MouseListener remove(AWTEventMulticaster.remove530,17088
+    public static MouseMotionListener 
remove(AWTEventMulticaster.remove540,17465
+    public static WindowListener remove(AWTEventMulticaster.remove550,17841
+    public static ActionListener remove(AWTEventMulticaster.remove560,18197
+    public static ItemListener remove(AWTEventMulticaster.remove570,18545
+    public static AdjustmentListener 
remove(AWTEventMulticaster.remove580,18909
+    public static TextListener remove(AWTEventMulticaster.remove583,19062
+    protected static EventListener 
addInternal(AWTEventMulticaster.addInternal597,19608
+    protected static EventListener 
removeInternal(AWTEventMulticaster.removeInternal614,20244
+    protected void saveInternal(AWTEventMulticaster.saveInternal628,20582
+    static void save(AWTEventMulticaster.save646,21131
+
+java-src/KeyEve.java,698
+public class KeyEvent 36,1075
+    public KeyEvent(KeyEvent.KeyEvent234,9912
+    public KeyEvent(KeyEvent.KeyEvent252,10510
+    public int getKeyCode(KeyEvent.getKeyCode261,10836
+    public void setKeyCode(KeyEvent.setKeyCode265,10897
+    public void setKeyChar(KeyEvent.setKeyChar269,10978
+    public void setModifiers(KeyEvent.setModifiers273,11060
+    public char getKeyChar(KeyEvent.getKeyChar282,11331
+    public static String getKeyText(KeyEvent.getKeyText290,11561
+    public static String 
getKeyModifiersText(KeyEvent.getKeyModifiersText377,16662
+    public boolean isActionKey(KeyEvent.isActionKey403,17618
+    public String paramString(KeyEvent.paramString407,17704
+
+java-src/SMan.java,5099
+class SecurityManager 80,3387
+    public boolean getInCheck(SecurityManager.getInCheck101,4075
+    protected SecurityManager(SecurityManager.SecurityManager114,4497
+    protected Class 
currentLoadedClass(SecurityManager.currentLoadedClass149,5707
+    protected boolean inClass(SecurityManager.inClass184,7034
+    protected boolean inClassLoader(SecurityManager.inClassLoader196,7372
+    public Object 
getSecurityContext(SecurityManager.getSecurityContext221,8485
+    public void 
checkCreateClassLoader(SecurityManager.checkCreateClassLoader238,9069
+    public void checkAccess(SecurityManager.checkAccess268,10298
+    public void checkAccess(SecurityManager.checkAccess298,11632
+    public void checkExit(SecurityManager.checkExit323,12649
+    public void checkExec(SecurityManager.checkExec349,13734
+    public void checkLink(SecurityManager.checkLink375,14813
+    public void checkRead(SecurityManager.checkRead394,15485
+    public void checkRead(SecurityManager.checkRead412,16111
+    public void checkRead(SecurityManager.checkRead434,17017
+    public void checkWrite(SecurityManager.checkWrite453,17706
+    public void checkWrite(SecurityManager.checkWrite471,18337
+    public void checkDelete(SecurityManager.checkDelete493,19165
+    public void checkConnect(SecurityManager.checkConnect517,20119
+    public void checkConnect(SecurityManager.checkConnect543,21254
+    public void checkListen(SecurityManager.checkListen561,21910
+    public void checkAccept(SecurityManager.checkAccept585,22887
+    public void checkMulticast(SecurityManager.checkMulticast597,23272
+    public void checkMulticast(SecurityManager.checkMulticast610,23732
+    public void 
checkPropertiesAccess(SecurityManager.checkPropertiesAccess632,24609
+    public void 
checkPropertyAccess(SecurityManager.checkPropertyAccess654,25449
+    public boolean 
checkTopLevelWindow(SecurityManager.checkTopLevelWindow680,26580
+    public void 
checkPrintJobAccess(SecurityManager.checkPrintJobAccess689,26763
+    public void 
checkSystemClipboardAccess(SecurityManager.checkSystemClipboardAccess698,26958
+    public void 
checkAwtEventQueueAccess(SecurityManager.checkAwtEventQueueAccess707,27159
+    public void 
checkPackageAccess(SecurityManager.checkPackageAccess729,27966
+    public void 
checkPackageDefinition(SecurityManager.checkPackageDefinition751,28803
+    public void checkSetFactory(SecurityManager.checkSetFactory775,29929
+    public void checkMemberAccess(SecurityManager.checkMemberAccess786,30209
+    public void 
checkSecurityAccess(SecurityManager.checkSecurityAccess796,30430
+    public ThreadGroup getThreadGroup(SecurityManager.getThreadGroup811,30923
+class NullSecurityManager 817,31025
+    public void 
checkCreateClassLoader(NullSecurityManager.checkCreateClassLoader818,31077
+    public void checkAccess(NullSecurityManager.checkAccess819,31123
+    public void checkAccess(NullSecurityManager.checkAccess820,31165
+    public void checkExit(NullSecurityManager.checkExit821,31212
+    public void checkExec(NullSecurityManager.checkExec822,31254
+    public void checkLink(NullSecurityManager.checkLink823,31296
+    public void checkRead(NullSecurityManager.checkRead824,31338
+    public void checkRead(NullSecurityManager.checkRead825,31387
+    public void checkRead(NullSecurityManager.checkRead826,31430
+    public void checkWrite(NullSecurityManager.checkWrite827,31489
+    public void checkWrite(NullSecurityManager.checkWrite828,31539
+    public void checkDelete(NullSecurityManager.checkDelete829,31583
+    public void checkConnect(NullSecurityManager.checkConnect830,31628
+    public void checkConnect(NullSecurityManager.checkConnect831,31684
+    public void checkListen(NullSecurityManager.checkListen832,31756
+    public void checkAccept(NullSecurityManager.checkAccept833,31798
+    public void checkMulticast(NullSecurityManager.checkMulticast834,31853
+    public void checkMulticast(NullSecurityManager.checkMulticast835,31907
+    public void 
checkPropertiesAccess(NullSecurityManager.checkPropertiesAccess836,31971
+    public void 
checkPropertyAccess(NullSecurityManager.checkPropertyAccess837,32015
+    public void 
checkPropertyAccess(NullSecurityManager.checkPropertyAccess838,32067
+    public boolean 
checkTopLevelWindow(NullSecurityManager.checkTopLevelWindow839,32131
+    public void 
checkPrintJobAccess(NullSecurityManager.checkPrintJobAccess840,32202
+    public void 
checkSystemClipboardAccess(NullSecurityManager.checkSystemClipboardAccess841,32244
+    public void 
checkAwtEventQueueAccess(NullSecurityManager.checkAwtEventQueueAccess842,32293
+    public void 
checkPackageAccess(NullSecurityManager.checkPackageAccess843,32340
+    public void 
checkPackageDefinition(NullSecurityManager.checkPackageDefinition844,32391
+    public void checkSetFactory(NullSecurityManager.checkSetFactory845,32446
+    public void 
checkMemberAccess(NullSecurityManager.checkMemberAccess846,32484
+    public void 
checkSecurityAccess(NullSecurityManager.checkSecurityAccess847,32546
+
+java-src/SysCol.java,295
+public final class SystemColor 37,1402
+    private static void 
updateSystemColors(SystemColor.updateSystemColors349,10617
+    private SystemColor(SystemColor.SystemColor357,10885
+    public int getRGB(SystemColor.getRGB370,11245
+    public String toString(SystemColor.toString377,11388
+
+java-src/TG.java,2041
+class ThreadGroup 54,2104
+    private ThreadGroup(ThreadGroup.ThreadGroup72,2495
+    public ThreadGroup(ThreadGroup.ThreadGroup84,2848
+    public ThreadGroup(ThreadGroup.ThreadGroup105,3714
+    public final String getName(ThreadGroup.getName124,4189
+    public final ThreadGroup getParent(ThreadGroup.getParent135,4492
+    public final int getMaxPriority(ThreadGroup.getMaxPriority148,4867
+    public final boolean isDaemon(ThreadGroup.isDaemon161,5305
+    public synchronized boolean isDestroyed(ThreadGroup.isDestroyed170,5470
+    public final void setDaemon(ThreadGroup.setDaemon192,6368
+    public final void setMaxPriority(ThreadGroup.setMaxPriority213,7110
+    public final boolean parentOf(ThreadGroup.parentOf246,8106
+    public final void checkAccess(ThreadGroup.checkAccess268,8834
+    public int activeCount(ThreadGroup.activeCount283,9286
+    public int enumerate(ThreadGroup.enumerate322,10497
+    public int enumerate(ThreadGroup.enumerate344,11481
+    private int enumerate(ThreadGroup.enumerate348,11584
+    public int activeGroupCount(ThreadGroup.activeGroupCount389,12588
+    public int enumerate(ThreadGroup.enumerate425,13727
+    public int enumerate(ThreadGroup.enumerate445,14595
+    private int enumerate(ThreadGroup.enumerate449,14703
+    public final void stop(ThreadGroup.stop499,16212
+    public final void suspend(ThreadGroup.suspend537,17477
+    public final void resume(ThreadGroup.resume575,18749
+    public final void destroy(ThreadGroup.destroy607,19779
+    private final void add(ThreadGroup.add643,20704
+    private void remove(ThreadGroup.remove668,21402
+    void add(ThreadGroup.add697,22142
+    void remove(ThreadGroup.remove722,22808
+    public void list(ThreadGroup.list751,23503
+    void list(ThreadGroup.list754,23556
+    public void uncaughtException(ThreadGroup.uncaughtException810,25512
+    public boolean 
allowThreadSuspension(ThreadGroup.allowThreadSuspension823,25823
+    public String toString(ThreadGroup.toString837,26142
+
+lua-src/allegro.lua,400
+local function get_layer_by_name 7,175
+local function count_layers 33,621
+function GetLayerByName 54,980
+function GetUniqueLayerName 65,1204
+function SelectLayer 76,1415
+function NewLayer 86,1773
+function NewLayerSet 144,3226
+function RemoveLayer 170,3750
+function MoveLayerTop 211,4767
+function MoveLayerBottom 223,5079
+function MoveLayerBefore 236,5457
+function MoveLayerAfter 258,6090
+
+make-src/Makefile,1133
+LATEST=1,0
+NONSRCS=35,1578
+CPPFLAGS=49,2191
+LDFLAGS=50,2260
+FASTCFLAGS=55,2531
+FILTER=58,2642
+       @-$($72,3064
+       @-$($73,3113
+       @-$($74,3177
+       @-$($75,3223
+       @-$($76,3291
+       @-$($77,3383
+       @$(81,3466
+       @$(82,3514
+       @$(83,3577
+       @$(84,3622
+       @$(85,3689
+       @$(86,3780
+${CHECKOBJS}: CFLAGS=88,3806
+       @env CHECKEROPTS=92,3922
+       @$(98,4094
+       @$(106,4250
+       @$(110,4374
+       @$(114,4500
+       @for i in $(SRCS); do echo $$i;140,5315
+       $(160,6053
+       $(163,6114
+       $(166,6177
+       $(169,6228
+       $(172,6317
+       sdiff --suppress-common-lines --width=width186,6614
+       sdiff --suppress-common-lines --width=width189,6703
+       sdiff --suppress-common-lines --width=width192,6791
+       sdiff --suppress-common-lines --width=width195,6880
+       TEXTAGS=204,7122
+       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* 
--regex=regex204,7122
+       ${RUN} etags12 --members -o $@ --regex=regex207,7239
+       ${RUN} ./ctags -o $@ --regex=regex213,7388
+       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=regex216,7464
+       TEXTAGS=219,7583
+       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ 
--regex=regex219,7583
+       ${RUN} ./extags -e --regex-c=c222,7710
+
+objc-src/Subprocess.h,98
+#define Subprocess 41,1217
+#define BUFFERSIZE 43,1267
address@hidden Subprocess:Subprocess45,1292
+
+objc-src/Subprocess.m,475
+#define        PTY_TEMPLATE 20,494
+#define        PTY_LENGTH 21,528
address@hidden Subprocess(Private)Subprocess(Private)32,737
+- childDidExit39,851
+- fdHandler:67,1589
+showError 98,2360
+fdHandler 112,2785
+getptys 119,2907
+- init:183,4815
+    andStdErr:init:withDelegate:andPtySupport:andStdErr:197,5147
+- send:(const char *)string withNewline:send:withNewline:300,7436
+- send:308,7599
+- terminateInput314,7689
+- terminate:321,7810
+- setDelegate:332,7961
+- delegate338,8031
+
+objc-src/PackInsp.h,109
+#define NUMSTATS       36,1101
+#define TYPESTOSTAT    37,1120
address@hidden PackageInspector:PackageInspector39,1172
+
+objc-src/PackInsp.m,1360
+static const char RCSid[RCSid30,1032
+#define VERSION        34,1116
+#   define DEBUG 37,1155
+#define LISTCONTENTS   39,1181
+#define OPENBUTTON     47,1352
+#define LISTCONTENTSBUTTON     48,1449
+#define LISTDESCRIPTIONBUTTON  49,1562
+#define STATE_UNINSTALLED      52,1687
+#define STATE_INSTALLED        53,1807
+#define STATE_COMPRESSD        54,1948
+#define SIZEFORMAT     57,2152
+#define KBYTES 58,2362
+#define MBYTES 59,2473
+#define LOCALIZE(61,2585
+#define LOCALIZE_ARCH(62,2668
++newnew67,2802
+-showInfo:showInfo:93,3417
+-revert:revert:107,3737
+-ok:ok:136,4297
+-loadload143,4424
+#define LOOKUP(156,4826
+#undef LOOKUP176,5694
+-loadKeyValuesFrom:(const char *)type 
inTable:loadKeyValuesFrom:inTable:186,5852
+-loadContentsOf:(const char *)type inTable:loadContentsOf:inTable:238,7079
+-loadImageloadImage257,7552
+#define STAT_EQ(275,7940
+-(BOOL)shouldLoad280,8116
+-toggleDescriptiontoggleDescription301,8626
+-(const char *)getPath:(char *)buf forType:getPath:forType:317,8899
+-setRevertButtonTitlesetRevertButtonTitle333,9320
+-(const char *)formatSize:(const char *)size inBuf:formatSize:inBuf:344,9525
+#define WORKING        368,10045
+-(void)getArchs370,10100
+-(void)addArchs:385,10520
+-subprocess:(Subprocess *)sender output:subprocess:output:428,11351
+-subprocessDone:subprocessDone:436,11484
+static void openInWorkspace(446,11634
+-open:open:464,12063
+
+objcpp-src/SimpleCalc.H,41
address@hidden SimpleCalc:SimpleCalc14,400
+
+objcpp-src/SimpleCalc.M,300
+- init52,1747
+- appendToDisplay:60,1933
+- registerAction:70,2210
+- decimalKey:77,2348
+- numberKeys:91,2661
+- equalsKey:112,3192
+- operationKeys:131,3680
+- clearKey:153,4301
+- clearAllKey:160,4410
+- appDidInit:168,4591
+- windowWillClose:178,4882
+- infoPanel:186,5132
+- helpPanel:198,5482
+
+pas-src/common.pas,1875
+procedure InitializeStringPackage;26,527
+function newtextstring;34,874
+procedure disposetextstring;52,1404
+function ConcatT;78,2066
+function AppendTextString;112,3238
+function CopyTextString;132,3947
+procedure CONVERT_CHARSTRING_TO_VALUE;151,4505
+procedure append_string;172,5166
+function To_Upper;186,5462
+function To_Lower;194,5617
+function EmptyNmStr(209,6213
+function chartonmstr;219,6436
+function LowerCaseNmStr;230,6682
+function concatenatenamestrings;242,7007
+procedure writenamestring;263,7517
+function IsControlChar;277,7928
+function namestringequal;283,8079
+function NameStringLess;302,8539
+function IsControlCharName(343,9710
+function SubString;358,10208
+function SkipChars;379,10791
+function RemoveUnderlineControl;397,11311
+procedure First100Chars;427,12162
+procedure SkipSpaces;462,13298
+function SkipBlanks;477,13782
+function stripname;505,14595
+function Locate;522,15039
+function NameHasChar;543,15581
+function integertonmstr;561,16134
+function NmStrToInteger;585,16901
+function AddNullToNmStr;600,17317
+function ValToNmStr;611,17585
+function ChangeFileType;625,18037
+function StripPath;647,18734
+function ReprOfChar;675,19343
+procedure ExtractCommentInfo;702,20749
+procedure INSERT_TREE_NODE;784,24053
+function GetNameList;920,27926
+procedure DisposeANameList(925,28010
+procedure DisposeNameList;938,28340
+function GetNewNameListNode;943,28409
+function insertname;972,29051
+procedure InitNameList;988,29471
+procedure InitNameStringPool;998,29767
+procedure NewNameString;1004,29867
+procedure ReleaseNameString;1022,30232
+procedure SDTrefStringToRec 1045,30741
+procedure SDTrefSkipSpaces;1059,31092
+function SDTrefIsEnd 1070,31323
+function SDTrefGetInteger 1082,31529
+procedure SDTrefRecToString 1303,37546
+function NmStrToErrStr;1497,42305
+function ErrStrToNmStr;1509,42557
+function GetTextRef;1529,43112
+
+php-src/lce_functions.php,2152
+  define("LCE_FUNCTIONS"LCE_FUNCTIONS4,38
+  define("LCE_UNKNOWN"LCE_UNKNOWN9,145
+  define("LCE_WS"LCE_WS11,194
+  define("LCE_COMMENT"LCE_COMMENT13,244
+  define("LCE_COMMENT_USER"LCE_COMMENT_USER15,303
+  define("LCE_COMMENT_TOOL"LCE_COMMENT_TOOL17,366
+  define("LCE_MSGID"LCE_MSGID19,430
+  define("LCE_MSGSTR"LCE_MSGSTR21,488
+  define("LCE_TEXT"LCE_TEXT23,541
+  define("STATE_ABORT"STATE_ABORT25,567
+  define("STATE_OK"STATE_OK26,595
+  define("STATE_LOOP"STATE_LOOP27,620
+  class POEntryAD 29,648
+      function validate(31,683
+      function checkQuotation(59,1384
+  class CommentAD 70,1639
+      function CommentAD(73,1693
+      function validate(83,1944
+  class POEntry 105,2410
+      function POEntry(119,2711
+      function lineCount(135,3255
+      function serializeToVars(141,3365
+      function write(151,3800
+  class POReader 163,4178
+      function gettext(177,4457
+      function parseFromVars(189,4705
+      function serializeToVars(215,5331
+      function POReader(229,5613
+      function read(243,5983
+      function write(259,6307
+      function isComment(277,6645
+      function comment(284,6822
+      function msgid(304,7247
+      function msgstr(320,7574
+      function start(340,8232
+      function createPOEntries(360,8644
+      function stripLine(394,9472
+      function printClassification(421,10056
+      function classifyLine(432,10301
+  function getTextDomains(471,11094
+  class PORManager 498,11756
+      function PORManager(502,11822
+      function addPOReader(507,11896
+      function &getPOReader(getPOReader512,11992
+      function getDomainNames(517,12081
+  function &loadPORManager(loadPORManager523,12174
+  function fileJoin(536,12436
+      function lce_bindtextdomain(557,12839
+      function lce_textdomain(614,14530
+      function lce_gettext(620,14641
+      function lce_dgettext(626,14767
+      function lce(634,14966
+      function lce_bindtextdomain(651,15488
+      function lce_textdomain(656,15592
+      function lce_gettext(661,15674
+      function lce_dgettext(666,15755
+      function lce(670,15855
+  function lce_geteditcode(676,15898
+
+php-src/ptest.php,46
+define("TEST"TEST1,0
+test 4,26
+foo(16,200
+
+perl-src/htlmify-cystic,1443
+my @section_name;section_name12,236
+my @appendix_name;appendix_name13,254
+my @section_toc;section_toc15,274
+my @appendix_toc;appendix_toc16,291
+my $new_tag new_tag18,310
+my $appendix;appendix24,409
+my $section;section25,423
+my $subsection;subsection26,436
+my $subsubsection;subsubsection27,452
+my $this_file_toc this_file_toc29,472
+my %file_tocs;file_tocs30,496
+my @output_files output_files32,512
+my $file_index file_index33,535
+my $output_file;output_file35,556
+my $line;line37,574
+my $subsection_marker;subsection_marker161,3883
+my $new;new163,3907
+sub read_toc main::read_toc165,3917
+         my $entry entry218,5621
+         my $entry entry234,6077
+             my $entry entry245,6351
+         my $entry entry252,6536
+         my $entry entry268,7010
+             my $entry entry276,7204
+         my $entry entry281,7328
+      my $entry entry296,7698
+sub finish_subsubsections main::finish_subsubsections302,7805
+sub finish_subsections main::finish_subsections309,7987
+sub finish_sections main::finish_sections320,8310
+sub finish_appendices main::finish_appendices331,8599
+sub section_url_base main::section_url_base337,8724
+sub section_url_name main::section_url_name342,8922
+sub section_url main::section_url355,9284
+  my $name name357,9336
+sub section_href main::section_href364,9452
+sub section_name main::section_name368,9551
+sub toc_line main::toc_line372,9655
+sub file_end main::file_end375,9750
+
+perl-src/yagrip.pl,258
+sub getopt main::getopt7,156
+       local($_,$flag,$opt,$f,$r,@temp)($_,$flag,$opt,$f,$r,@temp8,169
+sub usage main::usage38,856
+       local($prog,$_,@list)($prog,$_,@list39,868
+       
local($string,$flag,@string,@temp,@last)($string,$flag,@string,@temp,@last40,897
+
+perl-src/kai-test.pl,244
+sub f1 main::f12,16
+sub main::f2 6,50
+package Foo;10,90
+sub f3 Foo::f312,104
+sub Bar::f4 16,138
+package Bar;20,177
+sub f5 Bar::f522,191
+package Foo::Bar;26,225
+sub f6 Foo::Bar::f628,244
+package main;32,278
+sub f7 main::f734,293
+
+perl-src/mirror.pl,13410
+sub msg_versionmain::msg_version459,18271
+       local( $arg )( $arg 468,18582
+               local( $flag, $p )( $flag, $p 480,18757
+               local( $site_path )( $site_path 525,19687
+                       local( $site, $path )( $site, $path 539,19958
+               local( $key_val )( $key_val 578,20743
+               local( $user )( $user 595,21097
+               local( $c )( $c 634,21853
+                       local( $sec,$min,$hour,$mday,$mon,$year,( 
$sec,$min,$hour,$mday,$mon,$year,678,22807
+       local( $c )( $c 706,23393
+       local( $dir, $mp )( $dir, $mp 723,23695
+               local( $f )( $f 725,23740
+sub interpret_config_filesmain::interpret_config_files756,24304
+       local( $fname )( $fname 758,24333
+sub interpret_configmain::interpret_config785,24927
+sub parse_linemain::parse_line827,25710
+       local( $eqpl )( $eqpl 829,25727
+       local( $cont )( $cont 830,25744
+                       local( $v )( $v 839,26029
+sub set_defaultsmain::set_defaults860,26448
+sub command_line_overridemain::command_line_override868,26579
+       local( $key, $val, $overrides )( $key, $val, $overrides 870,26607
+sub set_variablesmain::set_variables894,27072
+       local( $key, $val )( $key, $val 896,27092
+                       local( $val_name )( $val_name 902,27259
+               local( $val )( $val 953,28825
+sub upd_valmain::upd_val962,28974
+       local( $key )( $key 964,28988
+sub pr_variablesmain::pr_variables970,29083
+       local( $msg )( $msg 972,29102
+       local( $nle )( $nle 973,29123
+       local( $out )( $out 974,29144
+       local( $key, $val, $str )( $key, $val, $str 975,29164
+sub do_mirrormain::do_mirror1007,29923
+       local( $get_one_package )( $get_one_package 1009,29939
+       local( $exit_status )( $exit_status 1030,30384
+                       local( @t )( @t 1154,33165
+       local( $con )( $con 1241,35499
+               local( @rhelp )( @rhelp 1289,36702
+       local( @sub_dirs )( @sub_dirs 1329,37778
+       local( $now )( $now 1493,41348
+               local( $arg )( $arg 1506,41774
+sub disconnectmain::disconnect1528,42250
+sub connectmain::connect1546,42576
+       local( $attempts )( $attempts 1548,42590
+       local( $res )( $res 1549,42642
+sub prodmain::prod1573,43156
+sub checkout_regexpsmain::checkout_regexps1585,43327
+       local( $ret )( $ret 1587,43350
+       local( $t )( $t 1589,43395
+               local( $val )( $val 1597,43701
+                       local( $err )( $err 1601,43786
+sub clear_localmain::clear_local1610,43909
+sub clear_remotemain::clear_remote1625,44172
+sub get_local_directory_detailsmain::get_local_directory_details1640,44445
+       local( @dirs, $dir )( @dirs, $dir 1642,44479
+       local( $last_prodded )( $last_prodded 1643,44502
+       local( $dir_level )( $dir_level 1691,45615
+       local( $i )( $i 1692,45641
+       local( $path, $time, $size, $type, $mode, $name, $isdir, $value, 
$follow )( $path, $time, $size, $type, $mode, $name, $isdir, $value, $follow 
1693,45659
+       local( $dev,$ino,$fmode,$nlink,$uid,$gid,$rdev,$ssize,( 
$dev,$ino,$fmode,$nlink,$uid,$gid,$rdev,$ssize,1694,45736
+                       local( $mapi )( $mapi 1763,47586
+sub get_remote_directory_detailsmain::get_remote_directory_details1789,48122
+       local( $type_changed )( $type_changed 1791,48157
+       local( $udirtmp )( $udirtmp 1792,48186
+       local( $storename )( $storename 1793,48206
+       local( $rls )( $rls 1825,48944
+               local( $dirtmp )( $dirtmp 1830,49002
+               local( $unsquish )( $unsquish 1832,49130
+                       local( $f )( $f 1840,49360
+               local( $dirtmp )( $dirtmp 1859,49866
+               local( $unsquish )( $unsquish 1870,50215
+                       local( $f, $uf )( $f, $uf 1878,50445
+               local( $flags )( $flags 1912,51259
+       local( $parse_state )( $parse_state 1946,52111
+                       local( $msg )( $msg 1963,52486
+sub patch_ls_lR_filemain::patch_ls_lR_file1984,52955
+       local( $f, $fr, $flb, $flt, $flp, $flz, $frb, $frt )( $f, $fr, $flb, 
$flt, $flp, $flz, $frb, $frt 1990,53055
+       local( $to , $tn )( $to , $tn 1991,53110
+       local( $tlb )( $tlb 1995,53225
+               local( $p, $s, $trz, $t, $m )( $p, $s, $trz, $t, $m 2030,54182
+               local( $tlz )( $tlz 2037,54467
+sub parse_timeoutmain::parse_timeout2089,55670
+sub parse_remote_detailsmain::parse_remote_details2095,55754
+       local( $ret )( $ret 2097,55781
+       local( $old_sig )( $old_sig 2098,55797
+sub parse_remote_details_realmain::parse_remote_details_real2125,56234
+       local( $path, $size, $time, $type, $mode, $rdir, $rcwd )( $path, 
$size, $time, $type, $mode, $rdir, $rcwd 2127,56266
+       local( @dir_list )( @dir_list 2128,56325
+       local( $i )( $i 2129,56346
+       local( $old_path )( $old_path 2130,56364
+                               local( $old_path )( $old_path 2143,56630
+                               local( $ri )( $ri 2203,58078
+                       local( $mapi )( $mapi 2214,58335
+                       local( $done )( $done 2239,58911
+sub compare_dirsmain::compare_dirs2283,59825
+       local( *src_paths,( *src_paths,2286,59915
+       local( $src_path, $dest_path, $i )( $src_path, $dest_path, $i 
2293,60099
+       local( $last_prodded )( $last_prodded 2294,60136
+       local( $desti, $srci, $compress, $srciZ, $srcigz, $split, 
$dest_path_real )( $desti, $srci, $compress, $srciZ, $srcigz, $split, 
$dest_path_real 2299,60350
+       local( $old_dest_path, $existing_path, $tmp, $restart )( 
$old_dest_path, $existing_path, $tmp, $restart 2300,60428
+       local( $sp, $dp )( $sp, $dp 2301,60486
+                  local( $real, $reali, $reali1 )( $real, $reali, $reali1 
2352,62034
+                  local( $count )( $count 2353,62072
+                       local( $value )( $value 2408,63996
+                       local( $real )( $real 2409,64028
+                       local( $reali )( $reali 2410,64086
+                               local( $old )( $old 2421,64571
+                       local( $old_dest_path )( $old_dest_path 2432,64842
+                               local( $dpp, $dps )( $dpp, $dps 2509,67031
+               local( $update )( $update 2534,67671
+sub map_namemain::map_name2651,71028
+       local( $name )( $name 2653,71043
+               local( $old_name )( $old_name 2656,71089
+               local( $tmp )( $tmp 2666,71252
+sub set_timestampsmain::set_timestamps2675,71362
+       local( $src_path )( $src_path 2677,71383
+       local( $dest_path, $dest_loc_mapi, $src_rem_mapi,  $rtime )( 
$dest_path, $dest_loc_mapi, $src_rem_mapi,  $rtime 2685,71517
+sub set_timestampmain::set_timestamp2699,71901
+       local( $path, $time )( $path, $time 2701,71921
+       local( $pr_time )( $pr_time 2703,71953
+sub make_dirsmain::make_dirs2719,72284
+       local( $thing )( $thing 2721,72300
+sub make_symlinksmain::make_symlinks2736,72489
+       local( $thing )( $thing 2738,72509
+               local( $dest, $existing )( $dest, $existing 2745,72623
+               local( $dirpart )( $dirpart 2746,72663
+               local( $ft )( $ft 2747,72704
+               local( $p )( $p 2762,73261
+                       local( $f )( $f 2770,73467
+                       local( $dl )( $dl 2788,74038
+sub do_all_transfersmain::do_all_transfers2806,74439
+       local( $src_path )( $src_path 2808,74462
+       local( $dest_path, $attribs )( $dest_path, $attribs 2809,74483
+       local( $srci )( $srci 2810,74515
+               local( $newpath )( $newpath 2838,75124
+sub transfer_filemain::transfer_file2869,75847
+       local( $src_path, $dest_path, $attribs, $timestamp )( $src_path, 
$dest_path, $attribs, $timestamp 2871,75867
+       local( $dir, $file, $temp, $compress, $split, $restart, $mesg, 
$got_mesg )( $dir, $file, $temp, $compress, $split, $restart, $mesg, $got_mesg 
2872,75927
+               local( $src_file )( $src_file 2915,76782
+               local( $comptemp )( $comptemp 2916,76816
+                       local( $f )( $f 2921,76964
+               local($filesize)($filesize2944,77569
+                       local( $ti )( $ti 2975,78401
+               local( $f )( $f 2997,78887
+               local( $comp )( $comp 2998,78912
+       local( $filesize )( $filesize 3015,79427
+       local( $sizemsg )( $sizemsg 3016,79469
+       local( $srcsize )( $srcsize 3017,79501
+               local( $time )( $time 3029,79865
+       local( $as )( $as 3046,80223
+       local( $locali )( $locali 3054,80499
+sub filename_to_tempnamemain::filename_to_tempname3062,80713
+       local( $dir, $file )( $dir, $file 3064,80740
+       local ( $dest_path )( $dest_path 3066,80769
+sub log_uploadmain::log_upload3090,81228
+       local( $src_path, $dest_path, $got_mesg, $size )( $src_path, 
$dest_path, $got_mesg, $size 3092,81245
+sub do_deletesmain::do_deletes3118,81773
+       local( *src_paths,( *src_paths,3121,81861
+       local( $files_to_go, $dirs_to_go )( $files_to_go, $dirs_to_go 
3125,81960
+       local( $src_path, $i )( $src_path, $i 3131,82055
+       local( $orig_do_deletes )( $orig_do_deletes 3132,82080
+       local( $orig_save_deletes )( $orig_save_deletes 3133,82122
+       local( $del_patt )( $del_patt 3135,82169
+               local( $per )( $per 3162,82843
+               local( $per )( $per 3184,83513
+                       local( $save_dir_tail )( $save_dir_tail 3226,84617
+sub save_deletemain::save_delete3245,85019
+       local( $save, $kind )( $save, $kind 3247,85037
+       local( $real_save_dir, $save_dest )( $real_save_dir, $save_dest 
3249,85067
+       local( $dirname )( $dirname 3284,85704
+sub save_mkdirmain::save_mkdir3304,86155
+       local( $dir )( $dir 3306,86172
+sub do_deletemain::do_delete3320,86459
+       local( $del, $kind )( $del, $kind 3322,86475
+sub filesizemain::filesize3377,87532
+       local( $fname )( $fname 3379,87547
+sub istruemain::istrue3390,87654
+       local( $val )( $val 3392,87667
+sub mksymlinkmain::mksymlink3398,87773
+       local( $dest_path, $existing_path )( $dest_path, $existing_path 
3400,87789
+               local( $msg )( $msg 3417,88246
+               local( $msg )( $msg 3431,88590
+               local( $status )( $status 3442,88816
+sub mkdirsmain::mkdirs3457,89196
+       local( $dir )( $dir 3459,89209
+       local( @dir, $d, $path )( @dir, $d, $path 3460,89230
+sub make_dirmain::make_dir3497,90042
+       local( $dir, $mode )( $dir, $mode 3499,90057
+       local( $val )( $val 3500,90085
+sub dir_existsmain::dir_exists3528,90573
+       local( $dir )( $dir 3530,90590
+       local( $val )( $val 3531,90611
+               local($old_dir)($old_dir3539,90750
+sub set_attribsmain::set_attribs3553,91053
+       local( $path, $src_path, $type )( $path, $src_path, $type 3555,91071
+       local( $mode )( $mode 3556,91111
+               local( $pathi )( $pathi 3564,91229
+               local( $pathi )( $pathi 3568,91320
+sub get_passwdmain::get_passwd3606,91977
+       local( $user )( $user 3608,91994
+       local( $pass )( $pass 3609,92016
+       local( $| )( $| 3610,92033
+sub compare_timesmain::compare_times3631,92384
+       local( $t1, $t2 )( $t1, $t2 3637,92564
+       local( $diff )( $diff 3638,92589
+sub create_assocsmain::create_assocs3643,92688
+       local( $map )( $map 3645,92708
+sub delete_assocsmain::delete_assocs3657,92957
+       local( $map )( $map 3659,92977
+sub unlink_dbmmain::unlink_dbm3671,93247
+       local( $file )( $file 3673,93264
+sub bsplitmain::bsplit3681,93462
+       local( $temp, $dest_path, $time )( $temp, $dest_path, $time 3683,93475
+       local( $dest_dir )( $dest_dir 3684,93516
+       local( $bufsiz )( $bufsiz 3685,93558
+       local( $buffer, $in, $sofar )( $buffer, $in, $sofar 3686,93583
+       local( $d )( $d 3691,93721
+       local( $index )( $index 3697,93840
+       local( $part )( $part 3698,93865
+                       local( $locali )( $locali 3714,94336
+       local( $readme )( $readme 3730,94740
+sub sysmain::sys3739,95116
+       local( $com )( $com 3741,95126
+sub set_assoc_from_arraymain::set_assoc_from_array3751,95355
+       local( *things )( *things 3754,95453
+sub find_progmain::find_prog3760,95537
+       local( $prog )( $prog 3762,95553
+       local( $path )( $path 3763,95575
+               local( $path )( $path 3766,95657
+sub real_dir_from_pathmain::real_dir_from_path3780,95842
+       local( $program )( $program 3782,95867
+       local( @prog_path )( @prog_path 3783,95892
+       local( $dir )( $dir 3784,95970
+sub msgmain::msg3807,96489
+       local( $todo, $msg )( $todo, $msg 3809,96499
+sub to_bytesmain::to_bytes3838,96979
+       local( $size )( $size 3840,96994
+sub unix2vmsmain::unix2vms3858,97332
+       local( $v, $kind )( $v, $kind 3860,97347
+                       local( $dir, $rest )( $dir, $rest 3873,97559
+sub dirpartmain::dirpart3886,97730
+       local( $path )( $path 3888,97744
+sub expand_symlinkmain::expand_symlink3902,98076
+       local( $orig_path, $points_to )( $orig_path, $points_to 3904,98097
+       local( $dirpart )( $dirpart 3905,98136
+sub flatten_pathmain::flatten_path3913,98365
+       local( $path )( $path 3915,98384
+       local( $changed )( $changed 3916,98406
+       local( $i )( $i 3917,98430
+       local( $rooted )( $rooted 3919,98446
+       local( $count )( $count 3920,98482
+       local( $orig_path )( $orig_path 3921,98504
+               local( $in )( $in 3932,98741
+               local( @parts )( @parts 3933,98765
+sub fix_packagemain::fix_package3963,99438
+       local( $package )( $package 3965,99456
+sub will_compressmain::will_compress3970,99529
+sub will_splitmain::will_split3981,99859
+sub myflockmain::myflock3989,100001
+       local( $file, $kind )( $file, $kind 3991,100015
+sub t2strmain::t2str4004,100221
+       local( @t )( @t 4006,100233
+       
local($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst4013,100335
+sub handlermain::handler4022,100583
+        local( $sig )( $sig 4029,100651
+        local( $msg )( $msg 4030,100679
+        local( $package, $filename, $line )( $package, $filename, $line 
4031,100737
+sub trap_signalsmain::trap_signals4036,100859
+       local( $sig )( $sig 4038,100878
+sub map_user_groupmain::map_user_group4047,101158
+sub keepmain::keep4069,101537
+       local( $pathi, $path, *keep, *keep_totals, *keep_map, $kind )( $pathi, 
$path, *keep, *keep_totals, *keep_map, $kind 4071,101548
+sub alarmmain::alarm4104,102330
+       local( $time_to_sig )( $time_to_sig 4106,102342
+sub chownmain::chown4110,102405
+       local( $uid, $gid, $path )( $uid, $gid, $path 4112,102417
+sub utimemain::utime4116,102494
+       local( $atime, $mtime, $path )( $atime, $mtime, $path 4118,102506
+       local( $old_mode )( $old_mode 4124,102685
+       local( $tmp_mode )( $tmp_mode 4125,102730
+       local( $ret )( $ret 4126,102763
+sub cwdmain::cwd4135,102913
+       local( $lcwd )( $lcwd 4137,102923
+
+ps-src/rfc1245.ps,2478
+/FMversion 12,311
+/FrameDict 17,500
+/FMVERSION 47,1307
+/FMLOCAL 56,1494
+/FMDOCUMENT 73,1766
+/FMBEGINPAGE 95,2279
+/FMENDPAGE 109,2516
+/FMDEFINEFONT 115,2582
+/FMNORMALIZEGRAPHICS 126,2725
+/FMBEGINEPSF 142,2955
+/FMENDEPSF 153,3207
+/setmanualfeed 158,3283
+/max 163,3386
+/min 164,3426
+/inch 165,3466
+/pagedimen 166,3485
+/setpapername 172,3629
+/papersize 190,4214
+/manualpapersize 211,4789
+/desperatepapersize 230,5211
+/savematrix 239,5370
+/restorematrix 242,5425
+/dmatrix 245,5475
+/dpi 246,5495
+/freq 248,5583
+/sangle 249,5658
+/DiacriticEncoding 250,5717
+/.notdef 251,5738
+/.notdef 252,5801
+/.notdef 253,5864
+/.notdef 254,5927
+/.notdef 255,5990
+/numbersign 256,6051
+/parenright 257,6115
+/two 258,6184
+/less 259,6251
+/L 260,6320
+/bracketright 261,6389
+/i 262,6459
+/braceright 263,6529
+/Ntilde 264,6598
+/atilde 265,6668
+/iacute 266,6733
+/ocircumflex 267,6797
+/udieresis 268,6858
+/paragraph 269,6919
+/dieresis 270,6983
+/yen 271,7050
+/ordfeminine 272,7109
+/exclamdown 273,7171
+/guillemotleft 274,7230
+/Otilde 275,7296
+/quoteleft 276,7357
+/fraction 277,7420
+/periodcentered 278,7490
+/Acircumflex 279,7549
+/Icircumflex 280,7610
+/Uacute 281,7680
+/breve 282,7746
+/ReEncode 284,7814
+/graymode 300,8020
+/setpattern 310,8184
+/grayness 331,8725
+/normalize 394,9873
+/dnormalize 397,9942
+/lnormalize 400,10014
+/H 403,10104
+/Z 406,10147
+/X 409,10176
+/V 412,10219
+/N 415,10260
+/M 418,10286
+/E 419,10315
+/D 420,10336
+/O 421,10358
+/L 423,10394
+/Y 430,10489
+/R 439,10588
+/RR 450,10696
+/C 467,10959
+/U 473,11004
+/F 477,11039
+/T 481,11084
+/RF 484,11115
+/TF 488,11164
+/P 495,11219
+/PF 499,11270
+/S 506,11344
+/SF 510,11384
+/B 517,11446
+/BF 521,11505
+/W 538,11714
+/G 573,12382
+/A 582,12525
+/BEGINPRINTCODE 606,12918
+/ENDPRINTCODE 615,13131
+/gn 620,13259
+/cfs 631,13384
+/ic 636,13473
+/ms 658,14285
+/ip 668,14395
+/wh 678,14492
+/bl 684,14607
+/s1 690,14722
+/fl 691,14739
+/hx 698,14887
+/wbytes 709,15055
+/BEGINBITMAPBWc 713,15147
+/BEGINBITMAPGRAYc 716,15198
+/BEGINBITMAP2BITc 719,15251
+/COMMONBITMAPc 722,15304
+/BEGINBITMAPBW 739,15660
+/BEGINBITMAPGRAY 742,15709
+/BEGINBITMAP2BIT 745,15760
+/COMMONBITMAP 748,15811
+/Fmcc 765,16156
+/ngrayt 773,16371
+/nredt 774,16393
+/nbluet 775,16414
+/ngreent 776,16436
+/colorsetup 787,16603
+/fakecolorsetup 814,17370
+/BITMAPCOLOR 826,17636
+/BITMAPCOLORc 839,17926
+/BITMAPGRAY 855,18275
+/BITMAPGRAYc 858,18335
+/ENDBITMAP 861,18397
+/fillprocs 868,18497
+
+prol-src/ordsets.prolog,525
+is_ordset(47,1310
+list_to_ord_set(63,1688
+ord_add_element(71,1867
+ord_del_element(85,2344
+ord_disjoint(100,2783
+ord_intersect(108,2953
+ord_intersection(126,3552
+ord_intersection3(130,3691
+ord_intersection(150,4531
+ord_intersection4(154,4703
+ord_intersection(176,5664
+ord_intersection2(181,5812
+ord_member(200,6318
+ord_seteq(216,6683
+ord_setproduct(225,6971
+ord_subset(240,7377
+ord_subtract(257,7861
+ord_symdiff(265,8054
+ord_union(288,8887
+ord_union4(303,9352
+ord_union(324,10171
+ord_union_all(329,10313
+
+prol-src/natded.prolog,2319
+expandmng(100,2879
+normalize(116,3359
+fresh_vars(125,3716
+subst(138,4134
+normalize_fresh(159,4660
+reduce_subterm(171,5112
+reduce(185,5559
+free_var(196,5903
+free_for(209,6246
+compile_lex(231,6875
+consult_lex:-consult_lex248,7384
+lex(259,7754
+expandsyn(267,8068
+bas_syn(292,8897
+compile_empty:-compile_empty310,9376
+complete(328,10055
+add_active(340,10527
+parse(353,10949
+derived_analyses(364,11341
+build(378,11965
+buildact(392,12521
+mapsyn(412,13542
+add_edge(434,14278
+findcats(447,14758
+normalize_tree(465,15478
+normalize_trees(475,15856
+expandmng_tree(486,16248
+expandmng_trees(496,16614
+cat(511,17013
+subtree(644,21266
+hypothetical_mem(653,21565
+make_coor(667,22130
+start_up:-start_up688,23013
+tokenizeatom(710,23921
+tokenize(720,24348
+isoperator(752,25377
+isoptab(756,25431
+specialsymbol(765,25756
+sstab(771,25861
+parse_cgi(787,26347
+keyvalseq(792,26510
+andkeyvalseq(796,26609
+keyval(799,26688
+valseq(807,26920
+plusvalseq(810,27007
+val(816,27109
+argvals(824,27426
+commaargvals(828,27503
+atomval(833,27578
+atom(836,27640
+action(846,28004
+keyvalcgi(864,28649
+keyvalscgi(865,28670
+outsyn(868,28726
+act(876,29060
+actout(901,29906
+texttreelist(912,30089
+htmltreelist(918,30190
+fitchtreelist(924,30304
+pp_html_table_tree(938,30759
+pp_html_tree(949,31113
+pp_html_trees(988,32381
+pp_html_table_fitch_tree(999,32769
+pp_html_fitch_tree(1017,33672
+removeexp(1129,39002
+splitexp(1142,39490
+pp_exp(1155,39990
+map_word(1168,40249
+pp_exps(1180,40474
+pp_tree(1188,40777
+pp_trees(1216,41807
+pp_word_list(1225,42128
+pp_word(1231,42262
+pp_word_list_rest(1238,42569
+pp_cat(1248,42929
+pp_syn(1255,43196
+pp_syn_paren(1276,43899
+pp_paren(1293,44377
+pp_syn_back(1300,44661
+pp_bas_cat(1311,45001
+writecat(1322,45409
+writesubs(1351,46455
+writesups(1361,46757
+writelistsubs(1371,47090
+pp_lam(1380,47408
+pp_lam_bracket(1398,48022
+pp_lam_paren(1407,48338
+pp_rule(1429,49238
+member(1447,49866
+append_list(1451,49919
+append(1456,50010
+at_least_one_member(1460,50076
+numbervars(1464,50171
+reverse(1467,50209
+select(1471,50290
+select_last(1475,50357
+cat_atoms(1479,50436
+writelist(1485,50524
+write_lex_cat(1492,50676
+writebreaklex(1500,50988
+write_lex(1513,51265
+writebreak(1521,51541
+tt:-tt1531,51713
+mt:-mt1534,51784
+cmt:-cmt1537,51878
+
+pyt-src/server.py,1438
+class Controls:Controls17,358
+    def __init__(18,374
+    def __repr__(24,590
+    def __str__(34,871
+class Server:Server37,934
+    def __init__(38,948
+    def dump(73,2198
+    def __repr__(125,3896
+    def __str__(128,3945
+class User:User131,4014
+    def __init__(132,4026
+    def __repr__(172,5445
+    def __str__(206,6883
+def flag2str(223,7212
+class LabeledEntry(232,7442
+    def bind(234,7525
+    def focus_set(236,7584
+    def __init__(238,7629
+def ButtonBar(245,7909
+def helpwin(255,8280
+class ListEdit(267,8707
+    def __init__(269,8808
+    def handleList(303,10042
+    def handleNew(306,10094
+    def editItem(314,10426
+    def deleteItem(320,10596
+def ConfirmQuit(326,10760
+class ControlEdit(375,12377
+    def PostControls(376,12403
+    def GatherControls(421,13530
+class ServerEdit(512,16264
+    def __init__(513,16289
+    def post(525,16629
+    def gather(543,17191
+    def nosave(547,17304
+    def save(551,17408
+    def refreshPort(556,17509
+    def createWidgets(561,17663
+    def edituser(631,20708
+class UserEdit(645,20921
+    def __init__(646,20944
+    def post(658,21283
+    def gather(676,21841
+    def nosave(680,21950
+    def save(684,22052
+    def createWidgets(689,22151
+class Configure(760,24879
+    def __init__(761,24916
+    def MakeDispose(772,25211
+    def MakeSitelist(786,25706
+    def editsite(794,25949
+    def save(797,26022
+    def nosave(807,26310
+
+tex-src/testenv.tex,52
+\newcommand{\nm}\nm4,77
+\section{blah}blah8,139
+
+tex-src/gzip.texi,303
address@hidden Top,62,2139
address@hidden Copying,80,2652
address@hidden Overview,83,2705
address@hidden Sample,166,7272
address@hidden Invoking gzip,Invoking gzip210,8828
address@hidden Advanced usage,Advanced usage357,13495
address@hidden Environment,420,15207
address@hidden Tapes,437,15768
address@hidden Problems,460,16767
address@hidden Concept Index,Concept Index473,17287
+
+tex-src/texinfo.tex,30626
+\def\texinfoversion{\texinfoversion25,1019
+\def\tie{\tie48,1510
+\def\gloggingall{\gloggingall71,2260
+\def\loggingall{\loggingall72,2329
+\def\onepageout#1{\onepageout98,3266
+\def\croppageout#1{\croppageout114,4016
+\def\cropmarks{\cropmarks141,5076
+\def\pagebody#1{\pagebody143,5123
+\def\ewtop{\ewtop156,5578
+\def\nstop{\nstop157,5642
+\def\ewbot{\ewbot159,5725
+\def\nsbot{\nsbot160,5789
+\def\parsearg #1{\parsearg169,6088
+\def\parseargx{\parseargx171,6166
+\def\parseargline{\parseargline181,6406
+\def\flushcr{\flushcr185,6527
+\newif\ifENV \ENVfalse \def\inENV{\inENV189,6726
+\def\ENVcheck{\ENVcheck190,6790
+\outer\def\begin{\begin197,7037
+\def\beginxxx #1{\beginxxx199,7075
+\def\end{\end207,7330
+\def\endxxx #1{\endxxx209,7358
+\def\errorE#1{\errorE215,7547
+\def\singlespace{\singlespace221,7741
address@hidden@231,7964
+\def\`{\`235,8064
+\def\'{\'236,8076
+\def\mylbrace {\mylbrace240,8124
+\def\myrbrace {\myrbrace241,8157
+\def\:{\:246,8271
+\def\*{\*249,8325
+\def\.{\.252,8401
+\def\w#1{\w257,8632
+\def\group{\group267,9115
+  \def\Egroup{\Egroup272,9279
+\def\need{\need288,9721
+\def\needx#1{\needx299,9998
+\def\dots{\dots338,11384
+\def\page{\page342,11448
+\def\exdent{\exdent352,11775
+\def\exdentyyy #1{\exdentyyy353,11808
+\def\nofillexdent{\nofillexdent356,11952
+\def\nofillexdentyyy #1{\nofillexdentyyy357,11997
+\def\include{\include364,12181
+\def\includezzz #1{\includezzz365,12216
+\def\thisfile{\thisfile368,12267
+\def\center{\center372,12330
+\def\centerzzz #1{\centerzzz373,12363
+\def\sp{\sp379,12505
+\def\spxxx #1{\spxxx380,12530
+\def\comment{\comment386,12704
+\def\commentxxx #1{\commentxxx389,12801
+\def\ignoresections{\ignoresections395,12970
+\let\chapter=\relax=\relax396,12992
+\let\section=\relax=\relax405,13237
+\let\subsection=\relax=\relax408,13298
+\let\subsubsection=\relax=\relax409,13321
+\let\appendix=\relax=\relax410,13347
+\let\appendixsec=\relaxsec=\relax411,13368
+\let\appendixsection=\relaxsection=\relax412,13392
+\let\appendixsubsec=\relaxsubsec=\relax413,13420
+\let\appendixsubsection=\relaxsubsection=\relax414,13447
+\let\appendixsubsubsec=\relaxsubsubsec=\relax415,13478
+\let\appendixsubsubsection=\relaxsubsubsection=\relax416,13508
+\def\ignore{\ignore422,13610
+\long\def\ignorexxx #1\end ignore{\ignorexxx426,13750
+\def\direntry{\direntry428,13809
+\long\def\direntryxxx #1\end direntry{\direntryxxx429,13848
+\def\ifset{\ifset433,13958
+\def\ifsetxxx #1{\ifsetxxx435,14016
+\def\Eifset{\Eifset439,14143
+\def\ifsetfail{\ifsetfail440,14157
+\long\def\ifsetfailxxx #1\end ifset{\ifsetfailxxx441,14213
+\def\ifclear{\ifclear443,14274
+\def\ifclearxxx #1{\ifclearxxx445,14336
+\def\Eifclear{\Eifclear449,14467
+\def\ifclearfail{\ifclearfail450,14483
+\long\def\ifclearfailxxx #1\end ifclear{\ifclearfailxxx451,14543
+\def\set{\set455,14694
+\def\setxxx #1{\setxxx456,14721
+\def\clear{\clear459,14783
+\def\clearxxx #1{\clearxxx460,14814
+\def\iftex{\iftex465,14931
+\def\Eiftex{\Eiftex466,14944
+\def\ifinfo{\ifinfo467,14958
+\long\def\ifinfoxxx #1\end ifinfo{\ifinfoxxx468,15008
+\long\def\menu #1\end menu{\menu470,15067
+\def\asis#1{\asis471,15096
+\def\math#1{\math484,15639
+\def\node{\node486,15683
+\def\nodezzz#1{\nodezzz487,15721
+\def\nodexxx[#1,#2]{\nodexxx[488,15752
+\def\donoderef{\donoderef491,15814
+\def\unnumbnoderef{\unnumbnoderef495,15935
+\def\appendixnoderef{\appendixnoderef499,16066
+\expandafter\expandafter\expandafter\appendixsetref{setref500,16112
+\let\refill=\relaxill=\relax503,16201
+\def\setfilename{\setfilename508,16415
+\outer\def\bye{\bye517,16661
+\def\inforef #1{\inforef519,16717
+\def\inforefzzz #1,#2,#3,#4**{\inforefzzz520,16755
+\def\losespace #1{\losespace522,16852
+\def\sf{\sf531,17056
+\font\defbf=cmbx10 scaled \magstep1 %was 1314bf=cmbx10557,17851
+\font\deftt=cmtt10 scaled \magstep1tt=cmtt10558,17897
+\def\df{\df559,17933
+\def\resetmathfonts{\resetmathfonts634,20527
+\def\textfonts{\textfonts647,21116
+\def\chapfonts{\chapfonts652,21331
+\def\secfonts{\secfonts657,21547
+\def\subsecfonts{\subsecfonts662,21752
+\def\indexfonts{\indexfonts667,21969
+\def\smartitalicx{\smartitalicx690,22701
+\def\smartitalic#1{\smartitalic691,22777
+\let\cite=\smartitalic=\smartitalic697,22922
+\def\b#1{\b699,22946
+\def\t#1{\t702,22981
+\def\samp #1{\samp705,23133
+\def\key #1{\key706,23166
+\def\ctrl #1{\ctrl707,23227
+\def\tclose#1{\tclose715,23429
+\def\ {\719,23595
+\def\xkey{\xkey727,23864
+\def\kbdfoo#1#2#3\par{\kbdfoo728,23880
+\def\dmn#1{\dmn737,24181
+\def\kbd#1{\kbd739,24208
+\def\l#1{\l741,24265
+\def\r#1{\r743,24294
+\def\sc#1{\sc745,24362
+\def\ii#1{\ii746,24405
+\def\titlefont#1{\titlefont754,24638
+\def\titlepage{\titlepage760,24741
+   \def\subtitlefont{\subtitlefont765,24968
+   \def\authorfont{\authorfont767,25052
+   \def\title{\title773,25262
+   \def\titlezzz##1{\titlezzz774,25297
+   \def\subtitle{\subtitle782,25612
+   \def\subtitlezzz##1{\subtitlezzz783,25653
+   \def\author{\author786,25771
+   \def\authorzzz##1{\authorzzz787,25808
+   \def\page{\page793,26099
+\def\Etitlepage{\Etitlepage803,26268
+\def\finishtitlepage{\finishtitlepage816,26656
+\def\evenheading{\evenheading845,27664
+\def\oddheading{\oddheading846,27707
+\def\everyheading{\everyheading847,27748
+\def\evenfooting{\evenfooting849,27794
+\def\oddfooting{\oddfooting850,27837
+\def\everyfooting{\everyfooting851,27878
+\def\headings #1 {\headings892,29570
+\def\HEADINGSoff{\HEADINGSoff894,29619
+\def\HEADINGSdouble{\HEADINGSdouble903,30046
+\def\HEADINGSsingle{\HEADINGSsingle913,30366
+\def\HEADINGSon{\HEADINGSon921,30587
+\def\HEADINGSafter{\HEADINGSafter923,30621
+\def\HEADINGSdoublex{\HEADINGSdoublex925,30716
+\def\HEADINGSsingleafter{\HEADINGSsingleafter932,30904
+\def\HEADINGSsinglex{\HEADINGSsinglex933,30965
+\def\today{\today942,31240
+\def\thistitle{\thistitle957,31785
+\def\settitle{\settitle958,31810
+\def\settitlezzz #1{\settitlezzz959,31847
+\def\internalBitem{\internalBitem991,32777
+\def\internalBitemx{\internalBitemx992,32827
+\def\internalBxitem "#1"{\internalBxitem994,32872
+\def\internalBxitemx "#1"{\internalBxitemx995,32952
+\def\internalBkitem{\internalBkitem997,33027
+\def\internalBkitemx{\internalBkitemx998,33079
+\def\kitemzzz #1{\kitemzzz1000,33126
+\def\xitemzzz #1{\xitemzzz1003,33228
+\def\itemzzz #1{\itemzzz1006,33331
+\def\item{\item1036,34402
+\def\itemx{\itemx1037,34453
+\def\kitem{\kitem1038,34506
+\def\kitemx{\kitemx1039,34559
+\def\xitem{\xitem1040,34614
+\def\xitemx{\xitemx1041,34667
+\def\description{\description1044,34777
+\def\table{\table1046,34827
+\def\ftable{\ftable1051,34971
+\def\Eftable{\Eftable1055,35117
+\def\vtable{\vtable1058,35186
+\def\Evtable{\Evtable1062,35332
+\def\dontindex #1{\dontindex1065,35401
+\def\fnitemindex #1{\fnitemindex1066,35421
+\def\vritemindex #1{\vritemindex1067,35466
+\def\tablez #1#2#3#4#5#6{\tablez1073,35615
+\def\Edescription{\Edescription1076,35673
+\def\itemfont{\itemfont1081,35875
+\def\Etable{\Etable1089,36101
+\def\itemize{\itemize1102,36425
+\def\itemizezzz #1{\itemizezzz1104,36461
+\def\itemizey #1#2{\itemizey1109,36556
+\def#2{1118,36802
+\def\itemcontents{\itemcontents1119,36843
+\def\bullet{\bullet1122,36891
+\def\minus{\minus1123,36918
+\def\frenchspacing{\frenchspacing1127,37026
+\def\splitoff#1#2\endmark{\splitoff1133,37251
+\def\enumerate{\enumerate1139,37481
+\def\enumeratezzz #1{\enumeratezzz1140,37520
+\def\enumeratey #1 #2\endenumeratey{\enumeratey1141,37573
+  \def\thearg{\thearg1145,37720
+  \ifx\thearg\empty \def\thearg{\thearg1146,37739
+\def\numericenumerate{\numericenumerate1183,39073
+\def\lowercaseenumerate{\lowercaseenumerate1189,39203
+\def\uppercaseenumerate{\uppercaseenumerate1202,39550
+\def\startenumeration#1{\startenumeration1218,40040
+\def\alphaenumerate{\alphaenumerate1226,40222
+\def\capsenumerate{\capsenumerate1227,40257
+\def\Ealphaenumerate{\Ealphaenumerate1228,40291
+\def\Ecapsenumerate{\Ecapsenumerate1229,40325
+\def\itemizeitem{\itemizeitem1233,40405
+\def\newindex #1{\newindex1258,41262
+\def\defindex{\defindex1267,41551
+\def\newcodeindex #1{\newcodeindex1271,41659
+\def\defcodeindex{\defcodeindex1278,41919
+\def\synindex #1 #2 {\synindex1282,42099
+\def\syncodeindex #1 #2 {\syncodeindex1291,42439
+\def\doindex#1{\doindex1308,43118
+\def\singleindexer #1{\singleindexer1309,43177
+\def\docodeindex#1{\docodeindex1312,43289
+\def\singlecodeindexer #1{\singlecodeindexer1313,43356
+\def\indexdummies{\indexdummies1315,43414
+\def\_{\_1316,43434
+\def\w{\w1317,43462
+\def\bf{\bf1318,43489
+\def\rm{\rm1319,43518
+\def\sl{\sl1320,43547
+\def\sf{\sf1321,43576
+\def\tt{\tt1322,43604
+\def\gtr{\gtr1323,43632
+\def\less{\less1324,43662
+\def\hat{\hat1325,43694
+\def\char{\char1326,43724
+\def\TeX{\TeX1327,43756
+\def\dots{\dots1328,43786
+\def\copyright{\copyright1329,43819
+\def\tclose##1{\tclose1330,43862
+\def\code##1{\code1331,43907
+\def\samp##1{\samp1332,43948
+\def\t##1{\t1333,43989
+\def\r##1{\r1334,44024
+\def\i##1{\i1335,44059
+\def\b##1{\b1336,44094
+\def\cite##1{\cite1337,44129
+\def\key##1{\key1338,44170
+\def\file##1{\file1339,44209
+\def\var##1{\var1340,44250
+\def\kbd##1{\kbd1341,44289
+\def\indexdummyfont#1{\indexdummyfont1346,44445
+\def\indexdummytex{\indexdummytex1347,44471
+\def\indexdummydots{\indexdummydots1348,44495
+\def\indexnofonts{\indexnofonts1350,44521
+\let\w=\indexdummyfontdummyfont1351,44541
+\let\t=\indexdummyfontdummyfont1352,44564
+\let\r=\indexdummyfontdummyfont1353,44587
+\let\i=\indexdummyfontdummyfont1354,44610
+\let\b=\indexdummyfontdummyfont1355,44633
+\let\emph=\indexdummyfontdummyfont1356,44656
+\let\strong=\indexdummyfontdummyfont1357,44682
+\let\cite=\indexdummyfont=\indexdummyfont1358,44710
+\let\sc=\indexdummyfontdummyfont1359,44736
+\let\tclose=\indexdummyfontdummyfont1363,44908
+\let\code=\indexdummyfontdummyfont1364,44936
+\let\file=\indexdummyfontdummyfont1365,44962
+\let\samp=\indexdummyfontdummyfont1366,44988
+\let\kbd=\indexdummyfontdummyfont1367,45014
+\let\key=\indexdummyfontdummyfont1368,45039
+\let\var=\indexdummyfontdummyfont1369,45064
+\let\TeX=\indexdummytexdummytex1370,45089
+\let\dots=\indexdummydotsdummydots1371,45113
+\let\indexbackslash=0  %overridden during \printindex.backslash=01381,45365
+\def\doind #1#2{\doind1383,45421
+{\indexdummies % Must do this here, since \bf, etc expand at this 
stagedummies1385,45464
+\def\rawbackslashxx{\rawbackslashxx1388,45604
+{\indexnofontsnofonts1393,45866
+\def\dosubind #1#2#3{\dosubind1404,46177
+{\indexdummies % Must do this here, since \bf, etc expand at this 
stagedummies1406,46225
+\def\rawbackslashxx{\rawbackslashxx1409,46329
+{\indexnofontsnofonts1413,46483
+\def\findex {\findex1442,47414
+\def\kindex {\kindex1443,47437
+\def\cindex {\cindex1444,47460
+\def\vindex {\vindex1445,47483
+\def\tindex {\tindex1446,47506
+\def\pindex {\pindex1447,47529
+\def\cindexsub {\cindexsub1449,47553
+\def\printindex{\printindex1461,47880
+\def\doprintindex#1{\doprintindex1463,47921
+  \def\indexbackslash{\indexbackslash1480,48406
+  \indexfonts\rm \tolerance=9500 \advance\baselineskip -1ptfonts\rm1481,48445
+\def\initial #1{\initial1516,49517
+\def\entry #1#2{\entry1522,49724
+  \null\nobreak\indexdotfill % Have leaders before the page 
number.dotfill1539,50371
+\def\indexdotfill{\indexdotfill1548,50699
+\def\primary #1{\primary1551,50805
+\def\secondary #1#2{\secondary1555,50887
+\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\pardotfill1558,50969
+\newbox\partialpageialpage1565,51142
+\def\begindoublecolumns{\begindoublecolumns1571,51300
+  \output={\global\setbox\partialpage=ialpage=1572,51336
+\def\enddoublecolumns{\enddoublecolumns1576,51524
+\def\doublecolumnout{\doublecolumnout1579,51609
+  address@hidden \advance\dimen@ by-\ht\partialpageialpage1580,51678
+\def\pagesofar{\pagesofar1583,51856
+\def\balancecolumns{\balancecolumns1587,52093
+  address@hidden \advance\availdimen@ by-\ht\partialpageialpage1593,52264
+     address@hidden \advance\dimen@ by-\ht\partialpageialpage1599,52525
+\newcount \appendixno  \appendixno = address@hidden,53430
+\def\appendixletter{\appendixletter1627,53471
+\def\opencontents{\opencontents1631,53574
+\def\thischapter{\thischapter1636,53755
+\def\seccheck#1{\seccheck1637,53793
+\def\chapternofonts{\chapternofonts1642,53897
+\def\result{\result1645,53972
+\def\equiv{\equiv1646,54007
+\def\expansion{\expansion1647,54040
+\def\print{\print1648,54081
+\def\TeX{\TeX1649,54114
+\def\dots{\dots1650,54143
+\def\copyright{\copyright1651,54174
+\def\tt{\tt1652,54215
+\def\bf{\bf1653,54242
+\def\w{\w1654,54270
+\def\less{\less1655,54295
+\def\gtr{\gtr1656,54326
+\def\hat{\hat1657,54355
+\def\char{\char1658,54384
+\def\tclose##1{\tclose1659,54415
+\def\code##1{\code1660,54459
+\def\samp##1{\samp1661,54499
+\def\r##1{\r1662,54539
+\def\b##1{\b1663,54573
+\def\key##1{\key1664,54607
+\def\file##1{\file1665,54645
+\def\kbd##1{\kbd1666,54685
+\def\i##1{\i1668,54793
+\def\cite##1{\cite1669,54827
+\def\var##1{\var1670,54867
+\def\emph##1{\emph1671,54905
+\def\dfn##1{\dfn1672,54945
+\def\thischaptername{\thischaptername1675,54986
+\outer\def\chapter{\chapter1676,55025
+\def\chapterzzz #1{\chapterzzz1677,55066
+{\chapternofonts%nofonts%1686,55462
+\global\let\section = \numberedsec=1691,55615
+\global\let\subsection = \numberedsubsec=1692,55650
+\global\let\subsubsection = \numberedsubsubsec=1693,55691
+\outer\def\appendix{\appendix1696,55742
+\def\appendixzzz #1{\appendixzzz1697,55785
+\global\advance \appendixno by 1 \message{no1699,55862
+\chapmacro {#1}{Appendix \appendixletter}letter1700,55931
+\xdef\thischapter{Appendix \appendixletter: 
\noexpand\thischaptername}letter:1703,56024
+{\chapternofonts%nofonts%1704,56096
+  {#1}{Appendix \appendixletter}letter1706,56152
+\appendixnoderef %noderef1709,56252
+\global\let\section = \appendixsec=1710,56271
+\global\let\subsection = \appendixsubsec=1711,56306
+\global\let\subsubsection = \appendixsubsubsec=1712,56347
+\outer\def\top{\top1715,56398
+\outer\def\unnumbered{\unnumbered1716,56438
+\def\unnumberedzzz #1{\unnumberedzzz1717,56485
+{\chapternofonts%nofonts%1721,56648
+\global\let\section = \unnumberedsec=1726,56798
+\global\let\subsection = \unnumberedsubsec=1727,56835
+\global\let\subsubsection = \unnumberedsubsubsec=1728,56878
+\outer\def\numberedsec{\numberedsec1731,56931
+\def\seczzz #1{\seczzz1732,56972
+{\chapternofonts%nofonts%1735,57128
+\outer\def\appendixsection{\appendixsection1744,57314
+\outer\def\appendixsec{\appendixsec1745,57371
+\def\appendixsectionzzz #1{\appendixsectionzzz1746,57424
+\gdef\thissection{#1}\secheading {#1}{\appendixletter}letter1748,57536
+{\chapternofonts%nofonts%1749,57604
+{#1}{\appendixletter}letter1751,57660
+\appendixnoderef %noderef1754,57760
+\outer\def\unnumberedsec{\unnumberedsec1758,57800
+\def\unnumberedseczzz #1{\unnumberedseczzz1759,57853
+{\chapternofonts%nofonts%1761,57948
+\outer\def\numberedsubsec{\numberedsubsec1769,58116
+\def\numberedsubseczzz #1{\numberedsubseczzz1770,58171
+{\chapternofonts%nofonts%1773,58350
+\outer\def\appendixsubsec{\appendixsubsec1782,58554
+\def\appendixsubseczzz #1{\appendixsubseczzz1783,58609
+\subsecheading {#1}{\appendixletter}letter1785,58731
+{\chapternofonts%nofonts%1786,58796
+{#1}{\appendixletter}letter1788,58855
+\appendixnoderef %noderef1791,58970
+\outer\def\unnumberedsubsec{\unnumberedsubsec1795,59010
+\def\unnumberedsubseczzz #1{\unnumberedsubseczzz1796,59069
+{\chapternofonts%nofonts%1798,59170
+\outer\def\numberedsubsubsec{\numberedsubsubsec1806,59341
+\def\numberedsubsubseczzz #1{\numberedsubsubseczzz1807,59402
+{\chapternofonts%nofonts%1811,59599
+\outer\def\appendixsubsubsec{\appendixsubsubsec1822,59832
+\def\appendixsubsubseczzz #1{\appendixsubsubseczzz1823,59893
+  {\appendixletter}letter1826,60032
+{\chapternofonts%nofonts%1827,60098
+  {\appendixletter}letter1829,60163
+\appendixnoderef %noderef1833,60297
+\outer\def\unnumberedsubsubsec{\unnumberedsubsubsec1837,60337
+\def\unnumberedsubsubseczzz #1{\unnumberedsubsubseczzz1838,60402
+{\chapternofonts%nofonts%1840,60509
+\def\infotop{\infotop1850,60838
+\def\infounnumbered{\infounnumbered1851,60876
+\def\infounnumberedsec{\infounnumberedsec1852,60921
+\def\infounnumberedsubsec{\infounnumberedsubsec1853,60972
+\def\infounnumberedsubsubsec{\infounnumberedsubsubsec1854,61029
+\def\infoappendix{\infoappendix1856,61093
+\def\infoappendixsec{\infoappendixsec1857,61134
+\def\infoappendixsubsec{\infoappendixsubsec1858,61181
+\def\infoappendixsubsubsec{\infoappendixsubsubsec1859,61234
+\def\infochapter{\infochapter1861,61294
+\def\infosection{\infosection1862,61333
+\def\infosubsection{\infosubsection1863,61372
+\def\infosubsubsection{\infosubsubsection1864,61417
+\global\let\section = \numberedsec=1869,61654
+\global\let\subsection = \numberedsubsec=1870,61689
+\global\let\subsubsection = \numberedsubsubsec=1871,61730
+\def\majorheading{\majorheading1885,62237
+\def\majorheadingzzz #1{\majorheadingzzz1886,62282
+\def\chapheading{\chapheading1892,62515
+\def\chapheadingzzz #1{\chapheadingzzz1893,62558
+\def\heading{\heading1898,62753
+\def\subheading{\subheading1900,62790
+\def\subsubheading{\subsubheading1902,62833
+\def\dobreak#1#2{\dobreak1909,63110
+\def\setchapterstyle #1 {\setchapterstyle1911,63188
+\def\chapbreak{\chapbreak1918,63443
+\def\chappager{\chappager1919,63493
+\def\chapoddpage{\chapoddpage1920,63531
+\def\setchapternewpage #1 {\setchapternewpage1922,63610
+\def\CHAPPAGoff{\CHAPPAGoff1924,63667
+\def\CHAPPAGon{\CHAPPAGon1928,63761
+\global\def\HEADINGSon{\HEADINGSon1931,63852
+\def\CHAPPAGodd{\CHAPPAGodd1933,63894
+\global\def\HEADINGSon{\HEADINGSon1936,63990
+\def\CHAPFplain{\CHAPFplain1940,64044
+\def\chfplain #1#2{\chfplain1944,64136
+\def\unnchfplain #1{\unnchfplain1955,64359
+\def\unnchfopen #1{\unnchfopen1963,64588
+\def\chfopen #1#2{\chfopen1969,64796
+\def\CHAPFopen{\CHAPFopen1974,64940
+\def\subsecheadingbreak{\subsecheadingbreak1981,65158
+\def\secheadingbreak{\secheadingbreak1984,65287
+\def\secheading #1#2#3{\secheading1992,65569
+\def\plainsecheading #1{\plainsecheading1993,65625
+\def\secheadingi #1{\secheadingi1994,65668
+\def\subsecheading #1#2#3#4{\subsecheading2005,66036
+\def\subsecheadingi #1{\subsecheadingi2006,66103
+\def\subsubsecfonts{\subsubsecfonts2013,66400
+\def\subsubsecheading #1#2#3#4#5{\subsubsecheading2016,66523
+\def\subsubsecheadingi #1{\subsubsecheadingi2017,66601
+\def\startcontents#1{\startcontents2031,67073
+   \unnumbchapmacro{#1}\def\thischapter{\thischapter2039,67346
+\outer\def\contents{\contents2048,67705
+\outer\def\summarycontents{\summarycontents2056,67849
+      \def\secentry ##1##2##3##4{\secentry2066,68220
+      \def\unnumbsecentry ##1##2{\unnumbsecentry2067,68255
+      \def\subsecentry ##1##2##3##4##5{\subsecentry2068,68290
+      \def\unnumbsubsecentry ##1##2{\unnumbsubsecentry2069,68331
+      \def\subsubsecentry ##1##2##3##4##5##6{\subsubsecentry2070,68369
+      \def\unnumbsubsubsecentry ##1##2{\unnumbsubsubsecentry2071,68416
+\def\chapentry#1#2#3{\chapentry2084,68850
+\def\shortchapentry#1#2#3{\shortchapentry2087,68967
+    {#2\labelspace #1}space2090,69077
+\def\unnumbchapentry#1#2{\unnumbchapentry2093,69131
+\def\shortunnumberedentry#1#2{\shortunnumberedentry2094,69178
+\def\secentry#1#2#3#4{\secentry2101,69342
+\def\unnumbsecentry#1#2{\unnumbsecentry2102,69401
+\def\subsecentry#1#2#3#4#5{\subsecentry2105,69462
+\def\unnumbsubsecentry#1#2{\unnumbsubsecentry2106,69532
+\def\subsubsecentry#1#2#3#4#5#6{\subsubsecentry2109,69606
+  \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}space2110,69640
+\def\unnumbsubsubsecentry#1#2{\unnumbsubsubsecentry2111,69691
+\def\dochapentry#1#2{\dochapentry2122,70065
+\def\dosecentry#1#2{\dosecentry2137,70670
+\def\dosubsecentry#1#2{\dosubsecentry2144,70848
+\def\dosubsubsecentry#1#2{\dosubsubsecentry2151,71033
+\def\labelspace{\labelspace2159,71284
+\def\dopageno#1{\dopageno2161,71319
+\def\doshortpageno#1{\doshortpageno2162,71345
+\def\chapentryfonts{\chapentryfonts2164,71377
+\def\secentryfonts{\secentryfonts2165,71412
+\def\point{\point2191,72371
+\def\result{\result2193,72392
+\def\expansion{\expansion2194,72465
+\def\print{\print2195,72536
+\def\equiv{\equiv2197,72603
+\def\error{\error2217,73376
+\def\tex{\tex2223,73605
address@hidden@2241,73988
+\gdef\sepspaces{\def {\ }}}\2264,74720
+\def\aboveenvbreak{\aboveenvbreak2267,74802
+\def\afterenvbreak{\afterenvbreak2271,74968
+\def\ctl{\ctl2285,75479
+\def\ctr{\ctr2286,75551
+\def\cbl{\cbl2287,75590
+\def\cbr{\cbr2288,75630
+\def\carttop{\carttop2289,75669
+\def\cartbot{\cartbot2292,75777
+\long\def\cartouche{\cartouche2298,75917
+\def\Ecartouche{\Ecartouche2325,76705
+\def\lisp{\lisp2337,76840
+\def\Elisp{\Elisp2347,77187
+\def\next##1{\next2359,77513
+\def\Eexample{\Eexample2363,77555
+\def\Esmallexample{\Esmallexample2366,77602
+\def\smalllispx{\smalllispx2372,77780
+\def\Esmalllisp{\Esmalllisp2382,78134
+\obeyspaces \obeylines \ninett \indexfonts \rawbackslashfonts2395,78490
+\def\next##1{\next2396,78547
+\def\display{\display2400,78627
+\def\Edisplay{\Edisplay2409,78946
+\def\next##1{\next2421,79257
+\def\format{\format2425,79360
+\def\Eformat{\Eformat2433,79656
+\def\next##1{\next2436,79745
+\def\flushleft{\flushleft2440,79797
+\def\Eflushleft{\Eflushleft2450,80168
+\def\next##1{\next2453,80261
+\def\flushright{\flushright2455,80283
+\def\Eflushright{\Eflushright2465,80655
+\def\next##1{\next2469,80786
+\def\quotation{\quotation2473,80844
+\def\Equotation{\Equotation2479,81036
+\def\setdeffont #1 {\setdeffont2492,81434
+\newskip\defbodyindent \defbodyindent=.4inbodyindent2494,81480
+\newskip\defargsindent \defargsindent=50ptargsindent2495,81523
+\newskip\deftypemargin \deftypemargin=12pttypemargin2496,81566
+\newskip\deflastargmargin \deflastargmargin=18ptlastargmargin2497,81609
+\def\activeparens{\activeparens2502,81807
+\def\opnr{\opnr2528,83019
+\def\lbrb{\lbrb2529,83084
+\def\defname #1#2{\defname2535,83285
+\advance\dimen2 by -\defbodyindentbodyindent2539,83403
+\advance\dimen3 by -\defbodyindentbodyindent2541,83457
+\setbox0=\hbox{\hskip \deflastargmargin{lastargmargin2543,83511
+\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for 
continuationsargsindent2545,83653
+\parshape 2 0in \dimen0 \defargsindent \dimen1     %argsindent2546,83728
+\rlap{\rightline{{\rm #2}\hskip \deftypemargin}typemargin2553,84097
+\advance\leftskip by -\defbodyindentbodyindent2556,84231
+\exdentamount=\defbodyindentbodyindent2557,84268
+\def\defparsebody #1#2#3{\defparsebody2567,84627
+\def#1{2571,84811
+\def#2{2572,84847
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2574,84919
+\exdentamount=\defbodyindentbodyindent2575,84993
+\def\defmethparsebody #1#2#3#4 {\defmethparsebody2580,85097
+\def#1{2584,85258
+\def#2##1 {2585,85294
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2587,85377
+\exdentamount=\defbodyindentbodyindent2588,85451
+\def\defopparsebody #1#2#3#4#5 {\defopparsebody2591,85536
+\def#1{2595,85697
+\def#2##1 ##2 {2596,85733
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2599,85833
+\exdentamount=\defbodyindentbodyindent2600,85907
+\def\defvarparsebody #1#2#3{\defvarparsebody2607,86178
+\def#1{2611,86365
+\def#2{2612,86401
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2614,86460
+\exdentamount=\defbodyindentbodyindent2615,86534
+\def\defvrparsebody #1#2#3#4 {\defvrparsebody2620,86625
+\def#1{2624,86784
+\def#2##1 {2625,86820
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2627,86890
+\exdentamount=\defbodyindentbodyindent2628,86964
+\def\defopvarparsebody #1#2#3#4#5 {\defopvarparsebody2631,87036
+\def#1{2635,87200
+\def#2##1 ##2 {2636,87236
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2639,87323
+\exdentamount=\defbodyindentbodyindent2640,87397
+\def\defunargs #1{\defunargs2663,88157
+\def\deftypefunargs #1{\deftypefunargs2675,88539
+\def\deffn{\deffn2689,88921
+\def\deffnheader #1#2#3{\deffnheader2691,88978
+\begingroup\defname {name2692,89026
+\def\defun{\defun2698,89171
+\def\defunheader #1#2{\defunheader2700,89224
+\begingroup\defname {name2701,89299
+\defunargs {unargs2702,89335
+\def\deftypefun{\deftypefun2708,89483
+\def\deftypefunheader #1#2{\deftypefunheader2711,89605
+\def\deftypefunheaderx #1#2 #3\relax{\deftypefunheaderx2713,89714
+\begingroup\defname {name2715,89806
+\deftypefunargs {typefunargs2716,89852
+\def\deftypefn{\deftypefn2722,90023
+\def\deftypefnheader #1#2#3{\deftypefnheader2725,90172
+\def\deftypefnheaderx #1#2#3 #4\relax{\deftypefnheaderx2727,90308
+\begingroup\defname {name2729,90401
+\deftypefunargs {typefunargs2730,90441
+\def\defmac{\defmac2736,90562
+\def\defmacheader #1#2{\defmacheader2738,90619
+\begingroup\defname {name2739,90695
+\defunargs {unargs2740,90728
+\def\defspec{\defspec2746,90852
+\def\defspecheader #1#2{\defspecheader2748,90913
+\begingroup\defname {name2749,90990
+\defunargs {unargs2750,91030
+\def\deffnx #1 {\deffnx2757,91225
+\def\defunx #1 {\defunx2758,91282
+\def\defmacx #1 {\defmacx2759,91339
+\def\defspecx #1 {\defspecx2760,91398
+\def\deftypefnx #1 {\deftypefnx2761,91459
+\def\deftypeunx #1 {\deftypeunx2762,91524
+\def\defop #1 {\defop2768,91670
+\defopparsebody\Edefop\defopx\defopheader\defoptype}opparsebody\Edefop\defopx\defopheader\defoptype2769,91705
+\def\defopheader #1#2#3{\defopheader2771,91759
+\begingroup\defname {name2773,91848
+\defunargs {unargs2774,91894
+\def\defmethod{\defmethod2779,91955
+\def\defmethodheader #1#2#3{\defmethodheader2781,92028
+\begingroup\defname {name2783,92116
+\defunargs {unargs2784,92156
+\def\defcv #1 {\defcv2789,92230
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}opvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype2790,92265
+\def\defcvarheader #1#2#3{\defcvarheader2792,92324
+\begingroup\defname {name2794,92410
+\defvarargs {varargs2795,92456
+\def\defivar{\defivar2800,92529
+\def\defivarheader #1#2#3{\defivarheader2802,92592
+\begingroup\defname {name2804,92678
+\defvarargs {varargs2805,92729
+\def\defopx #1 {\defopx2811,92878
+\def\defmethodx #1 {\defmethodx2812,92935
+\def\defcvx #1 {\defcvx2813,93000
+\def\defivarx #1 {\defivarx2814,93057
+\def\defvarargs #1{\defvarargs2821,93328
+\def\defvr{\defvr2827,93472
+\def\defvrheader #1#2#3{\defvrheader2829,93527
+\begingroup\defname {name2830,93575
+\def\defvar{\defvar2834,93660
+\def\defvarheader #1#2{\defvarheader2836,93720
+\begingroup\defname {name2837,93791
+\defvarargs {varargs2838,93827
+\def\defopt{\defopt2843,93893
+\def\defoptheader #1#2{\defoptheader2845,93953
+\begingroup\defname {name2846,94024
+\defvarargs {varargs2847,94063
+\def\deftypevar{\deftypevar2852,94120
+\def\deftypevarheader #1#2{\deftypevarheader2855,94236
+\begingroup\defname {name2857,94319
+\def\deftypevr{\deftypevr2864,94493
+\def\deftypevrheader #1#2#3{\deftypevrheader2866,94564
+\begingroup\defname {name2867,94616
+\def\defvrx #1 {\defvrx2875,94853
+\def\defvarx #1 {\defvarx2876,94910
+\def\defoptx #1 {\defoptx2877,94969
+\def\deftypevarx #1 {\deftypevarx2878,95028
+\def\deftypevrx #1 {\deftypevrx2879,95095
+\def\deftpargs #1{\deftpargs2884,95244
+\def\deftp{\deftp2888,95324
+\def\deftpheader #1#2#3{\deftpheader2890,95379
+\begingroup\defname {name2891,95427
+\def\deftpx #1 {\deftpx2896,95586
+\def\setref#1{\setref2907,95907
+\def\unnumbsetref#1{\unnumbsetref2912,96021
+\def\appendixsetref#1{\appendixsetref2917,96128
+\def\pxref#1{\pxref2928,96539
+\def\xref#1{\xref2929,96575
+\def\ref#1{\ref2930,96610
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\xrefX[2931,96640
+\def\printedmanual{\printedmanual2932,96683
+\def\printednodename{\printednodename2933,96721
+\def\printednodename{\printednodename2938,96846
+section ``\printednodename'' in \cite{\printedmanual}\printedmanual2953,97479
+\refx{x2956,97557
+\def\dosetq #1#2{\dosetq2964,97777
+\def\internalsetq #1#2{\internalsetq2972,98035
+\def\Ypagenumber{\Ypagenumber2976,98136
+\def\Ytitle{\Ytitle2978,98162
+\def\Ynothing{\Ynothing2980,98189
+\def\Ysectionnumberandtype{\Ysectionnumberandtype2982,98206
+\def\Yappendixletterandtype{\Yappendixletterandtype2991,98522
+\ifnum\secno=0 Appendix\xreftie'char\the\appendixno{no2992,98552
+\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno 
%no.\the\secno2993,98607
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno 
%no.\the\secno.\the\subsecno2995,98711
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno 
%no.\the\secno.\the\subsecno.\the\subsubsecno2997,98782
+  \def\linenumber{\linenumber3008,99121
+\def\refx#1#2{\refx3014,99305
+\def\xrdef #1#2{\xrdef3036,99931
+\def\readauxfile{\readauxfile3039,100016
+\def\supereject{\supereject3109,101797
+\footstrut\parindent=\defaultparindent\hang\textindent{aultparindent\hang\textindent3130,102482
+\def\openindices{\openindices3138,102668
+\newdimen\defaultparindent \defaultparindent = 15ptaultparindent3150,102893
+\parindent = \defaultparindentaultparindent3151,102945
+\def\smallbook{\smallbook3174,103669
+\global\def\Esmallexample{\Esmallexample3191,104096
+\def\afourpaper{\afourpaper3195,104187
+\def\finalout{\finalout3223,104995
+\def\normaldoublequote{\normaldoublequote3234,105256
+\def\normaltilde{\normaltilde3235,105282
+\def\normalcaret{\normalcaret3236,105302
+\def\normalunderscore{\normalunderscore3237,105322
+\def\normalverticalbar{\normalverticalbar3238,105347
+\def\normalless{\normalless3239,105373
+\def\normalgreater{\normalgreater3240,105392
+\def\normalplus{\normalplus3241,105414
+\def\ifusingtt#1#2{\ifusingtt3252,105906
+\def\activedoublequote{\activedoublequote3260,106234
+\def~{~3263,106320
+\def^{^3266,106381
+\def_{_3269,106420
+\def\_{\_3271,106494
+\def\lvvmode{\lvvmode3278,106831
+\def|{|3281,106881
+\def<{<3284,106944
+\def>{>3287,107001
+\def+{+3289,107039
+\def\turnoffactive{\turnoffactive3295,107200
+\global\def={=3306,107486
+\def\normalbackslash{\normalbackslash3320,107868
+
+c-src//c.c,76
+T f(1,0
+}T i;2,14
+void bar(5,69
+int foobar(6,94
+interface_locate(9,131
+
+c.c,1663
+my_printf 135,
+void fatala 138,
+max 141,
+struct bar 143,
+__attribute__ ((always_inline)) max 147,
+struct foo150,
+char stack[stack155,
+struct S 156,
+} wait_status_ptr_t 161,
+Some_Class  A 162,
+typedef T1 T3 163,
+T3 z 164,
+typedef int more_aligned_int 165,
+struct S  __attribute__ ((vector_size (16))) foo;166,
+int foo 167,
+char *__attribute__((aligned(8))) *f;f168,
+int i 169,
+extern void foobar 170,
+typedef struct cacheLRUEntry_s172,
+__attribute__ ((packed)) cacheLRUEntry_t;177,
+struct foo 178,
+     f1 183,
+void f2 184,
+int x 188,
+struct foo 189,
+short array[array190,
+int f193,
+DEAFUN 196,
+XDEFUN 203,
+DEFUN ("x-get-selection-internal", 
Fx_get_selection_internal,x-get-selection-internal206,
+       Fx_get_selection_internal,x-get-selection-internal212,
+      Fy_get_selection_internal,y-get-selection-internal216,
+defun_func1(218,
+DEFUN_func2(220,
+typedef int bool;222,
+bool funcboo 223,
+struct my_struct 226,
+typedef struct my_struct my_typedef;228,
+int bla 229,
+a(234,
+int func1237,
+static struct cca_control init_control 239,
+static tpcmd rbtp 240,
+static byte ring1 241,
+static byte ring2 242,
+request request 243,
+int func2 246,
+  aaa;249,
+  bbb;251,
+struct sss1 252,
+struct sss2253,
+  struct ss3255,
+struct a b;259,
+struct aa *b;b260,
+  **b;b262,
+caccacacca 263,
+a 267,
+  typedef struct aa 269,
+  typedef struct aa {} aaa;269,
+static void inita 271,
+node *lasta lasta272,
+b 273,
+  typedef  int bb;275,
+static void initb 277,
+node *lastb lastb278,
+typedef enum { REG_ENOSYS 279,
+typedef enum { REG_ENOSYS = -1, aa 279,
+typedef enum { REG_ENOSYS = -1, aa } reg_errcode_t;279,
+
+c-src/a/b/b.c,18
+#define this 1,0
+
+../c/c.web,20
+#define questo 34,
+
+y-src/parse.y,738
+#define obstack_chunk_alloc 46,1111
+#define obstack_chunk_free 47,1149
+VOIDSTAR parse_hash;63,1400
+unsigned char fnin[fnin67,1519
+#define YYSTYPE 71,1617
+typedef struct node *YYSTYPE;YYSTYPE72,1648
+YYSTYPE parse_return;73,1678
+char *instr;instr80,1790
+int parse_error 81,1803
+line:line86,1862
+exp:exp94,1975
+exp_list:exp_list262,5642
+range_exp:range_exp268,5740
+range_exp_list:range_exp_list272,5770
+cell:cell278,5888
+yyerror FUN1(285,5935
+make_list FUN2(292,6015
+#define ERROR 303,6215
+yylex FUN0(314,6392
+parse_cell_or_range FUN2(586,11758
+#define CK_ABS_R(670,13200
+#define CK_REL_R(674,13279
+#define CK_ABS_C(679,13408
+#define CK_REL_C(683,13487
+#define MAYBEREL(688,13616
+str_to_col FUN1(846,16817
+
+y-src/parse.c,520
+#define YYBISON 4,64
+# define       NE      6,114
+# define       LE      7,130
+# define       GE      8,146
+# define       NEG     9,162
+# define       L_CELL  10,179
+# define       L_RANGE 11,199
+# define       L_VAR   12,220
+# define       L_CONST 13,239
+# define       L_FN0   14,260
+# define       L_FN1   15,279
+# define       L_FN2   16,298
+# define       L_FN3   17,317
+# define       L_FN4   18,336
+# define       L_FNN   19,355
+# define       L_FN1R  20,374
+# define       L_FN2R  21,394
+# define       L_FN3R  22,414
+# define       L_FN4R  23,434
+# define       L_FNNR  24,454
+# define       L_LE    25,474
+# define       L_NE    26,492
+# define       L_GE    27,510
+
+parse.y,1181
+#define obstack_chunk_alloc 46,
+#define obstack_chunk_free 47,
+VOIDSTAR parse_hash;63,
+unsigned char fnin[fnin67,
+#define YYSTYPE 71,
+typedef struct node *YYSTYPE;YYSTYPE72,
+YYSTYPE parse_return;73,
+char *instr;instr80,
+int parse_error 81,
+#define YYSTYPE 85,
+# define YYDEBUG 88,
+#define        YYFINAL 93,
+#define        YYFLAG  94,
+#define        YYNTBASE        95,
+#define YYTRANSLATE(98,
+static const char yytranslate[yytranslate101,
+static const short yyprhs[yyprhs134,
+static const short yyrhs[yyrhs142,
+static const short yyrline[yyrline171,
+static const char *const yytname[yytname185,
+static const short yyr1[yyr1197,
+static const short yyr2[yyr2207,
+static const short yydefact[yydefact219,
+static const short yydefgoto[yydefgoto237,
+static const short yypact[yypact242,
+static const short yypgoto[yypgoto260,
+#define        YYLAST  266,
+static const short yytable[yytable269,
+static const short yycheck[yycheck330,
+yyerror FUN1(285,
+make_list FUN2(292,
+#define ERROR 303,
+yylex FUN0(314,
+parse_cell_or_range FUN2(586,
+#define CK_ABS_R(670,
+#define CK_REL_R(674,
+#define CK_ABS_C(679,
+#define CK_REL_C(683,
+#define MAYBEREL(688,
+str_to_col FUN1(846,
+
+/usr/share/bison/bison.simple,2110
+# define YYSTD(40,
+# define YYSTD(42,
+#  define YYSTACK_ALLOC 50,
+#  define YYSIZE_T 51,
+#    define YYSTACK_ALLOC 55,
+#    define YYSIZE_T 56,
+#     define YYSTACK_ALLOC 59,
+#  define YYSTACK_FREE(67,
+#   define YYSIZE_T 71,
+#    define YYSIZE_T 75,
+#  define YYSTACK_ALLOC 78,
+#  define YYSTACK_FREE 79,
+union yyalloc83,
+# define YYSTACK_GAP_MAX 93,
+#  define YYSTACK_BYTES(98,
+#  define YYSTACK_BYTES(102,
+# define YYSTACK_RELOCATE(112,
+# define YYSIZE_T 128,
+# define YYSIZE_T 131,
+#  define YYSIZE_T 136,
+#   define YYSIZE_T 140,
+# define YYSIZE_T 145,
+#define yyerrok        148,
+#define yyclearin      149,
+#define YYEMPTY        150,
+#define YYEOF  151,
+#define YYACCEPT       152,
+#define YYABORT 153,
+#define YYERROR        154,
+#define YYFAIL 158,
+#define YYRECOVERING(159,
+#define YYBACKUP(160,
+#define YYTERROR       177,
+#define YYERRCODE      178,
+# define YYLLOC_DEFAULT(189,
+#   define YYLEX       200,
+#   define YYLEX       202,
+#   define YYLEX       206,
+#   define YYLEX       208,
+# define YYLEX 212,
+#  define YYFPRINTF 225,
+# define YYDPRINTF(228,
+int yydebug;237,
+# define YYDPRINTF(239,
+# define YYINITDEPTH 244,
+# undef YYMAXDEPTH255,
+# define YYMAXDEPTH 259,
+#  define yymemcpy 264,
+yymemcpy 271,
+#   define yystrlen 293,
+yystrlen 298,
+#   define yystpcpy 316,
+yystpcpy 322,
+#  define YYPARSE_PARAM_ARG 351,
+#  define YYPARSE_PARAM_DECL352,
+#  define YYPARSE_PARAM_ARG 354,
+#  define YYPARSE_PARAM_DECL 355,
+# define YYPARSE_PARAM_ARG358,
+# define YYPARSE_PARAM_DECL359,
+#define YY_DECL_NON_LSP_VARIABLES      374,
+# define YY_DECL_VARIABLES     385,
+# define YY_DECL_VARIABLES     391,
+yyparse 403,
+# define YYPOPSTACK 445,
+# define YYPOPSTACK 447,
+# undef YYSTACK_RELOCATE548,
+  *++yyvsp yyvsp746,
+  *++yylsp yylsp748,
+  yyn 755,
+  yystate 757,
+    yystate 761,
+  goto yynewstate;763,
+  goto yyerrlab1;823,
+  yyerrstatus 846,
+  goto yyerrhandle;848,
+  yyn 861,
+  yystate 875,
+  yyn 895,
+  yyn 903,
+  *++yyvsp yyvsp919,
+  *++yylsp yylsp921,
+  yystate 924,
+  goto yynewstate;925,
+  yyresult 932,
+  goto yyreturn;933,
+  yyresult 939,
+  goto yyreturn;940,
+  yyresult 947,
+
+y-src/atest.y,9
+exp    2,3
+
+y-src/cccp.c,303
+#define YYBISON 4,63
+# define       INT     6,113
+# define       CHAR    7,130
+# define       NAME    8,148
+# define       ERROR   9,166
+# define       OR      10,185
+# define       AND     11,201
+# define       EQUAL   12,218
+# define       NOTEQUAL        13,237
+# define       LEQ     14,259
+# define       GEQ     15,276
+# define       LSH     16,293
+# define       RSH     17,310
+# define       UNARY   18,327
+
+cccp.y,1579
+typedef unsigned char U_CHAR;38,
+struct arglist 41,
+#define NULL 51,
+#define GENERIC_PTR 56,
+#define GENERIC_PTR 58,
+#define NULL_PTR 63,
+int expression_value;68,
+static jmp_buf parse_return_error;70,
+static int keyword_parsing 73,
+#define CHAR_TYPE_SIZE 87,
+#define INT_TYPE_SIZE 91,
+#define LONG_TYPE_SIZE 95,
+#define WCHAR_TYPE_SIZE 99,
+#define possible_sum_sign(104,
+  struct constant 113,
+  struct name 114,
+} yystype;118,
+# define YYSTYPE 119,
+# define YYDEBUG 122,
+#define        YYFINAL 127,
+#define        YYFLAG  128,
+#define        YYNTBASE        129,
+#define YYTRANSLATE(132,
+static const char yytranslate[yytranslate135,
+static const short yyprhs[yyprhs167,
+static const short yyrhs[yyrhs174,
+static const short yyrline[yyrline195,
+static const char *const yytname[yytname208,
+static const short yyr1[yyr1219,
+static const short yyr2[yyr2228,
+static const short yydefact[yydefact239,
+static const short yydefgoto[yydefgoto251,
+static const short yypact[yypact256,
+static const short yypgoto[yypgoto268,
+#define        YYLAST  274,
+static const short yytable[yytable277,
+static const short yycheck[yycheck301,
+static char *lexptr;lexptr332,
+parse_number 341,
+struct token 437,
+static struct token tokentab2[tokentab2442,
+yylex 459,
+parse_escape 740,
+yyerror 836,
+integer_overflow 844,
+left_shift 851,
+right_shift 873,
+parse_c_expression 893,
+main 923,
+unsigned char is_idchar[is_idchar948,
+unsigned char is_idstart[is_idstart950,
+char is_hor_space[is_hor_space953,
+initialize_random_junk 958,
+error 988,
+warning 993,
+lookup 999,
+
+/usr/share/bison/bison.simple,2110
+# define YYSTD(40,
+# define YYSTD(42,
+#  define YYSTACK_ALLOC 50,
+#  define YYSIZE_T 51,
+#    define YYSTACK_ALLOC 55,
+#    define YYSIZE_T 56,
+#     define YYSTACK_ALLOC 59,
+#  define YYSTACK_FREE(67,
+#   define YYSIZE_T 71,
+#    define YYSIZE_T 75,
+#  define YYSTACK_ALLOC 78,
+#  define YYSTACK_FREE 79,
+union yyalloc83,
+# define YYSTACK_GAP_MAX 93,
+#  define YYSTACK_BYTES(98,
+#  define YYSTACK_BYTES(102,
+# define YYSTACK_RELOCATE(112,
+# define YYSIZE_T 128,
+# define YYSIZE_T 131,
+#  define YYSIZE_T 136,
+#   define YYSIZE_T 140,
+# define YYSIZE_T 145,
+#define yyerrok        148,
+#define yyclearin      149,
+#define YYEMPTY        150,
+#define YYEOF  151,
+#define YYACCEPT       152,
+#define YYABORT 153,
+#define YYERROR        154,
+#define YYFAIL 158,
+#define YYRECOVERING(159,
+#define YYBACKUP(160,
+#define YYTERROR       177,
+#define YYERRCODE      178,
+# define YYLLOC_DEFAULT(189,
+#   define YYLEX       200,
+#   define YYLEX       202,
+#   define YYLEX       206,
+#   define YYLEX       208,
+# define YYLEX 212,
+#  define YYFPRINTF 225,
+# define YYDPRINTF(228,
+int yydebug;237,
+# define YYDPRINTF(239,
+# define YYINITDEPTH 244,
+# undef YYMAXDEPTH255,
+# define YYMAXDEPTH 259,
+#  define yymemcpy 264,
+yymemcpy 271,
+#   define yystrlen 293,
+yystrlen 298,
+#   define yystpcpy 316,
+yystpcpy 322,
+#  define YYPARSE_PARAM_ARG 351,
+#  define YYPARSE_PARAM_DECL352,
+#  define YYPARSE_PARAM_ARG 354,
+#  define YYPARSE_PARAM_DECL 355,
+# define YYPARSE_PARAM_ARG358,
+# define YYPARSE_PARAM_DECL359,
+#define YY_DECL_NON_LSP_VARIABLES      374,
+# define YY_DECL_VARIABLES     385,
+# define YY_DECL_VARIABLES     391,
+yyparse 403,
+# define YYPOPSTACK 445,
+# define YYPOPSTACK 447,
+# undef YYSTACK_RELOCATE548,
+  *++yyvsp yyvsp746,
+  *++yylsp yylsp748,
+  yyn 755,
+  yystate 757,
+    yystate 761,
+  goto yynewstate;763,
+  goto yyerrlab1;823,
+  yyerrstatus 846,
+  goto yyerrhandle;848,
+  yyn 861,
+  yystate 875,
+  yyn 895,
+  yyn 903,
+  *++yyvsp yyvsp919,
+  *++yylsp yylsp921,
+  yystate 924,
+  goto yynewstate;925,
+  yyresult 932,
+  goto yyreturn;933,
+  yyresult 939,
+  goto yyreturn;940,
+  yyresult 947,
+
+y-src/cccp.y,1107
+typedef unsigned char U_CHAR;38,1201
+struct arglist 41,1301
+#define NULL 51,1468
+#define GENERIC_PTR 56,1578
+#define GENERIC_PTR 58,1611
+#define NULL_PTR 63,1670
+int expression_value;68,1743
+static jmp_buf parse_return_error;70,1766
+static int keyword_parsing 73,1865
+#define CHAR_TYPE_SIZE 87,2162
+#define INT_TYPE_SIZE 91,2229
+#define LONG_TYPE_SIZE 95,2296
+#define WCHAR_TYPE_SIZE 99,2365
+#define possible_sum_sign(104,2556
+  struct constant 112,2733
+  struct name 113,2789
+start 143,3226
+exp1   148,3330
+exp    156,3505
+exp    185,4295
+keywords 306,7835
+static char *lexptr;lexptr332,8579
+parse_number 341,8842
+struct token 437,11038
+static struct token tokentab2[tokentab2442,11088
+yylex 459,11367
+parse_escape 740,17718
+yyerror 836,19599
+integer_overflow 844,19690
+left_shift 851,19804
+right_shift 873,20194
+parse_c_expression 893,20732
+main 923,21483
+unsigned char is_idchar[is_idchar948,21901
+unsigned char is_idstart[is_idstart950,21996
+char is_hor_space[is_hor_space953,22160
+initialize_random_junk 958,22259
+error 988,22915
+warning 993,22963
+lookup 999,23033
+
+tex-src/nonewline.tex,0
+
+php-src/sendmail.php,0
+
+c-src/fail.c,0
+
+a-src/empty.zz,0
diff --git a/test/etags/ETAGS.good_2 b/test/etags/ETAGS.good_2
new file mode 100644
index 0000000..737a6f9
--- /dev/null
+++ b/test/etags/ETAGS.good_2
@@ -0,0 +1,6440 @@
+
+Makefile,701
+ADASRC=1,0
+ASRC=2,91
+CSRC=3,139
+CPSRC=7,410
+ELSRC=10,624
+ERLSRC=11,694
+FORTHSRC=12,759
+FSRC=13,809
+HTMLSRC=14,881
+JAVASRC=15,974
+LUASRC=16,1062
+MAKESRC=17,1105
+OBJCSRC=18,1147
+OBJCPPSRC=19,1228
+PASSRC=20,1291
+PERLSRC=21,1333
+PHPSRC=22,1413
+PSSRC=23,1485
+PROLSRC=24,1525
+PYTSRC=25,1587
+TEXSRC=26,1628
+YSRC=27,1707
+SRCS=28,1772
+NONSRCS=32,2024
+ETAGS_PROG=34,2098
+CTAGS_PROG=35,2129
+REGEX=37,2161
+xx=38,2207
+RUN=40,2256
+OPTIONS=42,2262
+ARGS=43,2314
+infiles 45,2332
+check:check47,2394
+ediff%:ediff%55,2697
+cdiff:cdiff58,2798
+ETAGS:ETAGS61,2895
+CTAGS:CTAGS64,2965
+srclist:srclist67,3043
+regexfile:regexfile71,3134
+.PRECIOUS:.PRECIOUS77,3311
+FRC:FRC79,3345
+
+ada-src/etags-test-for.ada,1969
+   type LL_Task_Procedure_Access LL_Task_Procedure_Access/t1,0
+   function Body_RequiredBody_Required/f3,78
+   type Type_Specific_Data Type_Specific_Data/t11,280
+   function "abs"abs/f19,504
+   type Barrier_Function_Pointer Barrier_Function_Pointer/t21,577
+   function "="=/f27,722
+   type usfreelock_ptr usfreelock_ptr/t30,803
+   function p p/f33,891
+   procedure LL_Wrapper LL_Wrapper/p37,1054
+function p p/f39,1094
+package Pkg1 Pkg1/s44,1203
+  type Private_T Private_T/t46,1220
+  package Inner1 Inner1/s48,1250
+    procedure Private_T;Private_T/p49,1270
+  package Inner2 Inner2/s52,1310
+    task Private_T;Private_T/k53,1330
+  type Public_T Public_T/t56,1365
+  procedure Pkg1_Proc1;Pkg1_Proc1/p62,1450
+  procedure Pkg1_Proc2 Pkg1_Proc2/p64,1475
+  function Pkg1_Func1 Pkg1_Func1/f66,1514
+  function Pkg1_Func2 Pkg1_Func2/f68,1553
+  package Pkg1_Pkg1 Pkg1_Pkg1/s71,1622
+    procedure Pkg1_Pkg1_Proc1;Pkg1_Pkg1_Proc1/p72,1645
+  task type Task_Type Task_Type/k75,1694
+  type Private_T Private_T/t82,1786
+package body Pkg1 Pkg1/b89,1882
+  procedure Pkg1_Proc1 Pkg1_Proc1/p91,1904
+  package body Inner1 Inner1/b96,1956
+    procedure Private_T Private_T/p97,1981
+  package body Inner2 Inner2/b103,2054
+    task body Private_T Private_T/b104,2079
+  task body Task_Type Task_Type/b112,2181
+  procedure Pkg1_Proc2 Pkg1_Proc2/p126,2367
+  function Pkg1_Func1 Pkg1_Func1/f132,2445
+  function Pkg1_Func2 Pkg1_Func2/f134,2496
+  package body Pkg1_Pkg1 Pkg1_Pkg1/b140,2596
+package body Pkg1_Pkg1 Pkg1_Pkg1/b146,2663
+  procedure Pkg1_Pkg1_Proc1 Pkg1_Pkg1_Proc1/p147,2689
+function  Pkg1_Func1 Pkg1_Func1/f155,2778
+package Truc Truc/s162,2887
+package Truc.Bidule Truc.Bidule/s166,2929
+  protected Bidule Bidule/t168,2953
+  protected type Machin_T Machin_T/t172,3007
+package body Truc.Bidule Truc.Bidule/b178,3087
+  protected body Bidule Bidule/b179,3115
+  protected Machin_T Machin_T/t186,3207
+
+ada-src/2ataspri.adb,2190
+package body System.Task_Primitives System.Task_Primitives/b64,2603
+   package RTE RTE/s69,2712
+   package TSL TSL/s70,2759
+   function To_void_ptr To_void_ptr/f86,3287
+   function To_TCB_Ptr To_TCB_Ptr/f89,3366
+   function 
pthread_mutexattr_setprotocolpthread_mutexattr_setprotocol/f92,3444
+   function 
pthread_mutexattr_setprio_ceilingpthread_mutexattr_setprio_ceiling/f99,3728
+   procedure Abort_WrapperAbort_Wrapper/p115,4302
+   procedure LL_Wrapper LL_Wrapper/p122,4526
+   procedure Initialize_LL_Tasks Initialize_LL_Tasks/p131,4830
+   function Self Self/f160,5586
+   procedure Initialize_LockInitialize_Lock/p174,5958
+   procedure Finalize_Lock Finalize_Lock/p210,6927
+   procedure Write_Lock Write_Lock/p226,7338
+   procedure Read_Lock Read_Lock/p239,7700
+   procedure Unlock Unlock/p246,7850
+   procedure Initialize_Cond Initialize_Cond/p258,8160
+   procedure Finalize_Cond Finalize_Cond/p286,8979
+   procedure Cond_Wait Cond_Wait/p300,9303
+   procedure Cond_Timed_WaitCond_Timed_Wait/p312,9661
+   procedure Cond_Signal Cond_Signal/p343,10510
+   procedure Set_PrioritySet_Priority/p355,10836
+   procedure Set_Own_Priority Set_Own_Priority/p372,11243
+   function Get_Priority Get_Priority/f385,11598
+   function Get_Own_Priority Get_Own_Priority/f398,12023
+   procedure Create_LL_TaskCreate_LL_Task/p412,12438
+      function To_Start_Addr To_Start_Addr/f426,12873
+   procedure Exit_LL_Task Exit_LL_Task/p491,14995
+   procedure Abort_Task Abort_Task/p500,15158
+   procedure Test_Abort Test_Abort/p518,15716
+   procedure Install_Abort_Handler Install_Abort_Handler/p527,15878
+   procedure Abort_WrapperAbort_Wrapper/p557,16939
+      function Address_To_Call_State Address_To_Call_State/f562,17062
+   procedure Install_Error_Handler Install_Error_Handler/p573,17351
+   procedure LL_Assert LL_Assert/p599,18146
+   procedure LL_Wrapper LL_Wrapper/p608,18299
+   procedure Initialize_TAS_Cell Initialize_TAS_Cell/p630,19010
+   procedure Finalize_TAS_Cell Finalize_TAS_Cell/p635,19129
+   procedure Clear Clear/p640,19236
+   procedure Test_And_Set Test_And_Set/p645,19330
+   function  Is_Set Is_Set/f659,19676
+
+ada-src/2ataspri.ads,2313
+package System.Task_Primitives System.Task_Primitives/s58,3169
+   type LL_Task_Procedure_Access LL_Task_Procedure_Access/t62,3253
+   type Pre_Call_State Pre_Call_State/t64,3331
+   type Task_Storage_Size Task_Storage_Size/t66,3378
+   type Machine_Exceptions Machine_Exceptions/t68,3433
+   type Error_Information Error_Information/t70,3499
+   type Lock Lock/t72,3569
+   type Condition_Variable Condition_Variable/t73,3594
+   type Task_Control_Block Task_Control_Block/t81,3955
+   type TCB_Ptr TCB_Ptr/t89,4241
+   function Address_To_TCB_Ptr Address_To_TCB_Ptr/f93,4333
+   procedure Initialize_LL_Tasks Initialize_LL_Tasks/p96,4425
+   function Self Self/f100,4602
+   procedure Initialize_Lock Initialize_Lock/p103,4707
+   procedure Finalize_Lock Finalize_Lock/p107,4879
+   procedure Write_Lock Write_Lock/p111,5034
+   procedure Read_Lock Read_Lock/p118,5428
+   procedure Unlock Unlock/p128,5995
+   procedure Initialize_Cond Initialize_Cond/p135,6300
+   procedure Finalize_Cond Finalize_Cond/p138,6413
+   procedure Cond_Wait Cond_Wait/p142,6591
+   procedure Cond_Timed_WaitCond_Timed_Wait/p155,7396
+   procedure Cond_Signal Cond_Signal/p164,7812
+   procedure Set_Priority Set_Priority/p169,8040
+   procedure Set_Own_Priority Set_Own_Priority/p173,8200
+   function Get_Priority Get_Priority/f177,8348
+   function Get_Own_Priority Get_Own_Priority/f181,8504
+   procedure Create_LL_TaskCreate_LL_Task/p185,8647
+   procedure Exit_LL_Task;Exit_LL_Task/p198,9282
+   procedure Abort_Task Abort_Task/p203,9516
+   procedure Test_Abort;Test_Abort/p210,9878
+   type Abort_Handler_Pointer Abort_Handler_Pointer/t217,10233
+   procedure Install_Abort_Handler Install_Abort_Handler/p219,10312
+   procedure Install_Error_Handler Install_Error_Handler/p226,10741
+   procedure LL_Assert LL_Assert/p231,10983
+   type Proc Proc/t238,11240
+   type TAS_Cell TAS_Cell/t242,11328
+   procedure Initialize_TAS_Cell Initialize_TAS_Cell/p249,11670
+   procedure Finalize_TAS_Cell Finalize_TAS_Cell/p255,11941
+   procedure Clear Clear/p260,12157
+   procedure Test_And_Set Test_And_Set/p267,12462
+   function  Is_Set Is_Set/f275,12877
+   type Lock Lock/t283,13155
+   type Condition_Variable Condition_Variable/t288,13267
+   type TAS_Cell TAS_Cell/t293,13389
+
+ada-src/waroquiers.ada,1503
+package Pkg1 Pkg1/s3,89
+  type Private_T Private_T/t5,106
+  package Inner1 Inner1/s7,136
+    procedure Private_T;Private_T/p8,156
+  package Inner2 Inner2/s11,196
+    task Private_T;Private_T/k12,216
+  type Public_T Public_T/t15,251
+  procedure Pkg1_Proc1;Pkg1_Proc1/p21,336
+  procedure Pkg1_Proc2 Pkg1_Proc2/p23,361
+  function Pkg1_Func1 Pkg1_Func1/f25,400
+  function Pkg1_Func2 Pkg1_Func2/f27,439
+  package Pkg1_Pkg1 Pkg1_Pkg1/s30,508
+    procedure Pkg1_Pkg1_Proc1;Pkg1_Pkg1_Proc1/p31,531
+  task type Task_Type Task_Type/k34,580
+  type Private_T Private_T/t40,671
+package body Pkg1 Pkg1/b46,766
+  procedure Pkg1_Proc1 Pkg1_Proc1/p48,788
+  package body Inner1 Inner1/b53,840
+    procedure Private_T Private_T/p54,865
+  package body Inner2 Inner2/b60,938
+    task body Private_T Private_T/b61,963
+  task body Task_Type Task_Type/b68,1064
+  procedure Pkg1_Proc2 Pkg1_Proc2/p82,1250
+  function Pkg1_Func1 Pkg1_Func1/f88,1328
+  function Pkg1_Func2 Pkg1_Func2/f90,1379
+  package body Pkg1_Pkg1 Pkg1_Pkg1/b96,1479
+package body Pkg1_Pkg1 Pkg1_Pkg1/b100,1544
+  procedure Pkg1_Pkg1_Proc1 Pkg1_Pkg1_Proc1/p101,1570
+function  Pkg1_Func1 Pkg1_Func1/f107,1657
+package Truc Truc/s112,1764
+package Truc.Bidule Truc.Bidule/s116,1816
+  protected Bidule Bidule/t125,1964
+  protected type Machin_T Machin_T/t131,2046
+package body Truc.Bidule Truc.Bidule/b138,2153
+  protected body Bidule Bidule/b139,2181
+  protected body Machin_T Machin_T/b146,2281
+
+c-src/abbrev.c,1432
+Lisp_Object Vabbrev_table_name_list;42,1416
+Lisp_Object Vglobal_abbrev_table;47,1561
+Lisp_Object Vfundamental_mode_abbrev_table;51,1672
+int abbrevs_changed;55,1773
+int abbrev_all_caps;57,1795
+Lisp_Object Vabbrev_start_location;62,1944
+Lisp_Object Vabbrev_start_location_buffer;65,2033
+Lisp_Object Vlast_abbrev;69,2142
+Lisp_Object Vlast_abbrev_text;74,2311
+int last_abbrev_point;78,2401
+Lisp_Object Vpre_abbrev_expand_hook,82,2474
+Lisp_Object Vpre_abbrev_expand_hook, Qpre_abbrev_expand_hook;82,2474
+DEFUN ("make-abbrev-table", Fmake_abbrev_table,make-abbrev-table84,2538
+DEFUN ("clear-abbrev-table", Fclear_abbrev_table,clear-abbrev-table91,2730
+DEFUN ("define-abbrev", Fdefine_abbrev,define-abbrev106,3111
+DEFUN ("define-global-abbrev", 
Fdefine_global_abbrev,define-global-abbrev148,4430
+DEFUN ("define-mode-abbrev", Fdefine_mode_abbrev,define-mode-abbrev159,4801
+DEFUN ("abbrev-symbol", Fabbrev_symbol,abbrev-symbol173,5269
+DEFUN ("abbrev-expansion", Fabbrev_expansion,abbrev-expansion201,6233
+DEFUN ("expand-abbrev", Fexpand_abbrev,expand-abbrev217,6748
+DEFUN ("unexpand-abbrev", Funexpand_abbrev,unexpand-abbrev388,11669
+write_abbrev 425,12876
+describe_abbrev 444,13311
+DEFUN ("insert-abbrev-table-description", 
Finsert_abbrev_table_description,insert-abbrev-table-description465,13826
+DEFUN ("define-abbrev-table", 
Fdefine_abbrev_table,define-abbrev-table505,14982
+syms_of_abbrev 539,16059
+
+c-src/torture.c,197
+(*tag1 tag118,452
+#define notag2 26,553
+(*tag2 tag229,630
+(*tag3 tag339,772
+#define notag4 45,861
+(*tag4 tag448,955
+tag5 57,1081
+tag6 66,1208
+int pp1(74,1317
+pp287,1419
+pp3(100,1518
+
+c-src/getopt.h,538
+#define _GETOPT_H 19,801
+extern char *optarg;optarg31,1109
+extern int optind;45,1617
+extern int opterr;50,1743
+struct option73,2797
+#define        no_argument     89,3124
+#define required_argument      90,3147
+#define optional_argument      91,3175
+extern int getopt 98,3440
+extern int getopt 100,3544
+extern int getopt_long 102,3599
+extern int getopt_long_only 104,3731
+extern int _getopt_internal 109,3942
+extern int getopt 114,4140
+extern int getopt_long 115,4162
+extern int getopt_long_only 116,4189
+extern int _getopt_internal 118,4222
+
+c-src/etags.c,12175
+char pot_etags_version[pot_etags_version81,3470
+#  undef DEBUG84,3552
+#  define DEBUG 85,3567
+#  define DEBUG 87,3594
+#  define NDEBUG       88,3617
+# define _GNU_SOURCE 94,3705
+# undef MSDOS100,3876
+# undef  WINDOWSNT101,3890
+# define WINDOWSNT102,3909
+# undef MSDOS106,3968
+# define MSDOS 107,3982
+# define MSDOS 110,4032
+# define MAXPATHLEN 115,4111
+# undef HAVE_NTGUI116,4141
+# undef  DOS_NT117,4160
+# define DOS_NT118,4176
+# undef  assert        135,4482
+# define assert(136,4541
+# undef  CTAGS146,4857
+# define CTAGS 147,4872
+# define CTAGS 149,4898
+#define streq(152,4927
+#define strcaseeq(153,4996
+#define strneq(154,5075
+#define strncaseeq(155,5151
+#define CHARS 157,5238
+#define CHAR(158,5278
+#define        iswhite(159,5329
+#define notinname(160,5394
+#define        begtoken(161,5469
+#define        intoken(162,5542
+#define        endtoken(163,5614
+#define ISALNUM(165,5684
+#define ISALPHA(166,5722
+#define ISDIGIT(167,5760
+#define ISLOWER(168,5798
+#define lowcase(170,5837
+#define xnew(179,6015
+#define xrnew(180,6083
+typedef void Lang_function 182,6164
+} compressor;188,6365
+} language;199,6835
+typedef struct fdesc201,6848
+} fdesc;212,7366
+typedef struct node_st214,7376
+} node;225,7894
+} linebuffer;239,8248
+    at_language,245,8344
+    at_regexp,246,8393
+    at_filename,247,8437
+    at_stdin,248,8473
+    at_end     249,8516
+} argument;253,8698
+typedef struct regexp256,8758
+} regexp;268,9325
+static void Ada_funcs 274,9428
+static void Asm_labels 275,9460
+static void C_entries 276,9493
+static void default_C_entries 277,9536
+static void plain_C_entries 278,9576
+static void Cjava_entries 279,9614
+static void Cobol_paragraphs 280,9650
+static void Cplusplus_entries 281,9689
+static void Cstar_entries 282,9729
+static void Erlang_functions 283,9765
+static void Forth_words 284,9804
+static void Fortran_functions 285,9838
+static void HTML_labels 286,9878
+static void Lisp_functions 287,9912
+static void Lua_functions 288,9949
+static void Makefile_targets 289,9985
+static void Pascal_functions 290,10024
+static void Perl_functions 291,10063
+static void PHP_functions 292,10100
+static void PS_functions 293,10136
+static void Prolog_functions 294,10171
+static void Python_functions 295,10210
+static void Scheme_functions 296,10249
+static void TeX_commands 297,10288
+static void Texinfo_nodes 298,10323
+static void Yacc_entries 299,10359
+static void just_read_file 300,10394
+static language *get_language_from_langname 
get_language_from_langname302,10432
+static void readline 303,10492
+static long readline_internal 304,10537
+static bool nocase_tail 305,10591
+static void get_tag 306,10631
+static void analyze_regex 308,10671
+static void free_regexps 309,10707
+static void regex_tag_multiline 310,10740
+static void error 311,10780
+# undef STDIN408,15073
+#define STDIN 411,15095
+static compressor compressors[compressors457,17664
+static const char *Ada_suffixes Ada_suffixes473,17907
+static const char Ada_help 475,17977
+static const char *Asm_suffixes Asm_suffixes493,18580
+static const char Asm_help 504,18976
+static const char *default_C_suffixes default_C_suffixes512,19312
+static const char default_C_help 515,19413
+static const char default_C_help 523,19850
+static const char *Cplusplus_suffixes Cplusplus_suffixes535,20460
+static const char Cplusplus_help 540,20658
+static const char *Cjava_suffixes Cjava_suffixes549,21113
+static char Cjava_help 551,21172
+static const char *Cobol_suffixes Cobol_suffixes556,21337
+static char Cobol_help 558,21402
+static const char *Cstar_suffixes Cstar_suffixes562,21543
+static const char *Erlang_suffixes Erlang_suffixes565,21607
+static const char Erlang_help 567,21673
+const char *Forth_suffixes Forth_suffixes571,21799
+static const char Forth_help 573,21857
+static const char *Fortran_suffixes Fortran_suffixes577,22008
+static const char Fortran_help 579,22085
+static const char *HTML_suffixes HTML_suffixes582,22190
+static const char HTML_help 584,22264
+static const char *Lisp_suffixes Lisp_suffixes589,22452
+static const char Lisp_help 591,22556
+static const char *Lua_suffixes Lua_suffixes598,22871
+static const char Lua_help 600,22934
+static const char *Makefile_filenames Makefile_filenames603,23010
+static const char Makefile_help 605,23133
+static const char *Objc_suffixes Objc_suffixes609,23277
+static const char Objc_help 613,23399
+static const char *Pascal_suffixes Pascal_suffixes619,23714
+static const char Pascal_help 621,23778
+static const char *Perl_suffixes Perl_suffixes626,23966
+static const char *Perl_interpreters Perl_interpreters628,24028
+static const char Perl_help 630,24100
+static const char *PHP_suffixes PHP_suffixes637,24451
+static const char PHP_help 639,24523
+static const char *plain_C_suffixes plain_C_suffixes643,24678
+static const char *PS_suffixes PS_suffixes647,24762
+static const char PS_help 649,24848
+static const char *Prolog_suffixes Prolog_suffixes652,24931
+static const char Prolog_help 654,24993
+static const char *Python_suffixes Python_suffixes658,25107
+static const char Python_help 660,25165
+static const char *Scheme_suffixes Scheme_suffixes665,25347
+static const char Scheme_help 667,25460
+static const char *TeX_suffixes TeX_suffixes672,25683
+static const char TeX_help 674,25781
+static const char *Texinfo_suffixes Texinfo_suffixes686,26316
+static const char Texinfo_help 688,26395
+static const char *Yacc_suffixes Yacc_suffixes691,26492
+static const char Yacc_help 693,26606
+static const char auto_help 699,26856
+static const char none_help 703,27020
+static const char no_lang_help 707,27143
+static language lang_names 718,27355
+print_language_names 753,29532
+# define EMACS_NAME 786,30755
+# define VERSION 789,30811
+print_version 792,30869
+# define PRINT_UNDOCUMENTED_OPTIONS_HELP 804,31173
+print_help 808,31250
+main 981,37438
+get_compressor_from_suffix 1319,46217
+get_language_from_langname 1355,47158
+get_language_from_interpreter 1377,47545
+get_language_from_filename 1399,47976
+process_file_name 1433,48834
+process_file 1555,51665
+init 1632,54150
+find_entries 1656,54901
+make_tag 1814,59707
+pfnote 1856,60942
+free_tree 1917,62744
+free_fdesc 1935,63029
+add_node 1955,63472
+invalidate_nodes 2035,65537
+static int total_size_of_entries 2067,66150
+static int number_len 2068,66193
+total_size_of_entries 2087,66694
+put_entries 2107,67154
+#define C_EXT  2193,68995
+#define C_PLAIN 2194,69037
+#define C_PLPL 2195,69070
+#define C_STAR 2196,69104
+#define C_JAVA 2197,69137
+#define C_AUTO 2198,69172
+#define YACC   2199,69242
+enum sym_type2204,69312
+  st_none,2206,69328
+  st_C_objprot,2207,69339
+  st_C_objprot, st_C_objimpl,2207,69339
+  st_C_objprot, st_C_objimpl, st_C_objend,2207,69339
+  st_C_gnumacro,2208,69382
+  st_C_ignore,2209,69399
+  st_C_ignore, st_C_attribute,2209,69399
+  st_C_javastruct,2210,69430
+  st_C_operator,2211,69449
+  st_C_class,2212,69466
+  st_C_class, st_C_template,2212,69466
+  st_C_struct,2213,69495
+  st_C_struct, st_C_extern,2213,69495
+  st_C_struct, st_C_extern, st_C_enum,2213,69495
+  st_C_struct, st_C_extern, st_C_enum, st_C_define,2213,69495
+  st_C_struct, st_C_extern, st_C_enum, st_C_define, st_C_typedef2213,69495
+struct C_stab_entry 2271,71278
+hash 2275,71409
+in_word_set 2321,72937
+      TOTAL_KEYWORDS 2325,73018
+      MIN_WORD_LENGTH 2326,73045
+      MAX_WORD_LENGTH 2327,73072
+      MIN_HASH_VALUE 2328,73100
+      MAX_HASH_VALUE 2329,73126
+C_symtype 2387,74985
+static bool inattribute;2400,75234
+  fvnone,2408,75435
+  fdefunkey,2409,75466
+  fdefunname,2410,75512
+  foperator,2411,75556
+  fvnameseen,2412,75613
+  fstartlist,2413,75666
+  finlist,2414,75722
+  flistseen,2415,75765
+  fignore,2416,75813
+  vignore      2417,75856
+} fvdef;2418,75901
+static bool fvextern;2420,75911
+  tnone,2428,76089
+  tkeyseen,2429,76119
+  ttypeseen,2430,76160
+  tinbody,2431,76199
+  tend,2432,76238
+  tignore      2433,76279
+} typdef;2434,76320
+  snone,2443,76499
+  skeyseen,2445,76575
+  stagseen,2446,76620
+  scolonseen   2447,76661
+} structdef;2448,76715
+static const char *objtag objtag2453,76809
+  dnone,2460,76942
+  dsharpseen,2461,76972
+  ddefineseen,2462,77025
+  dignorerest  2463,77070
+} definedef;2464,77112
+  onone,2472,77267
+  oprotocol,2473,77297
+  oimplementation,2474,77347
+  otagseen,2475,77395
+  oparenseen,2476,77431
+  ocatseen,2477,77486
+  oinbody,2478,77525
+  omethodsign,2479,77568
+  omethodtag,2480,77626
+  omethodcolon,2481,77666
+  omethodparm,2482,77709
+  oignore      2483,77755
+} objdef;2484,77787
+static struct tok2491,77944
+} token;2508,78626
+static void pushclass_above 2514,78784
+static void popclass_above 2515,78832
+static void write_classname 2516,78866
+} cstack;2523,79136
+#define nestlev        2525,79264
+#define instruct       2527,79369
+pushclass_above 2531,79489
+popclass_above 2550,79948
+write_classname 2564,80162
+static bool consider_token 2592,80761
+static void make_C_tag 2593,80833
+consider_token 2613,81341
+} lbs[lbs2924,88532
+#define current_lb_is_new 2926,88543
+#define switch_line_buffers(2927,88588
+#define curlb 2929,88641
+#define newlb 2930,88672
+#define curlinepos 2931,88703
+#define newlinepos 2932,88744
+#define plainc 2934,88786
+#define cplpl 2935,88830
+#define cjava 2936,88861
+#define CNL_SAVE_DEFINEDEF(2938,88905
+#define CNL(2947,89117
+make_C_tag 2960,89375
+C_entries 2986,90194
+default_C_entries 3833,110156
+plain_C_entries 3840,110276
+Cplusplus_entries 3847,110364
+Cjava_entries 3854,110460
+Cstar_entries 3861,110550
+Yacc_entries 3868,110642
+#define LOOP_ON_INPUT_LINES(3875,110720
+#define LOOKING_AT(3884,111056
+#define LOOKING_AT_NOCASE(3891,111461
+just_read_file 3901,111861
+static void F_takeprec 3910,111965
+static void F_getit 3911,111996
+F_takeprec 3914,112039
+F_getit 3937,112366
+Fortran_functions 3961,112840
+Ada_getit 4052,114669
+Ada_funcs 4115,116044
+Asm_labels 4228,118582
+Perl_functions 4261,119549
+Python_functions 4357,122057
+PHP_functions 4387,122684
+Cobol_paragraphs 4466,124471
+Makefile_targets 4494,125029
+Pascal_functions 4529,125950
+static void L_getit 4706,130277
+L_getit 4709,130318
+Lisp_functions 4725,130664
+Lua_functions 4785,131850
+PS_functions 4811,132385
+Forth_words 4841,133053
+Scheme_functions 4877,134092
+static linebuffer *TEX_toktab TEX_toktab4908,134781
+static const char *TEX_defenv TEX_defenv4912,134974
+static void TEX_mode 4917,135172
+static void TEX_decode_env 4918,135203
+static char TEX_esc 4920,135261
+static char TEX_opgrp 4921,135289
+static char TEX_clgrp 4922,135318
+TeX_commands 4928,135395
+#define TEX_LESC 4986,136652
+#define TEX_SESC 4987,136674
+TEX_mode 4992,136804
+TEX_decode_env 5026,137509
+Texinfo_nodes 5071,138554
+HTML_labels 5094,139013
+static size_t prolog_pr 5214,142192
+static void prolog_skip_comment 5215,142234
+static size_t prolog_atom 5216,142290
+Prolog_functions 5219,142347
+prolog_skip_comment 5255,143128
+prolog_pr 5281,143736
+prolog_atom 5319,144628
+static int erlang_func 5374,145540
+static void erlang_attribute 5375,145581
+static int erlang_atom 5376,145620
+Erlang_functions 5379,145666
+erlang_func 5438,146965
+erlang_attribute 5476,147642
+erlang_atom 5496,148061
+static char *scan_separators scan_separators5520,148487
+static void add_regex 5521,148526
+static char *substitute substitute5522,148570
+scan_separators 5534,149080
+analyze_regex 5586,150460
+add_regex 5654,152050
+substitute 5767,154797
+free_regexps 5814,155837
+regex_tag_multiline 5836,156291
+nocase_tail 5913,158263
+get_tag 5928,158519
+readline_internal 5959,159455
+readline 6037,161296
+savestr 6230,167243
+savenstr 6240,167473
+skip_spaces 6249,167679
+skip_non_spaces 6258,167833
+skip_name 6267,167983
+fatal 6277,168156
+pfatal 6284,168253
+suggest_asking_for_help 6291,168332
+error 6300,168554
+concat 6313,168846
+etags_getcwd 6329,169259
+relative_filename 6350,169725
+absolute_filename 6389,170751
+absolute_dirname 6453,172416
+filename_is_absolute 6472,172845
+canonicalize_filename 6484,173096
+# define ISUPPER(6491,173235
+linebuffer_init 6514,173656
+linebuffer_setlen 6524,173887
+xmalloc 6536,174148
+xrealloc 6545,174314
+
+c-src/exit.c,47
+  } __libc_atexit;30,1011
+DEFUN(exit,38,1252
+
+c-src/exit.strange_suffix,47
+  } __libc_atexit;30,1011
+DEFUN(exit,38,1252
+
+c-src/sysdep.h,491
+#define        ENTRY(21,865
+#define        PSEUDO(26,972
+    movl $SYS_##syscall_nam$SYS_##syscall_na31,1132
+    movl $SYS_##syscall_name, %eax;eax31,1132
+    int $0x80;32,1180
+    test %eax,eax33,1210
+    test %eax, %eax;eax33,1210
+    jl syscall_error;34,1245
+#define        XCHG_0  47,1562
+#define        XCHG_1  48,1606
+#define        XCHG_2  49,1648
+#define        XCHG_3  50,1691
+#define        XCHG_4  51,1734
+#define        XCHG_5  52,1777
+#define        r0      54,1821
+#define        r1      55,1875
+#define scratch 56,1932
+#define MOVE(57,2001
+
+c-src/tab.c,196
+static int             count_words(15,263
+static char            *get_word(get_word35,553
+void                   tab_free(59,966
+char                   **tab_fill(tab_fill70,1129
+int                    tab_delete_first(91,1638
+int                    tab_count_words(103,1820
+
+c-src/dostorture.c,197
+(*tag1 tag118,451
+#define notag2 26,552
+(*tag2 tag229,629
+(*tag3 tag339,771
+#define notag4 45,860
+(*tag4 tag448,954
+tag5 57,1080
+tag6 66,1207
+int pp1(74,1316
+pp287,1418
+pp3(100,1517
+
+c-src/emacs/src/gmalloc.c,6643
+#define USE_PTHREAD25,1002
+#undef get_current_dir_name33,1126
+extern void emacs_abort 47,1305
+#undef malloc64,2110
+#undef realloc65,2124
+#undef calloc66,2139
+#undef free67,2153
+#define malloc 68,2165
+#define realloc 69,2188
+#define calloc 70,2213
+#define aligned_alloc 71,2236
+#define free 72,2273
+extern void *bss_sbrk bss_sbrk76,2335
+extern int bss_sbrk_did_unexec;77,2375
+extern char bss_sbrk_buffer[bss_sbrk_buffer78,2407
+extern void *bss_sbrk_buffer_end;bss_sbrk_buffer_end79,2438
+#define DUMPED 80,2472
+#define ALLOCATED_BEFORE_DUMPING(81,2507
+extern void *malloc malloc94,2718
+#define INT_BIT        124,3934
+#define BLOCKLOG       125,3977
+#define BLOCKSIZE      126,4018
+#define BLOCKIFY(127,4052
+#define HEAP   131,4215
+#define FINAL_FREE_BLOCKS      135,4391
+  } malloc_info;167,5388
+extern char *_heapbase;_heapbase170,5449
+extern malloc_info *_heapinfo;_heapinfo173,5541
+#define BLOCK(176,5620
+#define ADDRESS(177,5682
+extern size_t _heapindex;180,5797
+extern size_t _heaplimit;183,5866
+struct list186,5939
+extern struct list _fraghead[_fraghead193,6056
+struct alignlist196,6153
+extern struct alignlist *_aligned_blocks;_aligned_blocks202,6334
+extern size_t _chunks_used;205,6401
+extern size_t _bytes_used;206,6429
+extern size_t _chunks_free;207,6456
+extern size_t _bytes_free;208,6484
+extern void *_malloc_internal _malloc_internal213,6673
+extern void *_realloc_internal _realloc_internal214,6713
+extern void _free_internal 215,6762
+extern void *_malloc_internal_nolock _malloc_internal_nolock216,6799
+extern void *_realloc_internal_nolock _realloc_internal_nolock217,6846
+extern void _free_internal_nolock 218,6902
+extern pthread_mutex_t _malloc_mutex,221,6966
+extern pthread_mutex_t _malloc_mutex, _aligned_blocks_mutex;221,6966
+extern int _malloc_thread_enabled_p;222,7027
+#define LOCK(223,7064
+#define UNLOCK(228,7195
+#define LOCK_ALIGNED_BLOCKS(233,7329
+#define UNLOCK_ALIGNED_BLOCKS(238,7484
+#define LOCK(244,7649
+#define UNLOCK(245,7664
+#define LOCK_ALIGNED_BLOCKS(246,7681
+#define UNLOCK_ALIGNED_BLOCKS(247,7711
+extern void *malloc_find_object_address malloc_find_object_address252,7865
+extern void *(*__morecore)__morecore256,8021
+extern void *__default_morecore __default_morecore259,8105
+extern void (*__after_morecore_hook)__after_morecore_hook263,8269
+extern size_t __malloc_extra_blocks;267,8442
+extern int __malloc_initialized;270,8552
+extern int __malloc_initialize 272,8646
+extern void (*__malloc_initialize_hook)__malloc_initialize_hook275,8723
+extern void (*__free_hook)__free_hook276,8771
+extern void *(*__malloc_hook)__malloc_hook277,8811
+extern void *(*__realloc_hook)__realloc_hook278,8856
+extern void *(*__memalign_hook)__memalign_hook279,8913
+enum mcheck_status283,9092
+    MCHECK_DISABLED 285,9115
+    MCHECK_OK,286,9187
+    MCHECK_FREE,287,9226
+    MCHECK_HEAD,288,9270
+    MCHECK_TAIL        289,9334
+extern int mcheck 296,9701
+extern enum mcheck_status mprobe 301,9952
+extern void mtrace 304,10055
+extern void muntrace 305,10082
+struct mstats308,10153
+extern struct mstats mstats 318,10518
+extern void memory_warnings 321,10625
+void *(*__malloc_hook)__malloc_hook352,11743
+char *_heapbase;_heapbase355,11829
+malloc_info *_heapinfo;_heapinfo358,11927
+static size_t heapsize;361,11983
+size_t _heapindex;364,12047
+size_t _heaplimit;367,12109
+struct list _fraghead[_fraghead370,12171
+size_t _chunks_used;373,12229
+size_t _bytes_used;374,12250
+size_t _chunks_free;375,12270
+size_t _bytes_free;376,12291
+int __malloc_initialized;379,12340
+size_t __malloc_extra_blocks;381,12367
+void (*__malloc_initialize_hook)__malloc_initialize_hook383,12398
+void (*__after_morecore_hook)__after_morecore_hook384,12439
+static int state_protected_p;400,12912
+static size_t last_state_size;401,12942
+static malloc_info *last_heapinfo;last_heapinfo402,12973
+protect_malloc_state 405,13014
+#define PROTECT_MALLOC_STATE(426,13627
+#define PROTECT_MALLOC_STATE(429,13697
+align 435,13794
+get_contiguous_space 466,14616
+register_heapinfo 497,15325
+pthread_mutex_t _malloc_mutex 517,15879
+pthread_mutex_t _aligned_blocks_mutex 518,15938
+int _malloc_thread_enabled_p;519,16005
+malloc_atfork_handler_prepare 522,16048
+malloc_atfork_handler_parent 529,16139
+malloc_atfork_handler_child 536,16233
+malloc_enable_thread 544,16375
+malloc_initialize_1 563,16961
+__malloc_initialize 594,17793
+static int morecore_recursing;604,17926
+morecore_nolock 609,18066
+_malloc_internal_nolock 722,21584
+_malloc_internal 920,28102
+malloc 932,28247
+extern void *_malloc _malloc956,29033
+extern void _free 957,29064
+extern void *_realloc _realloc958,29092
+_malloc 961,29140
+_free 967,29196
+_realloc 973,29240
+void (*__free_hook)__free_hook1001,30259
+struct alignlist *_aligned_blocks _aligned_blocks1004,30345
+_free_internal_nolock 1009,30474
+_free_internal 1255,38476
+free 1265,38603
+weak_alias 1277,38799
+#define min(1306,39813
+void *(*__realloc_hook)__realloc_hook1310,39898
+_realloc_internal_nolock 1319,40309
+_realloc_internal 1435,43563
+realloc 1447,43726
+calloc 1478,44894
+#define        __sbrk  1513,46042
+extern void *__sbrk __sbrk1518,46247
+__default_morecore 1525,46511
+void *(*__memalign_hook)__memalign_hook1554,47456
+aligned_alloc 1557,47522
+memalign 1647,49704
+posix_memalign 1656,49909
+extern void *valloc valloc1695,51140
+extern int getpagesize 1700,51278
+static size_t pagesize;1703,51317
+valloc 1706,51349
+#undef malloc1715,51490
+#undef realloc1716,51504
+#undef calloc1717,51519
+#undef aligned_alloc1718,51533
+#undef free1719,51554
+extern void *malloc malloc1722,51609
+extern void *realloc realloc1723,51644
+extern void *calloc calloc1724,51691
+extern void free 1725,51740
+extern void *aligned_alloc aligned_alloc1727,51796
+extern int posix_memalign 1729,51890
+hybrid_malloc 1736,52083
+hybrid_calloc 1744,52188
+hybrid_free 1752,52319
+hybrid_aligned_alloc 1765,52626
+hybrid_realloc 1780,52984
+char *gget_current_dir_name gget_current_dir_name1808,53753
+hybrid_get_current_dir_name 1811,53797
+static void (*old_free_hook)old_free_hook1846,54921
+static void *(*old_malloc_hook)old_malloc_hook1847,54963
+static void *(*old_realloc_hook)old_realloc_hook1848,55010
+static void (*abortfunc)abortfunc1851,55124
+#define MAGICWORD      1854,55206
+#define MAGICFREE      1855,55261
+#define MAGICBYTE      1856,55316
+#define MALLOCFLOOD    1857,55348
+#define FREEFLOOD      1858,55382
+struct hdr1860,55415
+checkhdr 1867,55581
+freehook 1891,56022
+mallochook 1927,56804
+reallochook 1944,57143
+mabort 1978,57901
+static int mcheck_used 2012,58586
+mcheck 2015,58619
+mprobe 2035,59138
+
+c-src/emacs/src/regex.h,4576
+#define _REGEX_H 21,836
+typedef unsigned long reg_syntax_t;43,1577
+#define RE_BACKSLASH_ESCAPE_IN_LISTS 47,1749
+#define RE_BK_PLUS_QM 52,1969
+#define RE_CHAR_CLASSES 58,2298
+#define RE_CONTEXT_INDEP_ANCHORS 72,3032
+#define RE_CONTEXT_INDEP_OPS 80,3458
+#define RE_CONTEXT_INVALID_OPS 84,3658
+#define RE_DOT_NEWLINE 88,3801
+#define RE_DOT_NOT_NULL 92,3937
+#define RE_HAT_LISTS_NOT_NEWLINE 96,4082
+#define RE_INTERVALS 101,4292
+#define RE_LIMITED_OPS 105,4441
+#define RE_NEWLINE_ALT 109,4583
+#define RE_NO_BK_BRACES 114,4773
+#define RE_NO_BK_PARENS 118,4964
+#define RE_NO_BK_REFS 122,5120
+#define RE_NO_BK_VBAR 126,5316
+#define RE_NO_EMPTY_RANGES 132,5610
+#define RE_UNMATCHED_RIGHT_PAREN_ORD 136,5766
+#define RE_NO_POSIX_BACKTRACKING 140,5937
+#define RE_NO_GNU_OPS 144,6133
+#define RE_FRUGAL 147,6253
+#define RE_SHY_GROUPS 150,6360
+#define RE_NO_NEWLINE_ANCHOR 153,6468
+#define RE_DEBUG 161,6884
+extern reg_syntax_t re_syntax_options;167,7170
+extern Lisp_Object re_match_object;172,7344
+extern size_t re_max_failures;176,7454
+#define RE_SYNTAX_EMACS        183,7684
+#define RE_SYNTAX_AWK  186,7780
+#define RE_SYNTAX_GNU_AWK      193,8084
+#define RE_SYNTAX_POSIX_AWK 197,8255
+#define RE_SYNTAX_GREP 201,8393
+#define RE_SYNTAX_EGREP        206,8549
+#define RE_SYNTAX_POSIX_EGREP  212,8765
+#define RE_SYNTAX_ED 216,8910
+#define RE_SYNTAX_SED 218,8954
+#define _RE_SYNTAX_POSIX_COMMON        221,9072
+#define RE_SYNTAX_POSIX_BASIC  225,9215
+#define RE_SYNTAX_POSIX_MINIMAL_BASIC  231,9508
+#define RE_SYNTAX_POSIX_EXTENDED       234,9598
+#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED       242,9967
+# undef RE_DUP_MAX253,10454
+#define RE_DUP_MAX 256,10540
+#define REG_EXTENDED 263,10762
+#define REG_ICASE 267,10886
+#define REG_NEWLINE 272,11070
+#define REG_NOSUB 276,11248
+#define REG_NOTBOL 286,11614
+#define REG_NOTEOL 289,11688
+  REG_ENOSYS 297,11859
+  REG_NOERROR 300,11941
+  REG_NOMATCH,301,11976
+  REG_BADPAT,305,12123
+  REG_ECOLLATE,306,12162
+  REG_ECTYPE,307,12203
+  REG_EESCAPE,308,12255
+  REG_ESUBREG,309,12298
+  REG_EBRACK,310,12345
+  REG_EPAREN,311,12391
+  REG_EBRACE,312,12436
+  REG_BADBR,313,12472
+  REG_ERANGE,314,12519
+  REG_ESPACE,315,12560
+  REG_BADRPT,316,12601
+  REG_EEND,319,12693
+  REG_ESIZE,320,12728
+  REG_ERPAREN,321,12790
+  REG_ERANGEX  322,12859
+} reg_errcode_t;323,12911
+# define RE_TRANSLATE_TYPE 332,13273
+struct re_pattern_buffer335,13315
+#define REGS_UNALLOCATED 376,14889
+#define REGS_REALLOCATE 377,14916
+#define REGS_FIXED 378,14942
+typedef struct re_pattern_buffer regex_t;416,16098
+typedef ssize_t regoff_t;423,16492
+struct re_registers428,16652
+# define RE_NREGS 440,16942
+} regmatch_t;451,17317
+extern reg_syntax_t re_set_syntax 457,17512
+extern const char *re_compile_pattern re_compile_pattern462,17776
+extern int re_compile_fastmap 469,18058
+extern regoff_t re_search 477,18466
+extern regoff_t re_search_2 485,18781
+extern regoff_t re_match 495,19177
+extern regoff_t re_match_2 501,19407
+extern void re_set_registers 520,20197
+extern char *re_comp re_comp528,20469
+extern int re_exec 529,20506
+#  define _Restrict_ 540,20886
+#  define _Restrict_ 542,20979
+#  define _Restrict_544,21018
+#  define _Restrict_arr_ 555,21418
+#  define _Restrict_arr_557,21461
+extern reg_errcode_t regcomp 562,21530
+extern reg_errcode_t regexec 566,21656
+extern size_t regerror 571,21850
+extern void regfree 574,21956
+#  define CHAR_CLASS_MAX_LENGTH 593,22470
+#  define CHAR_CLASS_MAX_LENGTH 597,22648
+typedef wctype_t re_wctype_t;599,22692
+typedef wchar_t re_wchar_t;600,22722
+# define re_wctype 601,22750
+# define re_iswctype 602,22776
+# define re_wctype_to_bit(603,22806
+# define CHAR_CLASS_MAX_LENGTH 605,22844
+# define btowc(606,22906
+typedef enum { RECC_ERROR 609,22953
+              RECC_ALNUM,610,22984
+              RECC_ALNUM, RECC_ALPHA,610,22984
+              RECC_ALNUM, RECC_ALPHA, RECC_WORD,610,22984
+              RECC_GRAPH,611,23027
+              RECC_GRAPH, RECC_PRINT,611,23027
+              RECC_LOWER,612,23059
+              RECC_LOWER, RECC_UPPER,612,23059
+              RECC_PUNCT,613,23091
+              RECC_PUNCT, RECC_CNTRL,613,23091
+              RECC_DIGIT,614,23123
+              RECC_DIGIT, RECC_XDIGIT,614,23123
+              RECC_BLANK,615,23156
+              RECC_BLANK, RECC_SPACE,615,23156
+              RECC_MULTIBYTE,616,23188
+              RECC_MULTIBYTE, RECC_NONASCII,616,23188
+              RECC_ASCII,617,23227
+              RECC_ASCII, RECC_UNIBYTE617,23227
+} re_wctype_t;618,23260
+extern char re_iswctype 620,23276
+extern re_wctype_t re_wctype 621,23329
+typedef int re_wchar_t;623,23387
+extern void re_set_whitespace_regexp 625,23412
+
+c-src/emacs/src/keyboard.c,15493
+volatile int interrupt_input_blocked;76,1808
+volatile bool pending_signals;80,1944
+#define KBD_BUFFER_SIZE 82,1976
+KBOARD *initial_kboard;initial_kboard84,2006
+KBOARD *current_kboard;current_kboard85,2030
+static KBOARD *all_kboards;all_kboards86,2054
+static bool single_kboard;89,2154
+#define NUM_RECENT_KEYS 91,2182
+static int recent_keys_index;94,2269
+static int total_keys;97,2357
+static Lisp_Object recent_keys;100,2443
+Lisp_Object this_command_keys;107,2777
+ptrdiff_t this_command_key_count;108,2808
+static bool this_command_key_count_reset;112,2922
+static Lisp_Object raw_keybuf;116,3074
+static int raw_keybuf_count;117,3105
+#define GROW_RAW_KEYBUF        119,3135
+static ptrdiff_t this_single_command_key_start;125,3350
+static ptrdiff_t before_command_key_count;129,3498
+static ptrdiff_t before_command_echo_length;130,3541
+sigjmp_buf return_to_command_loop;135,3677
+static Lisp_Object recover_top_level_message;138,3791
+static Lisp_Object regular_top_level_message;143,3930
+static sys_jmp_buf getcjmp;147,4031
+bool waiting_for_input;150,4095
+static bool echoing;154,4186
+static struct kboard 
*ok_to_echo_at_next_pause;ok_to_echo_at_next_pause159,4328
+struct kboard *echo_kboard;echo_kboard166,4632
+Lisp_Object echo_message_buffer;171,4744
+bool immediate_quit;174,4837
+int quit_char;192,5623
+EMACS_INT command_loop_level;195,5680
+Lisp_Object unread_switch_frame;204,6108
+static ptrdiff_t last_non_minibuf_size;207,6216
+uintmax_t num_input_events;210,6334
+static EMACS_INT last_auto_save;214,6428
+static ptrdiff_t last_point_position;217,6523
+Lisp_Object internal_last_event_frame;228,7028
+static Lisp_Object read_key_sequence_cmd;232,7168
+static Lisp_Object read_key_sequence_remapped;233,7210
+static FILE *dribble;dribble236,7310
+bool input_pending;239,7368
+static bool input_was_pending;287,10022
+static struct input_event kbd_buffer[kbd_buffer291,10107
+static struct input_event *kbd_fetch_ptr;kbd_fetch_ptr297,10386
+static struct input_event * volatile kbd_store_ptr;302,10601
+static void recursive_edit_unwind 313,11088
+static Lisp_Object command_loop 314,11144
+static void echo_now 316,11185
+static ptrdiff_t echo_length 317,11214
+unsigned timers_run;320,11296
+struct timespec 
*input_available_clear_time;input_available_clear_time324,11408
+bool interrupt_input;328,11573
+bool interrupts_deferred;331,11671
+static struct timespec timer_idleness_start_time;335,11746
+static struct timespec timer_last_idleness_start_time;340,11916
+#define READABLE_EVENTS_DO_TIMERS_NOW  346,12046
+#define READABLE_EVENTS_FILTER_EVENTS  347,12094
+#define READABLE_EVENTS_IGNORE_SQUEEZABLES     348,12142
+static void (*keyboard_init_hook)keyboard_init_hook351,12264
+static bool get_input_pending 353,12307
+static bool readable_events 354,12344
+static Lisp_Object read_char_x_menu_prompt 355,12379
+static Lisp_Object read_char_minibuf_menu_prompt 357,12502
+static Lisp_Object make_lispy_event 358,12571
+static Lisp_Object make_lispy_movement 359,12631
+static Lisp_Object modify_event_symbol 363,12840
+static Lisp_Object make_lispy_switch_frame 366,13050
+static Lisp_Object make_lispy_focus_in 367,13108
+static Lisp_Object make_lispy_focus_out 369,13188
+static bool help_char_p 371,13275
+static void save_getcjmp 372,13314
+static void restore_getcjmp 373,13354
+static Lisp_Object apply_modifiers 374,13397
+static void clear_event 375,13452
+static void restore_kboard_configuration 376,13500
+static void deliver_input_available_signal 378,13568
+static void handle_interrupt 380,13631
+static _Noreturn void quit_throw_to_read_char 381,13668
+static void process_special_events 382,13722
+static void timer_start_idle 383,13765
+static void timer_stop_idle 384,13802
+static void timer_resume_idle 385,13838
+static void deliver_user_signal 386,13876
+static char *find_user_signal_name find_user_signal_name387,13915
+static void store_user_signal_events 388,13957
+kset_echo_string 392,14088
+kset_kbd_queue 397,14184
+kset_keyboard_translate_table 402,14276
+kset_last_prefix_arg 407,14399
+kset_last_repeatable_command 412,14504
+kset_local_function_key_map 417,14625
+kset_overriding_terminal_local_map 422,14744
+kset_real_last_command 427,14877
+kset_system_key_syms 432,14986
+echo_add_key 443,15249
+echo_char 527,17527
+echo_dash 541,17813
+echo_now 586,19140
+cancel_echoing 635,20614
+echo_length 648,20922
+echo_truncate 660,21253
+add_command_key 672,21582
+recursive_edit_1 697,22406
+record_auto_save 742,23848
+force_auto_save_soon 751,24016
+DEFUN ("recursive-edit", Frecursive_edit,recursive-edit759,24137
+recursive_edit_unwind 804,25747
+any_kboard_state 817,26013
+single_kboard_state 838,26665
+not_single_kboard_state 848,26803
+struct kboard_stack858,27065
+static struct kboard_stack *kboard_stack;kboard_stack864,27138
+push_kboard 867,27186
+pop_kboard 879,27375
+temporarily_switch_to_single_kboard 914,28263
+record_single_kboard_state 943,29437
+restore_kboard_configuration 952,29621
+cmd_error 970,30077
+cmd_error_internal 1024,31510
+DEFUN ("command-error-default-function", 
Fcommand_error_default_function,command-error-default-function1043,32030
+static Lisp_Object command_loop_2 1086,33637
+static Lisp_Object top_level_1 1087,33686
+command_loop 1094,33916
+command_loop_2 1134,35135
+top_level_2 1146,35339
+top_level_1 1152,35417
+DEFUN ("top-level", Ftop_level,top-level1164,35787
+user_error 1183,36288
+DEFUN ("exit-recursive-edit", 
Fexit_recursive_edit,exit-recursive-edit1189,36429
+DEFUN ("abort-recursive-edit", 
Fabort_recursive_edit,abort-recursive-edit1201,36819
+tracking_off 1216,37281
+DEFUN ("internal--track-mouse", Ftrack_mouse,track-mouse1234,37816
+bool ignore_mouse_drag_p;1256,38392
+some_mouse_moved 1259,38441
+static int read_key_sequence 1282,38799
+static void adjust_point_for_property 1284,38917
+Lisp_Object last_undo_boundary;1287,39032
+command_loop_1 1294,39273
+read_menu_command 1649,50889
+adjust_point_for_property 1678,51617
+safe_run_hooks_1 1831,57339
+safe_run_hooks_error 1841,57569
+safe_run_hook_funcall 1878,58576
+safe_run_hooks 1893,59058
+int poll_suppress_count;1908,59397
+static struct atimer *poll_timer;poll_timer1915,59487
+poll_for_input_1 1919,59589
+poll_for_input 1930,59789
+start_polling 1942,60053
+input_polling_used 1979,61091
+stop_polling 1994,61390
+set_poll_suppress_count 2009,61759
+bind_polling_period 2029,62141
+make_ctrl_char 2048,62492
+show_help_echo 2113,64455
+static Lisp_Object kbd_buffer_get_event 2152,65484
+static void record_char 2154,65596
+static Lisp_Object help_form_saved_window_configs;2156,65638
+read_char_help_form_unwind 2158,65701
+#define STOP_POLLING   2166,65959
+#define RESUME_POLLING 2170,66084
+read_event_from_main_queue 2175,66229
+read_decoded_event_from_main_queue 2249,68417
+#define MAX_ENCODED_BYTES 2254,68664
+echo_keystrokes_p 2342,71556
+read_char 2376,72848
+record_menu_key 3225,98949
+help_char_p 3258,99674
+record_char 3273,99953
+save_getcjmp 3412,104235
+restore_getcjmp 3418,104326
+readable_events 3430,104697
+int stop_character EXTERNALLY_VISIBLE;3497,106437
+event_to_kboard 3500,106493
+kbd_buffer_nr_stored 3522,107142
+kbd_buffer_store_event 3534,107483
+kbd_buffer_store_event_hold 3550,108025
+kbd_buffer_unget_event 3684,111617
+#define INPUT_EVENT_POS_MAX 3698,112018
+#define INPUT_EVENT_POS_MIN 3701,112147
+position_to_Time 3706,112287
+Time_to_position 3716,112514
+gen_help_event 3738,113171
+kbd_buffer_store_help_event 3756,113611
+discard_mouse_events 3773,113976
+kbd_buffer_events_waiting 3803,114711
+clear_event 3823,115068
+kbd_buffer_get_event 3836,115408
+process_special_events 4258,127881
+swallow_events 4322,129705
+timer_start_idle 4339,130098
+timer_stop_idle 4355,130576
+timer_resume_idle 4363,130720
+struct input_event last_timer_event EXTERNALLY_VISIBLE;4372,130912
+Lisp_Object pending_funcalls;4377,131172
+decode_timer 4381,131293
+timer_check_2 4414,132246
+timer_check 4572,136817
+DEFUN ("current-idle-time", Fcurrent_idle_time,current-idle-time4607,137662
+static Lisp_Object accent_key_syms;4625,138239
+static Lisp_Object func_key_syms;4626,138275
+static Lisp_Object mouse_syms;4627,138309
+static Lisp_Object wheel_syms;4628,138340
+static Lisp_Object drag_n_drop_syms;4629,138371
+static const int lispy_accent_codes[lispy_accent_codes4634,138516
+static const char *const lispy_accent_keys[lispy_accent_keys4741,139878
+#define FUNCTION_KEY_OFFSET 4766,140314
+const char *const lispy_function_keys[lispy_function_keys4768,140347
+static const char *const 
lispy_multimedia_keys[lispy_multimedia_keys4962,148901
+static const char *const lispy_kana_keys[lispy_kana_keys5026,150135
+#define FUNCTION_KEY_OFFSET 5061,151751
+static const char *const lispy_function_keys[lispy_function_keys5065,151894
+#define ISO_FUNCTION_KEY_OFFSET 5149,154429
+static const char *const 
iso_lispy_function_keys[iso_lispy_function_keys5151,154469
+static Lisp_Object Vlispy_mouse_stem;5172,155328
+static const char *const lispy_wheel_names[lispy_wheel_names5174,155367
+static const char *const 
lispy_drag_n_drop_names[lispy_drag_n_drop_names5181,155619
+static short const scroll_bar_parts[scroll_bar_parts5189,155885
+static Lisp_Object button_down_location;5210,156910
+static int last_mouse_button;5215,157065
+static int last_mouse_x;5216,157095
+static int last_mouse_y;5217,157120
+static Time button_down_time;5218,157145
+static int double_click_count;5222,157229
+make_lispy_position 5228,157390
+toolkit_menubar_in_use 5456,163953
+make_scroll_bar_position 5469,164321
+make_lispy_event 5485,164967
+make_lispy_movement 6104,183531
+make_lispy_switch_frame 6131,184262
+make_lispy_focus_in 6137,184369
+make_lispy_focus_out 6145,184495
+parse_modifiers_uncached 6163,184945
+#define SINGLE_LETTER_MOD(6185,185465
+#undef SINGLE_LETTER_MOD6212,185906
+#define MULTI_LETTER_MOD(6214,185932
+#undef MULTI_LETTER_MOD6231,186400
+apply_modifiers_uncached 6273,187574
+static const char *const modifier_names[modifier_names6319,189193
+#define NUM_MOD_NAMES 6325,189399
+static Lisp_Object modifier_symbols;6327,189449
+lispy_modifier_list 6331,189586
+#define KEY_TO_CHAR(6353,190252
+parse_modifiers 6356,190328
+DEFUN ("internal-event-symbol-parse-modifiers", 
Fevent_symbol_parse_modifiers,event-symbol-parse-modifiers6399,191517
+apply_modifiers 6422,192391
+reorder_modifiers 6491,194720
+modify_event_symbol 6536,196528
+DEFUN ("event-convert-list", 
Fevent_convert_list,event-convert-list6628,199244
+parse_solitary_modifier 6695,201135
+#define SINGLE_LETTER_MOD(6701,201258
+#define MULTI_LETTER_MOD(6705,201343
+#undef SINGLE_LETTER_MOD6763,202641
+#undef MULTI_LETTER_MOD6764,202666
+lucid_event_type_list_p 6775,202889
+get_input_pending 6814,203960
+record_asynch_buffer_change 6834,204579
+gobble_input 6872,205702
+tty_read_avail_input 6967,208310
+handle_async_input 7149,214039
+process_pending_signals 7165,214359
+unblock_input_to 7177,214645
+unblock_input 7200,215277
+totally_unblock_input 7209,215445
+handle_input_available_signal 7217,215529
+deliver_input_available_signal 7226,215700
+struct user_signal_info7235,215865
+static struct user_signal_info *user_signals user_signals7250,216090
+add_user_signal 7253,216149
+handle_user_signal 7275,216598
+deliver_user_signal 7316,217558
+find_user_signal_name 7322,217659
+store_user_signal_events 7334,217841
+static void menu_bar_item 7362,218341
+static Lisp_Object menu_bar_one_keymap_changed_items;7363,218416
+static Lisp_Object menu_bar_items_vector;7368,218630
+static int menu_bar_items_index;7369,218672
+static const char *separator_names[separator_names7372,218707
+menu_separator_name_p 7393,219148
+menu_bar_items 7426,219852
+Lisp_Object item_properties;7568,224603
+menu_bar_item 7571,224645
+menu_item_eval_property_1 7647,227175
+eval_dyn 7658,227465
+menu_item_eval_property 7666,227675
+parse_menu_item 7686,228341
+static Lisp_Object tool_bar_items_vector;7965,236336
+static Lisp_Object tool_bar_item_properties;7970,236510
+static int ntool_bar_items;7974,236606
+static void init_tool_bar_items 7978,236664
+static void process_tool_bar_item 7979,236711
+static bool parse_tool_bar_item 7981,236801
+static void append_tool_bar_item 7982,236861
+tool_bar_items 7990,237083
+process_tool_bar_item 8075,239892
+#define PROP(8112,240969
+set_prop 8114,241038
+parse_tool_bar_item 8167,242453
+#undef PROP8379,248844
+init_tool_bar_items 8387,248969
+append_tool_bar_item 8401,249261
+read_char_x_menu_prompt 8443,250771
+read_char_minibuf_menu_prompt 8503,252445
+#define PUSH_C_STR(8527,253014
+follow_key 8726,258553
+active_maps 8733,258695
+typedef struct keyremap8742,259021
+} keyremap;8754,259464
+access_keymap_keyremap 8764,259808
+keyremap_step 8811,261450
+test_undefined 8867,262934
+read_key_sequence 8916,264861
+read_key_sequence_vs 9826,295821
+DEFUN ("read-key-sequence", Fread_key_sequence,read-key-sequence9885,297294
+DEFUN ("read-key-sequence-vector", 
Fread_key_sequence_vector,read-key-sequence-vector9938,299982
+detect_input_pending 9950,300488
+detect_input_pending_ignore_squeezables 9959,300654
+detect_input_pending_run_timers 9967,300870
+clear_input_pending 9985,301362
+requeued_events_pending_p 9997,301732
+DEFUN ("input-pending-p", Finput_pending_p,input-pending-p10002,301813
+DEFUN ("recent-keys", Frecent_keys,recent-keys10024,302596
+DEFUN ("this-command-keys", Fthis_command_keys,this-command-keys10055,303517
+DEFUN ("this-command-keys-vector", 
Fthis_command_keys_vector,this-command-keys-vector10068,303958
+DEFUN ("this-single-command-keys", 
Fthis_single_command_keys,this-single-command-keys10080,304380
+DEFUN ("this-single-command-raw-keys", 
Fthis_single_command_raw_keys,this-single-command-raw-keys10096,304955
+DEFUN ("reset-this-command-lengths", 
Freset_this_command_lengths,reset-this-command-lengths10109,305495
+DEFUN ("clear-this-command-keys", 
Fclear_this_command_keys,clear-this-command-keys10136,306510
+DEFUN ("recursion-depth", Frecursion_depth,recursion-depth10158,307069
+DEFUN ("open-dribble-file", Fopen_dribble_file,open-dribble-file10169,307406
+DEFUN ("discard-input", Fdiscard_input,discard-input10203,308447
+DEFUN ("suspend-emacs", Fsuspend_emacs,suspend-emacs10225,308949
+stuff_buffered_input 10285,311045
+set_waiting_for_input 10323,312016
+clear_waiting_for_input 10337,312390
+handle_interrupt_signal 10351,312754
+deliver_interrupt_signal 10378,313642
+static int volatile force_quit_count;10387,313932
+handle_interrupt 10401,314414
+quit_throw_to_read_char 10541,318711
+DEFUN ("set-input-interrupt-mode", 
Fset_input_interrupt_mode,set-input-interrupt-mode10562,319288
+DEFUN ("set-output-flow-control", 
Fset_output_flow_control,set-output-flow-control10609,320516
+DEFUN ("set-input-meta-mode", 
Fset_input_meta_mode,set-input-meta-mode10643,321432
+DEFUN ("set-quit-char", Fset_quit_char,set-quit-char10694,322706
+DEFUN ("set-input-mode", Fset_input_mode,set-input-mode10729,323570
+DEFUN ("current-input-mode", 
Fcurrent_input_mode,current-input-mode10750,324459
+DEFUN ("posn-at-x-y", Fposn_at_x_y,posn-at-x-y10787,325837
+DEFUN ("posn-at-point", Fposn_at_point,posn-at-point10824,327060
+init_kboard 10861,328214
+allocate_kboard 10893,329284
+wipe_kboard 10909,329637
+delete_kboard 10917,329751
+init_keyboard 10942,330281
+struct event_head11021,332696
+static const struct event_head head_table[head_table11027,332747
+syms_of_keyboard 11045,333577
+keys_of_keyboard 11841,367115
+mark_kboards 11916,370434
+
+c-src/emacs/src/lisp.h,33973
+#define EMACS_LISP_H22,800
+#define DECLARE_GDB_SYM(47,1421
+# define DEFINE_GDB_SYMBOL_BEGIN(49,1508
+# define DEFINE_GDB_SYMBOL_END(50,1578
+# define DEFINE_GDB_SYMBOL_BEGIN(52,1625
+# define DEFINE_GDB_SYMBOL_END(53,1702
+#undef min57,1790
+#undef max58,1801
+#define max(59,1812
+#define min(60,1854
+#define ARRAYELTS(63,1936
+#define GCTYPEBITS 67,2079
+DEFINE_GDB_SYMBOL_BEGIN GCTYPEBITS66,2037
+# define NONPOINTER_BITS 78,2567
+# define NONPOINTER_BITS 80,2600
+typedef int EMACS_INT;91,3023
+typedef unsigned int EMACS_UINT;92,3046
+#  define EMACS_INT_MAX 93,3079
+#  define pI 94,3111
+typedef long int EMACS_INT;96,3203
+typedef unsigned long EMACS_UINT;97,3231
+#  define EMACS_INT_MAX 98,3265
+#  define pI 99,3298
+typedef long long int EMACS_INT;103,3477
+typedef unsigned long long int EMACS_UINT;104,3510
+#  define EMACS_INT_MAX 105,3553
+#  define pI 106,3587
+enum {  BOOL_VECTOR_BITS_PER_CHAR 114,3804
+#define BOOL_VECTOR_BITS_PER_CHAR 115,3840
+typedef size_t bits_word;123,4165
+# define BITS_WORD_MAX 124,4191
+enum { BITS_PER_BITS_WORD 125,4223
+typedef unsigned char bits_word;127,4290
+# define BITS_WORD_MAX 128,4323
+enum { BITS_PER_BITS_WORD 129,4386
+verify 131,4450
+    BITS_PER_CHAR 136,4570
+    BITS_PER_SHORT 137,4605
+    BITS_PER_LONG 138,4657
+    BITS_PER_EMACS_INT 139,4712
+typedef intmax_t printmax_t;148,5089
+typedef uintmax_t uprintmax_t;149,5118
+# define pMd 150,5149
+# define pMu 151,5170
+typedef EMACS_INT printmax_t;153,5197
+typedef EMACS_UINT uprintmax_t;154,5227
+# define pMd 155,5259
+# define pMu 156,5278
+# define pD 165,5664
+# define pD 167,5709
+# define pD 169,5756
+# define pD 171,5779
+# define eassert(200,7062
+# define eassume(201,7140
+extern _Noreturn void die 204,7206
+extern bool suppress_checking EXTERNALLY_VISIBLE;206,7268
+# define eassert(208,7319
+# define eassume(212,7450
+enum Lisp_Bits239,8519
+#define GCALIGNMENT 243,8647
+    VALBITS 246,8742
+    INTTYPEBITS 249,8838
+    FIXNUM_BITS 252,8945
+#define VAL_MAX 263,9327
+#define USE_LSB_TAG 271,9777
+DEFINE_GDB_SYMBOL_BEGIN USE_LSB_TAG270,9733
+# define alignas(281,10077
+# define GCALIGNED 288,10227
+# define GCALIGNED 290,10292
+# define lisp_h_XLI(327,11642
+# define lisp_h_XIL(328,11673
+# define lisp_h_XLI(330,11724
+# define lisp_h_XIL(331,11751
+#define lisp_h_CHECK_LIST_CONS(333,11785
+#define lisp_h_CHECK_NUMBER(334,11856
+#define lisp_h_CHECK_SYMBOL(335,11927
+#define lisp_h_CHECK_TYPE(336,11996
+#define lisp_h_CONSP(338,12107
+#define lisp_h_EQ(339,12156
+#define lisp_h_FLOATP(340,12201
+#define lisp_h_INTEGERP(341,12252
+#define lisp_h_MARKERP(342,12333
+#define lisp_h_MISCP(343,12408
+#define lisp_h_NILP(344,12457
+#define lisp_h_SET_SYMBOL_VAL(345,12493
+#define lisp_h_SYMBOL_CONSTANT_P(347,12607
+#define lisp_h_SYMBOL_VAL(348,12671
+#define lisp_h_SYMBOLP(350,12772
+#define lisp_h_VECTORLIKEP(351,12825
+#define lisp_h_XCAR(352,12886
+#define lisp_h_XCDR(353,12924
+#define lisp_h_XCONS(354,12964
+#define lisp_h_XHASH(356,13059
+#define lisp_h_XPNTR(357,13093
+# define lisp_h_check_cons_list(360,13221
+# define lisp_h_make_number(363,13289
+# define lisp_h_XFASTINT(365,13392
+# define lisp_h_XINT(366,13429
+# define lisp_h_XSYMBOL(367,13478
+# define lisp_h_XTYPE(371,13631
+# define lisp_h_XUNTAG(372,13696
+# define XLI(381,14086
+# define XIL(382,14117
+# define CHECK_LIST_CONS(383,14148
+# define CHECK_NUMBER(384,14209
+# define CHECK_SYMBOL(385,14258
+# define CHECK_TYPE(386,14307
+# define CONSP(387,14382
+# define EQ(388,14417
+# define FLOATP(389,14452
+# define INTEGERP(390,14489
+# define MARKERP(391,14530
+# define MISCP(392,14569
+# define NILP(393,14604
+# define SET_SYMBOL_VAL(394,14637
+# define SYMBOL_CONSTANT_P(395,14700
+# define SYMBOL_VAL(396,14763
+# define SYMBOLP(397,14812
+# define VECTORLIKEP(398,14851
+# define XCAR(399,14898
+# define XCDR(400,14931
+# define XCONS(401,14964
+# define XHASH(402,14999
+# define XPNTR(403,15034
+#  define check_cons_list(405,15097
+#  define make_number(408,15176
+#  define XFASTINT(409,15224
+#  define XINT(410,15266
+#  define XSYMBOL(411,15300
+#  define XTYPE(412,15340
+#  define XUNTAG(413,15376
+#define LISP_MACRO_DEFUN(421,15672
+#define LISP_MACRO_DEFUN_VOID(425,15845
+#define INTMASK 437,16289
+#define case_Lisp_Int 438,16342
+#define ENUM_BF(445,16681
+#define ENUM_BF(447,16722
+enum Lisp_Type451,16763
+    Lisp_Symbol 454,16851
+    Lisp_Misc 458,16993
+    Lisp_Int0 461,17067
+    Lisp_Int1 462,17086
+    Lisp_String 466,17264
+    Lisp_Vectorlike 472,17543
+    Lisp_Cons 475,17632
+    Lisp_Float 477,17670
+enum Lisp_Misc_Type485,18016
+    Lisp_Misc_Free 487,18040
+    Lisp_Misc_Marker,488,18069
+    Lisp_Misc_Overlay,489,18091
+    Lisp_Misc_Save_Value,490,18114
+    Lisp_Misc_Finalizer,491,18140
+    Lisp_Misc_Float,494,18275
+    Lisp_Misc_Limit496,18359
+enum Lisp_Fwd_Type502,18543
+    Lisp_Fwd_Int,504,18566
+    Lisp_Fwd_Bool,505,18619
+    Lisp_Fwd_Obj,506,18670
+    Lisp_Fwd_Buffer_Obj,507,18729
+    Lisp_Fwd_Kboard_Obj        508,18800
+typedef struct { EMACS_INT i; } Lisp_Object;567,21781
+#define LISP_INITIALLY(569,21827
+#undef CHECK_LISP_OBJECT_TYPE571,21858
+enum CHECK_LISP_OBJECT_TYPE 572,21888
+enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE 572,21888
+typedef EMACS_INT Lisp_Object;577,22064
+#define LISP_INITIALLY(578,22095
+enum CHECK_LISP_OBJECT_TYPE 579,22125
+enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE 579,22125
+#define LISP_INITIALLY_ZERO 582,22226
+INLINE bool BOOL_VECTOR_P 588,22350
+INLINE bool BUFFER_OBJFWDP 589,22391
+INLINE bool BUFFERP 590,22438
+INLINE bool CHAR_TABLE_P 591,22473
+INLINE Lisp_Object CHAR_TABLE_REF_ASCII 592,22513
+INLINE bool 593,22579
+INLINE bool 594,22614
+INLINE bool functionp 595,22650
+INLINE bool 596,22687
+INLINE bool 597,22725
+INLINE bool 598,22762
+INLINE bool 599,22797
+INLINE bool OVERLAYP 600,22831
+INLINE bool PROCESSP 601,22867
+INLINE bool PSEUDOVECTORP 602,22903
+INLINE bool SAVE_VALUEP 603,22949
+INLINE bool FINALIZERP 604,22988
+INLINE void set_sub_char_table_contents 605,23026
+INLINE bool STRINGP 607,23116
+INLINE bool SUB_CHAR_TABLE_P 608,23151
+INLINE bool SUBRP 609,23195
+INLINE bool 610,23228
+INLINE bool 611,23265
+INLINE bool WINDOWP 612,23306
+INLINE bool TERMINALP 613,23341
+INLINE struct Lisp_Save_Value *XSAVE_VALUE XSAVE_VALUE614,23378
+INLINE struct Lisp_Finalizer *XFINALIZER XFINALIZER615,23436
+INLINE struct Lisp_Symbol *(XSYMBOL)616,23492
+INLINE void 617,23544
+extern Lisp_Object char_table_ref 620,23616
+extern void char_table_set 621,23670
+extern _Noreturn Lisp_Object wrong_type_argument 624,23757
+extern _Noreturn void wrong_choice 625,23834
+extern bool might_dump;628,23925
+extern bool initialized;631,24061
+extern double extract_float 634,24117
+enum symbol_interned639,24199
+  SYMBOL_UNINTERNED 641,24222
+  SYMBOL_INTERNED 642,24247
+  SYMBOL_INTERNED_IN_INITIAL_OBARRAY 643,24270
+enum symbol_redirect646,24315
+  SYMBOL_PLAINVAL 648,24338
+  SYMBOL_VARALIAS 649,24362
+  SYMBOL_LOCALIZED 650,24386
+  SYMBOL_FORWARDED 651,24410
+struct Lisp_Symbol654,24437
+  ENUM_BF 663,24793
+#define EXFUN(707,26252
+#define DEFUN_ARGS_MANY        712,26446
+#define DEFUN_ARGS_UNEVALLED   713,26498
+#define DEFUN_ARGS_0   714,26541
+#define DEFUN_ARGS_1   715,26569
+#define DEFUN_ARGS_2   716,26604
+#define DEFUN_ARGS_3   717,26652
+#define DEFUN_ARGS_4   718,26713
+#define DEFUN_ARGS_5   719,26787
+#define DEFUN_ARGS_6   721,26880
+#define DEFUN_ARGS_7   723,26986
+#define DEFUN_ARGS_8   725,27105
+#define TAG_PTR(729,27296
+#define TAG_SYMOFFSET(734,27543
+#define XLI_BUILTIN_LISPSYM(741,27842
+#define DEFINE_LISP_SYMBOL(746,28101
+# define DEFINE_NON_NIL_Q_SYMBOL_MACROS 755,28572
+LISP_MACRO_DEFUN 762,28777
+# define ARRAY_MARK_FLAG 768,29024
+# define PSEUDOVECTOR_FLAG 774,29267
+enum pvec_type780,29568
+  PVEC_NORMAL_VECTOR,782,29585
+  PVEC_FREE,783,29607
+  PVEC_PROCESS,784,29620
+  PVEC_FRAME,785,29636
+  PVEC_WINDOW,786,29650
+  PVEC_BOOL_VECTOR,787,29665
+  PVEC_BUFFER,788,29685
+  PVEC_HASH_TABLE,789,29700
+  PVEC_TERMINAL,790,29719
+  PVEC_WINDOW_CONFIGURATION,791,29736
+  PVEC_SUBR,792,29765
+  PVEC_OTHER,793,29778
+  PVEC_COMPILED,795,29856
+  PVEC_CHAR_TABLE,796,29873
+  PVEC_SUB_CHAR_TABLE,797,29892
+  PVEC_FONT 798,29915
+enum More_Lisp_Bits801,29991
+    PSEUDOVECTOR_SIZE_BITS 808,30382
+    PSEUDOVECTOR_SIZE_MASK 809,30415
+    PSEUDOVECTOR_REST_BITS 813,30625
+    PSEUDOVECTOR_REST_MASK 814,30658
+    PSEUDOVECTOR_AREA_BITS 818,30823
+    PVEC_TYPE_MASK 819,30901
+# define VALMASK 829,31302
+DEFINE_GDB_SYMBOL_BEGIN VALMASK828,31257
+#define MOST_POSITIVE_FIXNUM 834,31532
+#define MOST_NEGATIVE_FIXNUM 835,31592
+XINT 874,32684
+XFASTINT 889,33035
+XSYMBOL 899,33263
+XTYPE 910,33481
+XUNTAG 918,33661
+LISP_MACRO_DEFUN 927,33857
+LISP_MACRO_DEFUN 940,34242
+#define FIXNUM_OVERFLOW_P(958,34855
+LISP_MACRO_DEFUN FIXNUM_OVERFLOW_P952,34632
+LISP_MACRO_DEFUN 970,35171
+XSTRING 980,35391
+#define SYMBOL_INDEX(988,35575
+XFLOAT 991,35636
+XPROCESS 1000,35778
+XWINDOW 1007,35895
+XTERMINAL 1014,36012
+XSUBR 1021,36134
+XBUFFER 1028,36245
+XCHAR_TABLE 1035,36369
+XSUB_CHAR_TABLE 1042,36506
+XBOOL_VECTOR 1049,36648
+make_lisp_ptr 1058,36827
+make_lisp_symbol 1066,37013
+builtin_lisp_symbol 1074,37197
+#define XSETINT(1079,37279
+#define XSETFASTINT(1080,37325
+#define XSETCONS(1081,37375
+#define XSETVECTOR(1082,37435
+#define XSETSTRING(1083,37503
+#define XSETSYMBOL(1084,37567
+#define XSETFLOAT(1085,37621
+#define XSETMISC(1086,37683
+#define XSETPVECTYPE(1090,37772
+#define XSETPVECTYPESIZE(1092,37888
+#define XSETPSEUDOVECTOR(1099,38185
+#define XSETTYPED_PSEUDOVECTOR(1105,38369
+#define XSETWINDOW_CONFIGURATION(1110,38579
+#define XSETPROCESS(1112,38675
+#define XSETWINDOW(1113,38741
+#define XSETTERMINAL(1114,38805
+#define XSETSUBR(1115,38873
+#define XSETCOMPILED(1116,38933
+#define XSETBUFFER(1117,39001
+#define XSETCHAR_TABLE(1118,39065
+#define XSETBOOL_VECTOR(1119,39137
+#define XSETSUB_CHAR_TABLE(1120,39211
+XINTPTR 1128,39581
+make_pointer_integer 1134,39661
+LISP_MACRO_DEFUN_VOID 1143,39826
+typedef struct interval *INTERVAL;INTERVAL1149,39987
+xcar_addr 1174,40760
+xcdr_addr 1179,40837
+LISP_MACRO_DEFUN 1185,40931
+XSETCDR 1198,41307
+CAR 1205,41457
+CDR 1212,41591
+CAR_SAFE 1221,41791
+CDR_SAFE 1226,41877
+STRING_MULTIBYTE 1243,42250
+#define STRING_BYTES_BOUND 1261,43057
+#define STRING_SET_UNIBYTE(1265,43201
+#define STRING_SET_MULTIBYTE(1275,43516
+SDATA 1286,43830
+SSDATA 1291,43908
+SREF 1297,44037
+SSET 1302,44128
+SCHARS 1307,44242
+extern ptrdiff_t string_bytes 1313,44337
+STRING_BYTES 1316,44415
+SBYTES 1326,44595
+STRING_SET_CHARS 1331,44681
+struct vectorlike_header1343,45232
+struct Lisp_Vector1369,46482
+    ALIGNOF_STRUCT_LISP_VECTOR1378,46681
+struct Lisp_Bool_Vector1384,46864
+bool_vector_size 1399,47385
+bool_vector_data 1407,47523
+bool_vector_uchar_data 1413,47617
+bool_vector_words 1421,47803
+bool_vector_bytes 1428,47998
+bool_vector_bitref 1437,48238
+bool_vector_ref 1445,48478
+bool_vector_set 1453,48618
+    header_size 1471,49047
+    bool_header_size 1472,49106
+    word_size 1473,49171
+AREF 1479,49284
+aref_addr 1485,49391
+ASIZE 1491,49501
+ASET 1497,49583
+gc_aset 1504,49742
+enum { NIL_IS_ZERO 1515,50269
+memclear 1520,50464
+#define VECSIZE(1531,50762
+#define PSEUDOVECSIZE(1538,51047
+#define UNSIGNED_CMP(1546,51480
+#define ASCII_CHAR_P(1552,51734
+enum CHARTAB_SIZE_BITS1565,52489
+    CHARTAB_SIZE_BITS_0 1567,52516
+    CHARTAB_SIZE_BITS_1 1568,52545
+    CHARTAB_SIZE_BITS_2 1569,52574
+    CHARTAB_SIZE_BITS_3 1570,52603
+extern const int chartab_size[chartab_size1573,52637
+struct Lisp_Char_Table1575,52672
+struct Lisp_Sub_Char_Table1606,53752
+CHAR_TABLE_REF_ASCII 1628,54566
+CHAR_TABLE_REF 1648,55113
+CHAR_TABLE_SET 1658,55402
+struct Lisp_Subr1670,55786
+enum char_table_specials1692,56798
+    CHAR_TABLE_STANDARD_SLOTS 1697,56993
+    SUB_CHAR_TABLE_OFFSET 1701,57214
+CHAR_TABLE_EXTRA_SLOTS 1707,57377
+verify 1714,57596
+LISP_MACRO_DEFUN 1723,57921
+SYMBOL_BLV 1732,58181
+SYMBOL_FWD 1738,58316
+LISP_MACRO_DEFUN_VOID 1744,58428
+SET_SYMBOL_BLV 1754,58691
+SET_SYMBOL_FWD 1760,58850
+SYMBOL_NAME 1767,59001
+SYMBOL_INTERNED_P 1775,59130
+SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P 1783,59299
+#define DEFSYM(1796,59809
+LISP_MACRO_DEFUN DEFSYM1792,59630
+struct hash_table_test1805,60062
+struct Lisp_Hash_Table1823,60555
+XHASH_TABLE 1880,62531
+#define XSET_HASH_TABLE(1885,62602
+HASH_TABLE_P 1889,62703
+HASH_KEY 1896,62860
+HASH_VALUE 1903,63040
+HASH_NEXT 1911,63254
+HASH_HASH 1918,63431
+HASH_INDEX 1926,63677
+HASH_TABLE_SIZE 1933,63826
+enum DEFAULT_HASH_SIZE 1940,63956
+enum DEFAULT_HASH_SIZE { DEFAULT_HASH_SIZE 1940,63956
+static double const DEFAULT_REHASH_THRESHOLD 1946,64176
+static double const DEFAULT_REHASH_SIZE 1950,64299
+sxhash_combine 1956,64465
+SXHASH_REDUCE 1964,64648
+struct Lisp_Misc_Any   1971,64806
+  ENUM_BF 1973,64866
+struct Lisp_Marker1978,64980
+  ENUM_BF 1980,65001
+struct Lisp_Overlay2021,66838
+    ENUM_BF 2034,67346
+    SAVE_UNUSED,2047,67641
+    SAVE_INTEGER,2048,67658
+    SAVE_FUNCPOINTER,2049,67676
+    SAVE_POINTER,2050,67698
+    SAVE_OBJECT2051,67716
+enum { SAVE_SLOT_BITS 2055,67801
+enum { SAVE_VALUE_SLOTS 2058,67898
+enum { SAVE_TYPE_BITS 2062,68006
+enum Lisp_Save_Type2064,68072
+    SAVE_TYPE_INT_INT 2066,68096
+    SAVE_TYPE_INT_INT_INT2067,68169
+    SAVE_TYPE_OBJ_OBJ 2069,68259
+    SAVE_TYPE_OBJ_OBJ_OBJ 2070,68330
+    SAVE_TYPE_OBJ_OBJ_OBJ_OBJ2071,68411
+    SAVE_TYPE_PTR_INT 2073,68506
+    SAVE_TYPE_PTR_OBJ 2074,68579
+    SAVE_TYPE_PTR_PTR 2075,68651
+    SAVE_TYPE_FUNCPTR_PTR_OBJ2076,68724
+    SAVE_TYPE_MEMORY 2080,68882
+typedef void (*voidfuncptr)voidfuncptr2108,69836
+struct Lisp_Save_Value2110,69873
+    ENUM_BF 2112,69900
+save_type 2134,70752
+XSAVE_POINTER 2143,70982
+set_save_pointer 2149,71144
+XSAVE_FUNCPOINTER 2155,71326
+XSAVE_INTEGER 2164,71546
+set_save_integer 2170,71708
+XSAVE_OBJECT 2179,71929
+struct Lisp_Finalizer2186,72106
+struct Lisp_Free2201,72581
+    ENUM_BF 2203,72602
+union Lisp_Misc2212,72882
+XMISC 2223,73181
+XMISCANY 2229,73270
+XMISCTYPE 2236,73379
+XMARKER 2242,73467
+XOVERLAY 2249,73582
+XSAVE_VALUE 2256,73703
+XFINALIZER 2263,73832
+struct Lisp_Intfwd2274,74117
+struct Lisp_Boolfwd2284,74411
+struct Lisp_Objfwd2294,74702
+struct Lisp_Buffer_Objfwd2302,74934
+struct Lisp_Buffer_Local_Value2334,76470
+struct Lisp_Kboard_Objfwd2362,77729
+union Lisp_Fwd2368,77838
+XFWDTYPE 2378,78084
+XBUFFER_OBJFWD 2384,78180
+struct Lisp_Float2391,78316
+XFLOAT_DATA 2401,78434
+    IEEE_FLOATING_POINT2415,78943
+#define _UCHAR_T2423,79266
+typedef unsigned char UCHAR;2424,79283
+enum Lisp_Compiled2429,79366
+    COMPILED_ARGLIST 2431,79389
+    COMPILED_BYTECODE 2432,79415
+    COMPILED_CONSTANTS 2433,79442
+    COMPILED_STACK_DEPTH 2434,79470
+    COMPILED_DOC_STRING 2435,79500
+    COMPILED_INTERACTIVE 2436,79529
+enum char_bits2443,79831
+    CHAR_ALT 2445,79850
+    CHAR_SUPER 2446,79876
+    CHAR_HYPER 2447,79904
+    CHAR_SHIFT 2448,79932
+    CHAR_CTL 2449,79960
+    CHAR_META 2450,79986
+    CHAR_MODIFIER_MASK 2452,80014
+    CHARACTERBITS 2457,80209
+LISP_MACRO_DEFUN 2462,80267
+NATNUMP 2470,80409
+RANGED_INTEGERP 2476,80490
+#define TYPE_RANGED_INTEGERP(2481,80612
+LISP_MACRO_DEFUN 2486,80797
+VECTORP 2500,81270
+OVERLAYP 2505,81373
+SAVE_VALUEP 2510,81472
+FINALIZERP 2516,81578
+AUTOLOADP 2522,81682
+BUFFER_OBJFWDP 2528,81773
+PSEUDOVECTOR_TYPEP 2534,81871
+PSEUDOVECTORP 2542,82124
+WINDOW_CONFIGURATIONP 2558,82476
+PROCESSP 2564,82586
+WINDOWP 2570,82670
+TERMINALP 2576,82752
+SUBRP 2582,82838
+COMPILEDP 2588,82916
+BUFFERP 2594,83002
+CHAR_TABLE_P 2600,83084
+SUB_CHAR_TABLE_P 2606,83175
+BOOL_VECTOR_P 2612,83274
+FRAMEP 2618,83367
+IMAGEP 2625,83484
+ARRAYP 2632,83589
+CHECK_LIST 2638,83708
+LISP_MACRO_DEFUN_VOID 2643,83789
+CHECK_STRING_CAR 2653,84086
+CHECK_CONS 2658,84190
+CHECK_VECTOR 2663,84270
+CHECK_BOOL_VECTOR 2668,84356
+CHECK_VECTOR_OR_STRING 2674,84533
+CHECK_ARRAY 2683,84707
+CHECK_BUFFER 2688,84815
+CHECK_WINDOW 2693,84901
+CHECK_PROCESS 2699,85007
+CHECK_NATNUM 2705,85103
+#define CHECK_RANGED_INTEGER(2710,85180
+#define CHECK_TYPE_RANGED_INTEGER(2721,85563
+#define CHECK_NUMBER_COERCE_MARKER(2729,85833
+XFLOATINT 2738,86086
+CHECK_NUMBER_OR_FLOAT 2744,86157
+#define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(2749,86256
+CHECK_NUMBER_CAR 2760,86666
+CHECK_NUMBER_CDR 2768,86788
+#define DEFUN(2803,88383
+#define DEFUN(2812,88851
+FUNCTIONP 2822,89206
+extern void defsubr 2829,89358
+enum maxargs2831,89401
+    MANY 2833,89418
+    UNEVALLED 2834,89433
+#define CALLMANY(2838,89536
+#define CALLN(2844,89889
+extern void defvar_lisp 2846,89959
+extern void defvar_lisp_nopro 2847,90036
+extern void defvar_bool 2848,90119
+extern void defvar_int 2849,90190
+extern void defvar_kboard 2850,90264
+#define DEFVAR_LISP(2869,91094
+#define DEFVAR_LISP_NOPRO(2874,91266
+#define DEFVAR_BOOL(2879,91448
+#define DEFVAR_INT(2884,91621
+#define DEFVAR_BUFFER_DEFAULTS(2890,91792
+#define DEFVAR_KBOARD(2896,91996
+typedef jmp_buf sys_jmp_buf;2906,92320
+# define sys_setjmp(2907,92349
+# define sys_longjmp(2908,92384
+typedef sigjmp_buf sys_jmp_buf;2910,92456
+# define sys_setjmp(2911,92488
+# define sys_longjmp(2912,92528
+typedef jmp_buf sys_jmp_buf;2916,92687
+# define sys_setjmp(2917,92716
+# define sys_longjmp(2918,92750
+enum specbind_tag 2943,93802
+  SPECPDL_UNWIND,2944,93822
+  SPECPDL_UNWIND_PTR,2945,93891
+  SPECPDL_UNWIND_INT,2946,93942
+  SPECPDL_UNWIND_VOID,2947,93990
+  SPECPDL_BACKTRACE,2948,94044
+  SPECPDL_LET,2949,94102
+  SPECPDL_LET_LOCAL,2951,94232
+  SPECPDL_LET_DEFAULT  2952,94289
+union specbinding2955,94361
+    ENUM_BF 2957,94383
+      ENUM_BF 2959,94440
+      ENUM_BF 2964,94570
+      ENUM_BF 2969,94693
+      ENUM_BF 2974,94811
+      ENUM_BF 2978,94916
+      ENUM_BF 2983,95091
+enum handlertype 3021,96407
+enum handlertype { CATCHER,3021,96407
+enum handlertype { CATCHER, CONDITION_CASE 3021,96407
+struct handler3023,96454
+#define PUSH_HANDLER(3053,97443
+extern Lisp_Object memory_signal_data;3075,98149
+extern char *stack_bottom;stack_bottom3079,98282
+extern void process_pending_signals 3097,99099
+extern bool volatile pending_signals;3098,99143
+extern void process_quit_flag 3100,99182
+#define QUIT   3101,99220
+#define QUITP 3112,99470
+extern Lisp_Object Vascii_downcase_table;3114,99531
+extern Lisp_Object Vascii_canon_table;3115,99573
+extern struct gcpro *gcprolist;gcprolist3130,100280
+struct gcpro3132,100313
+#define GC_USE_GCPROS_AS_BEFORE        3171,101294
+#define GC_MAKE_GCPROS_NOOPS   3172,101329
+#define GC_MARK_STACK_CHECK_GCPROS     3173,101361
+#define GC_USE_GCPROS_CHECK_ZOMBIES    3174,101398
+#define GC_MARK_STACK 3177,101459
+#define BYTE_MARK_STACK 3181,101559
+#define GCPRO1(3190,101830
+#define GCPRO2(3191,101870
+#define GCPRO3(3192,101936
+#define GCPRO4(3194,102031
+#define GCPRO5(3196,102151
+#define GCPRO6(3198,102296
+#define GCPRO7(3201,102471
+#define UNGCPRO 3202,102550
+#define GCPRO1(3208,102650
+#define GCPRO2(3212,102772
+#define GCPRO3(3217,102964
+#define GCPRO4(3223,103226
+#define GCPRO5(3230,103557
+#define GCPRO6(3238,103958
+#define GCPRO7(3247,104428
+#define UNGCPRO 3257,104968
+extern int gcpro_level;3261,105037
+#define GCPRO1(3263,105062
+#define GCPRO2(3269,105296
+#define GCPRO3(3278,105714
+#define GCPRO4(3289,106271
+#define GCPRO5(3302,106969
+#define GCPRO6(3317,107809
+#define GCPRO7(3334,108790
+#define UNGCPRO        3353,109913
+#define RETURN_UNGCPRO(3363,110180
+void staticpro 3375,110453
+vcopy 3384,110654
+set_hash_key_slot 3393,110929
+set_hash_value_slot 3399,111068
+set_symbol_function 3408,111303
+set_symbol_plist 3414,111418
+set_symbol_next 3420,111521
+blv_found 3428,111694
+set_overlay_plist 3437,111877
+string_intervals 3445,112028
+set_string_intervals 3453,112150
+set_char_table_defalt 3462,112352
+set_char_table_purpose 3467,112464
+set_char_table_extras 3475,112633
+set_char_table_contents 3482,112842
+set_sub_char_table_contents 3489,113037
+extern Lisp_Object indirect_function 3495,113196
+extern Lisp_Object find_symbol_value 3496,113248
+enum Arith_Comparison 3497,113300
+  ARITH_EQUAL,3498,113324
+  ARITH_NOTEQUAL,3499,113339
+  ARITH_LESS,3500,113357
+  ARITH_GRTR,3501,113371
+  ARITH_LESS_OR_EQUAL,3502,113385
+  ARITH_GRTR_OR_EQUAL3503,113408
+extern Lisp_Object arithcompare 3505,113433
+#define INTEGER_TO_CONS(3511,113759
+#define CONS_TO_INTEGER(3529,114622
+extern intmax_t cons_to_signed 3533,114837
+extern uintmax_t cons_to_unsigned 3534,114903
+extern struct Lisp_Symbol *indirect_variable indirect_variable3536,114964
+extern _Noreturn void args_out_of_range 3537,115033
+extern _Noreturn void args_out_of_range_3 3538,115101
+extern Lisp_Object do_symval_forwarding 3540,115192
+extern void set_internal 3541,115252
+extern void syms_of_data 3542,115324
+extern void swap_in_global_binding 3543,115357
+extern void syms_of_cmds 3546,115441
+extern void keys_of_cmds 3547,115474
+extern Lisp_Object detect_coding_system 3550,115536
+extern void init_coding 3552,115689
+extern void init_coding_once 3553,115721
+extern void syms_of_coding 3554,115758
+extern ptrdiff_t chars_in_text 3557,115825
+extern ptrdiff_t multibyte_chars_in_text 3558,115892
+extern void syms_of_character 3559,115969
+extern void init_charset 3562,116037
+extern void init_charset_once 3563,116070
+extern void syms_of_charset 3564,116108
+extern void init_syntax_once 3569,116228
+extern void syms_of_syntax 3570,116265
+enum { NEXT_ALMOST_PRIME_LIMIT 3573,116326
+extern EMACS_INT next_almost_prime 3574,116365
+enum constype 3739,123817
+enum constype {CONSTYPE_HEAP,CONSTYPE_HEAP3739,123817
+enum constype {CONSTYPE_HEAP, CONSTYPE_PURE}CONSTYPE_PURE3739,123817
+extern Lisp_Object listn 3740,123863
+list2i 3745,124007
+list3i 3751,124116
+list4i 3757,124255
+extern Lisp_Object make_uninit_bool_vector 3763,124407
+extern Lisp_Object bool_vector_fill 3764,124463
+extern _Noreturn void string_overflow 3765,124527
+extern Lisp_Object make_string 3766,124573
+extern Lisp_Object make_formatted_string 3767,124631
+extern Lisp_Object make_multibyte_string 3779,124985
+extern Lisp_Object make_event_array 3780,125064
+extern Lisp_Object make_uninit_string 3781,125128
+extern Lisp_Object make_uninit_multibyte_string 3782,125179
+extern Lisp_Object make_string_from_bytes 3783,125251
+extern Lisp_Object make_specified_string 3784,125331
+extern Lisp_Object make_pure_string 3786,125423
+extern Lisp_Object make_pure_c_string 3787,125503
+build_pure_c_string 3792,125659
+build_string 3801,125864
+extern Lisp_Object pure_cons 3806,125942
+extern void make_byte_code 3807,125999
+extern struct Lisp_Vector *allocate_vector allocate_vector3808,126050
+make_uninit_vector 3820,126435
+make_uninit_sub_char_table 3833,126654
+extern struct Lisp_Vector *allocate_pseudovector 
allocate_pseudovector3844,126963
+#define ALLOCATE_PSEUDOVECTOR(3850,127198
+#define ALLOCATE_ZEROED_PSEUDOVECTOR(3858,127534
+extern bool gc_in_progress;3863,127735
+extern bool abort_on_gc;3864,127763
+extern Lisp_Object make_float 3865,127788
+extern void display_malloc_warning 3866,127828
+extern ptrdiff_t inhibit_garbage_collection 3867,127871
+extern Lisp_Object make_save_int_int_int 3868,127923
+extern Lisp_Object make_save_obj_obj_obj_obj 3869,127999
+extern Lisp_Object make_save_ptr 3871,128109
+extern Lisp_Object make_save_ptr_int 3872,128152
+extern Lisp_Object make_save_ptr_ptr 3873,128210
+extern Lisp_Object make_save_funcptr_ptr_obj 3874,128265
+extern Lisp_Object make_save_memory 3876,128361
+extern void free_save_value 3877,128425
+extern Lisp_Object build_overlay 3878,128468
+extern void free_marker 3879,128542
+extern void free_cons 3880,128581
+extern void init_alloc_once 3881,128625
+extern void init_alloc 3882,128661
+extern void syms_of_alloc 3883,128692
+extern struct buffer * allocate_buffer 3884,128726
+extern int valid_lisp_object_p 3885,128773
+extern int relocatable_string_data_p 3886,128819
+extern void check_cons_list 3888,128898
+INLINE void 3890,128940
+extern void *r_alloc r_alloc3895,129061
+#define FLOAT_TO_STRING_BUFSIZE 3927,130524
+extern int openp 3957,131673
+extern Lisp_Object string_to_number 3959,131783
+extern void map_obarray 3960,131846
+extern void dir_warning 3962,131960
+extern void init_obarray 3963,132013
+extern void init_lread 3964,132046
+extern void syms_of_lread 3965,132077
+intern 3968,132131
+intern_c_string 3974,132219
+extern EMACS_INT lisp_eval_depth;3980,132332
+extern Lisp_Object Vautoload_queue;3981,132366
+extern Lisp_Object Vrun_hooks;3982,132402
+extern Lisp_Object Vsignaling_function;3983,132433
+extern Lisp_Object inhibit_lisp_code;3984,132473
+extern struct handler *handlerlist;handlerlist3985,132511
+extern void run_hook 3994,132753
+extern void run_hook_with_args_2 3995,132789
+extern Lisp_Object run_hook_with_args 3996,132863
+extern _Noreturn void xsignal 3999,133022
+extern _Noreturn void xsignal0 4000,133080
+extern _Noreturn void xsignal1 4001,133126
+extern _Noreturn void xsignal2 4002,133185
+extern _Noreturn void xsignal3 4003,133257
+extern _Noreturn void signal_error 4005,133346
+extern Lisp_Object eval_sub 4006,133410
+extern Lisp_Object apply1 4007,133458
+extern Lisp_Object call0 4008,133512
+extern Lisp_Object call1 4009,133552
+extern Lisp_Object call2 4010,133605
+extern Lisp_Object call3 4011,133671
+extern Lisp_Object call4 4012,133750
+extern Lisp_Object call5 4013,133842
+extern Lisp_Object call6 4014,133947
+extern Lisp_Object call7 4015,134065
+extern Lisp_Object internal_catch 4016,134196
+extern Lisp_Object internal_lisp_condition_case 4017,134289
+extern Lisp_Object internal_condition_case 4018,134378
+extern Lisp_Object internal_condition_case_1 4019,134491
+extern Lisp_Object internal_condition_case_2 4020,134626
+extern Lisp_Object internal_condition_case_n4021,134787
+extern void specbind 4024,134983
+extern void record_unwind_protect 4025,135032
+extern void record_unwind_protect_ptr 4026,135105
+extern void record_unwind_protect_int 4027,135172
+extern void record_unwind_protect_void 4028,135233
+extern void record_unwind_protect_nothing 4029,135291
+extern void clear_unwind_protect 4030,135341
+extern void set_unwind_protect 4031,135387
+extern void set_unwind_protect_ptr 4032,135468
+extern Lisp_Object unbind_to 4033,135543
+extern _Noreturn void error 4034,135598
+fast_string_match_ignore_case 4136,140086
+extern ptrdiff_t fast_c_string_match_ignore_case 4141,140236
+extern ptrdiff_t fast_looking_at 4143,140333
+extern ptrdiff_t find_newline 4145,140472
+extern ptrdiff_t scan_newline 4147,140601
+extern ptrdiff_t scan_newline_from_point 4149,140704
+extern ptrdiff_t find_newline_no_quit 4150,140784
+extern ptrdiff_t find_before_next_newline 4152,140881
+extern void syms_of_search 4154,140979
+extern void clear_regexp_cache 4155,141014
+extern Lisp_Object Vminibuffer_list;4159,141084
+extern Lisp_Object last_minibuf_string;4160,141121
+extern Lisp_Object get_minibuffer 4161,141161
+extern void init_minibuf_once 4162,141208
+extern void syms_of_minibuf 4163,141246
+extern void syms_of_callint 4167,141313
+extern void syms_of_casefiddle 4171,141383
+extern void keys_of_casefiddle 4172,141422
+extern void init_casetab_once 4176,141492
+extern void syms_of_casetab 4177,141530
+extern Lisp_Object echo_message_buffer;4181,141598
+extern struct kboard *echo_kboard;echo_kboard4182,141638
+extern void cancel_echoing 4183,141673
+extern Lisp_Object last_undo_boundary;4184,141708
+extern bool input_pending;4185,141747
+extern sigjmp_buf return_to_command_loop;4187,141810
+extern Lisp_Object menu_bar_items 4189,141859
+extern Lisp_Object tool_bar_items 4190,141908
+extern void discard_mouse_events 4191,141964
+void handle_input_available_signal 4193,142025
+extern Lisp_Object pending_funcalls;4195,142074
+extern bool detect_input_pending 4196,142111
+extern bool detect_input_pending_ignore_squeezables 4197,142152
+extern bool detect_input_pending_run_timers 4198,142212
+extern void safe_run_hooks 4199,142264
+extern void cmd_error_internal 4200,142306
+extern Lisp_Object command_loop_1 4201,142366
+extern Lisp_Object read_menu_command 4202,142408
+extern Lisp_Object recursive_edit_1 4203,142453
+extern void record_auto_save 4204,142497
+extern void force_auto_save_soon 4205,142534
+extern void init_keyboard 4206,142575
+extern void syms_of_keyboard 4207,142609
+extern void keys_of_keyboard 4208,142646
+extern ptrdiff_t current_column 4211,142712
+extern void invalidate_current_column 4212,142752
+extern bool indented_beyond_p 4213,142798
+extern void syms_of_indent 4214,142863
+extern void store_frame_param 4217,142926
+extern void store_in_alist 4218,143000
+extern Lisp_Object do_switch_frame 4219,143070
+extern Lisp_Object get_frame_param 4220,143143
+extern void frames_discard_buffer 4221,143209
+extern void syms_of_frame 4222,143258
+extern char **initial_argv;initial_argv4225,143320
+extern int initial_argc;4226,143348
+extern bool display_arg;4228,143423
+extern Lisp_Object decode_env_path 4230,143455
+extern Lisp_Object empty_unibyte_string,4231,143526
+extern Lisp_Object empty_unibyte_string, empty_multibyte_string;4231,143526
+extern _Noreturn void terminate_due_to_signal 4232,143591
+extern Lisp_Object Vlibrary_cache;4234,143666
+void fixup_locale 4237,143727
+void synchronize_system_messages_locale 4238,143753
+void synchronize_system_time_locale 4239,143801
+INLINE void fixup_locale 4241,143851
+INLINE void synchronize_system_messages_locale 4242,143886
+INLINE void synchronize_system_time_locale 4243,143943
+extern void shut_down_emacs 4245,144003
+extern bool noninteractive;4248,144129
+extern bool no_site_lisp;4251,144221
+extern int daemon_pipe[daemon_pipe4256,144389
+#define IS_DAEMON 4257,144416
+#define DAEMON_RUNNING 4258,144456
+extern void *w32_daemon_event;w32_daemon_event4260,144524
+#define IS_DAEMON 4261,144555
+#define DAEMON_RUNNING 4262,144600
+extern bool fatal_error_in_progress;4266,144721
+extern bool inhibit_window_system;4269,144827
+extern bool running_asynch_code;4271,144920
+extern void kill_buffer_processes 4274,144983
+extern int wait_reading_process_output 4275,145032
+# define WAIT_READING_MAX 4281,145419
+# define WAIT_READING_MAX 4283,145491
+extern void add_timer_wait_descriptor 4286,145555
+extern void add_keyboard_wait_descriptor 4288,145607
+extern void delete_keyboard_wait_descriptor 4289,145655
+extern void add_gpm_wait_descriptor 4291,145722
+extern void delete_gpm_wait_descriptor 4292,145765
+extern void init_process_emacs 4294,145818
+extern void syms_of_process 4295,145857
+extern void setup_process_coding_systems 4296,145893
+extern int child_setup 4302,146013
+extern void init_callproc_1 4303,146081
+extern void init_callproc 4304,146117
+extern void set_initial_environment 4305,146151
+extern void syms_of_callproc 4306,146195
+extern Lisp_Object read_doc_string 4309,146258
+extern Lisp_Object get_doc_string 4310,146308
+extern void syms_of_doc 4311,146369
+extern int read_bytecode_char 4312,146401
+extern void syms_of_bytecode 4315,146470
+extern struct byte_stack *byte_stack_list;byte_stack_list4316,146507
+extern void mark_byte_stack 4318,146570
+extern void unmark_byte_stack 4320,146613
+extern Lisp_Object exec_byte_code 4321,146651
+extern void init_macros 4325,146801
+extern void syms_of_macros 4326,146833
+extern void truncate_undo_list 4329,146895
+extern void record_insert 4330,146945
+extern void record_delete 4331,146995
+extern void record_first_change 4332,147053
+extern void record_change 4333,147093
+extern void record_property_change 4334,147143
+extern void syms_of_undo 4337,147285
+extern void report_interval_modification 4340,147349
+extern void syms_of_menu 4343,147445
+extern void syms_of_xmenu 4346,147506
+extern char *get_current_dir_name get_current_dir_name4356,147708
+extern void stuff_char 4358,147757
+extern void init_foreground_group 4359,147790
+extern void sys_subshell 4360,147832
+extern void sys_suspend 4361,147865
+extern void discard_tty_input 4362,147897
+extern void init_sys_modes 4363,147935
+extern void reset_sys_modes 4364,147991
+extern void init_all_sys_modes 4365,148048
+extern void reset_all_sys_modes 4366,148087
+extern void child_setup_tty 4367,148127
+extern void setup_pty 4368,148162
+extern int set_window_size 4369,148191
+extern EMACS_INT get_random 4370,148235
+extern void seed_random 4371,148271
+extern void init_random 4372,148316
+extern void emacs_backtrace 4373,148348
+extern _Noreturn void emacs_abort 4374,148383
+extern void xputenv 4527,152697
+extern char *egetenv_internal egetenv_internal4529,152734
+egetenv 4532,152806
+extern void init_system_name 4539,153009
+#define eabs(4545,153302
+#define make_fixnum_or_float(4550,153435
+enum MAX_ALLOCA 4556,153686
+enum MAX_ALLOCA { MAX_ALLOCA 4556,153686
+extern void *record_xmalloc record_xmalloc4558,153731
+#define USE_SAFE_ALLOCA        4560,153797
+#define AVAIL_ALLOCA(4564,153930
+#define SAFE_ALLOCA(4568,154041
+#define SAFE_NALLOCA(4576,154382
+#define SAFE_ALLOCA_STRING(4590,154858
+#define SAFE_FREE(4598,155110
+#define SAFE_ALLOCA_LISP(4625,155688
+# define USE_STACK_LISP_OBJECTS 4652,156810
+# undef USE_STACK_LISP_OBJECTS4658,156976
+# define USE_STACK_LISP_OBJECTS 4659,157007
+enum { defined_GC_CHECK_STRING_BYTES 4663,157082
+enum { defined_GC_CHECK_STRING_BYTES 4665,157135
+union Aligned_Cons4670,157269
+union Aligned_String4676,157349
+    USE_STACK_CONS 4689,157704
+    USE_STACK_STRING 4691,157810
+#define STACK_CONS(4699,158147
+#define AUTO_CONS_EXPR(4701,158244
+#define AUTO_CONS(4709,158607
+#define AUTO_LIST1(4710,158678
+#define AUTO_LIST2(4712,158786
+#define AUTO_LIST3(4716,158941
+#define AUTO_LIST4(4720,159116
+extern const char *verify_ascii verify_ascii4730,159453
+# define verify_ascii(4732,159507
+#define AUTO_STRING(4740,159815
+#define FOR_EACH_TAIL(4752,160279
+#define FOR_EACH_ALIST_VALUE(4766,160770
+maybe_gc 4774,161057
+functionp 4784,161296
+
+c-src/machsyscalls.c,23
+#define        SYSCALL(6,113
+
+c-src/machsyscalls.h,159
+SYSCALL (mach_msg_trap,1,0
+SYSCALL (mach_reply_port,13,314
+SYSCALL (mach_thread_self,18,377
+SYSCALL (mach_task_self,23,441
+SYSCALL (mach_host_self,28,503
+
+c-src/fail.c,30
+void (*prt_call(prt_call1,0
+
+c-src/h.h,1962
+   ELEM_I/ELEM_I3,15
+} Fails_t;5,85
+typedef void Lang_function 6,96
+void Asm_labels 7,127
+typedef struct tpcmd8,147
+#define ggg 10,170
+tpcmd;15,209
+typedef struct foobar2_ 16,216
+} foobar2;20,307
+    DEVICE_SWP,23,333
+    DEVICE_LAST24,349
+} bsp_DevId;25,365
+  struct constant_args 27,394
+} args;30,457
+typedef int *regset;regset31,465
+typedef int INT;32,486
+typedef union abc33,503
+} ghi1;36,534
+typedef union abc 37,542
+} ghi2;39,573
+typedef struct a 40,581
+} b;41,600
+#define c(42,605
+typedef struct an_extern_linkage 
*an_extern_linkage_ptr;an_extern_linkage_ptr43,619
+typedef struct an_extern_linkage 44,676
+} an_extern_linkage;56,1054
+typedef struct pollfd   pfdset[pfdset57,1075
+typedef union rtunion_def58,1119
+  } womboid 63,1206
+typedef union rtunion_def64,1220
+womboid75,1330
+enum {dog,dog81,1416
+enum {dog, cat}cat81,1416
+enum {dog, cat} animals;81,1416
+typedef void (_CALLBACK_ *signal_handler)signal_handler82,1441
+typedef void (_CALLBACK_ *signal_handler1)signal_handler183,1489
+/* comment */ #define ANSIC84,1538
+ #define ANSIC85,1566
+typedef void (proc)87,1588
+typedef void OperatorFun(88,1612
+typedef int f(89,1648
+struct my_struct 91,1691
+typedef struct my_struct my_typedef;93,1713
+typedef RETSIGTYPE (*signal_handler_t)signal_handler_t94,1750
+  Date 04 May 87 235311 PDT 96,1802
+typedef unsigned char unchar;99,1880
+typedef int X,100,1910
+typedef int X, Y,100,1910
+typedef int X, Y, Z;100,1910
+typedef mio mao;101,1931
+extern void ab(102,1948
+typedef struct a 103,1966
+typedef struct a { } b;103,1966
+typedef struct b104,1990
+} c;106,2009
+int    (*oldhup)oldhup107,2014
+request (*oldhup)oldhup108,2031
+int extvar;109,2053
+#define tag1110,2065
+#define aaaaaa 111,2078
+#define bbbbbb\bbbbbb113,2102
+#define cccccccccc115,2125
+#define enter_critical_section 116,2144
+#define exit_critical_to_previous      117,2199
+#define UNDEFINED118,2259
+struct re_pattern_buffer 119,2277
+
+cp-src/c.C,2567
+template <typename ipc3dIslandHierarchy,1,0
+template <typename ipc3dIslandHierarchy, typename ipc3dChannelType,1,0
+template <typename ipc3dIslandHierarchy, typename ipc3dChannelType, unsigned 
numOfChannels,1,0
+template <typename ipc3dIslandHierarchy, typename ipc3dChannelType, unsigned 
numOfChannels, typename ipc3dLinkControl,1,0
+class CMultiChannelCSC19_3D2,151
+        void execute(CMultiChannelCSC19_3D::execute11,493
+static void my_function1(24,984
+int main 25,1026
+double base 26,1088
+operator += operator +=29,1174
+class TestRecord;31,1233
+typedef struct s1 32,1251
+} t1;34,1287
+struct s2 35,1293
+typedef struct s2 t2;38,1324
+class A 39,1346
+  enum { rosso,A::rosso40,1356
+  enum { rosso, giallo,A::giallo40,1356
+  enum { rosso, giallo, verde A::verde40,1356
+  const A& operator+(A::operator+41,1396
+const A& A::operator+(43,1431
+void operator+(44,1467
+void operator -(operator -45,1495
+void operator int(operator int46,1524
+A<int>* f(48,1556
+int f(49,1571
+int A<int>::f(f50,1590
+A<float,B<int> > A<B<float>,int>::f(f51,1618
+template <class C, int n> class AT 52,1668
+class AU 53,1716
+class B<B54,1735
+class B<int> { void f(B::f54,1735
+const A::B::T& abt 55,1765
+class A 56,1791
+class A { class B A::B56,1791
+class A { class B { int f(A::B::f56,1791
+class A 57,1826
+  int get_data(A::get_data58,1836
+  A operator+(A::operator+59,1860
+is_muldiv_operation(61,1887
+domain foo 68,1955
+     void f(foo::f69,1968
+void A::A(72,1989
+struct A 73,2004
+struct A { A(A::A73,2004
+struct B 74,2022
+struct B { B(B::B74,2022
+void B::B(75,2041
+void BE_Node::BE_Node(76,2056
+class BE_Node 77,2083
+struct foo 79,2102
+class test 86,2156
+  int f(test::f87,2169
+  int ff(test::ff89,2231
+  int g(test::g90,2254
+class  AST_Root 92,2278
+class  AST_Root;96,2327
+AST_ConcreteType::AST_ConcreteType(99,2393
+AST_Array::AST_Array(107,2532
+     void f(::f115,2733
+struct A 117,2753
+    ~A(A::~A118,2764
+A::~A(120,2777
+struct B 122,2789
+    ~B(B::~B123,2800
+enum {dog,::dog126,2817
+enum {dog, cat}::cat126,2817
+enum {dog, cat} animals;126,2817
+struct {int teats;} cow;127,2842
+class Boo 129,2868
+    enum {dog,Boo::dog130,2880
+    enum {dog, cat}Boo::cat130,2880
+    foo(Boo::foo133,2954
+    Boo(Boo::Boo137,2995
+    Boo(Boo::Boo138,3052
+Boo::Boo(141,3070
+typedef int should_see_this_one_enclosed_in_extern_C;149,3155
+typedef int 
(*should_see_this_function_pointer)should_see_this_function_pointer153,3228
+typedef int should_see_this_array_type[should_see_this_array_type156,3310
+
+cp-src/abstract.C,11317
+Half_Container::Half_Container(34,703
+void Half_Container::SetPosition(45,941
+void Half_Container::SetDimensions(58,1259
+void Half_Container::SetFather(81,1697
+void Half_Container::SetCollapsed(87,1787
+Specification::Specification(98,1958
+void Specification::SetPosition(119,2453
+void Specification::SetDimensions(164,3742
+void Specification::SetFather(188,4616
+void Specification::SetPath(202,4908
+Coord Specification::GetMaxX(212,5125
+Coord Specification::GetMaxY(215,5174
+Process::Process(222,5298
+void Process::SetPosition(242,5697
+void Process::SetDimensions(291,6959
+void Process::SetFather(315,7913
+void Process::SetPath(326,8123
+Coord Process::GetMaxX(335,8323
+Coord Process::GetMaxY(338,8365
+Choice::Choice(346,8482
+void Choice::SetPosition(357,8698
+void Choice::SetDimensions(405,10053
+void Choice::ChangeH(466,12014
+void Choice::ChangeW(495,12947
+void Choice::SetFather(522,13700
+void Choice::SetTextual(532,13918
+void Choice::SetCollapsed(540,14041
+int Choice::Get_Textual_H(549,14168
+int Choice::Get_Textual_W(557,14408
+void Choice::SetTerminalPos(566,14615
+Stop::Stop(588,15087
+void Stop::SetPosition(595,15207
+void Stop::SetDimensions(605,15373
+void Stop::SetFather(644,16369
+void Stop::SetTextual(652,16537
+void Stop::SetCollapsed(655,16616
+Exit::Exit(667,16768
+void Exit::SetPosition(676,16935
+void Exit::SetDimensions(687,17164
+void Exit::SetFather(695,17350
+Exit_Bex::Exit_Bex(703,17476
+void Exit_Bex::SetPosition(713,17678
+void Exit_Bex::SetDimensions(740,18430
+void Exit_Bex::SetFather(798,20444
+void Exit_Bex::SetTextual(807,20646
+void Exit_Bex::SetCollapsed(814,20757
+NoExit::NoExit(826,20943
+void NoExit::SetPosition(835,21092
+void NoExit::SetDimensions(845,21266
+void NoExit::SetFather(852,21359
+ID_Place::ID_Place(861,21488
+void ID_Place::SetIdent(875,21745
+void ID_Place::SetPosition(886,21936
+void ID_Place::SetDimensions(897,22173
+void ID_Place::SetFather(928,23017
+ID_Place::~ID_Place(932,23073
+void ID_Place::SetVisible(935,23112
+void ID_Place::ClearID(941,23193
+ID_List::ID_List(953,23379
+void ID_List::SetPosition(967,23644
+void ID_List::SetDimensions(999,24385
+void ID_List::SetFather(1038,25456
+void ID_List::SetCollapsed(1047,25595
+void ID_List::HideMe(1056,25734
+void ID_List::SetRBubble(1065,25862
+void ID_List::SetAlignement(1073,25980
+int ID_List::GetCardinality(1082,26123
+void ID_List::SetVisible(1093,26291
+void ID_List::BuildSigSorts(1103,26518
+void ID_List::ClearIDs(1126,27081
+Id_Decl::Id_Decl(1139,27280
+void Id_Decl::SetPosition(1156,27659
+void Id_Decl::SetDimensions(1174,28016
+void Id_Decl::SetFather(1191,28417
+void Id_Decl::SetCollapsed(1200,28568
+Id_Decl_List::Id_Decl_List(1214,28799
+void Id_Decl_List::SetPosition(1227,29069
+void Id_Decl_List::SetDimensions(1245,29424
+void Id_Decl_List::SetFather(1262,29844
+void Id_Decl_List::SetCollapsed(1271,29988
+Comment::Comment(1286,30209
+void Comment::SetComment(1299,30446
+void Comment::SetFather(1317,30800
+void Comment::SetPosition(1321,30854
+void Comment::SetDimensions(1331,31031
+Comment::~Comment(1345,31265
+Comment_List::Comment_List(1352,31382
+void Comment_List::SetPosition(1362,31541
+void Comment_List::SetDimensions(1380,31860
+void Comment_List::SetFather(1392,32139
+Parallel::Parallel(1406,32360
+void Parallel::SetPosition(1417,32573
+void Parallel::SetDimensions(1473,34272
+void Parallel::SetTextual(1534,36167
+int Parallel::Get_Textual_W(1543,36313
+int Parallel::Get_Textual_H(1559,36722
+void Parallel::SetTerminalPos(1570,37191
+void Parallel::SetFather(1590,37698
+void Parallel::SetCollapsed(1601,37950
+Ident_Eq::Ident_Eq(1615,38177
+void Ident_Eq::SetPosition(1632,38546
+void Ident_Eq::SetDimensions(1647,38851
+void Ident_Eq::SetFather(1662,39191
+void Ident_Eq::SetCollapsed(1669,39295
+Ident_Eq_List::Ident_Eq_List(1681,39480
+void Ident_Eq_List::SetPosition(1694,39753
+void Ident_Eq_List::SetDimensions(1712,40111
+void Ident_Eq_List::SetCollapsed(1729,40538
+void Ident_Eq_List::SetFather(1738,40683
+Local_Def::Local_Def(1751,40904
+void Local_Def::SetPosition(1761,41102
+void Local_Def::SetDimensions(1791,41833
+void Local_Def::SetFather(1832,43262
+void Local_Def::SetCollapsed(1839,43370
+void Local_Def::SetTextual(1848,43504
+Hide::Hide(1860,43681
+void Hide::SetPosition(1871,43872
+void Hide::SetDimensions(1901,44569
+void Hide::SetFather(1944,45771
+void Hide::SetCollapsed(1951,45873
+void Hide::SetTextual(1961,46003
+Interl::Interl(1972,46175
+void Interl::SetPosition(1982,46361
+void Interl::SetDimensions(1993,46593
+void Interl::SetFather(2021,47103
+Syncr::Syncr(2031,47257
+void Syncr::SetPosition(2041,47438
+void Syncr::SetDimensions(2051,47609
+void Syncr::SetFather(2079,48153
+Enable::Enable(2090,48436
+void Enable::SetPosition(2102,48690
+void Enable::SetDimensions(2169,50473
+void Enable::SetTextual(2243,53017
+void Enable::SetTerminalPos(2251,53140
+int Enable::Get_Textual_W(2271,53720
+int Enable::Get_Textual_H(2282,53985
+void Enable::SetFather(2285,54104
+void Enable::SetCollapsed(2298,54418
+Disable::Disable(2314,54780
+void Disable::SetPosition(2325,55001
+void Disable::SetDimensions(2376,56251
+void Disable::SetFather(2436,58064
+void Disable::SetCollapsed(2446,58284
+void Disable::SetTextual(2455,58412
+void Disable::SetTerminalPos(2463,58536
+int Disable::Get_Textual_W(2479,58987
+int Disable::Get_Textual_H(2488,59190
+Gen_Paral::Gen_Paral(2500,59630
+void Gen_Paral::SetPosition(2513,59899
+void Gen_Paral::SetDimensions(2540,60659
+void Gen_Paral::SetFather(2590,62171
+void Gen_Paral::SetCollapsed(2597,62290
+Action_Pref::Action_Pref(2609,62583
+void Action_Pref::SetPosition(2620,62829
+void Action_Pref::SetDimensions(2669,63937
+void Action_Pref::SetFather(2724,65777
+void Action_Pref::SetCollapsed(2734,66010
+void Action_Pref::SetTextual(2743,66147
+Internal::Internal(2757,66484
+void Internal::SetPosition(2768,66658
+void Internal::SetDimensions(2778,66838
+void Internal::SetFather(2806,67442
+Communication::Communication(2816,67702
+void Communication::SetPosition(2827,67956
+void Communication::SetDimensions(2897,70390
+void Communication::SetFather(2935,71706
+void Communication::SetCollapsed(2942,71837
+void Communication::SetTextual(2949,71968
+NoGuard::NoGuard(2961,72262
+void NoGuard::SetPosition(2974,72462
+void NoGuard::SetDimensions(2984,72639
+void NoGuard::SetFather(2987,72678
+Guard::Guard(2996,72929
+void Guard::SetPosition(3008,73118
+void Guard::SetDimensions(3022,73428
+void Guard::SetFather(3044,73894
+void Guard::SetCollapsed(3050,73974
+NoExperiment::NoExperiment(3062,74258
+void NoExperiment::SetPosition(3075,74478
+void NoExperiment::SetDimensions(3085,74670
+void NoExperiment::SetFather(3088,74714
+Experiment::Experiment(3097,74978
+void Experiment::SetPosition(3110,75245
+void Experiment::SetDimensions(3128,75611
+void Experiment::SetFather(3150,76066
+void Experiment::SetCollapsed(3157,76188
+void Experiment::SetTextual(3165,76311
+Proc_Inst::Proc_Inst(3175,76476
+void Proc_Inst::SetPosition(3191,76777
+void Proc_Inst::SetDimensions(3236,77965
+void Proc_Inst::SetFather(3286,79596
+void Proc_Inst::SetCollapsed(3294,79739
+void Proc_Inst::SetTextual(3304,79909
+Value_Expr::Value_Expr(3316,80100
+void Value_Expr::SetPosition(3329,80327
+void Value_Expr::SetDimensions(3340,80572
+void Value_Expr::SetFather(3343,80614
+Value_Expr_List::Value_Expr_List(3351,80755
+void Value_Expr_List::SetPosition(3364,81042
+void Value_Expr_List::SetDimensions(3382,81406
+void Value_Expr_List::SetFather(3399,81830
+void Value_Expr_List::SetCollapsed(3408,81977
+Sum_Ident::Sum_Ident(3423,82203
+void Sum_Ident::SetPosition(3435,82445
+void Sum_Ident::SetDimensions(3466,83196
+void Sum_Ident::SetFather(3509,84540
+void Sum_Ident::SetCollapsed(3516,84653
+void Sum_Ident::SetTextual(3525,84793
+void Sum_Ident::SetTerminalPos(3532,84897
+Value::Value(3552,85432
+void Value::SetPosition(3569,85792
+void Value::SetDimensions(3583,86091
+void Value::SetFather(3606,86628
+void Value::SetCollapsed(3613,86731
+Term::Term(3626,86908
+void Term::SetPosition(3646,87323
+void Term::SetDimensions(3671,87942
+void Term::SetFather(3697,88599
+void Term::SetCollapsed(3705,88732
+Exit_Entry::Exit_Entry(3719,88947
+void Exit_Entry::SetPosition(3732,89176
+void Exit_Entry::SetDimensions(3743,89421
+void Exit_Entry::SetFather(3746,89463
+Exit_Entry_List::Exit_Entry_List(3754,89604
+void Exit_Entry_List::SetPosition(3766,89875
+void Exit_Entry_List::SetDimensions(3785,90304
+void Exit_Entry_List::SetFather(3802,90753
+void Exit_Entry_List::SetCollapsed(3811,90900
+Sum_Gate::Sum_Gate(3826,91125
+void Sum_Gate::SetPosition(3837,91363
+void Sum_Gate::SetDimensions(3873,92120
+void Sum_Gate::SetFather(3915,93438
+void Sum_Gate::SetCollapsed(3922,93549
+void Sum_Gate::SetTextual(3931,93687
+void Sum_Gate::SetTerminalPos(3938,93790
+Gate_Decl::Gate_Decl(3959,94421
+void Gate_Decl::SetPosition(3977,94900
+void Gate_Decl::SetDimensions(3995,95298
+void Gate_Decl::SetFather(4011,95694
+void Gate_Decl::SetCollapsed(4020,95871
+Gate_Decl_List::Gate_Decl_List(4034,96130
+void Gate_Decl_List::SetPosition(4047,96414
+void Gate_Decl_List::SetDimensions(4065,96779
+void Gate_Decl_List::SetFather(4082,97207
+void Gate_Decl_List::SetCollapsed(4091,97353
+Par::Par(4106,97572
+void Par::SetPosition(4126,97957
+void Par::SetDimensions(4174,99236
+void Par::SetFather(4226,100814
+void Par::SetCollapsed(4234,100943
+void Par::SetTextual(4245,101100
+Sort_Id_Exit::Sort_Id_Exit(4258,101329
+void Sort_Id_Exit::SetPosition(4270,101556
+void Sort_Id_Exit::SetDimensions(4283,101834
+void Sort_Id_Exit::SetFather(4297,102142
+void Sort_Id_Exit::SetCollapsed(4303,102228
+Equality::Equality(4314,102512
+Equality::Equality(4327,102736
+void Equality::SetPosition(4340,102987
+void Equality::SetDimensions(4357,103329
+void Equality::SetFather(4377,103720
+void Equality::SetCollapsed(4387,103858
+Guarded::Guarded(4401,104167
+void Guarded::SetPosition(4413,104384
+void Guarded::SetDimensions(4441,105084
+void Guarded::SetFather(4482,106273
+void Guarded::SetCollapsed(4489,106377
+void Guarded::SetTextual(4499,106509
+Exper_Off::Exper_Off(4510,106813
+void Exper_Off::SetPosition(4523,107035
+void Exper_Off::SetDimensions(4533,107220
+void Exper_Off::SetFather(4536,107261
+Exper_Off_List::Exper_Off_List(4544,107521
+void Exper_Off_List::SetPosition(4557,107802
+void Exper_Off_List::SetDimensions(4575,108167
+void Exper_Off_List::SetFather(4592,108594
+void Exper_Off_List::SetCollapsed(4601,108740
+Exclam::Exclam(4616,109087
+void Exclam::SetPosition(4629,109300
+void Exclam::SetDimensions(4641,109541
+void Exclam::SetFather(4655,109830
+void Exclam::SetCollapsed(4661,109912
+Query::Query(4673,110194
+void Query::SetPosition(4686,110399
+void Query::SetDimensions(4698,110636
+void Query::SetFather(4712,110918
+void Query::SetCollapsed(4718,110997
+Definition::Definition(4729,111279
+void Definition::SetPosition(4741,111448
+void Definition::SetDimensions(4752,111658
+void Definition::SetFather(4766,111896
+void Definition::SetPath(4777,112089
+Proc_List::Proc_List(4790,112374
+void Proc_List::SetPosition(4799,112505
+void Proc_List::SetDimensions(4809,112686
+void Proc_List::SetFather(4815,112767
+void Proc_List::SetPath(4824,112908
+char *Proc_List::GetPath(Proc_List::GetPath4832,113068
+
+cp-src/abstract.H,17065
+#define abstract_hh16,453
+class SignatureSorts;21,513
+class ID_Place:ID_Place23,536
+ ID_Place(ID_Place::ID_Place31,637
+ void  SetIdent(ID_Place::SetIdent32,650
+ void SetPosition(ID_Place::SetPosition33,675
+ void SetDimensions(ID_Place::SetDimensions34,708
+ void SetVisible(ID_Place::SetVisible35,735
+ void SetFather(ID_Place::SetFather36,759
+ void ClearID(ID_Place::ClearID37,789
+ virtual ~ID_Place(ID_Place::~ID_Place38,810
+ char *GetIdent(ID_Place::GetIdent41,857
+ void SetRBubble(ID_Place::SetRBubble42,891
+ char GetRBubble(ID_Place::GetRBubble43,934
+class ID_List:ID_List47,1012
+ ID_List(ID_List::ID_List57,1134
+ void SetPosition(ID_List::SetPosition58,1167
+ void SetDimensions(ID_List::SetDimensions59,1200
+ void SetFather(ID_List::SetFather60,1227
+ ID_Place *GetElem(ID_List::GetElem61,1257
+ void HideMe(ID_List::HideMe62,1279
+ void SetCollapsed(ID_List::SetCollapsed63,1299
+ void SetRBubble(ID_List::SetRBubble64,1325
+ void BuildSigSorts(ID_List::BuildSigSorts65,1349
+ void SetVisible(ID_List::SetVisible66,1409
+ void SetAlignement(ID_List::SetAlignement67,1433
+ void ClearIDs(ID_List::ClearIDs68,1460
+ int GetCardinality(ID_List::GetCardinality69,1482
+class Id_Decl:Id_Decl73,1540
+ Id_Decl(Id_Decl::Id_Decl81,1648
+ void SetPosition(Id_Decl::SetPosition82,1681
+ void SetDimensions(Id_Decl::SetDimensions83,1714
+ void SetFather(Id_Decl::SetFather84,1741
+ void SetCollapsed(Id_Decl::SetCollapsed85,1771
+class Id_Decl_List:Id_Decl_List89,1829
+ Id_Decl_List(Id_Decl_List::Id_Decl_List97,1945
+ void SetPosition(Id_Decl_List::SetPosition98,1987
+ void SetDimensions(Id_Decl_List::SetDimensions99,2020
+ void SetFather(Id_Decl_List::SetFather100,2047
+ void SetCollapsed(Id_Decl_List::SetCollapsed101,2077
+class Comment:Comment105,2140
+ Comment(Comment::Comment112,2222
+ Comment(Comment::Comment113,2234
+ void SetComment(Comment::SetComment114,2271
+ void SetPosition(Comment::SetPosition115,2297
+ void SetDimensions(Comment::SetDimensions116,2330
+ void SetFather(Comment::SetFather117,2357
+ virtual ~Comment(Comment::~Comment118,2387
+class Comment_List:Comment_List122,2440
+ Comment_List(Comment_List::Comment_List128,2525
+ void SetPosition(Comment_List::SetPosition129,2567
+ void SetDimensions(Comment_List::SetDimensions130,2600
+ void SetFather(Comment_List::SetFather131,2627
+class Value_Expr:Value_Expr135,2694
+ Value_Expr(Value_Expr::Value_Expr141,2769
+ void SetPosition(Value_Expr::SetPosition142,2784
+ void SetDimensions(Value_Expr::SetDimensions143,2817
+ void SetFather(Value_Expr::SetFather144,2844
+class Value_Expr_List:Value_Expr_List149,2911
+ Value_Expr_List(Value_Expr_List::Value_Expr_List157,3038
+ void SetPosition(Value_Expr_List::SetPosition158,3088
+ void SetDimensions(Value_Expr_List::SetDimensions159,3121
+ void SetFather(Value_Expr_List::SetFather160,3148
+ void SetCollapsed(Value_Expr_List::SetCollapsed161,3178
+class Exit_Entry:Exit_Entry165,3244
+ Exit_Entry(Exit_Entry::Exit_Entry171,3319
+ void SetPosition(Exit_Entry::SetPosition172,3334
+ void SetDimensions(Exit_Entry::SetDimensions173,3367
+ void SetFather(Exit_Entry::SetFather174,3394
+class Exit_Entry_List:Exit_Entry_List179,3460
+ Exit_Entry_List(Exit_Entry_List::Exit_Entry_List187,3587
+ void SetPosition(Exit_Entry_List::SetPosition188,3637
+ void SetDimensions(Exit_Entry_List::SetDimensions189,3670
+ void SetFather(Exit_Entry_List::SetFather190,3697
+ void SetCollapsed(Exit_Entry_List::SetCollapsed191,3727
+class Exper_Off:Exper_Off195,3793
+ Exper_Off(Exper_Off::Exper_Off199,3838
+ void SetPosition(Exper_Off::SetPosition200,3852
+ void SetDimensions(Exper_Off::SetDimensions201,3885
+ void SetFather(Exper_Off::SetFather202,3912
+class Exper_Off_List:Exper_Off_List207,3977
+ Exper_Off_List(Exper_Off_List::Exper_Off_List215,4115
+ void SetPosition(Exper_Off_List::SetPosition216,4163
+ void SetDimensions(Exper_Off_List::SetDimensions217,4196
+ void SetFather(Exper_Off_List::SetFather218,4223
+ void SetCollapsed(Exper_Off_List::SetCollapsed219,4253
+class Gate_Decl:Gate_Decl223,4323
+ Gate_Decl(Gate_Decl::Gate_Decl231,4446
+ void SetPosition(Gate_Decl::SetPosition232,4480
+ void SetDimensions(Gate_Decl::SetDimensions233,4513
+ void SetFather(Gate_Decl::SetFather234,4540
+ void SetCollapsed(Gate_Decl::SetCollapsed235,4570
+class Gate_Decl_List:Gate_Decl_List239,4630
+ Gate_Decl_List(Gate_Decl_List::Gate_Decl_List247,4754
+ void SetPosition(Gate_Decl_List::SetPosition248,4802
+ void SetDimensions(Gate_Decl_List::SetDimensions249,4835
+ void SetFather(Gate_Decl_List::SetFather250,4862
+ void SetCollapsed(Gate_Decl_List::SetCollapsed251,4892
+class Ident_Eq:Ident_Eq255,4957
+ Ident_Eq(Ident_Eq::Ident_Eq263,5079
+ void SetPosition(Ident_Eq::SetPosition264,5116
+ void SetDimensions(Ident_Eq::SetDimensions265,5149
+ void SetFather(Ident_Eq::SetFather266,5176
+ void SetCollapsed(Ident_Eq::SetCollapsed267,5206
+class Ident_Eq_List:Ident_Eq_List271,5270
+ Ident_Eq_List(Ident_Eq_List::Ident_Eq_List279,5404
+ void SetPosition(Ident_Eq_List::SetPosition280,5449
+ void SetDimensions(Ident_Eq_List::SetDimensions281,5482
+ void SetFather(Ident_Eq_List::SetFather282,5509
+ void SetCollapsed(Ident_Eq_List::SetCollapsed283,5539
+class Half_Container:Half_Container287,5608
+ Half_Container(Half_Container::Half_Container294,5712
+ void SetPosition(Half_Container::SetPosition295,5740
+ void SetDimensions(Half_Container::SetDimensions296,5773
+ void SetFather(Half_Container::SetFather297,5800
+ void SetCollapsed(Half_Container::SetCollapsed298,5830
+class Specification:Specification308,5954
+class Definition;Specification::Definition310,5994
+ Specification(Specification::Specification326,6283
+ void SetPosition(Specification::SetPosition328,6418
+ void SetDimensions(Specification::SetDimensions329,6451
+ void SetFather(Specification::SetFather330,6478
+ void SetPath(Specification::SetPath331,6508
+ Coord GetMaxX(Specification::GetMaxX332,6535
+ Coord GetMaxY(Specification::GetMaxY333,6553
+class Process:Process337,6609
+ Process(Process::Process352,6874
+ void SetPosition(Process::SetPosition353,6966
+ void SetDimensions(Process::SetDimensions354,6999
+ void SetFather(Process::SetFather355,7026
+ void SetPath(Process::SetPath356,7056
+ void NewBex(Process::NewBex357,7097
+ Coord GetMaxY(Process::GetMaxY359,7125
+ Coord GetMaxX(Process::GetMaxX360,7143
+ char GetNesting(Process::GetNesting363,7186
+class Proc_List:Proc_List367,7257
+ Proc_List(Proc_List::Proc_List373,7350
+ void SetPosition(Proc_List::SetPosition374,7386
+ void SetDimensions(Proc_List::SetDimensions375,7419
+ void SetFather(Proc_List::SetFather376,7446
+ void SetPath(Proc_List::SetPath377,7476
+ char *GetPath(Proc_List::GetPath378,7517
+class Definition:Definition382,7574
+ Definition(Definition::Definition390,7732
+ void SetPosition(Definition::SetPosition391,7784
+ void SetDimensions(Definition::SetDimensions392,7817
+ void SetFather(Definition::SetFather393,7844
+ void SetPath(Definition::SetPath394,7874
+ char *GetPath(Definition::GetPath397,7940
+class Exit:Exit407,8071
+ Exit(Exit::Exit414,8155
+ void SetPosition(Exit::SetPosition415,8173
+ void SetDimensions(Exit::SetDimensions416,8220
+ void SetFather(Exit::SetFather417,8247
+class NoExit:NoExit421,8305
+ NoExit(NoExit::NoExit427,8372
+ void SetPosition(NoExit::SetPosition428,8383
+ void SetDimensions(NoExit::SetDimensions429,8416
+ void SetFather(NoExit::SetFather430,8443
+class Value:Value440,8560
+ Value(Value::Value448,8663
+ void SetPosition(Value::SetPosition449,8695
+ void SetDimensions(Value::SetDimensions450,8728
+ void SetFather(Value::SetFather451,8755
+ void SetCollapsed(Value::SetCollapsed452,8785
+class Term:Term456,8841
+ Term(Term::Term465,8974
+ void SetPosition(Term::SetPosition466,9024
+ void SetDimensions(Term::SetDimensions467,9057
+ void SetFather(Term::SetFather468,9084
+ void SetCollapsed(Term::SetCollapsed469,9114
+class Equality:Equality473,9169
+ Equality(Equality::Equality481,9298
+ Equality(Equality::Equality482,9311
+ void SetPosition(Equality::SetPosition483,9348
+ void SetDimensions(Equality::SetDimensions484,9381
+ void SetFather(Equality::SetFather485,9408
+ void SetCollapsed(Equality::SetCollapsed486,9438
+class Sort_Id_Exit:Sort_Id_Exit490,9504
+ Sort_Id_Exit(Sort_Id_Exit::Sort_Id_Exit497,9603
+ void SetPosition(Sort_Id_Exit::SetPosition498,9630
+ void SetDimensions(Sort_Id_Exit::SetDimensions499,9663
+ void SetFather(Sort_Id_Exit::SetFather500,9690
+ void SetCollapsed(Sort_Id_Exit::SetCollapsed501,9720
+class NoGuard:NoGuard511,9837
+ NoGuard(NoGuard::NoGuard517,9906
+ void SetPosition(NoGuard::SetPosition518,9918
+ void SetDimensions(NoGuard::SetDimensions519,9951
+ void SetFather(NoGuard::SetFather520,9978
+class Guard:Guard524,10045
+ Guard(Guard::Guard531,10138
+ void SetPosition(Guard::SetPosition532,10158
+ void SetDimensions(Guard::SetDimensions533,10191
+ void SetFather(Guard::SetFather534,10218
+ void SetCollapsed(Guard::SetCollapsed535,10248
+class NoExperiment:NoExperiment545,10368
+ NoExperiment(NoExperiment::NoExperiment551,10447
+ void SetPosition(NoExperiment::SetPosition552,10464
+ void SetDimensions(NoExperiment::SetDimensions553,10497
+ void SetFather(NoExperiment::SetFather554,10524
+class Experiment:Experiment558,10591
+ Experiment(Experiment::Experiment566,10739
+ void SetPosition(Experiment::SetPosition567,10783
+ void SetDimensions(Experiment::SetDimensions568,10816
+ void SetFather(Experiment::SetFather569,10843
+ void SetTextual(Experiment::SetTextual570,10873
+ void SetCollapsed(Experiment::SetCollapsed571,10911
+ Tree_Node *GetGuard(Experiment::GetGuard574,10962
+class Exclam:Exclam578,11053
+ Exclam(Exclam::Exclam585,11150
+ void SetPosition(Exclam::SetPosition586,11172
+ void SetDimensions(Exclam::SetDimensions587,11205
+ void SetFather(Exclam::SetFather588,11232
+ void SetCollapsed(Exclam::SetCollapsed589,11262
+class Query:Query593,11324
+ Query(Query::Query600,11415
+ void SetPosition(Query::SetPosition601,11434
+ void SetDimensions(Query::SetDimensions602,11467
+ void SetFather(Query::SetFather603,11494
+ void SetCollapsed(Query::SetCollapsed604,11524
+class Internal:Internal614,11643
+ Internal(Internal::Internal620,11714
+ void SetPosition(Internal::SetPosition621,11727
+ void SetDimensions(Internal::SetDimensions622,11760
+ void SetFather(Internal::SetFather623,11787
+class Communication:Communication627,11854
+ Communication(Communication::Communication637,12039
+ void SetPosition(Communication::SetPosition638,12080
+ void SetDimensions(Communication::SetDimensions639,12113
+ void SetFather(Communication::SetFather640,12140
+ void SetTextual(Communication::SetTextual641,12170
+ void SetCollapsed(Communication::SetCollapsed642,12208
+class Gen_Paral:Gen_Paral652,12337
+ Gen_Paral(Gen_Paral::Gen_Paral661,12470
+ void SetPosition(Gen_Paral::SetPosition662,12493
+ void SetDimensions(Gen_Paral::SetDimensions663,12526
+ void SetFather(Gen_Paral::SetFather664,12553
+ void SetCollapsed(Gen_Paral::SetCollapsed665,12583
+ void HideGate(Gen_Paral::HideGate668,12634
+class Interl:Interl672,12730
+ Interl(Interl::Interl678,12797
+ void SetPosition(Interl::SetPosition679,12808
+ void SetDimensions(Interl::SetDimensions680,12841
+ void SetFather(Interl::SetFather681,12868
+class Syncr:Syncr685,12929
+ Syncr(Syncr::Syncr691,12994
+ void SetPosition(Syncr::SetPosition692,13004
+ void SetDimensions(Syncr::SetDimensions693,13037
+ void SetFather(Syncr::SetFather694,13064
+class Action_Pref:Action_Pref704,13185
+ Action_Pref(Action_Pref::Action_Pref714,13346
+ void SetPosition(Action_Pref::SetPosition715,13386
+ void SetDimensions(Action_Pref::SetDimensions716,13419
+ void SetFather(Action_Pref::SetFather717,13446
+ void SetTextual(Action_Pref::SetTextual718,13476
+ void SetCollapsed(Action_Pref::SetCollapsed719,13514
+class Enable:Enable723,13577
+ Enable(Enable::Enable734,13780
+ void SetPosition(Enable::SetPosition735,13826
+ void SetDimensions(Enable::SetDimensions736,13859
+ void SetFather(Enable::SetFather737,13886
+ void SetTextual(Enable::SetTextual738,13916
+ int Get_Textual_H(Enable::Get_Textual_H739,13954
+ int Get_Textual_W(Enable::Get_Textual_W740,13980
+ void SetTerminalPos(Enable::SetTerminalPos741,14006
+ void SetCollapsed(Enable::SetCollapsed742,14034
+class Disable:Disable746,14097
+ Disable(Disable::Disable756,14254
+ void SetPosition(Disable::SetPosition757,14290
+ void SetDimensions(Disable::SetDimensions758,14323
+ void SetFather(Disable::SetFather759,14350
+ void SetTextual(Disable::SetTextual760,14380
+ int Get_Textual_H(Disable::Get_Textual_H761,14418
+ int Get_Textual_W(Disable::Get_Textual_W762,14444
+ void SetTerminalPos(Disable::SetTerminalPos763,14470
+ void SetCollapsed(Disable::SetCollapsed764,14498
+class Choice:Choice768,14561
+ Choice(Choice::Choice779,14714
+ void SetPosition(Choice::SetPosition780,14749
+ void SetDimensions(Choice::SetDimensions781,14782
+ void SetFather(Choice::SetFather782,14809
+ void SetTextual(Choice::SetTextual783,14839
+ void SetCollapsed(Choice::SetCollapsed784,14877
+ int Get_Textual_H(Choice::Get_Textual_H785,14903
+ int Get_Textual_W(Choice::Get_Textual_W786,14929
+ void SetTerminalPos(Choice::SetTerminalPos787,14955
+ void ChangeH(Choice::ChangeH788,14983
+ void ChangeW(Choice::ChangeW789,15003
+class Stop:Stop793,15054
+ Stop(Stop::Stop801,15146
+ void SetPosition(Stop::SetPosition802,15155
+ void SetDimensions(Stop::SetDimensions803,15188
+ void SetFather(Stop::SetFather804,15215
+ void SetTextual(Stop::SetTextual805,15245
+ void SetCollapsed(Stop::SetCollapsed806,15283
+class Exit_Bex:Exit_Bex810,15338
+ Exit_Bex(Exit_Bex::Exit_Bex820,15491
+ void SetPosition(Exit_Bex::SetPosition821,15521
+ void SetDimensions(Exit_Bex::SetDimensions822,15554
+ void SetFather(Exit_Bex::SetFather823,15581
+ void SetTextual(Exit_Bex::SetTextual824,15611
+ void SetCollapsed(Exit_Bex::SetCollapsed825,15649
+class Hide:Hide829,15707
+ Hide(Hide::Hide839,15833
+ void SetPosition(Hide::SetPosition840,15864
+ void SetDimensions(Hide::SetDimensions841,15897
+ void SetFather(Hide::SetFather842,15924
+ void SetTextual(Hide::SetTextual843,15954
+ void SetCollapsed(Hide::SetCollapsed844,15992
+class Guarded:Guarded848,16047
+ Guarded(Guarded::Guarded858,16197
+ void SetPosition(Guarded::SetPosition859,16232
+ void SetDimensions(Guarded::SetDimensions860,16265
+ void SetFather(Guarded::SetFather861,16292
+ void SetTextual(Guarded::SetTextual862,16322
+ void SetCollapsed(Guarded::SetCollapsed863,16360
+class Proc_Inst:Proc_Inst867,16425
+  Proc_Inst(Proc_Inst::Proc_Inst879,16626
+ void SetPosition(Proc_Inst::SetPosition880,16681
+ void SetDimensions(Proc_Inst::SetDimensions881,16714
+ void SetFather(Proc_Inst::SetFather882,16741
+ void SetTextual(Proc_Inst::SetTextual883,16771
+ void SetCollapsed(Proc_Inst::SetCollapsed884,16809
+class Parallel:Parallel888,16870
+ Parallel(Parallel::Parallel899,17034
+ void SetPosition(Parallel::SetPosition900,17084
+ void SetDimensions(Parallel::SetDimensions901,17117
+ void SetFather(Parallel::SetFather902,17144
+ void SetTextual(Parallel::SetTextual903,17174
+ int Get_Textual_W(Parallel::Get_Textual_W904,17212
+ int Get_Textual_H(Parallel::Get_Textual_H905,17238
+ void SetTerminalPos(Parallel::SetTerminalPos906,17264
+ void SetCollapsed(Parallel::SetCollapsed907,17292
+ char GetOperType(Parallel::GetOperType910,17343
+class Local_Def:Local_Def914,17429
+ Local_Def(Local_Def::Local_Def924,17571
+ void SetPosition(Local_Def::SetPosition925,17613
+ void SetDimensions(Local_Def::SetDimensions926,17646
+ void SetFather(Local_Def::SetFather927,17673
+ void SetTextual(Local_Def::SetTextual928,17703
+ void SetCollapsed(Local_Def::SetCollapsed929,17741
+class Par:Par933,17801
+ Par(Par::Par943,17948
+ void SetPosition(Par::SetPosition944,17998
+ void SetDimensions(Par::SetDimensions945,18031
+ void SetFather(Par::SetFather946,18058
+ void SetTextual(Par::SetTextual947,18088
+ void SetCollapsed(Par::SetCollapsed948,18126
+class Sum_Gate:Sum_Gate952,18180
+ Sum_Gate(Sum_Gate::Sum_Gate962,18356
+ void SetPosition(Sum_Gate::SetPosition963,18398
+ void SetDimensions(Sum_Gate::SetDimensions964,18431
+ void SetFather(Sum_Gate::SetFather965,18458
+ void SetTextual(Sum_Gate::SetTextual966,18488
+ void SetTerminalPos(Sum_Gate::SetTerminalPos967,18526
+ void SetCollapsed(Sum_Gate::SetCollapsed968,18554
+class Sum_Ident:Sum_Ident972,18613
+ Sum_Ident(Sum_Ident::Sum_Ident982,18790
+ void SetPosition(Sum_Ident::SetPosition983,18831
+ void SetDimensions(Sum_Ident::SetDimensions984,18864
+ void SetFather(Sum_Ident::SetFather985,18891
+ void SetTextual(Sum_Ident::SetTextual986,18921
+ void SetTerminalPos(Sum_Ident::SetTerminalPos987,18959
+ void SetCollapsed(Sum_Ident::SetCollapsed988,18987
+
+cp-src/cfront.H,12673
+extern bit old_fct_accepted;28,897
+extern bit fct_void;32,1028
+extern char* prog_name;42,1297
+extern int inline_restr;43,1351
+extern bit emode;44,1410
+extern Pname name_free;47,1457
+extern Pexpr expr_free;48,1496
+extern Pstmt stmt_free;49,1520
+extern int Nspy;52,1569
+extern int Nfile,53,1586
+extern int Nfile, Nline,53,1586
+extern int Nfile, Nline, Ntoken,53,1586
+extern int Nfile, Nline, Ntoken, Nname,53,1586
+extern int Nfile, Nline, Ntoken, Nname, Nfree_store,53,1586
+extern int Nfile, Nline, Ntoken, Nname, Nfree_store, Nalloc,53,1586
+extern int Nfile, Nline, Ntoken, Nname, Nfree_store, Nalloc, Nfree;53,1586
+extern int Nn,54,1654
+extern int Nn, Nbt,54,1654
+extern int Nn, Nbt, Nt,54,1654
+extern int Nn, Nbt, Nt, Ne,54,1654
+extern int Nn, Nbt, Nt, Ne, Ns,54,1654
+extern int Nn, Nbt, Nt, Ne, Ns, Nstr,54,1654
+extern int Nn, Nbt, Nt, Ne, Ns, Nstr, Nc,54,1654
+extern int Nn, Nbt, Nt, Ne, Ns, Nstr, Nc, Nl;54,1654
+extern int NFn,55,1700
+extern int NFn, NFtn,55,1700
+extern int NFn, NFtn, NFpv,55,1700
+extern int NFn, NFtn, NFpv, NFbt,55,1700
+extern int NFn, NFtn, NFpv, NFbt, NFf,55,1700
+extern int NFn, NFtn, NFpv, NFbt, NFf, NFs,55,1700
+extern int NFn, NFtn, NFpv, NFbt, NFf, NFs, NFc,55,1700
+extern int NFn, NFtn, NFpv, NFbt, NFf, NFs, NFc, NFe,55,1700
+extern int NFn, NFtn, NFpv, NFbt, NFf, NFs, NFc, NFe, NFl;55,1700
+extern TOK     lex(57,1760
+extern Pname   syn(58,1778
+extern void    init_print(60,1799
+extern void    init_lex(61,1847
+extern void    int_syn(62,1871
+extern void    ext(63,1894
+extern char*   make_name(65,1917
+struct loc     67,1948
+       void    put(loc::put72,2062
+       void    putline(loc::putline73,2080
+extern Loc curloc;77,2108
+extern int curr_file;78,2127
+struct ea 80,2150
+       ea(ea::ea86,2249
+       ea(ea::ea87,2275
+       ea(ea::ea88,2301
+       ea(ea::ea89,2310
+extern ea* ea0;92,2332
+overload error;94,2349
+int error(95,2365
+int error(96,2437
+int error(97,2515
+int error(98,2592
+extern int error_count;101,2689
+extern bit debug;102,2713
+extern int vtbl_opt;103,2731
+extern FILE* out_file;104,2752
+extern FILE* in_file;105,2775
+extern char scan_started;106,2797
+extern bit warn;107,2823
+extern int br_level;110,2848
+extern int bl_level;111,2869
+extern Ptable ktbl;112,2890
+extern Ptable gtbl;113,2941
+extern char* oper_name(114,2978
+extern Pclass ccl;115,3007
+extern Pbase defa_type;116,3026
+extern Pbase moe_type;117,3050
+extern Pstmt Cstmt;120,3087
+extern Pname Cdcl;121,3135
+extern void put_dcl_context(122,3194
+extern Ptable any_tbl;124,3226
+extern Pbase any_type;125,3287
+extern Pbase int_type;128,3318
+extern Pbase char_type;129,3341
+extern Pbase short_type;130,3365
+extern Pbase long_type;131,3390
+extern Pbase uint_type;132,3414
+extern Pbase float_type;133,3438
+extern Pbase double_type;134,3463
+extern Pbase void_type;135,3489
+extern Pbase uchar_type;138,3527
+extern Pbase ushort_type;139,3552
+extern Pbase ulong_type;140,3578
+extern Ptype Pchar_type;141,3603
+extern Ptype Pint_type;142,3628
+extern Ptype Pfctvec_type;143,3652
+extern Ptype Pfctchar_type;144,3679
+extern Ptype Pvoid_type;145,3707
+extern Pbase zero_type;146,3732
+extern int byte_offset;148,3757
+extern int bit_offset;149,3781
+extern int max_align;150,3804
+extern int stack_size;151,3826
+extern int enum_count;152,3849
+extern int const_save;153,3872
+extern Pexpr dummy;156,3903
+extern Pexpr zero;157,3950
+extern Pexpr one;158,3969
+extern Pname sta_name;159,3987
+#define DEL(161,4040
+#define PERM(162,4092
+#define UNPERM(163,4123
+struct node 165,4157
+extern Pclass Ebase,172,4259
+extern Pclass Ebase, Epriv;172,4259
+struct table 175,4321
+       table(table::table192,4875
+       Pname   look(table::look194,4906
+       Pname   insert(table::insert195,4931
+       void    grow(table::grow197,4971
+       void    set_scope(table::set_scope198,4988
+       void    set_name(table::set_name199,5029
+       Pname   get_mem(table::get_mem200,5070
+       int     max(table::max201,5091
+       void    dcl_print(table::dcl_print202,5129
+       Pname   lookc(table::lookc203,5155
+       Pexpr   find_name(table::find_name204,5181
+       void    del(table::del205,5218
+extern bit Nold;210,5255
+extern bit vec_const,211,5272
+extern bit vec_const, fct_const;211,5272
+extern void restore(214,5313
+extern void set_scope(215,5336
+extern Plist modified_tn;216,5366
+extern Pbase start_cl(217,5392
+extern void end_cl(218,5434
+extern Pbase end_enum(219,5456
+extern bit new_type;224,5581
+extern Pname cl_obj_vec;225,5602
+extern Pname eobj;226,5627
+#define DEFINED 230,5655
+#define SIMPLIFIED 231,5712
+#define DEF_SEEN 232,5754
+#define IN_ERROR 234,5859
+struct type 236,5881
+       char*   signature(type::signature240,6005
+       void    print(type::print242,6043
+       void    dcl_print(type::dcl_print243,6058
+       void    base_print(type::base_print244,6082
+       void    del(type::del245,6102
+       Pname   is_cl_obj(type::is_cl_obj247,6116
+       int     is_ref(type::is_ref248,6158
+       void    dcl(type::dcl249,6173
+       int     tsizeof(type::tsizeof250,6192
+       bit     tconst(type::tconst251,6208
+       TOK     set_const(type::set_const252,6223
+       int     align(type::align253,6244
+       TOK     kind(type::kind254,6258
+       TOK     integral(type::integral255,6278
+       TOK     numeric(type::numeric256,6324
+       TOK     num_ptr(type::num_ptr257,6370
+       bit     vec_type(type::vec_type258,6416
+       bit     check(type::check259,6433
+       Ptype   deref(type::deref260,6457
+       Pptr    addrof(type::addrof261,6473
+struct enumdef 265,6500
+               enumdef(enumdef::enumdef269,6586
+       void    print(enumdef::print271,6641
+       void    dcl_print(enumdef::dcl_print272,6656
+       void    dcl(enumdef::dcl273,6680
+       void    simpl(enumdef::simpl274,6706
+struct classdef 278,6732
+       classdef(classdef::classdef301,7490
+       TOK     is_simple(classdef::is_simple302,7506
+       void    print(classdef::print304,7568
+       void    dcl_print(classdef::dcl_print305,7583
+       void    simpl(classdef::simpl306,7607
+       void    print_members(classdef::print_members308,7623
+       void    dcl(classdef::dcl309,7646
+       bit     has_friend(classdef::has_friend310,7672
+       bit     baseof(classdef::baseof311,7696
+       bit     baseof(classdef::baseof312,7716
+       Pname   has_oper(classdef::has_oper313,7737
+       Pname   has_ctor(classdef::has_ctor314,7759
+       Pname   has_dtor(classdef::has_dtor315,7813
+       Pname   has_itor(classdef::has_itor316,7867
+       Pname   has_ictor(classdef::has_ictor317,7902
+struct basetype 323,7935
+       basetype(basetype::basetype350,8636
+       Pbase   type_adj(basetype::type_adj352,8660
+       Pbase   base_adj(basetype::base_adj353,8682
+       Pbase   name_adj(basetype::name_adj354,8706
+       Pname   aggr(basetype::aggr355,8730
+       void    normalize(basetype::normalize356,8747
+       Pbase   check(basetype::check358,8779
+       void    dcl_print(basetype::dcl_print359,8800
+       Pbase   arit_conv(basetype::arit_conv360,8819
+struct fct 365,8857
+       fct(fct::fct387,9517
+       void    argdcl(fct::argdcl389,9543
+       Ptype   normalize(fct::normalize391,9583
+       void    dcl_print(fct::dcl_print392,9608
+       void    dcl(fct::dcl393,9627
+       Pexpr   base_init(fct::base_init394,9645
+       Pexpr   mem_init(fct::mem_init395,9685
+       bit     declared(fct::declared396,9724
+       void    simpl(fct::simpl397,9765
+       Pexpr   expand(fct::expand398,9780
+struct name_list 403,9827
+       name_list(name_list::name_list406,9866
+struct gen 410,9931
+               gen(gen::gen413,9996
+       Pname   add(gen::add414,10010
+       Pname   find(gen::find415,10034
+struct pvtyp 419,10071
+struct vec 423,10109
+       vec(vec::vec429,10182
+       Ptype   normalize(vec::normalize431,10253
+struct ptr 435,10289
+       ptr(ptr::ptr440,10419
+       Ptype   normalize(ptr::normalize442,10497
+inline Pptr type::addrof(447,10546
+extern bit vrp_equiv;449,10606
+extern Pexpr next_elem(461,10867
+extern void new_list(462,10893
+extern void list_check(463,10922
+extern Pexpr ref_init(464,10967
+extern Pexpr class_init(465,11009
+extern Pexpr check_cond(466,11060
+struct expr 469,11113
+       expr(expr::expr504,11716
+       ~expr(expr::~expr505,11742
+       void    del(expr::del507,11765
+       void    print(expr::print508,11778
+       Pexpr   typ(expr::typ509,11793
+       int     eval(expr::eval510,11813
+       int     lval(expr::lval511,11826
+       Ptype   fct_call(expr::fct_call512,11842
+       Pexpr   address(expr::address513,11867
+       Pexpr   contents(expr::contents514,11885
+       void    simpl(expr::simpl515,11904
+       Pexpr   expand(expr::expand516,11919
+       bit     not_simple(expr::not_simple517,11936
+       Pexpr   try_to_overload(expr::try_to_overload518,11955
+       Pexpr   docast(expr::docast519,11987
+       Pexpr   dovalue(expr::dovalue520,12010
+       Pexpr   donew(expr::donew521,12034
+       void    simpl_new(expr::simpl_new522,12056
+       void    simpl_delete(expr::simpl_delete523,12075
+struct texpr 527,12108
+       texpr(texpr::texpr528,12149
+struct ival 531,12218
+       ival(ival::ival532,12258
+struct call 535,12308
+       call(call::call536,12338
+       void    simpl(call::simpl538,12404
+       Pexpr   expand(call::expand539,12419
+struct qexpr 543,12453
+       qexpr(qexpr::qexpr544,12500
+struct ref 547,12582
+       ref(ref::ref548,12632
+struct text_expr 551,12697
+       text_expr(text_expr::text_expr552,12731
+struct name 557,12884
+       name(name::name585,13815
+       ~name(name::~name586,13832
+       Pname   normalize(name::normalize588,13843
+       Pname   tdef(name::tdef589,13881
+       Pname   tname(name::tname590,13896
+       void    hide(name::hide591,13915
+       void    unhide(name::unhide592,13929
+       Pname   dcl(name::dcl594,13981
+       int     no_of_names(name::no_of_names595,14005
+       void    use(name::use596,14025
+       void    assign(name::assign597,14053
+       void    take_addr(name::take_addr598,14069
+       void    check_oper(name::check_oper599,14108
+       void    simpl(name::simpl600,14133
+       void    del(name::del601,14148
+       void    print(name::print602,14161
+       void    dcl_print(name::dcl_print603,14176
+       void    field_align(name::field_align604,14198
+       Pname   dofct(name::dofct605,14219
+extern int friend_in_class;610,14269
+struct stmt 615,14374
+       stmt(stmt::stmt640,14757
+       ~stmt(stmt::~stmt641,14781
+       void    del(stmt::del643,14804
+       void    print(stmt::print644,14817
+       void    dcl(stmt::dcl645,14832
+       void    reached(stmt::reached646,14845
+       Pstmt   simpl(stmt::simpl647,14862
+       Pstmt   expand(stmt::expand648,14878
+       Pstmt   copy(stmt::copy649,14895
+extern char* Neval;654,14934
+extern Pname dcl_temp(655,14954
+extern char* temp(656,14992
+extern Ptable scope;657,15032
+extern Ptable expand_tbl;658,15053
+extern Pname expand_fn;659,15079
+struct estmt 662,15111
+       estmt(estmt::estmt669,15303
+struct ifstmt 672,15379
+       ifstmt(ifstmt::ifstmt676,15484
+struct lstmt 680,15586
+       lstmt(lstmt::lstmt686,15650
+struct forstmt 689,15728
+       forstmt(forstmt::forstmt690,15759
+struct block 694,15880
+       block(block::block695,15919
+       void    dcl(block::dcl697,16001
+       Pstmt   simpl(block::simpl698,16020
+struct pair 703,16060
+       pair(pair::pair704,16096
+struct nlist 708,16173
+               nlist(nlist::nlist711,16214
+       void    add(nlist::add712,16230
+       void    add_list(nlist::add_list713,16282
+extern Pname name_unlist(716,16309
+struct slist 718,16344
+               slist(slist::slist721,16385
+       void    add(slist::add722,16430
+extern Pstmt stmt_unlist(725,16486
+struct elist 727,16521
+               elist(elist::elist730,16562
+       void    add(elist::add731,16607
+extern Pexpr expr_unlist(734,16659
+extern class dcl_context * cc;737,16707
+struct dcl_context 739,16739
+       void    stack(dcl_context::stack747,17023
+       void    unstack(dcl_context::unstack748,17064
+#define MAXCONT        751,17095
+extern dcl_context ccvec[ccvec752,17114
+extern void yyerror(755,17157
+extern TOK back;756,17185
+extern char* line_format;760,17217
+extern Plist isf_list;762,17244
+extern Pstmt st_ilist;763,17267
+extern Pstmt st_dlist;764,17290
+extern Ptable sti_tbl;765,17313
+extern Ptable std_tbl;766,17336
+Pexpr try_to_coerce(767,17359
+extern bit can_coerce(768,17409
+extern Ptype np_promote(769,17446
+extern void new_key(770,17505
+extern Pname dcl_list;772,17544
+extern int over_call(773,17567
+extern Pname Nover;774,17603
+extern Pname Ntncheck;775,17623
+extern Pname Ncoerce;776,17646
+extern Nover_coerce;777,17668
+const MIA 779,17690
+struct iline 780,17705
+extern Pexpr curr_expr;789,17938
+extern Pin curr_icall;790,17962
+#define FUDGE111 791,17985
+extern Pstmt curr_loop;793,18007
+extern Pblock curr_block;794,18031
+extern Pstmt curr_switch;795,18057
+extern bit arg_err_suppress;796,18083
+extern loc last_line;797,18112
+extern no_of_undcl;799,18135
+extern no_of_badcall;800,18155
+extern Pname undcl,801,18177
+extern Pname undcl, badcall;801,18177
+extern int strlen(803,18207
+extern char* strcpy(804,18239
+extern int str_to_int(805,18280
+extern int c_strlen(806,18316
+extern int strcmp(809,18360
+extern Pname vec_new_fct;812,18419
+extern Pname vec_del_fct;813,18445
+extern int Nstd;815,18472
+extern int stcount;817,18555
+extern Pname find_hidden(819,18623
+Pexpr replace_temp(820,18656
+void make_res(821,18689
+Pexpr ptr_init(822,18710
+extern bit fake_sizeof;826,18755
+extern TOK lalex(828,18823
+extern fprintf(830,18856
+#define DB(831,18890
+#define DB(833,18920
+
+cp-src/burton.cpp,103
+::dummy::dummy test::dummy1(1,0
+::dummy::dummy test::dummy2(6,64
+::dummy::dummy test::dummy3(11,143
+
+cp-src/functions.cpp,807
+void Date::setDate 5,148
+void Date::plus 32,939
+void Date::minus 42,1229
+void Date::shift 52,1407
+Date & Date::operator = Date::operator =62,1628
+Date & Date::operator += Date::operator +=69,1789
+Date & Date::operator -= Date::operator -=78,1939
+Date & Date::operator ++ Date::operator ++87,2080
+Date & Date::operator -- Date::operator --96,2216
+int Date::operator - Date::operator -104,2331
+int Date::operator < Date::operator <112,2483
+int Date::operator > Date::operator >116,2557
+int Date::operator == Date::operator ==120,2631
+ostream& operator << operator <<124,2707
+istream& operator >> operator >>133,2943
+bool isLeap 159,3543
+bool isHoliday 163,3629
+void asort(173,3865
+void ReadVacation 186,4064
+void Debug 201,4523
+int WorkingDays(211,4867
+Date StartDay(226,5129
+
+cp-src/MDiagArray2.h,1538
+#define octave_MDiagArray2_h 29,870
+#undef LTGT35,967
+#define LTGT39,1031
+#define LTGT 42,1051
+class MDiagArray2;45,1087
+operator += operator +=48,1145
+operator -= operator -=51,1242
+operator * operator *54,1339
+operator / operator /57,1428
+operator * operator *60,1517
+operator + operator +63,1605
+operator - operator -66,1707
+product 69,1808
+operator - operator -72,1907
+class MDiagArray2 78,2022
+  MDiagArray2 MDiagArray2::MDiagArray282,2077
+  MDiagArray2 MDiagArray2::MDiagArray286,2154
+  MDiagArray2 MDiagArray2::MDiagArray287,2198
+  MDiagArray2 MDiagArray2::MDiagArray288,2254
+  MDiagArray2 MDiagArray2::MDiagArray289,2329
+  MDiagArray2 MDiagArray2::MDiagArray290,2387
+  MDiagArray2 MDiagArray2::MDiagArray291,2450
+  ~MDiagArray2 MDiagArray2::~MDiagArray293,2515
+  MDiagArray2<T>& operator = MDiagArray2::operator =95,2542
+      DiagArray2<T>::operator = MDiagArray2::operator =97,2603
+  operator MArray2<T> MDiagArray2::operator MArray2<T>101,2667
+  operator += MDiagArray2::operator +=116,2966
+  operator -= MDiagArray2::operator -=119,3057
+  friend MDiagArray2<T> operator * MDiagArray2::operator *123,3174
+  friend MDiagArray2<T> operator / MDiagArray2::operator /124,3253
+  friend MDiagArray2<T> operator * MDiagArray2::operator *128,3384
+  operator + MDiagArray2::operator +133,3544
+  operator - MDiagArray2::operator -136,3640
+  friend MDiagArray2<T> operator - MDiagArray2::operator -141,3803
+#undef LTGT144,3874
+#define INSTANTIATE_MDIAGARRAY_FRIENDS(146,3887
+
+cp-src/Pctest.h,658
+#define PCTEST_H24,837
+class TestRecord;42,1118
+    PctestActionValid,::PctestActionValid47,1286
+    PctestActionValidLasthop,::PctestActionValidLasthop49,1370
+    PctestActionFiltered,::PctestActionFiltered51,1481
+    PctestActionAbort  ::PctestActionAbort53,1566
+} PctestActionType;54,1616
+class Pctest 56,1637
+    Pctest(Pctest::Pctest59,1663
+    virtual ~Pctest(Pctest::~Pctest65,1813
+    virtual void TimeSyscall(Pctest::TimeSyscall68,1889
+    virtual char *GeneratePayload(Pctest::GeneratePayload71,1975
+    virtual char *GetTargetName(Pctest::GetTargetName77,2171
+    virtual PctestActionType GetAction(Pctest::GetAction86,2555
+
+cp-src/Range.h,965
+#define octave_Range_h 24,765
+class istream;30,840
+class ostream;31,855
+class Matrix;32,870
+Range35,891
+  Range Range::Range39,909
+  Range Range::Range42,995
+  Range Range::Range46,1130
+  Range Range::Range50,1248
+  double base Range::base54,1376
+  double limit Range::limit55,1425
+  double inc Range::inc56,1475
+  int nelem Range::nelem57,1523
+  bool all_elements_are_ints Range::all_elements_are_ints59,1571
+  Matrix matrix_value Range::matrix_value61,1615
+  double min Range::min63,1652
+  double max Range::max64,1679
+  void sort Range::sort66,1707
+  void set_base Range::set_base68,1728
+  void set_limit Range::set_limit69,1774
+  void set_inc Range::set_inc70,1821
+  friend ostream& operator << Range::operator <<72,1867
+  friend istream& operator >> Range::operator >>73,1928
+  void print_range Range::print_range75,1984
+  int nelem_internal Range::nelem_internal85,2099
+extern Range operator - operator -88,2138
+
+cp-src/screen.cpp,228
+unsigned char cursor_x,15,548
+unsigned char cursor_x, cursor_y;15,548
+static union REGS regs;16,582
+void goto_xy(18,607
+void hide_cursor(27,774
+void cursor_position(32,836
+void clear_screen(41,997
+void write_xyc(55,1247
+
+cp-src/screen.hpp,791
+#define __COLORS9,401
+enum COLORS 11,419
+    BLACK,COLORS::BLACK12,433
+    BLUE,COLORS::BLUE13,471
+    GREEN,COLORS::GREEN14,481
+    CYAN,COLORS::CYAN15,492
+    RED,COLORS::RED16,502
+    MAGENTA,COLORS::MAGENTA17,511
+    BROWN,COLORS::BROWN18,524
+    LIGHTGRAY,COLORS::LIGHTGRAY19,535
+    DARKGRAY,COLORS::DARKGRAY20,550
+    LIGHTBLUE,COLORS::LIGHTBLUE21,589
+    LIGHTGREEN,COLORS::LIGHTGREEN22,604
+    LIGHTCYAN,COLORS::LIGHTCYAN23,620
+    LIGHTRED,COLORS::LIGHTRED24,635
+    LIGHTMAGENTA,COLORS::LIGHTMAGENTA25,649
+    YELLOW,COLORS::YELLOW26,667
+    WHITECOLORS::WHITE27,679
+#define SCREEN_FP(31,700
+#define SCREEN_START 33,795
+void goto_xy(35,835
+void hide_cursor(36,883
+void cursor_position(37,907
+void clear_screen(38,935
+void write_xyc(39,960
+
+cp-src/conway.cpp,270
+#define max(12,357
+#define min(13,393
+const int num_rows 15,430
+const int num_columns 16,470
+class site *field_of_play[field_of_play18,499
+int site::total_surrounding(20,550
+void display(37,958
+void glider(50,1239
+void traffic_light(59,1478
+void main(67,1633
+
+cp-src/conway.hpp,331
+class site:site5,235
+    int total_surrounding(site::total_surrounding8,303
+    site(site::site10,344
+    ~site(site::~site11,397
+    char read(site::read12,410
+    void set(site::set13,444
+    void clear(site::clear14,478
+    void compute_next_state(site::compute_next_state15,514
+    void step(site::step22,717
+
+cp-src/clheir.cpp,307
+const int max_num_generic_objects 9,298
+generic_object * object_registry[object_registry10,340
+void init_registry(12,400
+void step_everybody(19,527
+void discrete_location::clear_neighbors(31,852
+generic_object::generic_object(36,981
+generic_object::~generic_object(48,1255
+void agent::move(53,1353
+
+cp-src/clheir.hpp,1152
+extern void init_registry(10,452
+extern void step_everybody(11,485
+class generic_object13,520
+    generic_object(generic_object::generic_object17,582
+    ~generic_object(generic_object::~generic_object19,724
+    virtual void compute_next_state(generic_object::compute_next_state21,842
+    virtual void step(generic_object::step22,888
+const int max_num_directions 31,1219
+class location:location33,1289
+    location(location::location43,1642
+    ~location(location::~location44,1661
+class irregular_location:irregular_location47,1686
+    irregular_location(irregular_location::irregular_location51,1762
+    ~irregular_location(irregular_location::~irregular_location53,1854
+class discrete_location:discrete_location56,1889
+    void clear_neighbors(discrete_location::clear_neighbors60,2004
+    discrete_location(discrete_location::discrete_location62,2044
+    ~discrete_location(discrete_location::~discrete_location65,2154
+    void assign_neighbor(discrete_location::assign_neighbor66,2184
+class agent:agent75,2508
+    agent(agent::agent79,2578
+    ~agent(agent::~agent80,2591
+    void move(agent::move81,2605
+
+cp-src/fail.C,386
+struct A 7,263
+          struct B A::B8,274
+                  struct C A::B::C9,289
+                          C(A::B::C::C11,318
+                          operator int(A::B::C::operator int12,342
+                  typedef C T;A::B::T14,389
+          typedef B T2;A::T216,414
+class String;20,437
+class A 23,453
+       class B A::B24,463
+               class C A::B::C25,474
+               int f(A::B::f26,488
+int A::B::f(31,521
+main(37,571
+       class D 41,622
+               D(D::D43,659
+
+el-src/TAGTEST.EL,148
+(foo::defmumble bletch 1,0
+(defalias 'pending-delete-mode pending-delete-mode5,102
+(defalias (quote explicitly-quoted-pending-delete-mode)8,175
+
+el-src/emacs/lisp/progmodes/etags.el,5188
+(defvar tags-file-name 34,1034
+(defgroup etags 43,1498
+(defcustom tags-case-fold-search 47,1566
+(defcustom tags-table-list 59,2051
+(defcustom tags-compression-info-list69,2449
+(defcustom tags-add-tables 88,3231
+(defcustom tags-revert-without-query 98,3627
+(defvar tags-table-computed-list 103,3778
+(defvar tags-table-computed-list-for 112,4262
+(defvar tags-table-list-pointer 117,4510
+(defvar tags-table-list-started-at 121,4701
+(defvar tags-table-set-list 124,4821
+(defcustom find-tag-hook 129,5000
+(defcustom find-tag-default-function 137,5263
+(define-obsolete-variable-alias 
'find-tag-marker-ring-lengthfind-tag-marker-ring-length145,5602
+(defcustom tags-tag-face 148,5699
+(defcustom tags-apropos-verbose 154,5834
+(defcustom tags-apropos-additional-actions 160,5998
+(defvaralias 'find-tag-marker-ring find-tag-marker-ring183,6917
+(defvar default-tags-table-function 189,7097
+(defvar tags-location-ring 194,7323
+(defvar tags-table-files 201,7599
+(defvar tags-completion-table 206,7766
+(defvar tags-included-tables 209,7858
+(defvar next-file-list 212,7953
+(defvar tags-table-format-functions 217,8059
+(defvar file-of-tag-function 224,8440
+(defvar tags-table-files-function 228,8634
+(defvar tags-completion-table-function 230,8745
+(defvar snarf-tag-function 232,8840
+(defvar goto-tag-location-function 236,9049
+(defvar find-tag-regexp-search-function 239,9222
+(defvar find-tag-regexp-tag-order 241,9343
+(defvar find-tag-regexp-next-line-after-failure-p 243,9452
+(defvar find-tag-search-function 245,9572
+(defvar find-tag-tag-order 247,9679
+(defvar find-tag-next-line-after-failure-p 249,9774
+(defvar list-tags-function 251,9880
+(defvar tags-apropos-function 253,9968
+(defvar tags-included-tables-function 255,10062
+(defvar verify-tags-table-function 257,10181
+(defun initialize-new-tags-table 260,10292
+(defun tags-table-mode 276,10980
+(defun visit-tags-table 285,11245
+(defun tags-table-check-computed-list 321,12783
+(defun tags-table-extend-computed-list 360,14654
+(defun tags-expand-table-name 400,16367
+(defun tags-table-list-member 409,16710
+(defun tags-verify-table 421,17182
+(defun tags-table-including 470,19302
+(defun tags-next-table 522,21346
+(defun visit-tags-table-buffer 543,22203
+(defun tags-reset-tags-tables 712,28513
+(defun file-of-tag 731,29170
+(defun tags-table-files 740,29519
+(defun tags-included-tables 749,29869
+(defun tags-completion-table 755,30115
+(defun tags-lazy-completion-table 783,31309
+(defun tags-completion-at-point-function 799,31944
+(defun find-tag-tag 818,32694
+(defvar last-tag 837,33367
+(defun find-tag-interactive 840,33426
+(defvar find-tag-history 852,33841
+(defvar etags-case-fold-search)855,33906
+(defvar etags-syntax-table)856,33938
+(defvar local-find-tag-hook)857,33966
+(defun find-tag-noselect 860,34011
+(defun find-tag 932,37125
+(defun find-tag-other-window 959,38341
+(defun find-tag-other-frame 1000,40269
+(defun find-tag-regexp 1025,41443
+(defalias 'pop-tag-mark pop-tag-mark1049,42605
+(defvar tag-lines-already-matched 1052,42656
+(defun find-tag-in-order 1055,42763
+(defun tag-find-file-of-tag-noselect 1167,47109
+(defun tag-find-file-of-tag 1200,48955
+(defun etags-recognize-tags-table 1208,49181
+(defun etags-verify-tags-table 1241,50812
+(defun etags-file-of-tag 1246,51010
+(defun etags-tags-completion-table 1256,51345
+(defun etags-snarf-tag 1286,52551
+(defun etags-goto-tag-location 1324,54120
+(defun etags-list-tags 1388,56563
+(defmacro tags-with-face 1423,57838
+(defun etags-tags-apropos-additional 1431,58171
+(defun etags-tags-apropos 1465,59408
+(defun etags-tags-table-files 1527,61617
+(defun etags-tags-included-tables 1542,62053
+(defun tags-recognize-empty-tags-table 1559,62593
+(defun tag-exact-file-name-match-p 1587,63739
+(defun tag-file-name-match-p 1596,64132
+(defun tag-exact-match-p 1609,64688
+(defun tag-implicit-name-match-p 1620,65256
+(defun tag-symbol-match-p 1633,65856
+(defun tag-word-match-p 1643,66292
+(defun tag-partial-file-name-match-p 1652,66690
+(defun tag-any-match-p 1662,67134
+(defun tag-re-match-p 1667,67318
+(defcustom tags-loop-revert-buffers 1675,67567
+(defun next-file 1685,67976
+(defvar tags-loop-operate 1760,70890
+(defvar tags-loop-scan1763,70984
+(defun tags-loop-eval 1771,71314
+(defun tags-loop-continue 1782,71643
+(defun tags-search 1850,73949
+(defun tags-query-replace 1871,74775
+(defun tags-complete-tags-table-file 1896,75999
+(defun list-tags 1906,76378
+(defun tags-apropos 1934,77331
+(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78157
+(defun select-tags-table 1964,78396
+(defvar select-tags-table-mode-map 2019,80523
+(define-derived-mode select-tags-table-mode 2030,80906
+(defun select-tags-table-select 2034,81090
+(defun select-tags-table-quit 2043,81456
+(defun complete-tag 2049,81611
+(defconst etags--xref-limit 2074,82552
+(defvar etags-xref-find-definitions-tag-order 2076,82587
+(defun etags-xref-find 2082,82877
+(defun etags--xref-find-definitions 2096,83406
+(defclass xref-etags-location 2129,85121
+(defun xref-make-etags-location 2135,85344
+(cl-defmethod xref-location-marker 2139,85499
+(cl-defmethod xref-location-line 2146,85743
+
+erl-src/gs_dialog.erl,98
+-define(VERSION2,32
+behaviour_info(51,2177
+show(124,5458
+dialog_loop(219,9529
+test(252,10806
+
+erl-src/lines.erl,386
+-define(BREAK66,2377
+-define(dbg68,2437
+new(73,2565
+count(80,2686
+nth(87,2815
+append(104,3301
+replace(119,3816
+insert(138,4559
+insert_after(165,5501
+delete(192,6456
+convert_to_list(215,7110
+convert_from_list(220,7259
+replace_nth(229,7518
+insert_nth(234,7618
+insert_after_nth(239,7711
+delete_nth(244,7828
+split_at(252,8027
+balance_left(267,8451
+balance_right(282,8865
+
+erl-src/lists.erl,593
+member(21,663
+append(30,790
+reverse(48,1099
+nth(59,1310
+nthtail(64,1382
+prefix(73,1546
+suffix(83,1707
+last(92,1882
+seq(101,2058
+sum(109,2265
+duplicate(116,2432
+min(124,2628
+max(132,2837
+sublist(141,3083
+delete(152,3329
+sort(161,3483
+split_and_sort(165,3559
+merge(175,3811
+concat(190,4219
+thing_to_list(195,4300
+flatten(204,4606
+flat_length(222,5003
+keymember(239,5451
+keysearch(246,5609
+keydelete(253,5770
+keyreplace(260,5923
+keysort(266,6113
+split_and_keysort(270,6229
+keymerge(277,6504
+keymap(288,6851
+map(311,7829
+foldl(315,7919
+foldr(320,8037
+zf(325,8155
+
+f-src/entry.for,172
+      LOGICAL FUNCTION PRTPKG 3,75
+       ENTRY  SETPRT 194,3866
+       ENTRY  MSGSEL 395,8478
+     & intensity1(577,12231
+       character*(*) function foo(579,12307
+
+f-src/entry.strange_suffix,172
+      LOGICAL FUNCTION PRTPKG 3,75
+       ENTRY  SETPRT 194,3866
+       ENTRY  MSGSEL 395,8478
+     & intensity1(577,12231
+       character*(*) function foo(579,12307
+
+f-src/entry.strange,103
+       ENTRY  MSGSEL 193,4382
+     & intensity1(375,8135
+       character*(*) function foo(377,8211
+
+forth-src/test-forth.fth,408
+: a-forth-word 20,301
+99 constant a-forth-constant!22,343
+55 value a-forth-value?23,373
+create :a-forth-dictionary-entry24,397
+defer #a-defer-word27,460
+: (another-forth-word)(another-forth-word29,481
+   9   field   >field136,582
+   5   field   >field237,605
+constant (a-forth-constant(a-forth-constant38,628
+2000 buffer: #some-storage41,657
+code assemby-code-word 43,685
+: a-forth-word 50,870
+
+html-src/softwarelibero.html,198
+Cos'� il software libero?4,38
+Licenze d'uso di un programmalicenze65,2474
+Sfatiamo alcuni miti138,6064
+Il movimento open sourceoss191,7968
+Impatto pratico del software liberoimpatto231,9986
+
+html-src/index.shtml,104
+&nbsp;8,281
+In evidenza15,446
+Comunicati e iniziative32,974
+Ultime notizie dall'associazione63,2027
+
+html-src/algrthms.html,467
+Tutorial on Convolutional Coding with Viterbi Decoding--Description of the 
Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and 
Quantizing Algorithms7,276
+Descriptionalgorithms10,477
+Generating the Datagenalgorithm48,1953
+Convolutionallyconalgorithm55,2463
+Nextstatetable262,11331
+Outputoutputtable350,13571
+Mapping the Channel Symbolsmapping433,15786
+Adding Noise to theaddnoise439,16174
+Quantizing the Receivedquantizing469,18637
+
+html-src/software.html,438
+Francesco Potort� Software Page9,280
+Software that I wrote for supporting my research activitysimulation36,1400
+MTGmtg41,1484
+Fracasfracas65,2626
+GaliLEOgalileo101,4234
+Leasqrleasqr114,4679
+Free software that I wrote for the GNU project or for my personal or 
workgnu142,6067
+Etagsetags148,6182
+checkiso161,6731
+cgrep178,7549
+debian-bug.eldebian-bug190,7981
+tcpdump205,8566
+Links to interesting softwarelinks216,8893
+
+java-src/AWTEMul.java,4356
+public class AWTEventMulticaster 63,2111
+    protected 
AWTEventMulticaster(AWTEventMulticaster.AWTEventMulticaster77,2555
+    protected EventListener remove(AWTEventMulticaster.remove86,2820
+    public void componentResized(AWTEventMulticaster.componentResized102,3294
+    public void componentMoved(AWTEventMulticaster.componentMoved112,3626
+    public void componentShown(AWTEventMulticaster.componentShown122,3952
+    public void componentHidden(AWTEventMulticaster.componentHidden132,4280
+    public void componentAdded(AWTEventMulticaster.componentAdded142,4619
+    public void componentRemoved(AWTEventMulticaster.componentRemoved152,4959
+    public void focusGained(AWTEventMulticaster.focusGained162,5281
+    public void focusLost(AWTEventMulticaster.focusLost172,5572
+    public void keyTyped(AWTEventMulticaster.keyTyped182,5853
+    public void keyPressed(AWTEventMulticaster.keyPressed192,6129
+    public void keyReleased(AWTEventMulticaster.keyReleased202,6413
+    public void mouseClicked(AWTEventMulticaster.mouseClicked212,6704
+    public void mousePressed(AWTEventMulticaster.mousePressed222,7004
+    public void mouseReleased(AWTEventMulticaster.mouseReleased232,7306
+    public void mouseEntered(AWTEventMulticaster.mouseEntered242,7609
+    public void mouseExited(AWTEventMulticaster.mouseExited252,7907
+    public void mouseDragged(AWTEventMulticaster.mouseDragged262,8204
+    public void mouseMoved(AWTEventMulticaster.mouseMoved272,8512
+    public void windowOpened(AWTEventMulticaster.windowOpened282,8819
+    public void windowClosing(AWTEventMulticaster.windowClosing292,9125
+    public void windowClosed(AWTEventMulticaster.windowClosed302,9432
+    public void windowIconified(AWTEventMulticaster.windowIconified312,9742
+    public void 
windowDeiconified(AWTEventMulticaster.windowDeiconified322,10064
+    public void windowActivated(AWTEventMulticaster.windowActivated332,10389
+    public void 
windowDeactivated(AWTEventMulticaster.windowDeactivated342,10712
+    public void actionPerformed(AWTEventMulticaster.actionPerformed352,11037
+    public void 
itemStateChanged(AWTEventMulticaster.itemStateChanged362,11356
+    public void 
adjustmentValueChanged(AWTEventMulticaster.adjustmentValueChanged372,11690
+    public void 
textValueChanged(AWTEventMulticaster.textValueChanged376,11874
+    public static ComponentListener add(AWTEventMulticaster.add387,12225
+    public static ContainerListener add(AWTEventMulticaster.add397,12571
+    public static FocusListener add(AWTEventMulticaster.add407,12901
+    public static KeyListener add(AWTEventMulticaster.add417,13207
+    public static MouseListener add(AWTEventMulticaster.add427,13513
+    public static MouseMotionListener add(AWTEventMulticaster.add437,13855
+    public static WindowListener add(AWTEventMulticaster.add447,14197
+    public static ActionListener add(AWTEventMulticaster.add457,14519
+    public static ItemListener add(AWTEventMulticaster.add467,14833
+    public static AdjustmentListener add(AWTEventMulticaster.add477,15163
+    public static TextListener add(AWTEventMulticaster.add480,15310
+    public static ComponentListener 
remove(AWTEventMulticaster.remove490,15664
+    public static ContainerListener 
remove(AWTEventMulticaster.remove500,16044
+    public static FocusListener remove(AWTEventMulticaster.remove510,16408
+    public static KeyListener remove(AWTEventMulticaster.remove520,16748
+    public static MouseListener remove(AWTEventMulticaster.remove530,17088
+    public static MouseMotionListener 
remove(AWTEventMulticaster.remove540,17465
+    public static WindowListener remove(AWTEventMulticaster.remove550,17841
+    public static ActionListener remove(AWTEventMulticaster.remove560,18197
+    public static ItemListener remove(AWTEventMulticaster.remove570,18545
+    public static AdjustmentListener 
remove(AWTEventMulticaster.remove580,18909
+    public static TextListener remove(AWTEventMulticaster.remove583,19062
+    protected static EventListener 
addInternal(AWTEventMulticaster.addInternal597,19608
+    protected static EventListener 
removeInternal(AWTEventMulticaster.removeInternal614,20244
+    protected void saveInternal(AWTEventMulticaster.saveInternal628,20582
+    static void save(AWTEventMulticaster.save646,21131
+
+java-src/KeyEve.java,698
+public class KeyEvent 36,1075
+    public KeyEvent(KeyEvent.KeyEvent234,9912
+    public KeyEvent(KeyEvent.KeyEvent252,10510
+    public int getKeyCode(KeyEvent.getKeyCode261,10836
+    public void setKeyCode(KeyEvent.setKeyCode265,10897
+    public void setKeyChar(KeyEvent.setKeyChar269,10978
+    public void setModifiers(KeyEvent.setModifiers273,11060
+    public char getKeyChar(KeyEvent.getKeyChar282,11331
+    public static String getKeyText(KeyEvent.getKeyText290,11561
+    public static String 
getKeyModifiersText(KeyEvent.getKeyModifiersText377,16662
+    public boolean isActionKey(KeyEvent.isActionKey403,17618
+    public String paramString(KeyEvent.paramString407,17704
+
+java-src/SMan.java,5533
+class SecurityManager 80,3387
+    public boolean getInCheck(SecurityManager.getInCheck101,4075
+    protected SecurityManager(SecurityManager.SecurityManager114,4497
+    protected native Class[] 
getClassContext(SecurityManager.getClassContext130,5038
+    protected native ClassLoader 
currentClassLoader(SecurityManager.currentClassLoader142,5529
+    protected Class 
currentLoadedClass(SecurityManager.currentLoadedClass149,5707
+    protected native int classDepth(SecurityManager.classDepth162,6167
+    protected native int 
classLoaderDepth(SecurityManager.classLoaderDepth174,6668
+    protected boolean inClass(SecurityManager.inClass184,7034
+    protected boolean inClassLoader(SecurityManager.inClassLoader196,7372
+    public Object 
getSecurityContext(SecurityManager.getSecurityContext221,8485
+    public void 
checkCreateClassLoader(SecurityManager.checkCreateClassLoader238,9069
+    public void checkAccess(SecurityManager.checkAccess268,10298
+    public void checkAccess(SecurityManager.checkAccess298,11632
+    public void checkExit(SecurityManager.checkExit323,12649
+    public void checkExec(SecurityManager.checkExec349,13734
+    public void checkLink(SecurityManager.checkLink375,14813
+    public void checkRead(SecurityManager.checkRead394,15485
+    public void checkRead(SecurityManager.checkRead412,16111
+    public void checkRead(SecurityManager.checkRead434,17017
+    public void checkWrite(SecurityManager.checkWrite453,17706
+    public void checkWrite(SecurityManager.checkWrite471,18337
+    public void checkDelete(SecurityManager.checkDelete493,19165
+    public void checkConnect(SecurityManager.checkConnect517,20119
+    public void checkConnect(SecurityManager.checkConnect543,21254
+    public void checkListen(SecurityManager.checkListen561,21910
+    public void checkAccept(SecurityManager.checkAccept585,22887
+    public void checkMulticast(SecurityManager.checkMulticast597,23272
+    public void checkMulticast(SecurityManager.checkMulticast610,23732
+    public void 
checkPropertiesAccess(SecurityManager.checkPropertiesAccess632,24609
+    public void 
checkPropertyAccess(SecurityManager.checkPropertyAccess654,25449
+    public boolean 
checkTopLevelWindow(SecurityManager.checkTopLevelWindow680,26580
+    public void 
checkPrintJobAccess(SecurityManager.checkPrintJobAccess689,26763
+    public void 
checkSystemClipboardAccess(SecurityManager.checkSystemClipboardAccess698,26958
+    public void 
checkAwtEventQueueAccess(SecurityManager.checkAwtEventQueueAccess707,27159
+    public void 
checkPackageAccess(SecurityManager.checkPackageAccess729,27966
+    public void 
checkPackageDefinition(SecurityManager.checkPackageDefinition751,28803
+    public void checkSetFactory(SecurityManager.checkSetFactory775,29929
+    public void checkMemberAccess(SecurityManager.checkMemberAccess786,30209
+    public void 
checkSecurityAccess(SecurityManager.checkSecurityAccess796,30430
+    private native Class 
currentLoadedClass0(SecurityManager.currentLoadedClass0800,30522
+    public ThreadGroup getThreadGroup(SecurityManager.getThreadGroup811,30923
+class NullSecurityManager 817,31025
+    public void 
checkCreateClassLoader(NullSecurityManager.checkCreateClassLoader818,31077
+    public void checkAccess(NullSecurityManager.checkAccess819,31123
+    public void checkAccess(NullSecurityManager.checkAccess820,31165
+    public void checkExit(NullSecurityManager.checkExit821,31212
+    public void checkExec(NullSecurityManager.checkExec822,31254
+    public void checkLink(NullSecurityManager.checkLink823,31296
+    public void checkRead(NullSecurityManager.checkRead824,31338
+    public void checkRead(NullSecurityManager.checkRead825,31387
+    public void checkRead(NullSecurityManager.checkRead826,31430
+    public void checkWrite(NullSecurityManager.checkWrite827,31489
+    public void checkWrite(NullSecurityManager.checkWrite828,31539
+    public void checkDelete(NullSecurityManager.checkDelete829,31583
+    public void checkConnect(NullSecurityManager.checkConnect830,31628
+    public void checkConnect(NullSecurityManager.checkConnect831,31684
+    public void checkListen(NullSecurityManager.checkListen832,31756
+    public void checkAccept(NullSecurityManager.checkAccept833,31798
+    public void checkMulticast(NullSecurityManager.checkMulticast834,31853
+    public void checkMulticast(NullSecurityManager.checkMulticast835,31907
+    public void 
checkPropertiesAccess(NullSecurityManager.checkPropertiesAccess836,31971
+    public void 
checkPropertyAccess(NullSecurityManager.checkPropertyAccess837,32015
+    public void 
checkPropertyAccess(NullSecurityManager.checkPropertyAccess838,32067
+    public boolean 
checkTopLevelWindow(NullSecurityManager.checkTopLevelWindow839,32131
+    public void 
checkPrintJobAccess(NullSecurityManager.checkPrintJobAccess840,32202
+    public void 
checkSystemClipboardAccess(NullSecurityManager.checkSystemClipboardAccess841,32244
+    public void 
checkAwtEventQueueAccess(NullSecurityManager.checkAwtEventQueueAccess842,32293
+    public void 
checkPackageAccess(NullSecurityManager.checkPackageAccess843,32340
+    public void 
checkPackageDefinition(NullSecurityManager.checkPackageDefinition844,32391
+    public void checkSetFactory(NullSecurityManager.checkSetFactory845,32446
+    public void 
checkMemberAccess(NullSecurityManager.checkMemberAccess846,32484
+    public void 
checkSecurityAccess(NullSecurityManager.checkSecurityAccess847,32546
+
+java-src/SysCol.java,336
+public final class SystemColor 37,1402
+    static SystemColor.static342,10478
+    private static void 
updateSystemColors(SystemColor.updateSystemColors349,10617
+    private SystemColor(SystemColor.SystemColor357,10885
+    public int getRGB(SystemColor.getRGB370,11245
+    public String toString(SystemColor.toString377,11388
+
+java-src/TG.java,2041
+class ThreadGroup 54,2104
+    private ThreadGroup(ThreadGroup.ThreadGroup72,2495
+    public ThreadGroup(ThreadGroup.ThreadGroup84,2848
+    public ThreadGroup(ThreadGroup.ThreadGroup105,3714
+    public final String getName(ThreadGroup.getName124,4189
+    public final ThreadGroup getParent(ThreadGroup.getParent135,4492
+    public final int getMaxPriority(ThreadGroup.getMaxPriority148,4867
+    public final boolean isDaemon(ThreadGroup.isDaemon161,5305
+    public synchronized boolean isDestroyed(ThreadGroup.isDestroyed170,5470
+    public final void setDaemon(ThreadGroup.setDaemon192,6368
+    public final void setMaxPriority(ThreadGroup.setMaxPriority213,7110
+    public final boolean parentOf(ThreadGroup.parentOf246,8106
+    public final void checkAccess(ThreadGroup.checkAccess268,8834
+    public int activeCount(ThreadGroup.activeCount283,9286
+    public int enumerate(ThreadGroup.enumerate322,10497
+    public int enumerate(ThreadGroup.enumerate344,11481
+    private int enumerate(ThreadGroup.enumerate348,11584
+    public int activeGroupCount(ThreadGroup.activeGroupCount389,12588
+    public int enumerate(ThreadGroup.enumerate425,13727
+    public int enumerate(ThreadGroup.enumerate445,14595
+    private int enumerate(ThreadGroup.enumerate449,14703
+    public final void stop(ThreadGroup.stop499,16212
+    public final void suspend(ThreadGroup.suspend537,17477
+    public final void resume(ThreadGroup.resume575,18749
+    public final void destroy(ThreadGroup.destroy607,19779
+    private final void add(ThreadGroup.add643,20704
+    private void remove(ThreadGroup.remove668,21402
+    void add(ThreadGroup.add697,22142
+    void remove(ThreadGroup.remove722,22808
+    public void list(ThreadGroup.list751,23503
+    void list(ThreadGroup.list754,23556
+    public void uncaughtException(ThreadGroup.uncaughtException810,25512
+    public boolean 
allowThreadSuspension(ThreadGroup.allowThreadSuspension823,25823
+    public String toString(ThreadGroup.toString837,26142
+
+lua-src/allegro.lua,400
+local function get_layer_by_name 7,175
+local function count_layers 33,621
+function GetLayerByName 54,980
+function GetUniqueLayerName 65,1204
+function SelectLayer 76,1415
+function NewLayer 86,1773
+function NewLayerSet 144,3226
+function RemoveLayer 170,3750
+function MoveLayerTop 211,4767
+function MoveLayerBottom 223,5079
+function MoveLayerBefore 236,5457
+function MoveLayerAfter 258,6090
+
+make-src/Makefile,1156
+LATEST=1,0
+NONSRCS=35,1578
+CPPFLAGS=49,2191
+LDFLAGS=50,2260
+FASTCFLAGS=55,2531
+FILTER=58,2642
+       @-$($72,3064
+       @-$($73,3113
+       @-$($74,3177
+       @-$($75,3223
+       @-$($76,3291
+       @-$($77,3383
+       @$(81,3466
+       @$(82,3514
+       @$(83,3577
+       @$(84,3622
+       @$(85,3689
+       @$(86,3780
+${CHECKOBJS}: CFLAGS=88,3806
+       @env CHECKEROPTS=92,3922
+       @$(98,4094
+       @$(106,4250
+       @$(110,4374
+       @$(114,4500
+       @for i in $(140,5315
+       @for i in $(SRCS); do echo $$i;140,5315
+       $(160,6053
+       $(163,6114
+       $(166,6177
+       $(169,6228
+       $(172,6317
+       sdiff --suppress-common-lines --width=width186,6614
+       sdiff --suppress-common-lines --width=width189,6703
+       sdiff --suppress-common-lines --width=width192,6791
+       sdiff --suppress-common-lines --width=width195,6880
+       TEXTAGS=204,7122
+       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* 
--regex=regex204,7122
+       ${RUN} etags12 --members -o $@ --regex=regex207,7239
+       ${RUN} ./ctags -o $@ --regex=regex213,7388
+       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=regex216,7464
+       TEXTAGS=219,7583
+       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ 
--regex=regex219,7583
+       ${RUN} ./extags -e --regex-c=c222,7710
+
+objc-src/Subprocess.h,98
+#define Subprocess 41,1217
+#define BUFFERSIZE 43,1267
address@hidden Subprocess:Subprocess45,1292
+
+objc-src/Subprocess.m,505
+#define        PTY_TEMPLATE 20,494
+#define        PTY_LENGTH 21,528
+static void showError(23,551
address@hidden Subprocess(Private)Subprocess(Private)32,737
+- childDidExit39,851
+- fdHandler:67,1589
+showError 98,2360
+fdHandler 112,2785
+getptys 119,2907
+- init:183,4815
+    andStdErr:init:withDelegate:andPtySupport:andStdErr:197,5147
+- send:(const char *)string withNewline:send:withNewline:300,7436
+- send:308,7599
+- terminateInput314,7689
+- terminate:321,7810
+- setDelegate:332,7961
+- delegate338,8031
+
+objc-src/PackInsp.h,109
+#define NUMSTATS       36,1101
+#define TYPESTOSTAT    37,1120
address@hidden PackageInspector:PackageInspector39,1172
+
+objc-src/PackInsp.m,1360
+static const char RCSid[RCSid30,1032
+#define VERSION        34,1116
+#   define DEBUG 37,1155
+#define LISTCONTENTS   39,1181
+#define OPENBUTTON     47,1352
+#define LISTCONTENTSBUTTON     48,1449
+#define LISTDESCRIPTIONBUTTON  49,1562
+#define STATE_UNINSTALLED      52,1687
+#define STATE_INSTALLED        53,1807
+#define STATE_COMPRESSD        54,1948
+#define SIZEFORMAT     57,2152
+#define KBYTES 58,2362
+#define MBYTES 59,2473
+#define LOCALIZE(61,2585
+#define LOCALIZE_ARCH(62,2668
++newnew67,2802
+-showInfo:showInfo:93,3417
+-revert:revert:107,3737
+-ok:ok:136,4297
+-loadload143,4424
+#define LOOKUP(156,4826
+#undef LOOKUP176,5694
+-loadKeyValuesFrom:(const char *)type 
inTable:loadKeyValuesFrom:inTable:186,5852
+-loadContentsOf:(const char *)type inTable:loadContentsOf:inTable:238,7079
+-loadImageloadImage257,7552
+#define STAT_EQ(275,7940
+-(BOOL)shouldLoad280,8116
+-toggleDescriptiontoggleDescription301,8626
+-(const char *)getPath:(char *)buf forType:getPath:forType:317,8899
+-setRevertButtonTitlesetRevertButtonTitle333,9320
+-(const char *)formatSize:(const char *)size inBuf:formatSize:inBuf:344,9525
+#define WORKING        368,10045
+-(void)getArchs370,10100
+-(void)addArchs:385,10520
+-subprocess:(Subprocess *)sender output:subprocess:output:428,11351
+-subprocessDone:subprocessDone:436,11484
+static void openInWorkspace(446,11634
+-open:open:464,12063
+
+objcpp-src/SimpleCalc.H,41
address@hidden SimpleCalc:SimpleCalc14,400
+
+objcpp-src/SimpleCalc.M,300
+- init52,1747
+- appendToDisplay:60,1933
+- registerAction:70,2210
+- decimalKey:77,2348
+- numberKeys:91,2661
+- equalsKey:112,3192
+- operationKeys:131,3680
+- clearKey:153,4301
+- clearAllKey:160,4410
+- appDidInit:168,4591
+- windowWillClose:178,4882
+- infoPanel:186,5132
+- helpPanel:198,5482
+
+pas-src/common.pas,1875
+procedure InitializeStringPackage;26,527
+function newtextstring;34,874
+procedure disposetextstring;52,1404
+function ConcatT;78,2066
+function AppendTextString;112,3238
+function CopyTextString;132,3947
+procedure CONVERT_CHARSTRING_TO_VALUE;151,4505
+procedure append_string;172,5166
+function To_Upper;186,5462
+function To_Lower;194,5617
+function EmptyNmStr(209,6213
+function chartonmstr;219,6436
+function LowerCaseNmStr;230,6682
+function concatenatenamestrings;242,7007
+procedure writenamestring;263,7517
+function IsControlChar;277,7928
+function namestringequal;283,8079
+function NameStringLess;302,8539
+function IsControlCharName(343,9710
+function SubString;358,10208
+function SkipChars;379,10791
+function RemoveUnderlineControl;397,11311
+procedure First100Chars;427,12162
+procedure SkipSpaces;462,13298
+function SkipBlanks;477,13782
+function stripname;505,14595
+function Locate;522,15039
+function NameHasChar;543,15581
+function integertonmstr;561,16134
+function NmStrToInteger;585,16901
+function AddNullToNmStr;600,17317
+function ValToNmStr;611,17585
+function ChangeFileType;625,18037
+function StripPath;647,18734
+function ReprOfChar;675,19343
+procedure ExtractCommentInfo;702,20749
+procedure INSERT_TREE_NODE;784,24053
+function GetNameList;920,27926
+procedure DisposeANameList(925,28010
+procedure DisposeNameList;938,28340
+function GetNewNameListNode;943,28409
+function insertname;972,29051
+procedure InitNameList;988,29471
+procedure InitNameStringPool;998,29767
+procedure NewNameString;1004,29867
+procedure ReleaseNameString;1022,30232
+procedure SDTrefStringToRec 1045,30741
+procedure SDTrefSkipSpaces;1059,31092
+function SDTrefIsEnd 1070,31323
+function SDTrefGetInteger 1082,31529
+procedure SDTrefRecToString 1303,37546
+function NmStrToErrStr;1497,42305
+function ErrStrToNmStr;1509,42557
+function GetTextRef;1529,43112
+
+php-src/lce_functions.php,2152
+  define("LCE_FUNCTIONS"LCE_FUNCTIONS4,38
+  define("LCE_UNKNOWN"LCE_UNKNOWN9,145
+  define("LCE_WS"LCE_WS11,194
+  define("LCE_COMMENT"LCE_COMMENT13,244
+  define("LCE_COMMENT_USER"LCE_COMMENT_USER15,303
+  define("LCE_COMMENT_TOOL"LCE_COMMENT_TOOL17,366
+  define("LCE_MSGID"LCE_MSGID19,430
+  define("LCE_MSGSTR"LCE_MSGSTR21,488
+  define("LCE_TEXT"LCE_TEXT23,541
+  define("STATE_ABORT"STATE_ABORT25,567
+  define("STATE_OK"STATE_OK26,595
+  define("STATE_LOOP"STATE_LOOP27,620
+  class POEntryAD 29,648
+      function validate(31,683
+      function checkQuotation(59,1384
+  class CommentAD 70,1639
+      function CommentAD(73,1693
+      function validate(83,1944
+  class POEntry 105,2410
+      function POEntry(119,2711
+      function lineCount(135,3255
+      function serializeToVars(141,3365
+      function write(151,3800
+  class POReader 163,4178
+      function gettext(177,4457
+      function parseFromVars(189,4705
+      function serializeToVars(215,5331
+      function POReader(229,5613
+      function read(243,5983
+      function write(259,6307
+      function isComment(277,6645
+      function comment(284,6822
+      function msgid(304,7247
+      function msgstr(320,7574
+      function start(340,8232
+      function createPOEntries(360,8644
+      function stripLine(394,9472
+      function printClassification(421,10056
+      function classifyLine(432,10301
+  function getTextDomains(471,11094
+  class PORManager 498,11756
+      function PORManager(502,11822
+      function addPOReader(507,11896
+      function &getPOReader(getPOReader512,11992
+      function getDomainNames(517,12081
+  function &loadPORManager(loadPORManager523,12174
+  function fileJoin(536,12436
+      function lce_bindtextdomain(557,12839
+      function lce_textdomain(614,14530
+      function lce_gettext(620,14641
+      function lce_dgettext(626,14767
+      function lce(634,14966
+      function lce_bindtextdomain(651,15488
+      function lce_textdomain(656,15592
+      function lce_gettext(661,15674
+      function lce_dgettext(666,15755
+      function lce(670,15855
+  function lce_geteditcode(676,15898
+
+php-src/ptest.php,46
+define("TEST"TEST1,0
+test 4,26
+foo(16,200
+
+perl-src/htlmify-cystic,1443
+my @section_name;section_name12,236
+my @appendix_name;appendix_name13,254
+my @section_toc;section_toc15,274
+my @appendix_toc;appendix_toc16,291
+my $new_tag new_tag18,310
+my $appendix;appendix24,409
+my $section;section25,423
+my $subsection;subsection26,436
+my $subsubsection;subsubsection27,452
+my $this_file_toc this_file_toc29,472
+my %file_tocs;file_tocs30,496
+my @output_files output_files32,512
+my $file_index file_index33,535
+my $output_file;output_file35,556
+my $line;line37,574
+my $subsection_marker;subsection_marker161,3883
+my $new;new163,3907
+sub read_toc main::read_toc165,3917
+         my $entry entry218,5621
+         my $entry entry234,6077
+             my $entry entry245,6351
+         my $entry entry252,6536
+         my $entry entry268,7010
+             my $entry entry276,7204
+         my $entry entry281,7328
+      my $entry entry296,7698
+sub finish_subsubsections main::finish_subsubsections302,7805
+sub finish_subsections main::finish_subsections309,7987
+sub finish_sections main::finish_sections320,8310
+sub finish_appendices main::finish_appendices331,8599
+sub section_url_base main::section_url_base337,8724
+sub section_url_name main::section_url_name342,8922
+sub section_url main::section_url355,9284
+  my $name name357,9336
+sub section_href main::section_href364,9452
+sub section_name main::section_name368,9551
+sub toc_line main::toc_line372,9655
+sub file_end main::file_end375,9750
+
+perl-src/yagrip.pl,258
+sub getopt main::getopt7,156
+       local($_,$flag,$opt,$f,$r,@temp)($_,$flag,$opt,$f,$r,@temp8,169
+sub usage main::usage38,856
+       local($prog,$_,@list)($prog,$_,@list39,868
+       
local($string,$flag,@string,@temp,@last)($string,$flag,@string,@temp,@last40,897
+
+perl-src/kai-test.pl,244
+sub f1 main::f12,16
+sub main::f2 6,50
+package Foo;10,90
+sub f3 Foo::f312,104
+sub Bar::f4 16,138
+package Bar;20,177
+sub f5 Bar::f522,191
+package Foo::Bar;26,225
+sub f6 Foo::Bar::f628,244
+package main;32,278
+sub f7 main::f734,293
+
+perl-src/mirror.pl,13410
+sub msg_versionmain::msg_version459,18271
+       local( $arg )( $arg 468,18582
+               local( $flag, $p )( $flag, $p 480,18757
+               local( $site_path )( $site_path 525,19687
+                       local( $site, $path )( $site, $path 539,19958
+               local( $key_val )( $key_val 578,20743
+               local( $user )( $user 595,21097
+               local( $c )( $c 634,21853
+                       local( $sec,$min,$hour,$mday,$mon,$year,( 
$sec,$min,$hour,$mday,$mon,$year,678,22807
+       local( $c )( $c 706,23393
+       local( $dir, $mp )( $dir, $mp 723,23695
+               local( $f )( $f 725,23740
+sub interpret_config_filesmain::interpret_config_files756,24304
+       local( $fname )( $fname 758,24333
+sub interpret_configmain::interpret_config785,24927
+sub parse_linemain::parse_line827,25710
+       local( $eqpl )( $eqpl 829,25727
+       local( $cont )( $cont 830,25744
+                       local( $v )( $v 839,26029
+sub set_defaultsmain::set_defaults860,26448
+sub command_line_overridemain::command_line_override868,26579
+       local( $key, $val, $overrides )( $key, $val, $overrides 870,26607
+sub set_variablesmain::set_variables894,27072
+       local( $key, $val )( $key, $val 896,27092
+                       local( $val_name )( $val_name 902,27259
+               local( $val )( $val 953,28825
+sub upd_valmain::upd_val962,28974
+       local( $key )( $key 964,28988
+sub pr_variablesmain::pr_variables970,29083
+       local( $msg )( $msg 972,29102
+       local( $nle )( $nle 973,29123
+       local( $out )( $out 974,29144
+       local( $key, $val, $str )( $key, $val, $str 975,29164
+sub do_mirrormain::do_mirror1007,29923
+       local( $get_one_package )( $get_one_package 1009,29939
+       local( $exit_status )( $exit_status 1030,30384
+                       local( @t )( @t 1154,33165
+       local( $con )( $con 1241,35499
+               local( @rhelp )( @rhelp 1289,36702
+       local( @sub_dirs )( @sub_dirs 1329,37778
+       local( $now )( $now 1493,41348
+               local( $arg )( $arg 1506,41774
+sub disconnectmain::disconnect1528,42250
+sub connectmain::connect1546,42576
+       local( $attempts )( $attempts 1548,42590
+       local( $res )( $res 1549,42642
+sub prodmain::prod1573,43156
+sub checkout_regexpsmain::checkout_regexps1585,43327
+       local( $ret )( $ret 1587,43350
+       local( $t )( $t 1589,43395
+               local( $val )( $val 1597,43701
+                       local( $err )( $err 1601,43786
+sub clear_localmain::clear_local1610,43909
+sub clear_remotemain::clear_remote1625,44172
+sub get_local_directory_detailsmain::get_local_directory_details1640,44445
+       local( @dirs, $dir )( @dirs, $dir 1642,44479
+       local( $last_prodded )( $last_prodded 1643,44502
+       local( $dir_level )( $dir_level 1691,45615
+       local( $i )( $i 1692,45641
+       local( $path, $time, $size, $type, $mode, $name, $isdir, $value, 
$follow )( $path, $time, $size, $type, $mode, $name, $isdir, $value, $follow 
1693,45659
+       local( $dev,$ino,$fmode,$nlink,$uid,$gid,$rdev,$ssize,( 
$dev,$ino,$fmode,$nlink,$uid,$gid,$rdev,$ssize,1694,45736
+                       local( $mapi )( $mapi 1763,47586
+sub get_remote_directory_detailsmain::get_remote_directory_details1789,48122
+       local( $type_changed )( $type_changed 1791,48157
+       local( $udirtmp )( $udirtmp 1792,48186
+       local( $storename )( $storename 1793,48206
+       local( $rls )( $rls 1825,48944
+               local( $dirtmp )( $dirtmp 1830,49002
+               local( $unsquish )( $unsquish 1832,49130
+                       local( $f )( $f 1840,49360
+               local( $dirtmp )( $dirtmp 1859,49866
+               local( $unsquish )( $unsquish 1870,50215
+                       local( $f, $uf )( $f, $uf 1878,50445
+               local( $flags )( $flags 1912,51259
+       local( $parse_state )( $parse_state 1946,52111
+                       local( $msg )( $msg 1963,52486
+sub patch_ls_lR_filemain::patch_ls_lR_file1984,52955
+       local( $f, $fr, $flb, $flt, $flp, $flz, $frb, $frt )( $f, $fr, $flb, 
$flt, $flp, $flz, $frb, $frt 1990,53055
+       local( $to , $tn )( $to , $tn 1991,53110
+       local( $tlb )( $tlb 1995,53225
+               local( $p, $s, $trz, $t, $m )( $p, $s, $trz, $t, $m 2030,54182
+               local( $tlz )( $tlz 2037,54467
+sub parse_timeoutmain::parse_timeout2089,55670
+sub parse_remote_detailsmain::parse_remote_details2095,55754
+       local( $ret )( $ret 2097,55781
+       local( $old_sig )( $old_sig 2098,55797
+sub parse_remote_details_realmain::parse_remote_details_real2125,56234
+       local( $path, $size, $time, $type, $mode, $rdir, $rcwd )( $path, 
$size, $time, $type, $mode, $rdir, $rcwd 2127,56266
+       local( @dir_list )( @dir_list 2128,56325
+       local( $i )( $i 2129,56346
+       local( $old_path )( $old_path 2130,56364
+                               local( $old_path )( $old_path 2143,56630
+                               local( $ri )( $ri 2203,58078
+                       local( $mapi )( $mapi 2214,58335
+                       local( $done )( $done 2239,58911
+sub compare_dirsmain::compare_dirs2283,59825
+       local( *src_paths,( *src_paths,2286,59915
+       local( $src_path, $dest_path, $i )( $src_path, $dest_path, $i 
2293,60099
+       local( $last_prodded )( $last_prodded 2294,60136
+       local( $desti, $srci, $compress, $srciZ, $srcigz, $split, 
$dest_path_real )( $desti, $srci, $compress, $srciZ, $srcigz, $split, 
$dest_path_real 2299,60350
+       local( $old_dest_path, $existing_path, $tmp, $restart )( 
$old_dest_path, $existing_path, $tmp, $restart 2300,60428
+       local( $sp, $dp )( $sp, $dp 2301,60486
+                  local( $real, $reali, $reali1 )( $real, $reali, $reali1 
2352,62034
+                  local( $count )( $count 2353,62072
+                       local( $value )( $value 2408,63996
+                       local( $real )( $real 2409,64028
+                       local( $reali )( $reali 2410,64086
+                               local( $old )( $old 2421,64571
+                       local( $old_dest_path )( $old_dest_path 2432,64842
+                               local( $dpp, $dps )( $dpp, $dps 2509,67031
+               local( $update )( $update 2534,67671
+sub map_namemain::map_name2651,71028
+       local( $name )( $name 2653,71043
+               local( $old_name )( $old_name 2656,71089
+               local( $tmp )( $tmp 2666,71252
+sub set_timestampsmain::set_timestamps2675,71362
+       local( $src_path )( $src_path 2677,71383
+       local( $dest_path, $dest_loc_mapi, $src_rem_mapi,  $rtime )( 
$dest_path, $dest_loc_mapi, $src_rem_mapi,  $rtime 2685,71517
+sub set_timestampmain::set_timestamp2699,71901
+       local( $path, $time )( $path, $time 2701,71921
+       local( $pr_time )( $pr_time 2703,71953
+sub make_dirsmain::make_dirs2719,72284
+       local( $thing )( $thing 2721,72300
+sub make_symlinksmain::make_symlinks2736,72489
+       local( $thing )( $thing 2738,72509
+               local( $dest, $existing )( $dest, $existing 2745,72623
+               local( $dirpart )( $dirpart 2746,72663
+               local( $ft )( $ft 2747,72704
+               local( $p )( $p 2762,73261
+                       local( $f )( $f 2770,73467
+                       local( $dl )( $dl 2788,74038
+sub do_all_transfersmain::do_all_transfers2806,74439
+       local( $src_path )( $src_path 2808,74462
+       local( $dest_path, $attribs )( $dest_path, $attribs 2809,74483
+       local( $srci )( $srci 2810,74515
+               local( $newpath )( $newpath 2838,75124
+sub transfer_filemain::transfer_file2869,75847
+       local( $src_path, $dest_path, $attribs, $timestamp )( $src_path, 
$dest_path, $attribs, $timestamp 2871,75867
+       local( $dir, $file, $temp, $compress, $split, $restart, $mesg, 
$got_mesg )( $dir, $file, $temp, $compress, $split, $restart, $mesg, $got_mesg 
2872,75927
+               local( $src_file )( $src_file 2915,76782
+               local( $comptemp )( $comptemp 2916,76816
+                       local( $f )( $f 2921,76964
+               local($filesize)($filesize2944,77569
+                       local( $ti )( $ti 2975,78401
+               local( $f )( $f 2997,78887
+               local( $comp )( $comp 2998,78912
+       local( $filesize )( $filesize 3015,79427
+       local( $sizemsg )( $sizemsg 3016,79469
+       local( $srcsize )( $srcsize 3017,79501
+               local( $time )( $time 3029,79865
+       local( $as )( $as 3046,80223
+       local( $locali )( $locali 3054,80499
+sub filename_to_tempnamemain::filename_to_tempname3062,80713
+       local( $dir, $file )( $dir, $file 3064,80740
+       local ( $dest_path )( $dest_path 3066,80769
+sub log_uploadmain::log_upload3090,81228
+       local( $src_path, $dest_path, $got_mesg, $size )( $src_path, 
$dest_path, $got_mesg, $size 3092,81245
+sub do_deletesmain::do_deletes3118,81773
+       local( *src_paths,( *src_paths,3121,81861
+       local( $files_to_go, $dirs_to_go )( $files_to_go, $dirs_to_go 
3125,81960
+       local( $src_path, $i )( $src_path, $i 3131,82055
+       local( $orig_do_deletes )( $orig_do_deletes 3132,82080
+       local( $orig_save_deletes )( $orig_save_deletes 3133,82122
+       local( $del_patt )( $del_patt 3135,82169
+               local( $per )( $per 3162,82843
+               local( $per )( $per 3184,83513
+                       local( $save_dir_tail )( $save_dir_tail 3226,84617
+sub save_deletemain::save_delete3245,85019
+       local( $save, $kind )( $save, $kind 3247,85037
+       local( $real_save_dir, $save_dest )( $real_save_dir, $save_dest 
3249,85067
+       local( $dirname )( $dirname 3284,85704
+sub save_mkdirmain::save_mkdir3304,86155
+       local( $dir )( $dir 3306,86172
+sub do_deletemain::do_delete3320,86459
+       local( $del, $kind )( $del, $kind 3322,86475
+sub filesizemain::filesize3377,87532
+       local( $fname )( $fname 3379,87547
+sub istruemain::istrue3390,87654
+       local( $val )( $val 3392,87667
+sub mksymlinkmain::mksymlink3398,87773
+       local( $dest_path, $existing_path )( $dest_path, $existing_path 
3400,87789
+               local( $msg )( $msg 3417,88246
+               local( $msg )( $msg 3431,88590
+               local( $status )( $status 3442,88816
+sub mkdirsmain::mkdirs3457,89196
+       local( $dir )( $dir 3459,89209
+       local( @dir, $d, $path )( @dir, $d, $path 3460,89230
+sub make_dirmain::make_dir3497,90042
+       local( $dir, $mode )( $dir, $mode 3499,90057
+       local( $val )( $val 3500,90085
+sub dir_existsmain::dir_exists3528,90573
+       local( $dir )( $dir 3530,90590
+       local( $val )( $val 3531,90611
+               local($old_dir)($old_dir3539,90750
+sub set_attribsmain::set_attribs3553,91053
+       local( $path, $src_path, $type )( $path, $src_path, $type 3555,91071
+       local( $mode )( $mode 3556,91111
+               local( $pathi )( $pathi 3564,91229
+               local( $pathi )( $pathi 3568,91320
+sub get_passwdmain::get_passwd3606,91977
+       local( $user )( $user 3608,91994
+       local( $pass )( $pass 3609,92016
+       local( $| )( $| 3610,92033
+sub compare_timesmain::compare_times3631,92384
+       local( $t1, $t2 )( $t1, $t2 3637,92564
+       local( $diff )( $diff 3638,92589
+sub create_assocsmain::create_assocs3643,92688
+       local( $map )( $map 3645,92708
+sub delete_assocsmain::delete_assocs3657,92957
+       local( $map )( $map 3659,92977
+sub unlink_dbmmain::unlink_dbm3671,93247
+       local( $file )( $file 3673,93264
+sub bsplitmain::bsplit3681,93462
+       local( $temp, $dest_path, $time )( $temp, $dest_path, $time 3683,93475
+       local( $dest_dir )( $dest_dir 3684,93516
+       local( $bufsiz )( $bufsiz 3685,93558
+       local( $buffer, $in, $sofar )( $buffer, $in, $sofar 3686,93583
+       local( $d )( $d 3691,93721
+       local( $index )( $index 3697,93840
+       local( $part )( $part 3698,93865
+                       local( $locali )( $locali 3714,94336
+       local( $readme )( $readme 3730,94740
+sub sysmain::sys3739,95116
+       local( $com )( $com 3741,95126
+sub set_assoc_from_arraymain::set_assoc_from_array3751,95355
+       local( *things )( *things 3754,95453
+sub find_progmain::find_prog3760,95537
+       local( $prog )( $prog 3762,95553
+       local( $path )( $path 3763,95575
+               local( $path )( $path 3766,95657
+sub real_dir_from_pathmain::real_dir_from_path3780,95842
+       local( $program )( $program 3782,95867
+       local( @prog_path )( @prog_path 3783,95892
+       local( $dir )( $dir 3784,95970
+sub msgmain::msg3807,96489
+       local( $todo, $msg )( $todo, $msg 3809,96499
+sub to_bytesmain::to_bytes3838,96979
+       local( $size )( $size 3840,96994
+sub unix2vmsmain::unix2vms3858,97332
+       local( $v, $kind )( $v, $kind 3860,97347
+                       local( $dir, $rest )( $dir, $rest 3873,97559
+sub dirpartmain::dirpart3886,97730
+       local( $path )( $path 3888,97744
+sub expand_symlinkmain::expand_symlink3902,98076
+       local( $orig_path, $points_to )( $orig_path, $points_to 3904,98097
+       local( $dirpart )( $dirpart 3905,98136
+sub flatten_pathmain::flatten_path3913,98365
+       local( $path )( $path 3915,98384
+       local( $changed )( $changed 3916,98406
+       local( $i )( $i 3917,98430
+       local( $rooted )( $rooted 3919,98446
+       local( $count )( $count 3920,98482
+       local( $orig_path )( $orig_path 3921,98504
+               local( $in )( $in 3932,98741
+               local( @parts )( @parts 3933,98765
+sub fix_packagemain::fix_package3963,99438
+       local( $package )( $package 3965,99456
+sub will_compressmain::will_compress3970,99529
+sub will_splitmain::will_split3981,99859
+sub myflockmain::myflock3989,100001
+       local( $file, $kind )( $file, $kind 3991,100015
+sub t2strmain::t2str4004,100221
+       local( @t )( @t 4006,100233
+       
local($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst4013,100335
+sub handlermain::handler4022,100583
+        local( $sig )( $sig 4029,100651
+        local( $msg )( $msg 4030,100679
+        local( $package, $filename, $line )( $package, $filename, $line 
4031,100737
+sub trap_signalsmain::trap_signals4036,100859
+       local( $sig )( $sig 4038,100878
+sub map_user_groupmain::map_user_group4047,101158
+sub keepmain::keep4069,101537
+       local( $pathi, $path, *keep, *keep_totals, *keep_map, $kind )( $pathi, 
$path, *keep, *keep_totals, *keep_map, $kind 4071,101548
+sub alarmmain::alarm4104,102330
+       local( $time_to_sig )( $time_to_sig 4106,102342
+sub chownmain::chown4110,102405
+       local( $uid, $gid, $path )( $uid, $gid, $path 4112,102417
+sub utimemain::utime4116,102494
+       local( $atime, $mtime, $path )( $atime, $mtime, $path 4118,102506
+       local( $old_mode )( $old_mode 4124,102685
+       local( $tmp_mode )( $tmp_mode 4125,102730
+       local( $ret )( $ret 4126,102763
+sub cwdmain::cwd4135,102913
+       local( $lcwd )( $lcwd 4137,102923
+
+ps-src/rfc1245.ps,2478
+/FMversion 12,311
+/FrameDict 17,500
+/FMVERSION 47,1307
+/FMLOCAL 56,1494
+/FMDOCUMENT 73,1766
+/FMBEGINPAGE 95,2279
+/FMENDPAGE 109,2516
+/FMDEFINEFONT 115,2582
+/FMNORMALIZEGRAPHICS 126,2725
+/FMBEGINEPSF 142,2955
+/FMENDEPSF 153,3207
+/setmanualfeed 158,3283
+/max 163,3386
+/min 164,3426
+/inch 165,3466
+/pagedimen 166,3485
+/setpapername 172,3629
+/papersize 190,4214
+/manualpapersize 211,4789
+/desperatepapersize 230,5211
+/savematrix 239,5370
+/restorematrix 242,5425
+/dmatrix 245,5475
+/dpi 246,5495
+/freq 248,5583
+/sangle 249,5658
+/DiacriticEncoding 250,5717
+/.notdef 251,5738
+/.notdef 252,5801
+/.notdef 253,5864
+/.notdef 254,5927
+/.notdef 255,5990
+/numbersign 256,6051
+/parenright 257,6115
+/two 258,6184
+/less 259,6251
+/L 260,6320
+/bracketright 261,6389
+/i 262,6459
+/braceright 263,6529
+/Ntilde 264,6598
+/atilde 265,6668
+/iacute 266,6733
+/ocircumflex 267,6797
+/udieresis 268,6858
+/paragraph 269,6919
+/dieresis 270,6983
+/yen 271,7050
+/ordfeminine 272,7109
+/exclamdown 273,7171
+/guillemotleft 274,7230
+/Otilde 275,7296
+/quoteleft 276,7357
+/fraction 277,7420
+/periodcentered 278,7490
+/Acircumflex 279,7549
+/Icircumflex 280,7610
+/Uacute 281,7680
+/breve 282,7746
+/ReEncode 284,7814
+/graymode 300,8020
+/setpattern 310,8184
+/grayness 331,8725
+/normalize 394,9873
+/dnormalize 397,9942
+/lnormalize 400,10014
+/H 403,10104
+/Z 406,10147
+/X 409,10176
+/V 412,10219
+/N 415,10260
+/M 418,10286
+/E 419,10315
+/D 420,10336
+/O 421,10358
+/L 423,10394
+/Y 430,10489
+/R 439,10588
+/RR 450,10696
+/C 467,10959
+/U 473,11004
+/F 477,11039
+/T 481,11084
+/RF 484,11115
+/TF 488,11164
+/P 495,11219
+/PF 499,11270
+/S 506,11344
+/SF 510,11384
+/B 517,11446
+/BF 521,11505
+/W 538,11714
+/G 573,12382
+/A 582,12525
+/BEGINPRINTCODE 606,12918
+/ENDPRINTCODE 615,13131
+/gn 620,13259
+/cfs 631,13384
+/ic 636,13473
+/ms 658,14285
+/ip 668,14395
+/wh 678,14492
+/bl 684,14607
+/s1 690,14722
+/fl 691,14739
+/hx 698,14887
+/wbytes 709,15055
+/BEGINBITMAPBWc 713,15147
+/BEGINBITMAPGRAYc 716,15198
+/BEGINBITMAP2BITc 719,15251
+/COMMONBITMAPc 722,15304
+/BEGINBITMAPBW 739,15660
+/BEGINBITMAPGRAY 742,15709
+/BEGINBITMAP2BIT 745,15760
+/COMMONBITMAP 748,15811
+/Fmcc 765,16156
+/ngrayt 773,16371
+/nredt 774,16393
+/nbluet 775,16414
+/ngreent 776,16436
+/colorsetup 787,16603
+/fakecolorsetup 814,17370
+/BITMAPCOLOR 826,17636
+/BITMAPCOLORc 839,17926
+/BITMAPGRAY 855,18275
+/BITMAPGRAYc 858,18335
+/ENDBITMAP 861,18397
+/fillprocs 868,18497
+
+prol-src/ordsets.prolog,525
+is_ordset(47,1310
+list_to_ord_set(63,1688
+ord_add_element(71,1867
+ord_del_element(85,2344
+ord_disjoint(100,2783
+ord_intersect(108,2953
+ord_intersection(126,3552
+ord_intersection3(130,3691
+ord_intersection(150,4531
+ord_intersection4(154,4703
+ord_intersection(176,5664
+ord_intersection2(181,5812
+ord_member(200,6318
+ord_seteq(216,6683
+ord_setproduct(225,6971
+ord_subset(240,7377
+ord_subtract(257,7861
+ord_symdiff(265,8054
+ord_union(288,8887
+ord_union4(303,9352
+ord_union(324,10171
+ord_union_all(329,10313
+
+prol-src/natded.prolog,2319
+expandmng(100,2879
+normalize(116,3359
+fresh_vars(125,3716
+subst(138,4134
+normalize_fresh(159,4660
+reduce_subterm(171,5112
+reduce(185,5559
+free_var(196,5903
+free_for(209,6246
+compile_lex(231,6875
+consult_lex:-consult_lex248,7384
+lex(259,7754
+expandsyn(267,8068
+bas_syn(292,8897
+compile_empty:-compile_empty310,9376
+complete(328,10055
+add_active(340,10527
+parse(353,10949
+derived_analyses(364,11341
+build(378,11965
+buildact(392,12521
+mapsyn(412,13542
+add_edge(434,14278
+findcats(447,14758
+normalize_tree(465,15478
+normalize_trees(475,15856
+expandmng_tree(486,16248
+expandmng_trees(496,16614
+cat(511,17013
+subtree(644,21266
+hypothetical_mem(653,21565
+make_coor(667,22130
+start_up:-start_up688,23013
+tokenizeatom(710,23921
+tokenize(720,24348
+isoperator(752,25377
+isoptab(756,25431
+specialsymbol(765,25756
+sstab(771,25861
+parse_cgi(787,26347
+keyvalseq(792,26510
+andkeyvalseq(796,26609
+keyval(799,26688
+valseq(807,26920
+plusvalseq(810,27007
+val(816,27109
+argvals(824,27426
+commaargvals(828,27503
+atomval(833,27578
+atom(836,27640
+action(846,28004
+keyvalcgi(864,28649
+keyvalscgi(865,28670
+outsyn(868,28726
+act(876,29060
+actout(901,29906
+texttreelist(912,30089
+htmltreelist(918,30190
+fitchtreelist(924,30304
+pp_html_table_tree(938,30759
+pp_html_tree(949,31113
+pp_html_trees(988,32381
+pp_html_table_fitch_tree(999,32769
+pp_html_fitch_tree(1017,33672
+removeexp(1129,39002
+splitexp(1142,39490
+pp_exp(1155,39990
+map_word(1168,40249
+pp_exps(1180,40474
+pp_tree(1188,40777
+pp_trees(1216,41807
+pp_word_list(1225,42128
+pp_word(1231,42262
+pp_word_list_rest(1238,42569
+pp_cat(1248,42929
+pp_syn(1255,43196
+pp_syn_paren(1276,43899
+pp_paren(1293,44377
+pp_syn_back(1300,44661
+pp_bas_cat(1311,45001
+writecat(1322,45409
+writesubs(1351,46455
+writesups(1361,46757
+writelistsubs(1371,47090
+pp_lam(1380,47408
+pp_lam_bracket(1398,48022
+pp_lam_paren(1407,48338
+pp_rule(1429,49238
+member(1447,49866
+append_list(1451,49919
+append(1456,50010
+at_least_one_member(1460,50076
+numbervars(1464,50171
+reverse(1467,50209
+select(1471,50290
+select_last(1475,50357
+cat_atoms(1479,50436
+writelist(1485,50524
+write_lex_cat(1492,50676
+writebreaklex(1500,50988
+write_lex(1513,51265
+writebreak(1521,51541
+tt:-tt1531,51713
+mt:-mt1534,51784
+cmt:-cmt1537,51878
+
+pyt-src/server.py,1438
+class Controls:Controls17,358
+    def __init__(18,374
+    def __repr__(24,590
+    def __str__(34,871
+class Server:Server37,934
+    def __init__(38,948
+    def dump(73,2198
+    def __repr__(125,3896
+    def __str__(128,3945
+class User:User131,4014
+    def __init__(132,4026
+    def __repr__(172,5445
+    def __str__(206,6883
+def flag2str(223,7212
+class LabeledEntry(232,7442
+    def bind(234,7525
+    def focus_set(236,7584
+    def __init__(238,7629
+def ButtonBar(245,7909
+def helpwin(255,8280
+class ListEdit(267,8707
+    def __init__(269,8808
+    def handleList(303,10042
+    def handleNew(306,10094
+    def editItem(314,10426
+    def deleteItem(320,10596
+def ConfirmQuit(326,10760
+class ControlEdit(375,12377
+    def PostControls(376,12403
+    def GatherControls(421,13530
+class ServerEdit(512,16264
+    def __init__(513,16289
+    def post(525,16629
+    def gather(543,17191
+    def nosave(547,17304
+    def save(551,17408
+    def refreshPort(556,17509
+    def createWidgets(561,17663
+    def edituser(631,20708
+class UserEdit(645,20921
+    def __init__(646,20944
+    def post(658,21283
+    def gather(676,21841
+    def nosave(680,21950
+    def save(684,22052
+    def createWidgets(689,22151
+class Configure(760,24879
+    def __init__(761,24916
+    def MakeDispose(772,25211
+    def MakeSitelist(786,25706
+    def editsite(794,25949
+    def save(797,26022
+    def nosave(807,26310
+
+tex-src/testenv.tex,52
+\newcommand{\nm}\nm4,77
+\section{blah}blah8,139
+
+tex-src/gzip.texi,303
address@hidden Top,62,2139
address@hidden Copying,80,2652
address@hidden Overview,83,2705
address@hidden Sample,166,7272
address@hidden Invoking gzip,Invoking gzip210,8828
address@hidden Advanced usage,Advanced usage357,13495
address@hidden Environment,420,15207
address@hidden Tapes,437,15768
address@hidden Problems,460,16767
address@hidden Concept Index,Concept Index473,17287
+
+tex-src/texinfo.tex,30626
+\def\texinfoversion{\texinfoversion25,1019
+\def\tie{\tie48,1510
+\def\gloggingall{\gloggingall71,2260
+\def\loggingall{\loggingall72,2329
+\def\onepageout#1{\onepageout98,3266
+\def\croppageout#1{\croppageout114,4016
+\def\cropmarks{\cropmarks141,5076
+\def\pagebody#1{\pagebody143,5123
+\def\ewtop{\ewtop156,5578
+\def\nstop{\nstop157,5642
+\def\ewbot{\ewbot159,5725
+\def\nsbot{\nsbot160,5789
+\def\parsearg #1{\parsearg169,6088
+\def\parseargx{\parseargx171,6166
+\def\parseargline{\parseargline181,6406
+\def\flushcr{\flushcr185,6527
+\newif\ifENV \ENVfalse \def\inENV{\inENV189,6726
+\def\ENVcheck{\ENVcheck190,6790
+\outer\def\begin{\begin197,7037
+\def\beginxxx #1{\beginxxx199,7075
+\def\end{\end207,7330
+\def\endxxx #1{\endxxx209,7358
+\def\errorE#1{\errorE215,7547
+\def\singlespace{\singlespace221,7741
address@hidden@231,7964
+\def\`{\`235,8064
+\def\'{\'236,8076
+\def\mylbrace {\mylbrace240,8124
+\def\myrbrace {\myrbrace241,8157
+\def\:{\:246,8271
+\def\*{\*249,8325
+\def\.{\.252,8401
+\def\w#1{\w257,8632
+\def\group{\group267,9115
+  \def\Egroup{\Egroup272,9279
+\def\need{\need288,9721
+\def\needx#1{\needx299,9998
+\def\dots{\dots338,11384
+\def\page{\page342,11448
+\def\exdent{\exdent352,11775
+\def\exdentyyy #1{\exdentyyy353,11808
+\def\nofillexdent{\nofillexdent356,11952
+\def\nofillexdentyyy #1{\nofillexdentyyy357,11997
+\def\include{\include364,12181
+\def\includezzz #1{\includezzz365,12216
+\def\thisfile{\thisfile368,12267
+\def\center{\center372,12330
+\def\centerzzz #1{\centerzzz373,12363
+\def\sp{\sp379,12505
+\def\spxxx #1{\spxxx380,12530
+\def\comment{\comment386,12704
+\def\commentxxx #1{\commentxxx389,12801
+\def\ignoresections{\ignoresections395,12970
+\let\chapter=\relax=\relax396,12992
+\let\section=\relax=\relax405,13237
+\let\subsection=\relax=\relax408,13298
+\let\subsubsection=\relax=\relax409,13321
+\let\appendix=\relax=\relax410,13347
+\let\appendixsec=\relaxsec=\relax411,13368
+\let\appendixsection=\relaxsection=\relax412,13392
+\let\appendixsubsec=\relaxsubsec=\relax413,13420
+\let\appendixsubsection=\relaxsubsection=\relax414,13447
+\let\appendixsubsubsec=\relaxsubsubsec=\relax415,13478
+\let\appendixsubsubsection=\relaxsubsubsection=\relax416,13508
+\def\ignore{\ignore422,13610
+\long\def\ignorexxx #1\end ignore{\ignorexxx426,13750
+\def\direntry{\direntry428,13809
+\long\def\direntryxxx #1\end direntry{\direntryxxx429,13848
+\def\ifset{\ifset433,13958
+\def\ifsetxxx #1{\ifsetxxx435,14016
+\def\Eifset{\Eifset439,14143
+\def\ifsetfail{\ifsetfail440,14157
+\long\def\ifsetfailxxx #1\end ifset{\ifsetfailxxx441,14213
+\def\ifclear{\ifclear443,14274
+\def\ifclearxxx #1{\ifclearxxx445,14336
+\def\Eifclear{\Eifclear449,14467
+\def\ifclearfail{\ifclearfail450,14483
+\long\def\ifclearfailxxx #1\end ifclear{\ifclearfailxxx451,14543
+\def\set{\set455,14694
+\def\setxxx #1{\setxxx456,14721
+\def\clear{\clear459,14783
+\def\clearxxx #1{\clearxxx460,14814
+\def\iftex{\iftex465,14931
+\def\Eiftex{\Eiftex466,14944
+\def\ifinfo{\ifinfo467,14958
+\long\def\ifinfoxxx #1\end ifinfo{\ifinfoxxx468,15008
+\long\def\menu #1\end menu{\menu470,15067
+\def\asis#1{\asis471,15096
+\def\math#1{\math484,15639
+\def\node{\node486,15683
+\def\nodezzz#1{\nodezzz487,15721
+\def\nodexxx[#1,#2]{\nodexxx[488,15752
+\def\donoderef{\donoderef491,15814
+\def\unnumbnoderef{\unnumbnoderef495,15935
+\def\appendixnoderef{\appendixnoderef499,16066
+\expandafter\expandafter\expandafter\appendixsetref{setref500,16112
+\let\refill=\relaxill=\relax503,16201
+\def\setfilename{\setfilename508,16415
+\outer\def\bye{\bye517,16661
+\def\inforef #1{\inforef519,16717
+\def\inforefzzz #1,#2,#3,#4**{\inforefzzz520,16755
+\def\losespace #1{\losespace522,16852
+\def\sf{\sf531,17056
+\font\defbf=cmbx10 scaled \magstep1 %was 1314bf=cmbx10557,17851
+\font\deftt=cmtt10 scaled \magstep1tt=cmtt10558,17897
+\def\df{\df559,17933
+\def\resetmathfonts{\resetmathfonts634,20527
+\def\textfonts{\textfonts647,21116
+\def\chapfonts{\chapfonts652,21331
+\def\secfonts{\secfonts657,21547
+\def\subsecfonts{\subsecfonts662,21752
+\def\indexfonts{\indexfonts667,21969
+\def\smartitalicx{\smartitalicx690,22701
+\def\smartitalic#1{\smartitalic691,22777
+\let\cite=\smartitalic=\smartitalic697,22922
+\def\b#1{\b699,22946
+\def\t#1{\t702,22981
+\def\samp #1{\samp705,23133
+\def\key #1{\key706,23166
+\def\ctrl #1{\ctrl707,23227
+\def\tclose#1{\tclose715,23429
+\def\ {\719,23595
+\def\xkey{\xkey727,23864
+\def\kbdfoo#1#2#3\par{\kbdfoo728,23880
+\def\dmn#1{\dmn737,24181
+\def\kbd#1{\kbd739,24208
+\def\l#1{\l741,24265
+\def\r#1{\r743,24294
+\def\sc#1{\sc745,24362
+\def\ii#1{\ii746,24405
+\def\titlefont#1{\titlefont754,24638
+\def\titlepage{\titlepage760,24741
+   \def\subtitlefont{\subtitlefont765,24968
+   \def\authorfont{\authorfont767,25052
+   \def\title{\title773,25262
+   \def\titlezzz##1{\titlezzz774,25297
+   \def\subtitle{\subtitle782,25612
+   \def\subtitlezzz##1{\subtitlezzz783,25653
+   \def\author{\author786,25771
+   \def\authorzzz##1{\authorzzz787,25808
+   \def\page{\page793,26099
+\def\Etitlepage{\Etitlepage803,26268
+\def\finishtitlepage{\finishtitlepage816,26656
+\def\evenheading{\evenheading845,27664
+\def\oddheading{\oddheading846,27707
+\def\everyheading{\everyheading847,27748
+\def\evenfooting{\evenfooting849,27794
+\def\oddfooting{\oddfooting850,27837
+\def\everyfooting{\everyfooting851,27878
+\def\headings #1 {\headings892,29570
+\def\HEADINGSoff{\HEADINGSoff894,29619
+\def\HEADINGSdouble{\HEADINGSdouble903,30046
+\def\HEADINGSsingle{\HEADINGSsingle913,30366
+\def\HEADINGSon{\HEADINGSon921,30587
+\def\HEADINGSafter{\HEADINGSafter923,30621
+\def\HEADINGSdoublex{\HEADINGSdoublex925,30716
+\def\HEADINGSsingleafter{\HEADINGSsingleafter932,30904
+\def\HEADINGSsinglex{\HEADINGSsinglex933,30965
+\def\today{\today942,31240
+\def\thistitle{\thistitle957,31785
+\def\settitle{\settitle958,31810
+\def\settitlezzz #1{\settitlezzz959,31847
+\def\internalBitem{\internalBitem991,32777
+\def\internalBitemx{\internalBitemx992,32827
+\def\internalBxitem "#1"{\internalBxitem994,32872
+\def\internalBxitemx "#1"{\internalBxitemx995,32952
+\def\internalBkitem{\internalBkitem997,33027
+\def\internalBkitemx{\internalBkitemx998,33079
+\def\kitemzzz #1{\kitemzzz1000,33126
+\def\xitemzzz #1{\xitemzzz1003,33228
+\def\itemzzz #1{\itemzzz1006,33331
+\def\item{\item1036,34402
+\def\itemx{\itemx1037,34453
+\def\kitem{\kitem1038,34506
+\def\kitemx{\kitemx1039,34559
+\def\xitem{\xitem1040,34614
+\def\xitemx{\xitemx1041,34667
+\def\description{\description1044,34777
+\def\table{\table1046,34827
+\def\ftable{\ftable1051,34971
+\def\Eftable{\Eftable1055,35117
+\def\vtable{\vtable1058,35186
+\def\Evtable{\Evtable1062,35332
+\def\dontindex #1{\dontindex1065,35401
+\def\fnitemindex #1{\fnitemindex1066,35421
+\def\vritemindex #1{\vritemindex1067,35466
+\def\tablez #1#2#3#4#5#6{\tablez1073,35615
+\def\Edescription{\Edescription1076,35673
+\def\itemfont{\itemfont1081,35875
+\def\Etable{\Etable1089,36101
+\def\itemize{\itemize1102,36425
+\def\itemizezzz #1{\itemizezzz1104,36461
+\def\itemizey #1#2{\itemizey1109,36556
+\def#2{1118,36802
+\def\itemcontents{\itemcontents1119,36843
+\def\bullet{\bullet1122,36891
+\def\minus{\minus1123,36918
+\def\frenchspacing{\frenchspacing1127,37026
+\def\splitoff#1#2\endmark{\splitoff1133,37251
+\def\enumerate{\enumerate1139,37481
+\def\enumeratezzz #1{\enumeratezzz1140,37520
+\def\enumeratey #1 #2\endenumeratey{\enumeratey1141,37573
+  \def\thearg{\thearg1145,37720
+  \ifx\thearg\empty \def\thearg{\thearg1146,37739
+\def\numericenumerate{\numericenumerate1183,39073
+\def\lowercaseenumerate{\lowercaseenumerate1189,39203
+\def\uppercaseenumerate{\uppercaseenumerate1202,39550
+\def\startenumeration#1{\startenumeration1218,40040
+\def\alphaenumerate{\alphaenumerate1226,40222
+\def\capsenumerate{\capsenumerate1227,40257
+\def\Ealphaenumerate{\Ealphaenumerate1228,40291
+\def\Ecapsenumerate{\Ecapsenumerate1229,40325
+\def\itemizeitem{\itemizeitem1233,40405
+\def\newindex #1{\newindex1258,41262
+\def\defindex{\defindex1267,41551
+\def\newcodeindex #1{\newcodeindex1271,41659
+\def\defcodeindex{\defcodeindex1278,41919
+\def\synindex #1 #2 {\synindex1282,42099
+\def\syncodeindex #1 #2 {\syncodeindex1291,42439
+\def\doindex#1{\doindex1308,43118
+\def\singleindexer #1{\singleindexer1309,43177
+\def\docodeindex#1{\docodeindex1312,43289
+\def\singlecodeindexer #1{\singlecodeindexer1313,43356
+\def\indexdummies{\indexdummies1315,43414
+\def\_{\_1316,43434
+\def\w{\w1317,43462
+\def\bf{\bf1318,43489
+\def\rm{\rm1319,43518
+\def\sl{\sl1320,43547
+\def\sf{\sf1321,43576
+\def\tt{\tt1322,43604
+\def\gtr{\gtr1323,43632
+\def\less{\less1324,43662
+\def\hat{\hat1325,43694
+\def\char{\char1326,43724
+\def\TeX{\TeX1327,43756
+\def\dots{\dots1328,43786
+\def\copyright{\copyright1329,43819
+\def\tclose##1{\tclose1330,43862
+\def\code##1{\code1331,43907
+\def\samp##1{\samp1332,43948
+\def\t##1{\t1333,43989
+\def\r##1{\r1334,44024
+\def\i##1{\i1335,44059
+\def\b##1{\b1336,44094
+\def\cite##1{\cite1337,44129
+\def\key##1{\key1338,44170
+\def\file##1{\file1339,44209
+\def\var##1{\var1340,44250
+\def\kbd##1{\kbd1341,44289
+\def\indexdummyfont#1{\indexdummyfont1346,44445
+\def\indexdummytex{\indexdummytex1347,44471
+\def\indexdummydots{\indexdummydots1348,44495
+\def\indexnofonts{\indexnofonts1350,44521
+\let\w=\indexdummyfontdummyfont1351,44541
+\let\t=\indexdummyfontdummyfont1352,44564
+\let\r=\indexdummyfontdummyfont1353,44587
+\let\i=\indexdummyfontdummyfont1354,44610
+\let\b=\indexdummyfontdummyfont1355,44633
+\let\emph=\indexdummyfontdummyfont1356,44656
+\let\strong=\indexdummyfontdummyfont1357,44682
+\let\cite=\indexdummyfont=\indexdummyfont1358,44710
+\let\sc=\indexdummyfontdummyfont1359,44736
+\let\tclose=\indexdummyfontdummyfont1363,44908
+\let\code=\indexdummyfontdummyfont1364,44936
+\let\file=\indexdummyfontdummyfont1365,44962
+\let\samp=\indexdummyfontdummyfont1366,44988
+\let\kbd=\indexdummyfontdummyfont1367,45014
+\let\key=\indexdummyfontdummyfont1368,45039
+\let\var=\indexdummyfontdummyfont1369,45064
+\let\TeX=\indexdummytexdummytex1370,45089
+\let\dots=\indexdummydotsdummydots1371,45113
+\let\indexbackslash=0  %overridden during \printindex.backslash=01381,45365
+\def\doind #1#2{\doind1383,45421
+{\indexdummies % Must do this here, since \bf, etc expand at this 
stagedummies1385,45464
+\def\rawbackslashxx{\rawbackslashxx1388,45604
+{\indexnofontsnofonts1393,45866
+\def\dosubind #1#2#3{\dosubind1404,46177
+{\indexdummies % Must do this here, since \bf, etc expand at this 
stagedummies1406,46225
+\def\rawbackslashxx{\rawbackslashxx1409,46329
+{\indexnofontsnofonts1413,46483
+\def\findex {\findex1442,47414
+\def\kindex {\kindex1443,47437
+\def\cindex {\cindex1444,47460
+\def\vindex {\vindex1445,47483
+\def\tindex {\tindex1446,47506
+\def\pindex {\pindex1447,47529
+\def\cindexsub {\cindexsub1449,47553
+\def\printindex{\printindex1461,47880
+\def\doprintindex#1{\doprintindex1463,47921
+  \def\indexbackslash{\indexbackslash1480,48406
+  \indexfonts\rm \tolerance=9500 \advance\baselineskip -1ptfonts\rm1481,48445
+\def\initial #1{\initial1516,49517
+\def\entry #1#2{\entry1522,49724
+  \null\nobreak\indexdotfill % Have leaders before the page 
number.dotfill1539,50371
+\def\indexdotfill{\indexdotfill1548,50699
+\def\primary #1{\primary1551,50805
+\def\secondary #1#2{\secondary1555,50887
+\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\pardotfill1558,50969
+\newbox\partialpageialpage1565,51142
+\def\begindoublecolumns{\begindoublecolumns1571,51300
+  \output={\global\setbox\partialpage=ialpage=1572,51336
+\def\enddoublecolumns{\enddoublecolumns1576,51524
+\def\doublecolumnout{\doublecolumnout1579,51609
+  address@hidden \advance\dimen@ by-\ht\partialpageialpage1580,51678
+\def\pagesofar{\pagesofar1583,51856
+\def\balancecolumns{\balancecolumns1587,52093
+  address@hidden \advance\availdimen@ by-\ht\partialpageialpage1593,52264
+     address@hidden \advance\dimen@ by-\ht\partialpageialpage1599,52525
+\newcount \appendixno  \appendixno = address@hidden,53430
+\def\appendixletter{\appendixletter1627,53471
+\def\opencontents{\opencontents1631,53574
+\def\thischapter{\thischapter1636,53755
+\def\seccheck#1{\seccheck1637,53793
+\def\chapternofonts{\chapternofonts1642,53897
+\def\result{\result1645,53972
+\def\equiv{\equiv1646,54007
+\def\expansion{\expansion1647,54040
+\def\print{\print1648,54081
+\def\TeX{\TeX1649,54114
+\def\dots{\dots1650,54143
+\def\copyright{\copyright1651,54174
+\def\tt{\tt1652,54215
+\def\bf{\bf1653,54242
+\def\w{\w1654,54270
+\def\less{\less1655,54295
+\def\gtr{\gtr1656,54326
+\def\hat{\hat1657,54355
+\def\char{\char1658,54384
+\def\tclose##1{\tclose1659,54415
+\def\code##1{\code1660,54459
+\def\samp##1{\samp1661,54499
+\def\r##1{\r1662,54539
+\def\b##1{\b1663,54573
+\def\key##1{\key1664,54607
+\def\file##1{\file1665,54645
+\def\kbd##1{\kbd1666,54685
+\def\i##1{\i1668,54793
+\def\cite##1{\cite1669,54827
+\def\var##1{\var1670,54867
+\def\emph##1{\emph1671,54905
+\def\dfn##1{\dfn1672,54945
+\def\thischaptername{\thischaptername1675,54986
+\outer\def\chapter{\chapter1676,55025
+\def\chapterzzz #1{\chapterzzz1677,55066
+{\chapternofonts%nofonts%1686,55462
+\global\let\section = \numberedsec=1691,55615
+\global\let\subsection = \numberedsubsec=1692,55650
+\global\let\subsubsection = \numberedsubsubsec=1693,55691
+\outer\def\appendix{\appendix1696,55742
+\def\appendixzzz #1{\appendixzzz1697,55785
+\global\advance \appendixno by 1 \message{no1699,55862
+\chapmacro {#1}{Appendix \appendixletter}letter1700,55931
+\xdef\thischapter{Appendix \appendixletter: 
\noexpand\thischaptername}letter:1703,56024
+{\chapternofonts%nofonts%1704,56096
+  {#1}{Appendix \appendixletter}letter1706,56152
+\appendixnoderef %noderef1709,56252
+\global\let\section = \appendixsec=1710,56271
+\global\let\subsection = \appendixsubsec=1711,56306
+\global\let\subsubsection = \appendixsubsubsec=1712,56347
+\outer\def\top{\top1715,56398
+\outer\def\unnumbered{\unnumbered1716,56438
+\def\unnumberedzzz #1{\unnumberedzzz1717,56485
+{\chapternofonts%nofonts%1721,56648
+\global\let\section = \unnumberedsec=1726,56798
+\global\let\subsection = \unnumberedsubsec=1727,56835
+\global\let\subsubsection = \unnumberedsubsubsec=1728,56878
+\outer\def\numberedsec{\numberedsec1731,56931
+\def\seczzz #1{\seczzz1732,56972
+{\chapternofonts%nofonts%1735,57128
+\outer\def\appendixsection{\appendixsection1744,57314
+\outer\def\appendixsec{\appendixsec1745,57371
+\def\appendixsectionzzz #1{\appendixsectionzzz1746,57424
+\gdef\thissection{#1}\secheading {#1}{\appendixletter}letter1748,57536
+{\chapternofonts%nofonts%1749,57604
+{#1}{\appendixletter}letter1751,57660
+\appendixnoderef %noderef1754,57760
+\outer\def\unnumberedsec{\unnumberedsec1758,57800
+\def\unnumberedseczzz #1{\unnumberedseczzz1759,57853
+{\chapternofonts%nofonts%1761,57948
+\outer\def\numberedsubsec{\numberedsubsec1769,58116
+\def\numberedsubseczzz #1{\numberedsubseczzz1770,58171
+{\chapternofonts%nofonts%1773,58350
+\outer\def\appendixsubsec{\appendixsubsec1782,58554
+\def\appendixsubseczzz #1{\appendixsubseczzz1783,58609
+\subsecheading {#1}{\appendixletter}letter1785,58731
+{\chapternofonts%nofonts%1786,58796
+{#1}{\appendixletter}letter1788,58855
+\appendixnoderef %noderef1791,58970
+\outer\def\unnumberedsubsec{\unnumberedsubsec1795,59010
+\def\unnumberedsubseczzz #1{\unnumberedsubseczzz1796,59069
+{\chapternofonts%nofonts%1798,59170
+\outer\def\numberedsubsubsec{\numberedsubsubsec1806,59341
+\def\numberedsubsubseczzz #1{\numberedsubsubseczzz1807,59402
+{\chapternofonts%nofonts%1811,59599
+\outer\def\appendixsubsubsec{\appendixsubsubsec1822,59832
+\def\appendixsubsubseczzz #1{\appendixsubsubseczzz1823,59893
+  {\appendixletter}letter1826,60032
+{\chapternofonts%nofonts%1827,60098
+  {\appendixletter}letter1829,60163
+\appendixnoderef %noderef1833,60297
+\outer\def\unnumberedsubsubsec{\unnumberedsubsubsec1837,60337
+\def\unnumberedsubsubseczzz #1{\unnumberedsubsubseczzz1838,60402
+{\chapternofonts%nofonts%1840,60509
+\def\infotop{\infotop1850,60838
+\def\infounnumbered{\infounnumbered1851,60876
+\def\infounnumberedsec{\infounnumberedsec1852,60921
+\def\infounnumberedsubsec{\infounnumberedsubsec1853,60972
+\def\infounnumberedsubsubsec{\infounnumberedsubsubsec1854,61029
+\def\infoappendix{\infoappendix1856,61093
+\def\infoappendixsec{\infoappendixsec1857,61134
+\def\infoappendixsubsec{\infoappendixsubsec1858,61181
+\def\infoappendixsubsubsec{\infoappendixsubsubsec1859,61234
+\def\infochapter{\infochapter1861,61294
+\def\infosection{\infosection1862,61333
+\def\infosubsection{\infosubsection1863,61372
+\def\infosubsubsection{\infosubsubsection1864,61417
+\global\let\section = \numberedsec=1869,61654
+\global\let\subsection = \numberedsubsec=1870,61689
+\global\let\subsubsection = \numberedsubsubsec=1871,61730
+\def\majorheading{\majorheading1885,62237
+\def\majorheadingzzz #1{\majorheadingzzz1886,62282
+\def\chapheading{\chapheading1892,62515
+\def\chapheadingzzz #1{\chapheadingzzz1893,62558
+\def\heading{\heading1898,62753
+\def\subheading{\subheading1900,62790
+\def\subsubheading{\subsubheading1902,62833
+\def\dobreak#1#2{\dobreak1909,63110
+\def\setchapterstyle #1 {\setchapterstyle1911,63188
+\def\chapbreak{\chapbreak1918,63443
+\def\chappager{\chappager1919,63493
+\def\chapoddpage{\chapoddpage1920,63531
+\def\setchapternewpage #1 {\setchapternewpage1922,63610
+\def\CHAPPAGoff{\CHAPPAGoff1924,63667
+\def\CHAPPAGon{\CHAPPAGon1928,63761
+\global\def\HEADINGSon{\HEADINGSon1931,63852
+\def\CHAPPAGodd{\CHAPPAGodd1933,63894
+\global\def\HEADINGSon{\HEADINGSon1936,63990
+\def\CHAPFplain{\CHAPFplain1940,64044
+\def\chfplain #1#2{\chfplain1944,64136
+\def\unnchfplain #1{\unnchfplain1955,64359
+\def\unnchfopen #1{\unnchfopen1963,64588
+\def\chfopen #1#2{\chfopen1969,64796
+\def\CHAPFopen{\CHAPFopen1974,64940
+\def\subsecheadingbreak{\subsecheadingbreak1981,65158
+\def\secheadingbreak{\secheadingbreak1984,65287
+\def\secheading #1#2#3{\secheading1992,65569
+\def\plainsecheading #1{\plainsecheading1993,65625
+\def\secheadingi #1{\secheadingi1994,65668
+\def\subsecheading #1#2#3#4{\subsecheading2005,66036
+\def\subsecheadingi #1{\subsecheadingi2006,66103
+\def\subsubsecfonts{\subsubsecfonts2013,66400
+\def\subsubsecheading #1#2#3#4#5{\subsubsecheading2016,66523
+\def\subsubsecheadingi #1{\subsubsecheadingi2017,66601
+\def\startcontents#1{\startcontents2031,67073
+   \unnumbchapmacro{#1}\def\thischapter{\thischapter2039,67346
+\outer\def\contents{\contents2048,67705
+\outer\def\summarycontents{\summarycontents2056,67849
+      \def\secentry ##1##2##3##4{\secentry2066,68220
+      \def\unnumbsecentry ##1##2{\unnumbsecentry2067,68255
+      \def\subsecentry ##1##2##3##4##5{\subsecentry2068,68290
+      \def\unnumbsubsecentry ##1##2{\unnumbsubsecentry2069,68331
+      \def\subsubsecentry ##1##2##3##4##5##6{\subsubsecentry2070,68369
+      \def\unnumbsubsubsecentry ##1##2{\unnumbsubsubsecentry2071,68416
+\def\chapentry#1#2#3{\chapentry2084,68850
+\def\shortchapentry#1#2#3{\shortchapentry2087,68967
+    {#2\labelspace #1}space2090,69077
+\def\unnumbchapentry#1#2{\unnumbchapentry2093,69131
+\def\shortunnumberedentry#1#2{\shortunnumberedentry2094,69178
+\def\secentry#1#2#3#4{\secentry2101,69342
+\def\unnumbsecentry#1#2{\unnumbsecentry2102,69401
+\def\subsecentry#1#2#3#4#5{\subsecentry2105,69462
+\def\unnumbsubsecentry#1#2{\unnumbsubsecentry2106,69532
+\def\subsubsecentry#1#2#3#4#5#6{\subsubsecentry2109,69606
+  \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}space2110,69640
+\def\unnumbsubsubsecentry#1#2{\unnumbsubsubsecentry2111,69691
+\def\dochapentry#1#2{\dochapentry2122,70065
+\def\dosecentry#1#2{\dosecentry2137,70670
+\def\dosubsecentry#1#2{\dosubsecentry2144,70848
+\def\dosubsubsecentry#1#2{\dosubsubsecentry2151,71033
+\def\labelspace{\labelspace2159,71284
+\def\dopageno#1{\dopageno2161,71319
+\def\doshortpageno#1{\doshortpageno2162,71345
+\def\chapentryfonts{\chapentryfonts2164,71377
+\def\secentryfonts{\secentryfonts2165,71412
+\def\point{\point2191,72371
+\def\result{\result2193,72392
+\def\expansion{\expansion2194,72465
+\def\print{\print2195,72536
+\def\equiv{\equiv2197,72603
+\def\error{\error2217,73376
+\def\tex{\tex2223,73605
address@hidden@2241,73988
+\gdef\sepspaces{\def {\ }}}\2264,74720
+\def\aboveenvbreak{\aboveenvbreak2267,74802
+\def\afterenvbreak{\afterenvbreak2271,74968
+\def\ctl{\ctl2285,75479
+\def\ctr{\ctr2286,75551
+\def\cbl{\cbl2287,75590
+\def\cbr{\cbr2288,75630
+\def\carttop{\carttop2289,75669
+\def\cartbot{\cartbot2292,75777
+\long\def\cartouche{\cartouche2298,75917
+\def\Ecartouche{\Ecartouche2325,76705
+\def\lisp{\lisp2337,76840
+\def\Elisp{\Elisp2347,77187
+\def\next##1{\next2359,77513
+\def\Eexample{\Eexample2363,77555
+\def\Esmallexample{\Esmallexample2366,77602
+\def\smalllispx{\smalllispx2372,77780
+\def\Esmalllisp{\Esmalllisp2382,78134
+\obeyspaces \obeylines \ninett \indexfonts \rawbackslashfonts2395,78490
+\def\next##1{\next2396,78547
+\def\display{\display2400,78627
+\def\Edisplay{\Edisplay2409,78946
+\def\next##1{\next2421,79257
+\def\format{\format2425,79360
+\def\Eformat{\Eformat2433,79656
+\def\next##1{\next2436,79745
+\def\flushleft{\flushleft2440,79797
+\def\Eflushleft{\Eflushleft2450,80168
+\def\next##1{\next2453,80261
+\def\flushright{\flushright2455,80283
+\def\Eflushright{\Eflushright2465,80655
+\def\next##1{\next2469,80786
+\def\quotation{\quotation2473,80844
+\def\Equotation{\Equotation2479,81036
+\def\setdeffont #1 {\setdeffont2492,81434
+\newskip\defbodyindent \defbodyindent=.4inbodyindent2494,81480
+\newskip\defargsindent \defargsindent=50ptargsindent2495,81523
+\newskip\deftypemargin \deftypemargin=12pttypemargin2496,81566
+\newskip\deflastargmargin \deflastargmargin=18ptlastargmargin2497,81609
+\def\activeparens{\activeparens2502,81807
+\def\opnr{\opnr2528,83019
+\def\lbrb{\lbrb2529,83084
+\def\defname #1#2{\defname2535,83285
+\advance\dimen2 by -\defbodyindentbodyindent2539,83403
+\advance\dimen3 by -\defbodyindentbodyindent2541,83457
+\setbox0=\hbox{\hskip \deflastargmargin{lastargmargin2543,83511
+\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for 
continuationsargsindent2545,83653
+\parshape 2 0in \dimen0 \defargsindent \dimen1     %argsindent2546,83728
+\rlap{\rightline{{\rm #2}\hskip \deftypemargin}typemargin2553,84097
+\advance\leftskip by -\defbodyindentbodyindent2556,84231
+\exdentamount=\defbodyindentbodyindent2557,84268
+\def\defparsebody #1#2#3{\defparsebody2567,84627
+\def#1{2571,84811
+\def#2{2572,84847
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2574,84919
+\exdentamount=\defbodyindentbodyindent2575,84993
+\def\defmethparsebody #1#2#3#4 {\defmethparsebody2580,85097
+\def#1{2584,85258
+\def#2##1 {2585,85294
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2587,85377
+\exdentamount=\defbodyindentbodyindent2588,85451
+\def\defopparsebody #1#2#3#4#5 {\defopparsebody2591,85536
+\def#1{2595,85697
+\def#2##1 ##2 {2596,85733
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2599,85833
+\exdentamount=\defbodyindentbodyindent2600,85907
+\def\defvarparsebody #1#2#3{\defvarparsebody2607,86178
+\def#1{2611,86365
+\def#2{2612,86401
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2614,86460
+\exdentamount=\defbodyindentbodyindent2615,86534
+\def\defvrparsebody #1#2#3#4 {\defvrparsebody2620,86625
+\def#1{2624,86784
+\def#2##1 {2625,86820
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2627,86890
+\exdentamount=\defbodyindentbodyindent2628,86964
+\def\defopvarparsebody #1#2#3#4#5 {\defopvarparsebody2631,87036
+\def#1{2635,87200
+\def#2##1 ##2 {2636,87236
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2639,87323
+\exdentamount=\defbodyindentbodyindent2640,87397
+\def\defunargs #1{\defunargs2663,88157
+\def\deftypefunargs #1{\deftypefunargs2675,88539
+\def\deffn{\deffn2689,88921
+\def\deffnheader #1#2#3{\deffnheader2691,88978
+\begingroup\defname {name2692,89026
+\def\defun{\defun2698,89171
+\def\defunheader #1#2{\defunheader2700,89224
+\begingroup\defname {name2701,89299
+\defunargs {unargs2702,89335
+\def\deftypefun{\deftypefun2708,89483
+\def\deftypefunheader #1#2{\deftypefunheader2711,89605
+\def\deftypefunheaderx #1#2 #3\relax{\deftypefunheaderx2713,89714
+\begingroup\defname {name2715,89806
+\deftypefunargs {typefunargs2716,89852
+\def\deftypefn{\deftypefn2722,90023
+\def\deftypefnheader #1#2#3{\deftypefnheader2725,90172
+\def\deftypefnheaderx #1#2#3 #4\relax{\deftypefnheaderx2727,90308
+\begingroup\defname {name2729,90401
+\deftypefunargs {typefunargs2730,90441
+\def\defmac{\defmac2736,90562
+\def\defmacheader #1#2{\defmacheader2738,90619
+\begingroup\defname {name2739,90695
+\defunargs {unargs2740,90728
+\def\defspec{\defspec2746,90852
+\def\defspecheader #1#2{\defspecheader2748,90913
+\begingroup\defname {name2749,90990
+\defunargs {unargs2750,91030
+\def\deffnx #1 {\deffnx2757,91225
+\def\defunx #1 {\defunx2758,91282
+\def\defmacx #1 {\defmacx2759,91339
+\def\defspecx #1 {\defspecx2760,91398
+\def\deftypefnx #1 {\deftypefnx2761,91459
+\def\deftypeunx #1 {\deftypeunx2762,91524
+\def\defop #1 {\defop2768,91670
+\defopparsebody\Edefop\defopx\defopheader\defoptype}opparsebody\Edefop\defopx\defopheader\defoptype2769,91705
+\def\defopheader #1#2#3{\defopheader2771,91759
+\begingroup\defname {name2773,91848
+\defunargs {unargs2774,91894
+\def\defmethod{\defmethod2779,91955
+\def\defmethodheader #1#2#3{\defmethodheader2781,92028
+\begingroup\defname {name2783,92116
+\defunargs {unargs2784,92156
+\def\defcv #1 {\defcv2789,92230
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}opvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype2790,92265
+\def\defcvarheader #1#2#3{\defcvarheader2792,92324
+\begingroup\defname {name2794,92410
+\defvarargs {varargs2795,92456
+\def\defivar{\defivar2800,92529
+\def\defivarheader #1#2#3{\defivarheader2802,92592
+\begingroup\defname {name2804,92678
+\defvarargs {varargs2805,92729
+\def\defopx #1 {\defopx2811,92878
+\def\defmethodx #1 {\defmethodx2812,92935
+\def\defcvx #1 {\defcvx2813,93000
+\def\defivarx #1 {\defivarx2814,93057
+\def\defvarargs #1{\defvarargs2821,93328
+\def\defvr{\defvr2827,93472
+\def\defvrheader #1#2#3{\defvrheader2829,93527
+\begingroup\defname {name2830,93575
+\def\defvar{\defvar2834,93660
+\def\defvarheader #1#2{\defvarheader2836,93720
+\begingroup\defname {name2837,93791
+\defvarargs {varargs2838,93827
+\def\defopt{\defopt2843,93893
+\def\defoptheader #1#2{\defoptheader2845,93953
+\begingroup\defname {name2846,94024
+\defvarargs {varargs2847,94063
+\def\deftypevar{\deftypevar2852,94120
+\def\deftypevarheader #1#2{\deftypevarheader2855,94236
+\begingroup\defname {name2857,94319
+\def\deftypevr{\deftypevr2864,94493
+\def\deftypevrheader #1#2#3{\deftypevrheader2866,94564
+\begingroup\defname {name2867,94616
+\def\defvrx #1 {\defvrx2875,94853
+\def\defvarx #1 {\defvarx2876,94910
+\def\defoptx #1 {\defoptx2877,94969
+\def\deftypevarx #1 {\deftypevarx2878,95028
+\def\deftypevrx #1 {\deftypevrx2879,95095
+\def\deftpargs #1{\deftpargs2884,95244
+\def\deftp{\deftp2888,95324
+\def\deftpheader #1#2#3{\deftpheader2890,95379
+\begingroup\defname {name2891,95427
+\def\deftpx #1 {\deftpx2896,95586
+\def\setref#1{\setref2907,95907
+\def\unnumbsetref#1{\unnumbsetref2912,96021
+\def\appendixsetref#1{\appendixsetref2917,96128
+\def\pxref#1{\pxref2928,96539
+\def\xref#1{\xref2929,96575
+\def\ref#1{\ref2930,96610
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\xrefX[2931,96640
+\def\printedmanual{\printedmanual2932,96683
+\def\printednodename{\printednodename2933,96721
+\def\printednodename{\printednodename2938,96846
+section ``\printednodename'' in \cite{\printedmanual}\printedmanual2953,97479
+\refx{x2956,97557
+\def\dosetq #1#2{\dosetq2964,97777
+\def\internalsetq #1#2{\internalsetq2972,98035
+\def\Ypagenumber{\Ypagenumber2976,98136
+\def\Ytitle{\Ytitle2978,98162
+\def\Ynothing{\Ynothing2980,98189
+\def\Ysectionnumberandtype{\Ysectionnumberandtype2982,98206
+\def\Yappendixletterandtype{\Yappendixletterandtype2991,98522
+\ifnum\secno=0 Appendix\xreftie'char\the\appendixno{no2992,98552
+\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno 
%no.\the\secno2993,98607
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno 
%no.\the\secno.\the\subsecno2995,98711
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno 
%no.\the\secno.\the\subsecno.\the\subsubsecno2997,98782
+  \def\linenumber{\linenumber3008,99121
+\def\refx#1#2{\refx3014,99305
+\def\xrdef #1#2{\xrdef3036,99931
+\def\readauxfile{\readauxfile3039,100016
+\def\supereject{\supereject3109,101797
+\footstrut\parindent=\defaultparindent\hang\textindent{aultparindent\hang\textindent3130,102482
+\def\openindices{\openindices3138,102668
+\newdimen\defaultparindent \defaultparindent = 15ptaultparindent3150,102893
+\parindent = \defaultparindentaultparindent3151,102945
+\def\smallbook{\smallbook3174,103669
+\global\def\Esmallexample{\Esmallexample3191,104096
+\def\afourpaper{\afourpaper3195,104187
+\def\finalout{\finalout3223,104995
+\def\normaldoublequote{\normaldoublequote3234,105256
+\def\normaltilde{\normaltilde3235,105282
+\def\normalcaret{\normalcaret3236,105302
+\def\normalunderscore{\normalunderscore3237,105322
+\def\normalverticalbar{\normalverticalbar3238,105347
+\def\normalless{\normalless3239,105373
+\def\normalgreater{\normalgreater3240,105392
+\def\normalplus{\normalplus3241,105414
+\def\ifusingtt#1#2{\ifusingtt3252,105906
+\def\activedoublequote{\activedoublequote3260,106234
+\def~{~3263,106320
+\def^{^3266,106381
+\def_{_3269,106420
+\def\_{\_3271,106494
+\def\lvvmode{\lvvmode3278,106831
+\def|{|3281,106881
+\def<{<3284,106944
+\def>{>3287,107001
+\def+{+3289,107039
+\def\turnoffactive{\turnoffactive3295,107200
+\global\def={=3306,107486
+\def\normalbackslash{\normalbackslash3320,107868
+
+c-src//c.c,76
+T f(1,0
+}T i;2,14
+void bar(5,69
+int foobar(6,94
+interface_locate(9,131
+
+c.c,1836
+void (*fa)fa131,
+void 132,
+my_printf 135,
+void fatala 138,
+void fatalb 139,
+max 141,
+struct bar 143,
+__attribute__ ((always_inline)) max 147,
+extern int old_var 149,
+struct foo150,
+char stack[stack155,
+struct S 156,
+} wait_status_ptr_t 161,
+Some_Class  A 162,
+typedef T1 T3 163,
+T3 z 164,
+typedef int more_aligned_int 165,
+struct S  __attribute__ ((vector_size (16))) foo;166,
+int foo 167,
+char *__attribute__((aligned(8))) *f;f168,
+int i 169,
+extern void foobar 170,
+typedef struct cacheLRUEntry_s172,
+__attribute__ ((packed)) cacheLRUEntry_t;177,
+struct foo 178,
+     f1 183,
+void f2 184,
+__attribute__((noreturn)) void d0 185,
+  __attribute__((format(printf, 1, 2))) d1 186,
+  d2 187,
+int x 188,
+struct foo 189,
+short array[array190,
+int f193,
+DEAFUN 196,
+XDEFUN 203,
+DEFUN ("x-get-selection-internal", 
Fx_get_selection_internal,x-get-selection-internal206,
+       Fx_get_selection_internal,x-get-selection-internal212,
+      Fy_get_selection_internal,y-get-selection-internal216,
+defun_func1(218,
+DEFUN_func2(220,
+typedef int bool;222,
+bool funcboo 223,
+struct my_struct 226,
+typedef struct my_struct my_typedef;228,
+int bla 229,
+a(234,
+int func1237,
+static struct cca_control init_control 239,
+static tpcmd rbtp 240,
+static byte ring1 241,
+static byte ring2 242,
+request request 243,
+int func2 246,
+  aaa;249,
+  bbb;251,
+struct sss1 252,
+struct sss2253,
+  struct ss3255,
+struct a b;259,
+struct aa *b;b260,
+  **b;b262,
+caccacacca 263,
+a 267,
+  typedef struct aa 269,
+  typedef struct aa {} aaa;269,
+static void inita 271,
+node *lasta lasta272,
+b 273,
+  typedef  int bb;275,
+static void initb 277,
+node *lastb lastb278,
+typedef enum { REG_ENOSYS 279,
+typedef enum { REG_ENOSYS = -1, aa 279,
+typedef enum { REG_ENOSYS = -1, aa } reg_errcode_t;279,
+
+c-src/a/b/b.c,18
+#define this 1,0
+
+../c/c.web,20
+#define questo 34,
+
+y-src/parse.y,1061
+#define obstack_chunk_alloc 46,1111
+#define obstack_chunk_free 47,1149
+int yylex 57,1317
+void yyerror 59,1347
+void yyerror 61,1376
+VOIDSTAR parse_hash;63,1400
+extern VOIDSTAR hash_find(64,1421
+unsigned char fnin[fnin67,1519
+#define YYSTYPE 71,1617
+typedef struct node *YYSTYPE;YYSTYPE72,1648
+YYSTYPE parse_return;73,1678
+YYSTYPE make_list 75,1716
+YYSTYPE make_list 77,1760
+char *instr;instr80,1790
+int parse_error 81,1803
+extern struct obstack tmp_mem;82,1824
+line:line86,1862
+exp:exp94,1975
+exp_list:exp_list262,5642
+range_exp:range_exp268,5740
+range_exp_list:range_exp_list272,5770
+cell:cell278,5888
+yyerror FUN1(285,5935
+make_list FUN2(292,6015
+#define ERROR 303,6215
+extern struct node *yylval;yylval305,6233
+unsigned char parse_cell_or_range 308,6278
+unsigned char parse_cell_or_range 310,6342
+yylex FUN0(314,6392
+parse_cell_or_range FUN2(586,11758
+#define CK_ABS_R(670,13200
+#define CK_REL_R(674,13279
+#define CK_ABS_C(679,13408
+#define CK_REL_C(683,13487
+#define MAYBEREL(688,13616
+str_to_col FUN1(846,16817
+
+y-src/parse.c,520
+#define YYBISON 4,64
+# define       NE      6,114
+# define       LE      7,130
+# define       GE      8,146
+# define       NEG     9,162
+# define       L_CELL  10,179
+# define       L_RANGE 11,199
+# define       L_VAR   12,220
+# define       L_CONST 13,239
+# define       L_FN0   14,260
+# define       L_FN1   15,279
+# define       L_FN2   16,298
+# define       L_FN3   17,317
+# define       L_FN4   18,336
+# define       L_FNN   19,355
+# define       L_FN1R  20,374
+# define       L_FN2R  21,394
+# define       L_FN3R  22,414
+# define       L_FN4R  23,434
+# define       L_FNNR  24,454
+# define       L_LE    25,474
+# define       L_NE    26,492
+# define       L_GE    27,510
+
+parse.y,1464
+#define obstack_chunk_alloc 46,
+#define obstack_chunk_free 47,
+int yylex 57,
+void yyerror 59,
+void yyerror 61,
+VOIDSTAR parse_hash;63,
+extern VOIDSTAR hash_find(64,
+unsigned char fnin[fnin67,
+#define YYSTYPE 71,
+typedef struct node *YYSTYPE;YYSTYPE72,
+YYSTYPE parse_return;73,
+YYSTYPE make_list 75,
+YYSTYPE make_list 77,
+char *instr;instr80,
+int parse_error 81,
+extern struct obstack tmp_mem;82,
+#define YYSTYPE 85,
+# define YYDEBUG 88,
+#define        YYFINAL 93,
+#define        YYFLAG  94,
+#define        YYNTBASE        95,
+#define YYTRANSLATE(98,
+static const char yytranslate[yytranslate101,
+static const short yyprhs[yyprhs134,
+static const short yyrhs[yyrhs142,
+static const short yyrline[yyrline171,
+static const char *const yytname[yytname185,
+static const short yyr1[yyr1197,
+static const short yyr2[yyr2207,
+static const short yydefact[yydefact219,
+static const short yydefgoto[yydefgoto237,
+static const short yypact[yypact242,
+static const short yypgoto[yypgoto260,
+#define        YYLAST  266,
+static const short yytable[yytable269,
+static const short yycheck[yycheck330,
+yyerror FUN1(285,
+make_list FUN2(292,
+#define ERROR 303,
+extern struct node *yylval;yylval305,
+unsigned char parse_cell_or_range 308,
+unsigned char parse_cell_or_range 310,
+yylex FUN0(314,
+parse_cell_or_range FUN2(586,
+#define CK_ABS_R(670,
+#define CK_REL_R(674,
+#define CK_ABS_C(679,
+#define CK_REL_C(683,
+#define MAYBEREL(688,
+str_to_col FUN1(846,
+
+/usr/share/bison/bison.simple,2180
+# define YYSTD(40,
+# define YYSTD(42,
+#  define YYSTACK_ALLOC 50,
+#  define YYSIZE_T 51,
+#    define YYSTACK_ALLOC 55,
+#    define YYSIZE_T 56,
+#     define YYSTACK_ALLOC 59,
+#  define YYSTACK_FREE(67,
+#   define YYSIZE_T 71,
+#    define YYSIZE_T 75,
+#  define YYSTACK_ALLOC 78,
+#  define YYSTACK_FREE 79,
+union yyalloc83,
+# define YYSTACK_GAP_MAX 93,
+#  define YYSTACK_BYTES(98,
+#  define YYSTACK_BYTES(102,
+# define YYSTACK_RELOCATE(112,
+# define YYSIZE_T 128,
+# define YYSIZE_T 131,
+#  define YYSIZE_T 136,
+#   define YYSIZE_T 140,
+# define YYSIZE_T 145,
+#define yyerrok        148,
+#define yyclearin      149,
+#define YYEMPTY        150,
+#define YYEOF  151,
+#define YYACCEPT       152,
+#define YYABORT 153,
+#define YYERROR        154,
+#define YYFAIL 158,
+#define YYRECOVERING(159,
+#define YYBACKUP(160,
+#define YYTERROR       177,
+#define YYERRCODE      178,
+# define YYLLOC_DEFAULT(189,
+#   define YYLEX       200,
+#   define YYLEX       202,
+#   define YYLEX       206,
+#   define YYLEX       208,
+# define YYLEX 212,
+#  define YYFPRINTF 225,
+# define YYDPRINTF(228,
+int yydebug;237,
+# define YYDPRINTF(239,
+# define YYINITDEPTH 244,
+# undef YYMAXDEPTH255,
+# define YYMAXDEPTH 259,
+#  define yymemcpy 264,
+yymemcpy 271,
+#   define yystrlen 293,
+yystrlen 298,
+#   define yystpcpy 316,
+yystpcpy 322,
+#  define YYPARSE_PARAM_ARG 351,
+#  define YYPARSE_PARAM_DECL352,
+#  define YYPARSE_PARAM_ARG 354,
+#  define YYPARSE_PARAM_DECL 355,
+# define YYPARSE_PARAM_ARG358,
+# define YYPARSE_PARAM_DECL359,
+int yyparse 365,
+int yyparse 367,
+#define YY_DECL_NON_LSP_VARIABLES      374,
+# define YY_DECL_VARIABLES     385,
+# define YY_DECL_VARIABLES     391,
+yyparse 403,
+# define YYPOPSTACK 445,
+# define YYPOPSTACK 447,
+# undef YYSTACK_RELOCATE548,
+  *++yyvsp yyvsp746,
+  *++yylsp yylsp748,
+  yyn 755,
+  yystate 757,
+    yystate 761,
+  goto yynewstate;763,
+  goto yyerrlab1;823,
+  yyerrstatus 846,
+  goto yyerrhandle;848,
+  yyn 861,
+  yystate 875,
+  yyn 895,
+  yyn 903,
+  YYDPRINTF 917,
+  *++yyvsp yyvsp919,
+  *++yylsp yylsp921,
+  yystate 924,
+  goto yynewstate;925,
+  yyresult 932,
+  goto yyreturn;933,
+  yyresult 939,
+  goto yyreturn;940,
+  yyerror 946,
+  yyresult 947,
+
+y-src/atest.y,9
+exp    2,3
+
+y-src/cccp.c,303
+#define YYBISON 4,63
+# define       INT     6,113
+# define       CHAR    7,130
+# define       NAME    8,148
+# define       ERROR   9,166
+# define       OR      10,185
+# define       AND     11,201
+# define       EQUAL   12,218
+# define       NOTEQUAL        13,237
+# define       LEQ     14,259
+# define       GEQ     15,276
+# define       LSH     16,293
+# define       RSH     17,310
+# define       UNARY   18,327
+
+cccp.y,2005
+typedef unsigned char U_CHAR;38,
+struct arglist 41,
+#define NULL 51,
+#define GENERIC_PTR 56,
+#define GENERIC_PTR 58,
+#define NULL_PTR 63,
+int yylex 66,
+void yyerror 67,
+int expression_value;68,
+static jmp_buf parse_return_error;70,
+static int keyword_parsing 73,
+extern unsigned char is_idstart[is_idstart76,
+extern unsigned char is_idstart[], is_idchar[is_idchar76,
+extern unsigned char is_idstart[], is_idchar[], is_hor_space[is_hor_space76,
+extern char *xmalloc xmalloc78,
+extern int pedantic;81,
+extern int traditional;84,
+#define CHAR_TYPE_SIZE 87,
+#define INT_TYPE_SIZE 91,
+#define LONG_TYPE_SIZE 95,
+#define WCHAR_TYPE_SIZE 99,
+#define possible_sum_sign(104,
+static void integer_overflow 106,
+static long left_shift 107,
+static long right_shift 108,
+  struct constant 113,
+  struct name 114,
+} yystype;118,
+# define YYSTYPE 119,
+# define YYDEBUG 122,
+#define        YYFINAL 127,
+#define        YYFLAG  128,
+#define        YYNTBASE        129,
+#define YYTRANSLATE(132,
+static const char yytranslate[yytranslate135,
+static const short yyprhs[yyprhs167,
+static const short yyrhs[yyrhs174,
+static const short yyrline[yyrline195,
+static const char *const yytname[yytname208,
+static const short yyr1[yyr1219,
+static const short yyr2[yyr2228,
+static const short yydefact[yydefact239,
+static const short yydefgoto[yydefgoto251,
+static const short yypact[yypact256,
+static const short yypgoto[yypgoto268,
+#define        YYLAST  274,
+static const short yytable[yytable277,
+static const short yycheck[yycheck301,
+static char *lexptr;lexptr332,
+parse_number 341,
+struct token 437,
+static struct token tokentab2[tokentab2442,
+yylex 459,
+parse_escape 740,
+yyerror 836,
+integer_overflow 844,
+left_shift 851,
+right_shift 873,
+parse_c_expression 893,
+extern int yydebug;919,
+main 923,
+unsigned char is_idchar[is_idchar948,
+unsigned char is_idstart[is_idstart950,
+char is_hor_space[is_hor_space953,
+initialize_random_junk 958,
+error 988,
+warning 993,
+lookup 999,
+
+/usr/share/bison/bison.simple,2180
+# define YYSTD(40,
+# define YYSTD(42,
+#  define YYSTACK_ALLOC 50,
+#  define YYSIZE_T 51,
+#    define YYSTACK_ALLOC 55,
+#    define YYSIZE_T 56,
+#     define YYSTACK_ALLOC 59,
+#  define YYSTACK_FREE(67,
+#   define YYSIZE_T 71,
+#    define YYSIZE_T 75,
+#  define YYSTACK_ALLOC 78,
+#  define YYSTACK_FREE 79,
+union yyalloc83,
+# define YYSTACK_GAP_MAX 93,
+#  define YYSTACK_BYTES(98,
+#  define YYSTACK_BYTES(102,
+# define YYSTACK_RELOCATE(112,
+# define YYSIZE_T 128,
+# define YYSIZE_T 131,
+#  define YYSIZE_T 136,
+#   define YYSIZE_T 140,
+# define YYSIZE_T 145,
+#define yyerrok        148,
+#define yyclearin      149,
+#define YYEMPTY        150,
+#define YYEOF  151,
+#define YYACCEPT       152,
+#define YYABORT 153,
+#define YYERROR        154,
+#define YYFAIL 158,
+#define YYRECOVERING(159,
+#define YYBACKUP(160,
+#define YYTERROR       177,
+#define YYERRCODE      178,
+# define YYLLOC_DEFAULT(189,
+#   define YYLEX       200,
+#   define YYLEX       202,
+#   define YYLEX       206,
+#   define YYLEX       208,
+# define YYLEX 212,
+#  define YYFPRINTF 225,
+# define YYDPRINTF(228,
+int yydebug;237,
+# define YYDPRINTF(239,
+# define YYINITDEPTH 244,
+# undef YYMAXDEPTH255,
+# define YYMAXDEPTH 259,
+#  define yymemcpy 264,
+yymemcpy 271,
+#   define yystrlen 293,
+yystrlen 298,
+#   define yystpcpy 316,
+yystpcpy 322,
+#  define YYPARSE_PARAM_ARG 351,
+#  define YYPARSE_PARAM_DECL352,
+#  define YYPARSE_PARAM_ARG 354,
+#  define YYPARSE_PARAM_DECL 355,
+# define YYPARSE_PARAM_ARG358,
+# define YYPARSE_PARAM_DECL359,
+int yyparse 365,
+int yyparse 367,
+#define YY_DECL_NON_LSP_VARIABLES      374,
+# define YY_DECL_VARIABLES     385,
+# define YY_DECL_VARIABLES     391,
+yyparse 403,
+# define YYPOPSTACK 445,
+# define YYPOPSTACK 447,
+# undef YYSTACK_RELOCATE548,
+  *++yyvsp yyvsp746,
+  *++yylsp yylsp748,
+  yyn 755,
+  yystate 757,
+    yystate 761,
+  goto yynewstate;763,
+  goto yyerrlab1;823,
+  yyerrstatus 846,
+  goto yyerrhandle;848,
+  yyn 861,
+  yystate 875,
+  yyn 895,
+  yyn 903,
+  YYDPRINTF 917,
+  *++yyvsp yyvsp919,
+  *++yylsp yylsp921,
+  yystate 924,
+  goto yynewstate;925,
+  yyresult 932,
+  goto yyreturn;933,
+  yyresult 939,
+  goto yyreturn;940,
+  yyerror 946,
+  yyresult 947,
+
+y-src/cccp.y,1582
+typedef unsigned char U_CHAR;38,1201
+struct arglist 41,1301
+#define NULL 51,1468
+#define GENERIC_PTR 56,1578
+#define GENERIC_PTR 58,1611
+#define NULL_PTR 63,1670
+int yylex 66,1712
+void yyerror 67,1726
+int expression_value;68,1743
+static jmp_buf parse_return_error;70,1766
+static int keyword_parsing 73,1865
+extern unsigned char is_idstart[is_idstart76,1944
+extern unsigned char is_idstart[], is_idchar[is_idchar76,1944
+extern unsigned char is_idstart[], is_idchar[], 
is_hor_space[is_hor_space76,1944
+extern char *xmalloc xmalloc78,2009
+extern int pedantic;81,2062
+extern int traditional;84,2114
+#define CHAR_TYPE_SIZE 87,2162
+#define INT_TYPE_SIZE 91,2229
+#define LONG_TYPE_SIZE 95,2296
+#define WCHAR_TYPE_SIZE 99,2365
+#define possible_sum_sign(104,2556
+static void integer_overflow 106,2632
+static long left_shift 107,2665
+static long right_shift 108,2692
+  struct constant 112,2733
+  struct name 113,2789
+start 143,3226
+exp1   148,3330
+exp    156,3505
+exp    185,4295
+keywords 306,7835
+static char *lexptr;lexptr332,8579
+parse_number 341,8842
+struct token 437,11038
+static struct token tokentab2[tokentab2442,11088
+yylex 459,11367
+parse_escape 740,17718
+yyerror 836,19599
+integer_overflow 844,19690
+left_shift 851,19804
+right_shift 873,20194
+parse_c_expression 893,20732
+extern int yydebug;919,21416
+main 923,21483
+unsigned char is_idchar[is_idchar948,21901
+unsigned char is_idstart[is_idstart950,21996
+char is_hor_space[is_hor_space953,22160
+initialize_random_junk 958,22259
+error 988,22915
+warning 993,22963
+lookup 999,23033
+
+tex-src/nonewline.tex,0
+
+php-src/sendmail.php,0
+
+a-src/empty.zz,0
diff --git a/test/etags/ETAGS.good_3 b/test/etags/ETAGS.good_3
new file mode 100644
index 0000000..1e4d565
--- /dev/null
+++ b/test/etags/ETAGS.good_3
@@ -0,0 +1,6118 @@
+
+Makefile,701
+ADASRC=1,0
+ASRC=2,91
+CSRC=3,139
+CPSRC=7,410
+ELSRC=10,624
+ERLSRC=11,694
+FORTHSRC=12,759
+FSRC=13,809
+HTMLSRC=14,881
+JAVASRC=15,974
+LUASRC=16,1062
+MAKESRC=17,1105
+OBJCSRC=18,1147
+OBJCPPSRC=19,1228
+PASSRC=20,1291
+PERLSRC=21,1333
+PHPSRC=22,1413
+PSSRC=23,1485
+PROLSRC=24,1525
+PYTSRC=25,1587
+TEXSRC=26,1628
+YSRC=27,1707
+SRCS=28,1772
+NONSRCS=32,2024
+ETAGS_PROG=34,2098
+CTAGS_PROG=35,2129
+REGEX=37,2161
+xx=38,2207
+RUN=40,2256
+OPTIONS=42,2262
+ARGS=43,2314
+infiles 45,2332
+check:check47,2394
+ediff%:ediff%55,2697
+cdiff:cdiff58,2798
+ETAGS:ETAGS61,2895
+CTAGS:CTAGS64,2965
+srclist:srclist67,3043
+regexfile:regexfile71,3134
+.PRECIOUS:.PRECIOUS77,3311
+FRC:FRC79,3345
+
+ada-src/etags-test-for.ada,1969
+   type LL_Task_Procedure_Access LL_Task_Procedure_Access/t1,0
+   function Body_RequiredBody_Required/f3,78
+   type Type_Specific_Data Type_Specific_Data/t11,280
+   function "abs"abs/f19,504
+   type Barrier_Function_Pointer Barrier_Function_Pointer/t21,577
+   function "="=/f27,722
+   type usfreelock_ptr usfreelock_ptr/t30,803
+   function p p/f33,891
+   procedure LL_Wrapper LL_Wrapper/p37,1054
+function p p/f39,1094
+package Pkg1 Pkg1/s44,1203
+  type Private_T Private_T/t46,1220
+  package Inner1 Inner1/s48,1250
+    procedure Private_T;Private_T/p49,1270
+  package Inner2 Inner2/s52,1310
+    task Private_T;Private_T/k53,1330
+  type Public_T Public_T/t56,1365
+  procedure Pkg1_Proc1;Pkg1_Proc1/p62,1450
+  procedure Pkg1_Proc2 Pkg1_Proc2/p64,1475
+  function Pkg1_Func1 Pkg1_Func1/f66,1514
+  function Pkg1_Func2 Pkg1_Func2/f68,1553
+  package Pkg1_Pkg1 Pkg1_Pkg1/s71,1622
+    procedure Pkg1_Pkg1_Proc1;Pkg1_Pkg1_Proc1/p72,1645
+  task type Task_Type Task_Type/k75,1694
+  type Private_T Private_T/t82,1786
+package body Pkg1 Pkg1/b89,1882
+  procedure Pkg1_Proc1 Pkg1_Proc1/p91,1904
+  package body Inner1 Inner1/b96,1956
+    procedure Private_T Private_T/p97,1981
+  package body Inner2 Inner2/b103,2054
+    task body Private_T Private_T/b104,2079
+  task body Task_Type Task_Type/b112,2181
+  procedure Pkg1_Proc2 Pkg1_Proc2/p126,2367
+  function Pkg1_Func1 Pkg1_Func1/f132,2445
+  function Pkg1_Func2 Pkg1_Func2/f134,2496
+  package body Pkg1_Pkg1 Pkg1_Pkg1/b140,2596
+package body Pkg1_Pkg1 Pkg1_Pkg1/b146,2663
+  procedure Pkg1_Pkg1_Proc1 Pkg1_Pkg1_Proc1/p147,2689
+function  Pkg1_Func1 Pkg1_Func1/f155,2778
+package Truc Truc/s162,2887
+package Truc.Bidule Truc.Bidule/s166,2929
+  protected Bidule Bidule/t168,2953
+  protected type Machin_T Machin_T/t172,3007
+package body Truc.Bidule Truc.Bidule/b178,3087
+  protected body Bidule Bidule/b179,3115
+  protected Machin_T Machin_T/t186,3207
+
+ada-src/2ataspri.adb,2190
+package body System.Task_Primitives System.Task_Primitives/b64,2603
+   package RTE RTE/s69,2712
+   package TSL TSL/s70,2759
+   function To_void_ptr To_void_ptr/f86,3287
+   function To_TCB_Ptr To_TCB_Ptr/f89,3366
+   function 
pthread_mutexattr_setprotocolpthread_mutexattr_setprotocol/f92,3444
+   function 
pthread_mutexattr_setprio_ceilingpthread_mutexattr_setprio_ceiling/f99,3728
+   procedure Abort_WrapperAbort_Wrapper/p115,4302
+   procedure LL_Wrapper LL_Wrapper/p122,4526
+   procedure Initialize_LL_Tasks Initialize_LL_Tasks/p131,4830
+   function Self Self/f160,5586
+   procedure Initialize_LockInitialize_Lock/p174,5958
+   procedure Finalize_Lock Finalize_Lock/p210,6927
+   procedure Write_Lock Write_Lock/p226,7338
+   procedure Read_Lock Read_Lock/p239,7700
+   procedure Unlock Unlock/p246,7850
+   procedure Initialize_Cond Initialize_Cond/p258,8160
+   procedure Finalize_Cond Finalize_Cond/p286,8979
+   procedure Cond_Wait Cond_Wait/p300,9303
+   procedure Cond_Timed_WaitCond_Timed_Wait/p312,9661
+   procedure Cond_Signal Cond_Signal/p343,10510
+   procedure Set_PrioritySet_Priority/p355,10836
+   procedure Set_Own_Priority Set_Own_Priority/p372,11243
+   function Get_Priority Get_Priority/f385,11598
+   function Get_Own_Priority Get_Own_Priority/f398,12023
+   procedure Create_LL_TaskCreate_LL_Task/p412,12438
+      function To_Start_Addr To_Start_Addr/f426,12873
+   procedure Exit_LL_Task Exit_LL_Task/p491,14995
+   procedure Abort_Task Abort_Task/p500,15158
+   procedure Test_Abort Test_Abort/p518,15716
+   procedure Install_Abort_Handler Install_Abort_Handler/p527,15878
+   procedure Abort_WrapperAbort_Wrapper/p557,16939
+      function Address_To_Call_State Address_To_Call_State/f562,17062
+   procedure Install_Error_Handler Install_Error_Handler/p573,17351
+   procedure LL_Assert LL_Assert/p599,18146
+   procedure LL_Wrapper LL_Wrapper/p608,18299
+   procedure Initialize_TAS_Cell Initialize_TAS_Cell/p630,19010
+   procedure Finalize_TAS_Cell Finalize_TAS_Cell/p635,19129
+   procedure Clear Clear/p640,19236
+   procedure Test_And_Set Test_And_Set/p645,19330
+   function  Is_Set Is_Set/f659,19676
+
+ada-src/2ataspri.ads,2313
+package System.Task_Primitives System.Task_Primitives/s58,3169
+   type LL_Task_Procedure_Access LL_Task_Procedure_Access/t62,3253
+   type Pre_Call_State Pre_Call_State/t64,3331
+   type Task_Storage_Size Task_Storage_Size/t66,3378
+   type Machine_Exceptions Machine_Exceptions/t68,3433
+   type Error_Information Error_Information/t70,3499
+   type Lock Lock/t72,3569
+   type Condition_Variable Condition_Variable/t73,3594
+   type Task_Control_Block Task_Control_Block/t81,3955
+   type TCB_Ptr TCB_Ptr/t89,4241
+   function Address_To_TCB_Ptr Address_To_TCB_Ptr/f93,4333
+   procedure Initialize_LL_Tasks Initialize_LL_Tasks/p96,4425
+   function Self Self/f100,4602
+   procedure Initialize_Lock Initialize_Lock/p103,4707
+   procedure Finalize_Lock Finalize_Lock/p107,4879
+   procedure Write_Lock Write_Lock/p111,5034
+   procedure Read_Lock Read_Lock/p118,5428
+   procedure Unlock Unlock/p128,5995
+   procedure Initialize_Cond Initialize_Cond/p135,6300
+   procedure Finalize_Cond Finalize_Cond/p138,6413
+   procedure Cond_Wait Cond_Wait/p142,6591
+   procedure Cond_Timed_WaitCond_Timed_Wait/p155,7396
+   procedure Cond_Signal Cond_Signal/p164,7812
+   procedure Set_Priority Set_Priority/p169,8040
+   procedure Set_Own_Priority Set_Own_Priority/p173,8200
+   function Get_Priority Get_Priority/f177,8348
+   function Get_Own_Priority Get_Own_Priority/f181,8504
+   procedure Create_LL_TaskCreate_LL_Task/p185,8647
+   procedure Exit_LL_Task;Exit_LL_Task/p198,9282
+   procedure Abort_Task Abort_Task/p203,9516
+   procedure Test_Abort;Test_Abort/p210,9878
+   type Abort_Handler_Pointer Abort_Handler_Pointer/t217,10233
+   procedure Install_Abort_Handler Install_Abort_Handler/p219,10312
+   procedure Install_Error_Handler Install_Error_Handler/p226,10741
+   procedure LL_Assert LL_Assert/p231,10983
+   type Proc Proc/t238,11240
+   type TAS_Cell TAS_Cell/t242,11328
+   procedure Initialize_TAS_Cell Initialize_TAS_Cell/p249,11670
+   procedure Finalize_TAS_Cell Finalize_TAS_Cell/p255,11941
+   procedure Clear Clear/p260,12157
+   procedure Test_And_Set Test_And_Set/p267,12462
+   function  Is_Set Is_Set/f275,12877
+   type Lock Lock/t283,13155
+   type Condition_Variable Condition_Variable/t288,13267
+   type TAS_Cell TAS_Cell/t293,13389
+
+ada-src/waroquiers.ada,1503
+package Pkg1 Pkg1/s3,89
+  type Private_T Private_T/t5,106
+  package Inner1 Inner1/s7,136
+    procedure Private_T;Private_T/p8,156
+  package Inner2 Inner2/s11,196
+    task Private_T;Private_T/k12,216
+  type Public_T Public_T/t15,251
+  procedure Pkg1_Proc1;Pkg1_Proc1/p21,336
+  procedure Pkg1_Proc2 Pkg1_Proc2/p23,361
+  function Pkg1_Func1 Pkg1_Func1/f25,400
+  function Pkg1_Func2 Pkg1_Func2/f27,439
+  package Pkg1_Pkg1 Pkg1_Pkg1/s30,508
+    procedure Pkg1_Pkg1_Proc1;Pkg1_Pkg1_Proc1/p31,531
+  task type Task_Type Task_Type/k34,580
+  type Private_T Private_T/t40,671
+package body Pkg1 Pkg1/b46,766
+  procedure Pkg1_Proc1 Pkg1_Proc1/p48,788
+  package body Inner1 Inner1/b53,840
+    procedure Private_T Private_T/p54,865
+  package body Inner2 Inner2/b60,938
+    task body Private_T Private_T/b61,963
+  task body Task_Type Task_Type/b68,1064
+  procedure Pkg1_Proc2 Pkg1_Proc2/p82,1250
+  function Pkg1_Func1 Pkg1_Func1/f88,1328
+  function Pkg1_Func2 Pkg1_Func2/f90,1379
+  package body Pkg1_Pkg1 Pkg1_Pkg1/b96,1479
+package body Pkg1_Pkg1 Pkg1_Pkg1/b100,1544
+  procedure Pkg1_Pkg1_Proc1 Pkg1_Pkg1_Proc1/p101,1570
+function  Pkg1_Func1 Pkg1_Func1/f107,1657
+package Truc Truc/s112,1764
+package Truc.Bidule Truc.Bidule/s116,1816
+  protected Bidule Bidule/t125,1964
+  protected type Machin_T Machin_T/t131,2046
+package body Truc.Bidule Truc.Bidule/b138,2153
+  protected body Bidule Bidule/b139,2181
+  protected body Machin_T Machin_T/b146,2281
+
+c-src/abbrev.c,1432
+Lisp_Object Vabbrev_table_name_list;42,1416
+Lisp_Object Vglobal_abbrev_table;47,1561
+Lisp_Object Vfundamental_mode_abbrev_table;51,1672
+int abbrevs_changed;55,1773
+int abbrev_all_caps;57,1795
+Lisp_Object Vabbrev_start_location;62,1944
+Lisp_Object Vabbrev_start_location_buffer;65,2033
+Lisp_Object Vlast_abbrev;69,2142
+Lisp_Object Vlast_abbrev_text;74,2311
+int last_abbrev_point;78,2401
+Lisp_Object Vpre_abbrev_expand_hook,82,2474
+Lisp_Object Vpre_abbrev_expand_hook, Qpre_abbrev_expand_hook;82,2474
+DEFUN ("make-abbrev-table", Fmake_abbrev_table,make-abbrev-table84,2538
+DEFUN ("clear-abbrev-table", Fclear_abbrev_table,clear-abbrev-table91,2730
+DEFUN ("define-abbrev", Fdefine_abbrev,define-abbrev106,3111
+DEFUN ("define-global-abbrev", 
Fdefine_global_abbrev,define-global-abbrev148,4430
+DEFUN ("define-mode-abbrev", Fdefine_mode_abbrev,define-mode-abbrev159,4801
+DEFUN ("abbrev-symbol", Fabbrev_symbol,abbrev-symbol173,5269
+DEFUN ("abbrev-expansion", Fabbrev_expansion,abbrev-expansion201,6233
+DEFUN ("expand-abbrev", Fexpand_abbrev,expand-abbrev217,6748
+DEFUN ("unexpand-abbrev", Funexpand_abbrev,unexpand-abbrev388,11669
+write_abbrev 425,12876
+describe_abbrev 444,13311
+DEFUN ("insert-abbrev-table-description", 
Finsert_abbrev_table_description,insert-abbrev-table-description465,13826
+DEFUN ("define-abbrev-table", 
Fdefine_abbrev_table,define-abbrev-table505,14982
+syms_of_abbrev 539,16059
+
+c-src/torture.c,197
+(*tag1 tag118,452
+#define notag2 26,553
+(*tag2 tag229,630
+(*tag3 tag339,772
+#define notag4 45,861
+(*tag4 tag448,955
+tag5 57,1081
+tag6 66,1208
+int pp1(74,1317
+pp287,1419
+pp3(100,1518
+
+c-src/getopt.h,275
+#define _GETOPT_H 19,801
+struct option73,2797
+  const char *name;name76,2826
+  char *name;name78,2852
+  int has_arg;82,3009
+  int *flag;flag83,3024
+  int val;84,3037
+#define        no_argument     89,3124
+#define required_argument      90,3147
+#define optional_argument      91,3175
+
+c-src/etags.c,12045
+char pot_etags_version[pot_etags_version81,3470
+#  undef DEBUG84,3552
+#  define DEBUG 85,3567
+#  define DEBUG 87,3594
+#  define NDEBUG       88,3617
+# define _GNU_SOURCE 94,3705
+# undef MSDOS100,3876
+# undef  WINDOWSNT101,3890
+# define WINDOWSNT102,3909
+# undef MSDOS106,3968
+# define MSDOS 107,3982
+# define MSDOS 110,4032
+# define MAXPATHLEN 115,4111
+# undef HAVE_NTGUI116,4141
+# undef  DOS_NT117,4160
+# define DOS_NT118,4176
+# undef  assert        135,4482
+# define assert(136,4541
+# undef  CTAGS146,4857
+# define CTAGS 147,4872
+# define CTAGS 149,4898
+#define streq(152,4927
+#define strcaseeq(153,4996
+#define strneq(154,5075
+#define strncaseeq(155,5151
+#define CHARS 157,5238
+#define CHAR(158,5278
+#define        iswhite(159,5329
+#define notinname(160,5394
+#define        begtoken(161,5469
+#define        intoken(162,5542
+#define        endtoken(163,5614
+#define ISALNUM(165,5684
+#define ISALPHA(166,5722
+#define ISDIGIT(167,5760
+#define ISLOWER(168,5798
+#define lowcase(170,5837
+#define xnew(179,6015
+#define xrnew(180,6083
+typedef void Lang_function 182,6164
+  const char *suffix;suffix186,6219
+  const char *command;command187,6294
+} compressor;188,6365
+  const char *name;name192,6397
+  const char *help;help193,6449
+  Lang_function *function;function194,6508
+  const char **suffixes;suffixes195,6556
+  const char **filenames;filenames196,6633
+  const char **interpreters;interpreters197,6702
+  bool metasource;198,6771
+} language;199,6835
+typedef struct fdesc201,6848
+  struct fdesc *next;next203,6871
+  char *infname;infname204,6920
+  char *infabsname;infabsname205,6973
+  char *infabsdir;infabsdir206,7038
+  char *taggedfname;taggedfname207,7091
+  language *lang;lang208,7149
+  char *prop;prop209,7191
+  bool usecharno;210,7249
+  bool written;211,7311
+} fdesc;212,7366
+typedef struct node_st214,7376
+  struct node_st *left,left216,7428
+  struct node_st *left, *right;right216,7428
+  fdesc *fdp;fdp217,7486
+  char *name;name218,7548
+  char *regex;regex219,7580
+  bool valid;220,7617
+  bool is_func;221,7670
+  bool been_warned;222,7733
+  int lno;223,7801
+  long cno;224,7842
+} node;225,7894
+  long size;236,8208
+  int len;237,8221
+  char *buffer;buffer238,8232
+} linebuffer;239,8248
+    at_language,245,8344
+    at_regexp,246,8393
+    at_filename,247,8437
+    at_stdin,248,8473
+    at_end     249,8516
+  } arg_type;250,8557
+  language *lang;lang251,8593
+  char *what;what252,8656
+} argument;253,8698
+typedef struct regexp256,8758
+  struct regexp *p_next;p_next258,8782
+  language *lang;lang259,8837
+  char *pattern;pattern260,8897
+  char *name;name261,8940
+  struct re_pattern_buffer *pat;pat262,8971
+  struct re_registers regs;263,9031
+  bool error_signaled;264,9078
+  bool force_explicit_name;265,9141
+  bool ignore_case;266,9206
+  bool multi_line;267,9259
+} regexp;268,9325
+static void error 311,10780
+# undef STDIN408,15073
+#define STDIN 411,15095
+static compressor compressors[compressors457,17664
+static const char *Ada_suffixes Ada_suffixes473,17907
+static const char Ada_help 475,17977
+static const char *Asm_suffixes Asm_suffixes493,18580
+static const char Asm_help 504,18976
+static const char *default_C_suffixes default_C_suffixes512,19312
+static const char default_C_help 515,19413
+static const char default_C_help 523,19850
+static const char *Cplusplus_suffixes Cplusplus_suffixes535,20460
+static const char Cplusplus_help 540,20658
+static const char *Cjava_suffixes Cjava_suffixes549,21113
+static char Cjava_help 551,21172
+static const char *Cobol_suffixes Cobol_suffixes556,21337
+static char Cobol_help 558,21402
+static const char *Cstar_suffixes Cstar_suffixes562,21543
+static const char *Erlang_suffixes Erlang_suffixes565,21607
+static const char Erlang_help 567,21673
+const char *Forth_suffixes Forth_suffixes571,21799
+static const char Forth_help 573,21857
+static const char *Fortran_suffixes Fortran_suffixes577,22008
+static const char Fortran_help 579,22085
+static const char *HTML_suffixes HTML_suffixes582,22190
+static const char HTML_help 584,22264
+static const char *Lisp_suffixes Lisp_suffixes589,22452
+static const char Lisp_help 591,22556
+static const char *Lua_suffixes Lua_suffixes598,22871
+static const char Lua_help 600,22934
+static const char *Makefile_filenames Makefile_filenames603,23010
+static const char Makefile_help 605,23133
+static const char *Objc_suffixes Objc_suffixes609,23277
+static const char Objc_help 613,23399
+static const char *Pascal_suffixes Pascal_suffixes619,23714
+static const char Pascal_help 621,23778
+static const char *Perl_suffixes Perl_suffixes626,23966
+static const char *Perl_interpreters Perl_interpreters628,24028
+static const char Perl_help 630,24100
+static const char *PHP_suffixes PHP_suffixes637,24451
+static const char PHP_help 639,24523
+static const char *plain_C_suffixes plain_C_suffixes643,24678
+static const char *PS_suffixes PS_suffixes647,24762
+static const char PS_help 649,24848
+static const char *Prolog_suffixes Prolog_suffixes652,24931
+static const char Prolog_help 654,24993
+static const char *Python_suffixes Python_suffixes658,25107
+static const char Python_help 660,25165
+static const char *Scheme_suffixes Scheme_suffixes665,25347
+static const char Scheme_help 667,25460
+static const char *TeX_suffixes TeX_suffixes672,25683
+static const char TeX_help 674,25781
+static const char *Texinfo_suffixes Texinfo_suffixes686,26316
+static const char Texinfo_help 688,26395
+static const char *Yacc_suffixes Yacc_suffixes691,26492
+static const char Yacc_help 693,26606
+static const char auto_help 699,26856
+static const char none_help 703,27020
+static const char no_lang_help 707,27143
+static language lang_names 718,27355
+print_language_names 753,29532
+# define EMACS_NAME 786,30755
+# define VERSION 789,30811
+print_version 792,30869
+# define PRINT_UNDOCUMENTED_OPTIONS_HELP 804,31173
+print_help 808,31250
+main 981,37438
+get_compressor_from_suffix 1319,46217
+get_language_from_langname 1355,47158
+get_language_from_interpreter 1377,47545
+get_language_from_filename 1399,47976
+process_file_name 1433,48834
+process_file 1555,51665
+init 1632,54150
+find_entries 1656,54901
+make_tag 1814,59707
+pfnote 1856,60942
+free_tree 1917,62744
+free_fdesc 1935,63029
+add_node 1955,63472
+invalidate_nodes 2035,65537
+static int number_len 2068,66193
+total_size_of_entries 2087,66694
+put_entries 2107,67154
+#define C_EXT  2193,68995
+#define C_PLAIN 2194,69037
+#define C_PLPL 2195,69070
+#define C_STAR 2196,69104
+#define C_JAVA 2197,69137
+#define C_AUTO 2198,69172
+#define YACC   2199,69242
+enum sym_type2204,69312
+  st_none,2206,69328
+  st_C_objprot,2207,69339
+  st_C_objprot, st_C_objimpl,2207,69339
+  st_C_objprot, st_C_objimpl, st_C_objend,2207,69339
+  st_C_gnumacro,2208,69382
+  st_C_ignore,2209,69399
+  st_C_ignore, st_C_attribute,2209,69399
+  st_C_javastruct,2210,69430
+  st_C_operator,2211,69449
+  st_C_class,2212,69466
+  st_C_class, st_C_template,2212,69466
+  st_C_struct,2213,69495
+  st_C_struct, st_C_extern,2213,69495
+  st_C_struct, st_C_extern, st_C_enum,2213,69495
+  st_C_struct, st_C_extern, st_C_enum, st_C_define,2213,69495
+  st_C_struct, st_C_extern, st_C_enum, st_C_define, st_C_typedef2213,69495
+struct C_stab_entry 2271,71278
+struct C_stab_entry { const char *name;name2271,71278
+struct C_stab_entry { const char *name; int c_ext;2271,71278
+struct C_stab_entry { const char *name; int c_ext; enum sym_type 
type;2271,71278
+hash 2275,71409
+in_word_set 2321,72937
+      TOTAL_KEYWORDS 2325,73018
+      MIN_WORD_LENGTH 2326,73045
+      MAX_WORD_LENGTH 2327,73072
+      MIN_HASH_VALUE 2328,73100
+      MAX_HASH_VALUE 2329,73126
+C_symtype 2387,74985
+static bool inattribute;2400,75234
+  fvnone,2408,75435
+  fdefunkey,2409,75466
+  fdefunname,2410,75512
+  foperator,2411,75556
+  fvnameseen,2412,75613
+  fstartlist,2413,75666
+  finlist,2414,75722
+  flistseen,2415,75765
+  fignore,2416,75813
+  vignore      2417,75856
+} fvdef;2418,75901
+static bool fvextern;2420,75911
+  tnone,2428,76089
+  tkeyseen,2429,76119
+  ttypeseen,2430,76160
+  tinbody,2431,76199
+  tend,2432,76238
+  tignore      2433,76279
+} typdef;2434,76320
+  snone,2443,76499
+  skeyseen,2445,76575
+  stagseen,2446,76620
+  scolonseen   2447,76661
+} structdef;2448,76715
+static const char *objtag objtag2453,76809
+  dnone,2460,76942
+  dsharpseen,2461,76972
+  ddefineseen,2462,77025
+  dignorerest  2463,77070
+} definedef;2464,77112
+  onone,2472,77267
+  oprotocol,2473,77297
+  oimplementation,2474,77347
+  otagseen,2475,77395
+  oparenseen,2476,77431
+  ocatseen,2477,77486
+  oinbody,2478,77525
+  omethodsign,2479,77568
+  omethodtag,2480,77626
+  omethodcolon,2481,77666
+  omethodparm,2482,77709
+  oignore      2483,77755
+} objdef;2484,77787
+static struct tok2491,77944
+  char *line;line2493,77964
+  int offset;2494,78014
+  int length;2495,78067
+  bool valid;2502,78352
+  bool named;2505,78487
+  int lineno;2506,78528
+  long linepos;2507,78576
+} token;2508,78626
+  char **cname;cname2519,78950
+  int *bracelev;bracelev2520,78993
+  int nl;2521,79042
+  int size;2522,79096
+} cstack;2523,79136
+#define nestlev        2525,79264
+#define instruct       2527,79369
+pushclass_above 2531,79489
+popclass_above 2550,79948
+write_classname 2564,80162
+consider_token 2613,81341
+  long linepos;2922,88499
+  linebuffer lb;2923,88515
+} lbs[lbs2924,88532
+#define current_lb_is_new 2926,88543
+#define switch_line_buffers(2927,88588
+#define curlb 2929,88641
+#define newlb 2930,88672
+#define curlinepos 2931,88703
+#define newlinepos 2932,88744
+#define plainc 2934,88786
+#define cplpl 2935,88830
+#define cjava 2936,88861
+#define CNL_SAVE_DEFINEDEF(2938,88905
+#define CNL(2947,89117
+make_C_tag 2960,89375
+C_entries 2986,90194
+default_C_entries 3833,110156
+plain_C_entries 3840,110276
+Cplusplus_entries 3847,110364
+Cjava_entries 3854,110460
+Cstar_entries 3861,110550
+Yacc_entries 3868,110642
+#define LOOP_ON_INPUT_LINES(3875,110720
+#define LOOKING_AT(3884,111056
+#define LOOKING_AT_NOCASE(3891,111461
+just_read_file 3901,111861
+F_takeprec 3914,112039
+F_getit 3937,112366
+Fortran_functions 3961,112840
+Ada_getit 4052,114669
+Ada_funcs 4115,116044
+Asm_labels 4228,118582
+Perl_functions 4261,119549
+Python_functions 4357,122057
+PHP_functions 4387,122684
+Cobol_paragraphs 4466,124471
+Makefile_targets 4494,125029
+Pascal_functions 4529,125950
+L_getit 4709,130318
+Lisp_functions 4725,130664
+Lua_functions 4785,131850
+PS_functions 4811,132385
+Forth_words 4841,133053
+Scheme_functions 4877,134092
+static linebuffer *TEX_toktab TEX_toktab4908,134781
+static const char *TEX_defenv TEX_defenv4912,134974
+static char TEX_esc 4920,135261
+static char TEX_opgrp 4921,135289
+static char TEX_clgrp 4922,135318
+TeX_commands 4928,135395
+#define TEX_LESC 4986,136652
+#define TEX_SESC 4987,136674
+TEX_mode 4992,136804
+TEX_decode_env 5026,137509
+Texinfo_nodes 5071,138554
+HTML_labels 5094,139013
+Prolog_functions 5219,142347
+prolog_skip_comment 5255,143128
+prolog_pr 5281,143736
+prolog_atom 5319,144628
+Erlang_functions 5379,145666
+erlang_func 5438,146965
+erlang_attribute 5476,147642
+erlang_atom 5496,148061
+scan_separators 5534,149080
+analyze_regex 5586,150460
+add_regex 5654,152050
+substitute 5767,154797
+free_regexps 5814,155837
+regex_tag_multiline 5836,156291
+nocase_tail 5913,158263
+get_tag 5928,158519
+readline_internal 5959,159455
+readline 6037,161296
+savestr 6230,167243
+savenstr 6240,167473
+skip_spaces 6249,167679
+skip_non_spaces 6258,167833
+skip_name 6267,167983
+fatal 6277,168156
+pfatal 6284,168253
+suggest_asking_for_help 6291,168332
+error 6300,168554
+concat 6313,168846
+etags_getcwd 6329,169259
+relative_filename 6350,169725
+absolute_filename 6389,170751
+absolute_dirname 6453,172416
+filename_is_absolute 6472,172845
+canonicalize_filename 6484,173096
+# define ISUPPER(6491,173235
+linebuffer_init 6514,173656
+linebuffer_setlen 6524,173887
+xmalloc 6536,174148
+xrealloc 6545,174314
+
+c-src/exit.c,99
+    size_t n;28,961
+    void EXFUN((*fn[fn29,975
+  } __libc_atexit;30,1011
+DEFUN(exit,38,1252
+
+c-src/exit.strange_suffix,99
+    size_t n;28,961
+    void EXFUN((*fn[fn29,975
+  } __libc_atexit;30,1011
+DEFUN(exit,38,1252
+
+c-src/sysdep.h,491
+#define        ENTRY(21,865
+#define        PSEUDO(26,972
+    movl $SYS_##syscall_nam$SYS_##syscall_na31,1132
+    movl $SYS_##syscall_name, %eax;eax31,1132
+    int $0x80;32,1180
+    test %eax,eax33,1210
+    test %eax, %eax;eax33,1210
+    jl syscall_error;34,1245
+#define        XCHG_0  47,1562
+#define        XCHG_1  48,1606
+#define        XCHG_2  49,1648
+#define        XCHG_3  50,1691
+#define        XCHG_4  51,1734
+#define        XCHG_5  52,1777
+#define        r0      54,1821
+#define        r1      55,1875
+#define scratch 56,1932
+#define MOVE(57,2001
+
+c-src/tab.c,196
+static int             count_words(15,263
+static char            *get_word(get_word35,553
+void                   tab_free(59,966
+char                   **tab_fill(tab_fill70,1129
+int                    tab_delete_first(91,1638
+int                    tab_count_words(103,1820
+
+c-src/dostorture.c,197
+(*tag1 tag118,451
+#define notag2 26,552
+(*tag2 tag229,629
+(*tag3 tag339,771
+#define notag4 45,860
+(*tag4 tag448,954
+tag5 57,1080
+tag6 66,1207
+int pp1(74,1316
+pp287,1418
+pp3(100,1517
+
+c-src/emacs/src/gmalloc.c,4207
+#define USE_PTHREAD25,1002
+#undef get_current_dir_name33,1126
+#undef malloc64,2110
+#undef realloc65,2124
+#undef calloc66,2139
+#undef free67,2153
+#define malloc 68,2165
+#define realloc 69,2188
+#define calloc 70,2213
+#define aligned_alloc 71,2236
+#define free 72,2273
+#define DUMPED 80,2472
+#define ALLOCATED_BEFORE_DUMPING(81,2507
+extern void *malloc malloc94,2718
+#define INT_BIT        124,3934
+#define BLOCKLOG       125,3977
+#define BLOCKSIZE      126,4018
+#define BLOCKIFY(127,4052
+#define HEAP   131,4215
+#define FINAL_FREE_BLOCKS      135,4391
+       int type;145,4676
+               size_t nfree;150,4720
+               size_t first;151,4777
+             } frag;152,4834
+           ptrdiff_t size;156,5055
+         } info;157,5076
+      } busy;158,5087
+       size_t size;163,5215
+       size_t next;164,5272
+       size_t prev;165,5321
+      } free;166,5374
+  } malloc_info;167,5388
+#define BLOCK(176,5620
+#define ADDRESS(177,5682
+struct list186,5939
+    struct list *next;next188,5955
+    struct list *prev;prev189,5978
+struct alignlist196,6153
+    struct alignlist *next;next198,6174
+    void *aligned;aligned199,6202
+    void *exact;exact200,6270
+#define LOCK(223,7064
+#define UNLOCK(228,7195
+#define LOCK_ALIGNED_BLOCKS(233,7329
+#define UNLOCK_ALIGNED_BLOCKS(238,7484
+#define LOCK(244,7649
+#define UNLOCK(245,7664
+#define LOCK_ALIGNED_BLOCKS(246,7681
+#define UNLOCK_ALIGNED_BLOCKS(247,7711
+enum mcheck_status283,9092
+    MCHECK_DISABLED 285,9115
+    MCHECK_OK,286,9187
+    MCHECK_FREE,287,9226
+    MCHECK_HEAD,288,9270
+    MCHECK_TAIL        289,9334
+struct mstats308,10153
+    size_t bytes_total;310,10171
+    size_t chunks_used;311,10225
+    size_t bytes_used;312,10285
+    size_t chunks_free;313,10351
+    size_t bytes_free;314,10406
+char *_heapbase;_heapbase355,11829
+malloc_info *_heapinfo;_heapinfo358,11927
+static size_t heapsize;361,11983
+size_t _heapindex;364,12047
+size_t _heaplimit;367,12109
+struct list _fraghead[_fraghead370,12171
+size_t _chunks_used;373,12229
+size_t _bytes_used;374,12250
+size_t _chunks_free;375,12270
+size_t _bytes_free;376,12291
+int __malloc_initialized;379,12340
+size_t __malloc_extra_blocks;381,12367
+static int state_protected_p;400,12912
+static size_t last_state_size;401,12942
+static malloc_info *last_heapinfo;last_heapinfo402,12973
+protect_malloc_state 405,13014
+#define PROTECT_MALLOC_STATE(426,13627
+#define PROTECT_MALLOC_STATE(429,13697
+align 435,13794
+get_contiguous_space 466,14616
+register_heapinfo 497,15325
+pthread_mutex_t _malloc_mutex 517,15879
+pthread_mutex_t _aligned_blocks_mutex 518,15938
+int _malloc_thread_enabled_p;519,16005
+malloc_atfork_handler_prepare 522,16048
+malloc_atfork_handler_parent 529,16139
+malloc_atfork_handler_child 536,16233
+malloc_enable_thread 544,16375
+malloc_initialize_1 563,16961
+__malloc_initialize 594,17793
+static int morecore_recursing;604,17926
+morecore_nolock 609,18066
+_malloc_internal_nolock 722,21584
+_malloc_internal 920,28102
+malloc 932,28247
+_malloc 961,29140
+_free 967,29196
+_realloc 973,29240
+struct alignlist *_aligned_blocks _aligned_blocks1004,30345
+_free_internal_nolock 1009,30474
+_free_internal 1255,38476
+free 1265,38603
+weak_alias 1277,38799
+#define min(1306,39813
+_realloc_internal_nolock 1319,40309
+_realloc_internal 1435,43563
+realloc 1447,43726
+calloc 1478,44894
+#define        __sbrk  1513,46042
+__default_morecore 1525,46511
+aligned_alloc 1557,47522
+memalign 1647,49704
+posix_memalign 1656,49909
+static size_t pagesize;1703,51317
+valloc 1706,51349
+#undef malloc1715,51490
+#undef realloc1716,51504
+#undef calloc1717,51519
+#undef aligned_alloc1718,51533
+#undef free1719,51554
+hybrid_malloc 1736,52083
+hybrid_calloc 1744,52188
+hybrid_free 1752,52319
+hybrid_aligned_alloc 1765,52626
+hybrid_realloc 1780,52984
+hybrid_get_current_dir_name 1811,53797
+#define MAGICWORD      1854,55206
+#define MAGICFREE      1855,55261
+#define MAGICBYTE      1856,55316
+#define MALLOCFLOOD    1857,55348
+#define FREEFLOOD      1858,55382
+struct hdr1860,55415
+    size_t size;1862,55430
+    size_t magic;1863,55484
+checkhdr 1867,55581
+freehook 1891,56022
+mallochook 1927,56804
+reallochook 1944,57143
+mabort 1978,57901
+static int mcheck_used 2012,58586
+mcheck 2015,58619
+mprobe 2035,59138
+
+c-src/emacs/src/regex.h,4485
+#define _REGEX_H 21,836
+typedef unsigned long reg_syntax_t;43,1577
+#define RE_BACKSLASH_ESCAPE_IN_LISTS 47,1749
+#define RE_BK_PLUS_QM 52,1969
+#define RE_CHAR_CLASSES 58,2298
+#define RE_CONTEXT_INDEP_ANCHORS 72,3032
+#define RE_CONTEXT_INDEP_OPS 80,3458
+#define RE_CONTEXT_INVALID_OPS 84,3658
+#define RE_DOT_NEWLINE 88,3801
+#define RE_DOT_NOT_NULL 92,3937
+#define RE_HAT_LISTS_NOT_NEWLINE 96,4082
+#define RE_INTERVALS 101,4292
+#define RE_LIMITED_OPS 105,4441
+#define RE_NEWLINE_ALT 109,4583
+#define RE_NO_BK_BRACES 114,4773
+#define RE_NO_BK_PARENS 118,4964
+#define RE_NO_BK_REFS 122,5120
+#define RE_NO_BK_VBAR 126,5316
+#define RE_NO_EMPTY_RANGES 132,5610
+#define RE_UNMATCHED_RIGHT_PAREN_ORD 136,5766
+#define RE_NO_POSIX_BACKTRACKING 140,5937
+#define RE_NO_GNU_OPS 144,6133
+#define RE_FRUGAL 147,6253
+#define RE_SHY_GROUPS 150,6360
+#define RE_NO_NEWLINE_ANCHOR 153,6468
+#define RE_DEBUG 161,6884
+#define RE_SYNTAX_EMACS        183,7684
+#define RE_SYNTAX_AWK  186,7780
+#define RE_SYNTAX_GNU_AWK      193,8084
+#define RE_SYNTAX_POSIX_AWK 197,8255
+#define RE_SYNTAX_GREP 201,8393
+#define RE_SYNTAX_EGREP        206,8549
+#define RE_SYNTAX_POSIX_EGREP  212,8765
+#define RE_SYNTAX_ED 216,8910
+#define RE_SYNTAX_SED 218,8954
+#define _RE_SYNTAX_POSIX_COMMON        221,9072
+#define RE_SYNTAX_POSIX_BASIC  225,9215
+#define RE_SYNTAX_POSIX_MINIMAL_BASIC  231,9508
+#define RE_SYNTAX_POSIX_EXTENDED       234,9598
+#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED       242,9967
+# undef RE_DUP_MAX253,10454
+#define RE_DUP_MAX 256,10540
+#define REG_EXTENDED 263,10762
+#define REG_ICASE 267,10886
+#define REG_NEWLINE 272,11070
+#define REG_NOSUB 276,11248
+#define REG_NOTBOL 286,11614
+#define REG_NOTEOL 289,11688
+  REG_ENOSYS 297,11859
+  REG_NOERROR 300,11941
+  REG_NOMATCH,301,11976
+  REG_BADPAT,305,12123
+  REG_ECOLLATE,306,12162
+  REG_ECTYPE,307,12203
+  REG_EESCAPE,308,12255
+  REG_ESUBREG,309,12298
+  REG_EBRACK,310,12345
+  REG_EPAREN,311,12391
+  REG_EBRACE,312,12436
+  REG_BADBR,313,12472
+  REG_ERANGE,314,12519
+  REG_ESPACE,315,12560
+  REG_BADRPT,316,12601
+  REG_EEND,319,12693
+  REG_ESIZE,320,12728
+  REG_ERPAREN,321,12790
+  REG_ERANGEX  322,12859
+} reg_errcode_t;323,12911
+# define RE_TRANSLATE_TYPE 332,13273
+struct re_pattern_buffer335,13315
+  unsigned char *buffer;buffer341,13538
+  size_t allocated;344,13614
+  size_t used;347,13686
+  reg_syntax_t syntax;350,13769
+  char *fastmap;fastmap355,13975
+  RE_TRANSLATE_TYPE translate;361,14241
+  size_t re_nsub;364,14329
+  unsigned can_be_null 370,14624
+#define REGS_UNALLOCATED 376,14889
+#define REGS_REALLOCATE 377,14916
+#define REGS_FIXED 378,14942
+  unsigned regs_allocated 379,14963
+  unsigned fastmap_accurate 383,15136
+  unsigned no_sub 387,15267
+  unsigned not_bol 391,15398
+  unsigned not_eol 394,15475
+  unsigned used_syntax 398,15655
+  unsigned multibyte 403,15805
+  unsigned target_multibyte 407,15941
+  int charset_unibyte;410,16032
+typedef struct re_pattern_buffer regex_t;416,16098
+typedef ssize_t regoff_t;423,16492
+struct re_registers428,16652
+  unsigned num_regs;430,16674
+  regoff_t *start;start431,16695
+  regoff_t *end;end432,16714
+# define RE_NREGS 440,16942
+  regoff_t rm_so;449,17159
+  regoff_t rm_eo;450,17239
+} regmatch_t;451,17317
+#  define _Restrict_ 540,20886
+#  define _Restrict_ 542,20979
+#  define _Restrict_544,21018
+#  define _Restrict_arr_ 555,21418
+#  define _Restrict_arr_557,21461
+#  define CHAR_CLASS_MAX_LENGTH 593,22470
+#  define CHAR_CLASS_MAX_LENGTH 597,22648
+typedef wctype_t re_wctype_t;599,22692
+typedef wchar_t re_wchar_t;600,22722
+# define re_wctype 601,22750
+# define re_iswctype 602,22776
+# define re_wctype_to_bit(603,22806
+# define CHAR_CLASS_MAX_LENGTH 605,22844
+# define btowc(606,22906
+typedef enum { RECC_ERROR 609,22953
+              RECC_ALNUM,610,22984
+              RECC_ALNUM, RECC_ALPHA,610,22984
+              RECC_ALNUM, RECC_ALPHA, RECC_WORD,610,22984
+              RECC_GRAPH,611,23027
+              RECC_GRAPH, RECC_PRINT,611,23027
+              RECC_LOWER,612,23059
+              RECC_LOWER, RECC_UPPER,612,23059
+              RECC_PUNCT,613,23091
+              RECC_PUNCT, RECC_CNTRL,613,23091
+              RECC_DIGIT,614,23123
+              RECC_DIGIT, RECC_XDIGIT,614,23123
+              RECC_BLANK,615,23156
+              RECC_BLANK, RECC_SPACE,615,23156
+              RECC_MULTIBYTE,616,23188
+              RECC_MULTIBYTE, RECC_NONASCII,616,23188
+              RECC_ASCII,617,23227
+              RECC_ASCII, RECC_UNIBYTE617,23227
+} re_wctype_t;618,23260
+typedef int re_wchar_t;623,23387
+
+c-src/emacs/src/keyboard.c,13949
+volatile int interrupt_input_blocked;76,1808
+volatile bool pending_signals;80,1944
+#define KBD_BUFFER_SIZE 82,1976
+KBOARD *initial_kboard;initial_kboard84,2006
+KBOARD *current_kboard;current_kboard85,2030
+static KBOARD *all_kboards;all_kboards86,2054
+static bool single_kboard;89,2154
+#define NUM_RECENT_KEYS 91,2182
+static int recent_keys_index;94,2269
+static int total_keys;97,2357
+static Lisp_Object recent_keys;100,2443
+Lisp_Object this_command_keys;107,2777
+ptrdiff_t this_command_key_count;108,2808
+static bool this_command_key_count_reset;112,2922
+static Lisp_Object raw_keybuf;116,3074
+static int raw_keybuf_count;117,3105
+#define GROW_RAW_KEYBUF        119,3135
+static ptrdiff_t this_single_command_key_start;125,3350
+static ptrdiff_t before_command_key_count;129,3498
+static ptrdiff_t before_command_echo_length;130,3541
+sigjmp_buf return_to_command_loop;135,3677
+static Lisp_Object recover_top_level_message;138,3791
+static Lisp_Object regular_top_level_message;143,3930
+static sys_jmp_buf getcjmp;147,4031
+bool waiting_for_input;150,4095
+static bool echoing;154,4186
+static struct kboard 
*ok_to_echo_at_next_pause;ok_to_echo_at_next_pause159,4328
+struct kboard *echo_kboard;echo_kboard166,4632
+Lisp_Object echo_message_buffer;171,4744
+bool immediate_quit;174,4837
+int quit_char;192,5623
+EMACS_INT command_loop_level;195,5680
+Lisp_Object unread_switch_frame;204,6108
+static ptrdiff_t last_non_minibuf_size;207,6216
+uintmax_t num_input_events;210,6334
+static EMACS_INT last_auto_save;214,6428
+static ptrdiff_t last_point_position;217,6523
+Lisp_Object internal_last_event_frame;228,7028
+static Lisp_Object read_key_sequence_cmd;232,7168
+static Lisp_Object read_key_sequence_remapped;233,7210
+static FILE *dribble;dribble236,7310
+bool input_pending;239,7368
+static bool input_was_pending;287,10022
+static struct input_event kbd_buffer[kbd_buffer291,10107
+static struct input_event *kbd_fetch_ptr;kbd_fetch_ptr297,10386
+static struct input_event * volatile kbd_store_ptr;302,10601
+unsigned timers_run;320,11296
+struct timespec 
*input_available_clear_time;input_available_clear_time324,11408
+bool interrupt_input;328,11573
+bool interrupts_deferred;331,11671
+static struct timespec timer_idleness_start_time;335,11746
+static struct timespec timer_last_idleness_start_time;340,11916
+#define READABLE_EVENTS_DO_TIMERS_NOW  346,12046
+#define READABLE_EVENTS_FILTER_EVENTS  347,12094
+#define READABLE_EVENTS_IGNORE_SQUEEZABLES     348,12142
+kset_echo_string 392,14088
+kset_kbd_queue 397,14184
+kset_keyboard_translate_table 402,14276
+kset_last_prefix_arg 407,14399
+kset_last_repeatable_command 412,14504
+kset_local_function_key_map 417,14625
+kset_overriding_terminal_local_map 422,14744
+kset_real_last_command 427,14877
+kset_system_key_syms 432,14986
+echo_add_key 443,15249
+echo_char 527,17527
+echo_dash 541,17813
+echo_now 586,19140
+cancel_echoing 635,20614
+echo_length 648,20922
+echo_truncate 660,21253
+add_command_key 672,21582
+recursive_edit_1 697,22406
+record_auto_save 742,23848
+force_auto_save_soon 751,24016
+DEFUN ("recursive-edit", Frecursive_edit,recursive-edit759,24137
+recursive_edit_unwind 804,25747
+any_kboard_state 817,26013
+single_kboard_state 838,26665
+not_single_kboard_state 848,26803
+struct kboard_stack858,27065
+  KBOARD *kboard;kboard860,27087
+  struct kboard_stack *next;next861,27105
+static struct kboard_stack *kboard_stack;kboard_stack864,27138
+push_kboard 867,27186
+pop_kboard 879,27375
+temporarily_switch_to_single_kboard 914,28263
+record_single_kboard_state 943,29437
+restore_kboard_configuration 952,29621
+cmd_error 970,30077
+cmd_error_internal 1024,31510
+DEFUN ("command-error-default-function", 
Fcommand_error_default_function,command-error-default-function1043,32030
+command_loop 1094,33916
+command_loop_2 1134,35135
+top_level_2 1146,35339
+top_level_1 1152,35417
+DEFUN ("top-level", Ftop_level,top-level1164,35787
+user_error 1183,36288
+DEFUN ("exit-recursive-edit", 
Fexit_recursive_edit,exit-recursive-edit1189,36429
+DEFUN ("abort-recursive-edit", 
Fabort_recursive_edit,abort-recursive-edit1201,36819
+tracking_off 1216,37281
+DEFUN ("internal--track-mouse", Ftrack_mouse,track-mouse1234,37816
+bool ignore_mouse_drag_p;1256,38392
+some_mouse_moved 1259,38441
+Lisp_Object last_undo_boundary;1287,39032
+command_loop_1 1294,39273
+read_menu_command 1649,50889
+adjust_point_for_property 1678,51617
+safe_run_hooks_1 1831,57339
+safe_run_hooks_error 1841,57569
+safe_run_hook_funcall 1878,58576
+safe_run_hooks 1893,59058
+int poll_suppress_count;1908,59397
+static struct atimer *poll_timer;poll_timer1915,59487
+poll_for_input_1 1919,59589
+poll_for_input 1930,59789
+start_polling 1942,60053
+input_polling_used 1979,61091
+stop_polling 1994,61390
+set_poll_suppress_count 2009,61759
+bind_polling_period 2029,62141
+make_ctrl_char 2048,62492
+show_help_echo 2113,64455
+static Lisp_Object help_form_saved_window_configs;2156,65638
+read_char_help_form_unwind 2158,65701
+#define STOP_POLLING   2166,65959
+#define RESUME_POLLING 2170,66084
+read_event_from_main_queue 2175,66229
+read_decoded_event_from_main_queue 2249,68417
+#define MAX_ENCODED_BYTES 2254,68664
+echo_keystrokes_p 2342,71556
+read_char 2376,72848
+record_menu_key 3225,98949
+help_char_p 3258,99674
+record_char 3273,99953
+save_getcjmp 3412,104235
+restore_getcjmp 3418,104326
+readable_events 3430,104697
+int stop_character EXTERNALLY_VISIBLE;3497,106437
+event_to_kboard 3500,106493
+kbd_buffer_nr_stored 3522,107142
+kbd_buffer_store_event 3534,107483
+kbd_buffer_store_event_hold 3550,108025
+kbd_buffer_unget_event 3684,111617
+#define INPUT_EVENT_POS_MAX 3698,112018
+#define INPUT_EVENT_POS_MIN 3701,112147
+position_to_Time 3706,112287
+Time_to_position 3716,112514
+gen_help_event 3738,113171
+kbd_buffer_store_help_event 3756,113611
+discard_mouse_events 3773,113976
+kbd_buffer_events_waiting 3803,114711
+clear_event 3823,115068
+kbd_buffer_get_event 3836,115408
+process_special_events 4258,127881
+swallow_events 4322,129705
+timer_start_idle 4339,130098
+timer_stop_idle 4355,130576
+timer_resume_idle 4363,130720
+struct input_event last_timer_event EXTERNALLY_VISIBLE;4372,130912
+Lisp_Object pending_funcalls;4377,131172
+decode_timer 4381,131293
+timer_check_2 4414,132246
+timer_check 4572,136817
+DEFUN ("current-idle-time", Fcurrent_idle_time,current-idle-time4607,137662
+static Lisp_Object accent_key_syms;4625,138239
+static Lisp_Object func_key_syms;4626,138275
+static Lisp_Object mouse_syms;4627,138309
+static Lisp_Object wheel_syms;4628,138340
+static Lisp_Object drag_n_drop_syms;4629,138371
+static const int lispy_accent_codes[lispy_accent_codes4634,138516
+static const char *const lispy_accent_keys[lispy_accent_keys4741,139878
+#define FUNCTION_KEY_OFFSET 4766,140314
+const char *const lispy_function_keys[lispy_function_keys4768,140347
+static const char *const 
lispy_multimedia_keys[lispy_multimedia_keys4962,148901
+static const char *const lispy_kana_keys[lispy_kana_keys5026,150135
+#define FUNCTION_KEY_OFFSET 5061,151751
+static const char *const lispy_function_keys[lispy_function_keys5065,151894
+#define ISO_FUNCTION_KEY_OFFSET 5149,154429
+static const char *const 
iso_lispy_function_keys[iso_lispy_function_keys5151,154469
+static Lisp_Object Vlispy_mouse_stem;5172,155328
+static const char *const lispy_wheel_names[lispy_wheel_names5174,155367
+static const char *const 
lispy_drag_n_drop_names[lispy_drag_n_drop_names5181,155619
+static short const scroll_bar_parts[scroll_bar_parts5189,155885
+static Lisp_Object button_down_location;5210,156910
+static int last_mouse_button;5215,157065
+static int last_mouse_x;5216,157095
+static int last_mouse_y;5217,157120
+static Time button_down_time;5218,157145
+static int double_click_count;5222,157229
+make_lispy_position 5228,157390
+toolkit_menubar_in_use 5456,163953
+make_scroll_bar_position 5469,164321
+make_lispy_event 5485,164967
+make_lispy_movement 6104,183531
+make_lispy_switch_frame 6131,184262
+make_lispy_focus_in 6137,184369
+make_lispy_focus_out 6145,184495
+parse_modifiers_uncached 6163,184945
+#define SINGLE_LETTER_MOD(6185,185465
+#undef SINGLE_LETTER_MOD6212,185906
+#define MULTI_LETTER_MOD(6214,185932
+#undef MULTI_LETTER_MOD6231,186400
+apply_modifiers_uncached 6273,187574
+static const char *const modifier_names[modifier_names6319,189193
+#define NUM_MOD_NAMES 6325,189399
+static Lisp_Object modifier_symbols;6327,189449
+lispy_modifier_list 6331,189586
+#define KEY_TO_CHAR(6353,190252
+parse_modifiers 6356,190328
+DEFUN ("internal-event-symbol-parse-modifiers", 
Fevent_symbol_parse_modifiers,event-symbol-parse-modifiers6399,191517
+apply_modifiers 6422,192391
+reorder_modifiers 6491,194720
+modify_event_symbol 6536,196528
+DEFUN ("event-convert-list", 
Fevent_convert_list,event-convert-list6628,199244
+parse_solitary_modifier 6695,201135
+#define SINGLE_LETTER_MOD(6701,201258
+#define MULTI_LETTER_MOD(6705,201343
+#undef SINGLE_LETTER_MOD6763,202641
+#undef MULTI_LETTER_MOD6764,202666
+lucid_event_type_list_p 6775,202889
+get_input_pending 6814,203960
+record_asynch_buffer_change 6834,204579
+gobble_input 6872,205702
+tty_read_avail_input 6967,208310
+handle_async_input 7149,214039
+process_pending_signals 7165,214359
+unblock_input_to 7177,214645
+unblock_input 7200,215277
+totally_unblock_input 7209,215445
+handle_input_available_signal 7217,215529
+deliver_input_available_signal 7226,215700
+struct user_signal_info7235,215865
+  int sig;7238,215915
+  char *name;name7241,215956
+  int npending;7244,216007
+  struct user_signal_info *next;next7246,216024
+static struct user_signal_info *user_signals user_signals7250,216090
+add_user_signal 7253,216149
+handle_user_signal 7275,216598
+deliver_user_signal 7316,217558
+find_user_signal_name 7322,217659
+store_user_signal_events 7334,217841
+static Lisp_Object menu_bar_one_keymap_changed_items;7363,218416
+static Lisp_Object menu_bar_items_vector;7368,218630
+static int menu_bar_items_index;7369,218672
+static const char *separator_names[separator_names7372,218707
+menu_separator_name_p 7393,219148
+menu_bar_items 7426,219852
+Lisp_Object item_properties;7568,224603
+menu_bar_item 7571,224645
+menu_item_eval_property_1 7647,227175
+eval_dyn 7658,227465
+menu_item_eval_property 7666,227675
+parse_menu_item 7686,228341
+static Lisp_Object tool_bar_items_vector;7965,236336
+static Lisp_Object tool_bar_item_properties;7970,236510
+static int ntool_bar_items;7974,236606
+tool_bar_items 7990,237083
+process_tool_bar_item 8075,239892
+#define PROP(8112,240969
+set_prop 8114,241038
+parse_tool_bar_item 8167,242453
+#undef PROP8379,248844
+init_tool_bar_items 8387,248969
+append_tool_bar_item 8401,249261
+read_char_x_menu_prompt 8443,250771
+read_char_minibuf_menu_prompt 8503,252445
+#define PUSH_C_STR(8527,253014
+follow_key 8726,258553
+active_maps 8733,258695
+typedef struct keyremap8742,259021
+  Lisp_Object parent;8745,259107
+  Lisp_Object map;8748,259224
+  int start,8753,259446
+  int start, end;8753,259446
+} keyremap;8754,259464
+access_keymap_keyremap 8764,259808
+keyremap_step 8811,261450
+test_undefined 8867,262934
+read_key_sequence 8916,264861
+read_key_sequence_vs 9826,295821
+DEFUN ("read-key-sequence", Fread_key_sequence,read-key-sequence9885,297294
+DEFUN ("read-key-sequence-vector", 
Fread_key_sequence_vector,read-key-sequence-vector9938,299982
+detect_input_pending 9950,300488
+detect_input_pending_ignore_squeezables 9959,300654
+detect_input_pending_run_timers 9967,300870
+clear_input_pending 9985,301362
+requeued_events_pending_p 9997,301732
+DEFUN ("input-pending-p", Finput_pending_p,input-pending-p10002,301813
+DEFUN ("recent-keys", Frecent_keys,recent-keys10024,302596
+DEFUN ("this-command-keys", Fthis_command_keys,this-command-keys10055,303517
+DEFUN ("this-command-keys-vector", 
Fthis_command_keys_vector,this-command-keys-vector10068,303958
+DEFUN ("this-single-command-keys", 
Fthis_single_command_keys,this-single-command-keys10080,304380
+DEFUN ("this-single-command-raw-keys", 
Fthis_single_command_raw_keys,this-single-command-raw-keys10096,304955
+DEFUN ("reset-this-command-lengths", 
Freset_this_command_lengths,reset-this-command-lengths10109,305495
+DEFUN ("clear-this-command-keys", 
Fclear_this_command_keys,clear-this-command-keys10136,306510
+DEFUN ("recursion-depth", Frecursion_depth,recursion-depth10158,307069
+DEFUN ("open-dribble-file", Fopen_dribble_file,open-dribble-file10169,307406
+DEFUN ("discard-input", Fdiscard_input,discard-input10203,308447
+DEFUN ("suspend-emacs", Fsuspend_emacs,suspend-emacs10225,308949
+stuff_buffered_input 10285,311045
+set_waiting_for_input 10323,312016
+clear_waiting_for_input 10337,312390
+handle_interrupt_signal 10351,312754
+deliver_interrupt_signal 10378,313642
+static int volatile force_quit_count;10387,313932
+handle_interrupt 10401,314414
+quit_throw_to_read_char 10541,318711
+DEFUN ("set-input-interrupt-mode", 
Fset_input_interrupt_mode,set-input-interrupt-mode10562,319288
+DEFUN ("set-output-flow-control", 
Fset_output_flow_control,set-output-flow-control10609,320516
+DEFUN ("set-input-meta-mode", 
Fset_input_meta_mode,set-input-meta-mode10643,321432
+DEFUN ("set-quit-char", Fset_quit_char,set-quit-char10694,322706
+DEFUN ("set-input-mode", Fset_input_mode,set-input-mode10729,323570
+DEFUN ("current-input-mode", 
Fcurrent_input_mode,current-input-mode10750,324459
+DEFUN ("posn-at-x-y", Fposn_at_x_y,posn-at-x-y10787,325837
+DEFUN ("posn-at-point", Fposn_at_point,posn-at-point10824,327060
+init_kboard 10861,328214
+allocate_kboard 10893,329284
+wipe_kboard 10909,329637
+delete_kboard 10917,329751
+init_keyboard 10942,330281
+struct event_head11021,332696
+  short var;11023,332716
+  short kind;11024,332729
+static const struct event_head head_table[head_table11027,332747
+syms_of_keyboard 11045,333577
+keys_of_keyboard 11841,367115
+mark_kboards 11916,370434
+
+c-src/emacs/src/lisp.h,25767
+#define EMACS_LISP_H22,800
+#define DECLARE_GDB_SYM(47,1421
+# define DEFINE_GDB_SYMBOL_BEGIN(49,1508
+# define DEFINE_GDB_SYMBOL_END(50,1578
+# define DEFINE_GDB_SYMBOL_BEGIN(52,1625
+# define DEFINE_GDB_SYMBOL_END(53,1702
+#undef min57,1790
+#undef max58,1801
+#define max(59,1812
+#define min(60,1854
+#define ARRAYELTS(63,1936
+#define GCTYPEBITS 67,2079
+DEFINE_GDB_SYMBOL_BEGIN GCTYPEBITS66,2037
+# define NONPOINTER_BITS 78,2567
+# define NONPOINTER_BITS 80,2600
+typedef int EMACS_INT;91,3023
+typedef unsigned int EMACS_UINT;92,3046
+#  define EMACS_INT_MAX 93,3079
+#  define pI 94,3111
+typedef long int EMACS_INT;96,3203
+typedef unsigned long EMACS_UINT;97,3231
+#  define EMACS_INT_MAX 98,3265
+#  define pI 99,3298
+typedef long long int EMACS_INT;103,3477
+typedef unsigned long long int EMACS_UINT;104,3510
+#  define EMACS_INT_MAX 105,3553
+#  define pI 106,3587
+enum {  BOOL_VECTOR_BITS_PER_CHAR 114,3804
+#define BOOL_VECTOR_BITS_PER_CHAR 115,3840
+typedef size_t bits_word;123,4165
+# define BITS_WORD_MAX 124,4191
+enum { BITS_PER_BITS_WORD 125,4223
+typedef unsigned char bits_word;127,4290
+# define BITS_WORD_MAX 128,4323
+enum { BITS_PER_BITS_WORD 129,4386
+    BITS_PER_CHAR 136,4570
+    BITS_PER_SHORT 137,4605
+    BITS_PER_LONG 138,4657
+    BITS_PER_EMACS_INT 139,4712
+typedef intmax_t printmax_t;148,5089
+typedef uintmax_t uprintmax_t;149,5118
+# define pMd 150,5149
+# define pMu 151,5170
+typedef EMACS_INT printmax_t;153,5197
+typedef EMACS_UINT uprintmax_t;154,5227
+# define pMd 155,5259
+# define pMu 156,5278
+# define pD 165,5664
+# define pD 167,5709
+# define pD 169,5756
+# define pD 171,5779
+# define eassert(200,7062
+# define eassume(201,7140
+# define eassert(208,7319
+# define eassume(212,7450
+enum Lisp_Bits239,8519
+#define GCALIGNMENT 243,8647
+    VALBITS 246,8742
+    INTTYPEBITS 249,8838
+    FIXNUM_BITS 252,8945
+#define VAL_MAX 263,9327
+#define USE_LSB_TAG 271,9777
+DEFINE_GDB_SYMBOL_BEGIN USE_LSB_TAG270,9733
+# define alignas(281,10077
+# define GCALIGNED 288,10227
+# define GCALIGNED 290,10292
+# define lisp_h_XLI(327,11642
+# define lisp_h_XIL(328,11673
+# define lisp_h_XLI(330,11724
+# define lisp_h_XIL(331,11751
+#define lisp_h_CHECK_LIST_CONS(333,11785
+#define lisp_h_CHECK_NUMBER(334,11856
+#define lisp_h_CHECK_SYMBOL(335,11927
+#define lisp_h_CHECK_TYPE(336,11996
+#define lisp_h_CONSP(338,12107
+#define lisp_h_EQ(339,12156
+#define lisp_h_FLOATP(340,12201
+#define lisp_h_INTEGERP(341,12252
+#define lisp_h_MARKERP(342,12333
+#define lisp_h_MISCP(343,12408
+#define lisp_h_NILP(344,12457
+#define lisp_h_SET_SYMBOL_VAL(345,12493
+#define lisp_h_SYMBOL_CONSTANT_P(347,12607
+#define lisp_h_SYMBOL_VAL(348,12671
+#define lisp_h_SYMBOLP(350,12772
+#define lisp_h_VECTORLIKEP(351,12825
+#define lisp_h_XCAR(352,12886
+#define lisp_h_XCDR(353,12924
+#define lisp_h_XCONS(354,12964
+#define lisp_h_XHASH(356,13059
+#define lisp_h_XPNTR(357,13093
+# define lisp_h_check_cons_list(360,13221
+# define lisp_h_make_number(363,13289
+# define lisp_h_XFASTINT(365,13392
+# define lisp_h_XINT(366,13429
+# define lisp_h_XSYMBOL(367,13478
+# define lisp_h_XTYPE(371,13631
+# define lisp_h_XUNTAG(372,13696
+# define XLI(381,14086
+# define XIL(382,14117
+# define CHECK_LIST_CONS(383,14148
+# define CHECK_NUMBER(384,14209
+# define CHECK_SYMBOL(385,14258
+# define CHECK_TYPE(386,14307
+# define CONSP(387,14382
+# define EQ(388,14417
+# define FLOATP(389,14452
+# define INTEGERP(390,14489
+# define MARKERP(391,14530
+# define MISCP(392,14569
+# define NILP(393,14604
+# define SET_SYMBOL_VAL(394,14637
+# define SYMBOL_CONSTANT_P(395,14700
+# define SYMBOL_VAL(396,14763
+# define SYMBOLP(397,14812
+# define VECTORLIKEP(398,14851
+# define XCAR(399,14898
+# define XCDR(400,14931
+# define XCONS(401,14964
+# define XHASH(402,14999
+# define XPNTR(403,15034
+#  define check_cons_list(405,15097
+#  define make_number(408,15176
+#  define XFASTINT(409,15224
+#  define XINT(410,15266
+#  define XSYMBOL(411,15300
+#  define XTYPE(412,15340
+#  define XUNTAG(413,15376
+#define LISP_MACRO_DEFUN(421,15672
+#define LISP_MACRO_DEFUN_VOID(425,15845
+#define INTMASK 437,16289
+#define case_Lisp_Int 438,16342
+#define ENUM_BF(445,16681
+#define ENUM_BF(447,16722
+enum Lisp_Type451,16763
+    Lisp_Symbol 454,16851
+    Lisp_Misc 458,16993
+    Lisp_Int0 461,17067
+    Lisp_Int1 462,17086
+    Lisp_String 466,17264
+    Lisp_Vectorlike 472,17543
+    Lisp_Cons 475,17632
+    Lisp_Float 477,17670
+enum Lisp_Misc_Type485,18016
+    Lisp_Misc_Free 487,18040
+    Lisp_Misc_Marker,488,18069
+    Lisp_Misc_Overlay,489,18091
+    Lisp_Misc_Save_Value,490,18114
+    Lisp_Misc_Finalizer,491,18140
+    Lisp_Misc_Float,494,18275
+    Lisp_Misc_Limit496,18359
+enum Lisp_Fwd_Type502,18543
+    Lisp_Fwd_Int,504,18566
+    Lisp_Fwd_Bool,505,18619
+    Lisp_Fwd_Obj,506,18670
+    Lisp_Fwd_Buffer_Obj,507,18729
+    Lisp_Fwd_Kboard_Obj        508,18800
+typedef struct { EMACS_INT i;567,21781
+typedef struct { EMACS_INT i; } Lisp_Object;567,21781
+#define LISP_INITIALLY(569,21827
+#undef CHECK_LISP_OBJECT_TYPE571,21858
+enum CHECK_LISP_OBJECT_TYPE 572,21888
+enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE 572,21888
+typedef EMACS_INT Lisp_Object;577,22064
+#define LISP_INITIALLY(578,22095
+enum CHECK_LISP_OBJECT_TYPE 579,22125
+enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE 579,22125
+#define LISP_INITIALLY_ZERO 582,22226
+enum symbol_interned639,24199
+  SYMBOL_UNINTERNED 641,24222
+  SYMBOL_INTERNED 642,24247
+  SYMBOL_INTERNED_IN_INITIAL_OBARRAY 643,24270
+enum symbol_redirect646,24315
+  SYMBOL_PLAINVAL 648,24338
+  SYMBOL_VARALIAS 649,24362
+  SYMBOL_LOCALIZED 650,24386
+  SYMBOL_FORWARDED 651,24410
+struct Lisp_Symbol654,24437
+  bool_bf gcmarkbit 656,24458
+  ENUM_BF 663,24793
+    Lisp_Object value;687,25631
+    struct Lisp_Symbol *alias;alias688,25654
+    struct Lisp_Buffer_Local_Value *blv;blv689,25685
+    union Lisp_Fwd *fwd;fwd690,25726
+  } val;691,25751
+  Lisp_Object function;694,25823
+  Lisp_Object plist;697,25885
+  struct Lisp_Symbol *next;next700,25974
+#define EXFUN(707,26252
+#define DEFUN_ARGS_MANY        712,26446
+#define DEFUN_ARGS_UNEVALLED   713,26498
+#define DEFUN_ARGS_0   714,26541
+#define DEFUN_ARGS_1   715,26569
+#define DEFUN_ARGS_2   716,26604
+#define DEFUN_ARGS_3   717,26652
+#define DEFUN_ARGS_4   718,26713
+#define DEFUN_ARGS_5   719,26787
+#define DEFUN_ARGS_6   721,26880
+#define DEFUN_ARGS_7   723,26986
+#define DEFUN_ARGS_8   725,27105
+#define TAG_PTR(729,27296
+#define TAG_SYMOFFSET(734,27543
+#define XLI_BUILTIN_LISPSYM(741,27842
+#define DEFINE_LISP_SYMBOL(746,28101
+# define DEFINE_NON_NIL_Q_SYMBOL_MACROS 755,28572
+LISP_MACRO_DEFUN 762,28777
+# define ARRAY_MARK_FLAG 768,29024
+# define PSEUDOVECTOR_FLAG 774,29267
+enum pvec_type780,29568
+  PVEC_NORMAL_VECTOR,782,29585
+  PVEC_FREE,783,29607
+  PVEC_PROCESS,784,29620
+  PVEC_FRAME,785,29636
+  PVEC_WINDOW,786,29650
+  PVEC_BOOL_VECTOR,787,29665
+  PVEC_BUFFER,788,29685
+  PVEC_HASH_TABLE,789,29700
+  PVEC_TERMINAL,790,29719
+  PVEC_WINDOW_CONFIGURATION,791,29736
+  PVEC_SUBR,792,29765
+  PVEC_OTHER,793,29778
+  PVEC_COMPILED,795,29856
+  PVEC_CHAR_TABLE,796,29873
+  PVEC_SUB_CHAR_TABLE,797,29892
+  PVEC_FONT 798,29915
+enum More_Lisp_Bits801,29991
+    PSEUDOVECTOR_SIZE_BITS 808,30382
+    PSEUDOVECTOR_SIZE_MASK 809,30415
+    PSEUDOVECTOR_REST_BITS 813,30625
+    PSEUDOVECTOR_REST_MASK 814,30658
+    PSEUDOVECTOR_AREA_BITS 818,30823
+    PVEC_TYPE_MASK 819,30901
+# define VALMASK 829,31302
+DEFINE_GDB_SYMBOL_BEGIN VALMASK828,31257
+#define MOST_POSITIVE_FIXNUM 834,31532
+#define MOST_NEGATIVE_FIXNUM 835,31592
+XINT 874,32684
+XFASTINT 889,33035
+XSYMBOL 899,33263
+XTYPE 910,33481
+XUNTAG 918,33661
+LISP_MACRO_DEFUN 927,33857
+LISP_MACRO_DEFUN 940,34242
+#define FIXNUM_OVERFLOW_P(958,34855
+LISP_MACRO_DEFUN FIXNUM_OVERFLOW_P952,34632
+LISP_MACRO_DEFUN 970,35171
+XSTRING 980,35391
+#define SYMBOL_INDEX(988,35575
+XFLOAT 991,35636
+XPROCESS 1000,35778
+XWINDOW 1007,35895
+XTERMINAL 1014,36012
+XSUBR 1021,36134
+XBUFFER 1028,36245
+XCHAR_TABLE 1035,36369
+XSUB_CHAR_TABLE 1042,36506
+XBOOL_VECTOR 1049,36648
+make_lisp_ptr 1058,36827
+make_lisp_symbol 1066,37013
+builtin_lisp_symbol 1074,37197
+#define XSETINT(1079,37279
+#define XSETFASTINT(1080,37325
+#define XSETCONS(1081,37375
+#define XSETVECTOR(1082,37435
+#define XSETSTRING(1083,37503
+#define XSETSYMBOL(1084,37567
+#define XSETFLOAT(1085,37621
+#define XSETMISC(1086,37683
+#define XSETPVECTYPE(1090,37772
+#define XSETPVECTYPESIZE(1092,37888
+#define XSETPSEUDOVECTOR(1099,38185
+#define XSETTYPED_PSEUDOVECTOR(1105,38369
+#define XSETWINDOW_CONFIGURATION(1110,38579
+#define XSETPROCESS(1112,38675
+#define XSETWINDOW(1113,38741
+#define XSETTERMINAL(1114,38805
+#define XSETSUBR(1115,38873
+#define XSETCOMPILED(1116,38933
+#define XSETBUFFER(1117,39001
+#define XSETCHAR_TABLE(1118,39065
+#define XSETBOOL_VECTOR(1119,39137
+#define XSETSUB_CHAR_TABLE(1120,39211
+XINTPTR 1128,39581
+make_pointer_integer 1134,39661
+LISP_MACRO_DEFUN_VOID 1143,39826
+typedef struct interval *INTERVAL;INTERVAL1149,39987
+      Lisp_Object cdr;1159,40162
+      struct Lisp_Cons *chain;chain1162,40236
+xcar_addr 1174,40760
+xcdr_addr 1179,40837
+LISP_MACRO_DEFUN 1185,40931
+XSETCDR 1198,41307
+CAR 1205,41457
+CDR 1212,41591
+CAR_SAFE 1221,41791
+CDR_SAFE 1226,41877
+STRING_MULTIBYTE 1243,42250
+#define STRING_BYTES_BOUND 1261,43057
+#define STRING_SET_UNIBYTE(1265,43201
+#define STRING_SET_MULTIBYTE(1275,43516
+SDATA 1286,43830
+SSDATA 1291,43908
+SREF 1297,44037
+SSET 1302,44128
+SCHARS 1307,44242
+STRING_BYTES 1316,44415
+SBYTES 1326,44595
+STRING_SET_CHARS 1331,44681
+struct vectorlike_header1343,45232
+    ptrdiff_t size;1364,46383
+struct Lisp_Vector1369,46482
+    struct vectorlike_header header;1371,46505
+    Lisp_Object contents[contents1372,46542
+    ALIGNOF_STRUCT_LISP_VECTOR1378,46681
+struct Lisp_Bool_Vector1384,46864
+    struct vectorlike_header header;1388,47012
+    EMACS_INT size;1390,47086
+    bits_word data[data1395,47319
+bool_vector_size 1399,47385
+bool_vector_data 1407,47523
+bool_vector_uchar_data 1413,47617
+bool_vector_words 1421,47803
+bool_vector_bytes 1428,47998
+bool_vector_bitref 1437,48238
+bool_vector_ref 1445,48478
+bool_vector_set 1453,48618
+    header_size 1471,49047
+    bool_header_size 1472,49106
+    word_size 1473,49171
+AREF 1479,49284
+aref_addr 1485,49391
+ASIZE 1491,49501
+ASET 1497,49583
+gc_aset 1504,49742
+enum { NIL_IS_ZERO 1515,50269
+memclear 1520,50464
+#define VECSIZE(1531,50762
+#define PSEUDOVECSIZE(1538,51047
+#define UNSIGNED_CMP(1546,51480
+#define ASCII_CHAR_P(1552,51734
+enum CHARTAB_SIZE_BITS1565,52489
+    CHARTAB_SIZE_BITS_0 1567,52516
+    CHARTAB_SIZE_BITS_1 1568,52545
+    CHARTAB_SIZE_BITS_2 1569,52574
+    CHARTAB_SIZE_BITS_3 1570,52603
+struct Lisp_Char_Table1575,52672
+    struct vectorlike_header header;1581,52928
+    Lisp_Object defalt;1585,53078
+    Lisp_Object parent;1590,53280
+    Lisp_Object purpose;1594,53398
+    Lisp_Object ascii;1598,53564
+    Lisp_Object contents[contents1600,53588
+    Lisp_Object extras[extras1603,53699
+struct Lisp_Sub_Char_Table1606,53752
+    struct vectorlike_header header;1610,53918
+    int depth;1618,54341
+    int min_char;1621,54417
+    Lisp_Object contents[contents1624,54492
+CHAR_TABLE_REF_ASCII 1628,54566
+CHAR_TABLE_REF 1648,55113
+CHAR_TABLE_SET 1658,55402
+struct Lisp_Subr1670,55786
+    struct vectorlike_header header;1672,55807
+      Lisp_Object (*a0)a01674,55856
+      Lisp_Object (*a1)a11675,55888
+      Lisp_Object (*a2)a21676,55927
+      Lisp_Object (*a3)a31677,55979
+      Lisp_Object (*a4)a41678,56044
+      Lisp_Object (*a5)a51679,56122
+      Lisp_Object (*a6)a61680,56213
+      Lisp_Object (*a7)a71681,56317
+      Lisp_Object (*a8)a81682,56434
+      Lisp_Object (*aUNEVALLED)aUNEVALLED1683,56564
+      Lisp_Object (*aMANY)aMANY1684,56616
+    } function;1685,56671
+    short min_args,1686,56687
+    short min_args, max_args;1686,56687
+    const char *symbol_name;symbol_name1687,56717
+    const char *intspec;intspec1688,56746
+    const char *doc;doc1689,56771
+enum char_table_specials1692,56798
+    CHAR_TABLE_STANDARD_SLOTS 1697,56993
+    SUB_CHAR_TABLE_OFFSET 1701,57214
+CHAR_TABLE_EXTRA_SLOTS 1707,57377
+LISP_MACRO_DEFUN 1723,57921
+SYMBOL_BLV 1732,58181
+SYMBOL_FWD 1738,58316
+LISP_MACRO_DEFUN_VOID 1744,58428
+SET_SYMBOL_BLV 1754,58691
+SET_SYMBOL_FWD 1760,58850
+SYMBOL_NAME 1767,59001
+SYMBOL_INTERNED_P 1775,59130
+SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P 1783,59299
+#define DEFSYM(1796,59809
+LISP_MACRO_DEFUN DEFSYM1792,59630
+struct hash_table_test1805,60062
+  Lisp_Object name;1808,60139
+  Lisp_Object user_hash_function;1811,60206
+  Lisp_Object user_cmp_function;1814,60297
+  bool (*cmpfn)cmpfn1817,60372
+  EMACS_UINT (*hashfn)hashfn1820,60486
+struct Lisp_Hash_Table1823,60555
+  struct vectorlike_header header;1826,60649
+  Lisp_Object weak;1830,60783
+  Lisp_Object rehash_size;1835,61007
+  Lisp_Object rehash_threshold;1839,61129
+  Lisp_Object hash;1843,61260
+  Lisp_Object next;1848,61490
+  Lisp_Object next_free;1851,61560
+  Lisp_Object index;1856,61771
+  ptrdiff_t count;1863,62041
+  Lisp_Object key_and_value;1868,62240
+  struct hash_table_test test;1871,62314
+  struct Lisp_Hash_Table *next_weak;next_weak1875,62457
+XHASH_TABLE 1880,62531
+#define XSET_HASH_TABLE(1885,62602
+HASH_TABLE_P 1889,62703
+HASH_KEY 1896,62860
+HASH_VALUE 1903,63040
+HASH_NEXT 1911,63254
+HASH_HASH 1918,63431
+HASH_INDEX 1926,63677
+HASH_TABLE_SIZE 1933,63826
+enum DEFAULT_HASH_SIZE 1940,63956
+enum DEFAULT_HASH_SIZE { DEFAULT_HASH_SIZE 1940,63956
+static double const DEFAULT_REHASH_THRESHOLD 1946,64176
+static double const DEFAULT_REHASH_SIZE 1950,64299
+sxhash_combine 1956,64465
+SXHASH_REDUCE 1964,64648
+struct Lisp_Misc_Any   1971,64806
+  ENUM_BF 1973,64866
+struct Lisp_Marker1978,64980
+  ENUM_BF 1980,65001
+struct Lisp_Overlay2021,66838
+    ENUM_BF 2034,67346
+    SAVE_UNUSED,2047,67641
+    SAVE_INTEGER,2048,67658
+    SAVE_FUNCPOINTER,2049,67676
+    SAVE_POINTER,2050,67698
+    SAVE_OBJECT2051,67716
+enum { SAVE_SLOT_BITS 2055,67801
+enum { SAVE_VALUE_SLOTS 2058,67898
+enum { SAVE_TYPE_BITS 2062,68006
+enum Lisp_Save_Type2064,68072
+    SAVE_TYPE_INT_INT 2066,68096
+    SAVE_TYPE_INT_INT_INT2067,68169
+    SAVE_TYPE_OBJ_OBJ 2069,68259
+    SAVE_TYPE_OBJ_OBJ_OBJ 2070,68330
+    SAVE_TYPE_OBJ_OBJ_OBJ_OBJ2071,68411
+    SAVE_TYPE_PTR_INT 2073,68506
+    SAVE_TYPE_PTR_OBJ 2074,68579
+    SAVE_TYPE_PTR_PTR 2075,68651
+    SAVE_TYPE_FUNCPTR_PTR_OBJ2076,68724
+    SAVE_TYPE_MEMORY 2080,68882
+typedef void (*voidfuncptr)voidfuncptr2108,69836
+struct Lisp_Save_Value2110,69873
+    ENUM_BF 2112,69900
+      void *pointer;pointer2125,70555
+      voidfuncptr funcpointer;2126,70576
+      ptrdiff_t integer;2127,70607
+      Lisp_Object object;2128,70632
+    } data[data2129,70658
+save_type 2134,70752
+XSAVE_POINTER 2143,70982
+set_save_pointer 2149,71144
+XSAVE_FUNCPOINTER 2155,71326
+XSAVE_INTEGER 2164,71546
+set_save_integer 2170,71708
+XSAVE_OBJECT 2179,71929
+struct Lisp_Finalizer2186,72106
+    struct Lisp_Misc_Any base;2188,72132
+    struct Lisp_Finalizer *prev;prev2191,72220
+    struct Lisp_Finalizer *next;next2192,72253
+    Lisp_Object function;2197,72490
+struct Lisp_Free2201,72581
+    ENUM_BF 2203,72602
+union Lisp_Misc2212,72882
+    struct Lisp_Misc_Any u_any;2214,72902
+    struct Lisp_Free u_free;2215,72973
+    struct Lisp_Marker u_marker;2216,73002
+    struct Lisp_Overlay u_overlay;2217,73035
+    struct Lisp_Save_Value u_save_value;2218,73070
+    struct Lisp_Finalizer u_finalizer;2219,73111
+XMISC 2223,73181
+XMISCANY 2229,73270
+XMISCTYPE 2236,73379
+XMARKER 2242,73467
+XOVERLAY 2249,73582
+XSAVE_VALUE 2256,73703
+XFINALIZER 2263,73832
+struct Lisp_Intfwd2274,74117
+    enum Lisp_Fwd_Type type;2276,74140
+    EMACS_INT *intvar;intvar2277,74190
+struct Lisp_Boolfwd2284,74411
+    enum Lisp_Fwd_Type type;2286,74435
+    bool *boolvar;boolvar2287,74486
+struct Lisp_Objfwd2294,74702
+    enum Lisp_Fwd_Type type;2296,74725
+    Lisp_Object *objvar;objvar2297,74775
+struct Lisp_Buffer_Objfwd2302,74934
+    enum Lisp_Fwd_Type type;2304,74964
+    int offset;2305,75021
+    Lisp_Object predicate;2307,75113
+struct Lisp_Buffer_Local_Value2334,76470
+    bool_bf local_if_set 2338,76615
+    bool_bf frame_local 2341,76797
+    bool_bf found 2344,76939
+    union Lisp_Fwd *fwd;fwd2346,77041
+    Lisp_Object where;2348,77184
+    Lisp_Object defcell;2351,77310
+    Lisp_Object valcell;2357,77614
+struct Lisp_Kboard_Objfwd2362,77729
+    enum Lisp_Fwd_Type type;2364,77759
+    int offset;2365,77816
+union Lisp_Fwd2368,77838
+    struct Lisp_Intfwd u_intfwd;2370,77857
+    struct Lisp_Boolfwd u_boolfwd;2371,77890
+    struct Lisp_Objfwd u_objfwd;2372,77925
+    struct Lisp_Buffer_Objfwd u_buffer_objfwd;2373,77958
+    struct Lisp_Kboard_Objfwd u_kboard_objfwd;2374,78005
+XFWDTYPE 2378,78084
+XBUFFER_OBJFWD 2384,78180
+struct Lisp_Float2391,78316
+      double data;2395,78354
+      struct Lisp_Float *chain;chain2396,78373
+    } u;2397,78405
+XFLOAT_DATA 2401,78434
+    IEEE_FLOATING_POINT2415,78943
+#define _UCHAR_T2423,79266
+typedef unsigned char UCHAR;2424,79283
+enum Lisp_Compiled2429,79366
+    COMPILED_ARGLIST 2431,79389
+    COMPILED_BYTECODE 2432,79415
+    COMPILED_CONSTANTS 2433,79442
+    COMPILED_STACK_DEPTH 2434,79470
+    COMPILED_DOC_STRING 2435,79500
+    COMPILED_INTERACTIVE 2436,79529
+enum char_bits2443,79831
+    CHAR_ALT 2445,79850
+    CHAR_SUPER 2446,79876
+    CHAR_HYPER 2447,79904
+    CHAR_SHIFT 2448,79932
+    CHAR_CTL 2449,79960
+    CHAR_META 2450,79986
+    CHAR_MODIFIER_MASK 2452,80014
+    CHARACTERBITS 2457,80209
+LISP_MACRO_DEFUN 2462,80267
+NATNUMP 2470,80409
+RANGED_INTEGERP 2476,80490
+#define TYPE_RANGED_INTEGERP(2481,80612
+LISP_MACRO_DEFUN 2486,80797
+VECTORP 2500,81270
+OVERLAYP 2505,81373
+SAVE_VALUEP 2510,81472
+FINALIZERP 2516,81578
+AUTOLOADP 2522,81682
+BUFFER_OBJFWDP 2528,81773
+PSEUDOVECTOR_TYPEP 2534,81871
+PSEUDOVECTORP 2542,82124
+WINDOW_CONFIGURATIONP 2558,82476
+PROCESSP 2564,82586
+WINDOWP 2570,82670
+TERMINALP 2576,82752
+SUBRP 2582,82838
+COMPILEDP 2588,82916
+BUFFERP 2594,83002
+CHAR_TABLE_P 2600,83084
+SUB_CHAR_TABLE_P 2606,83175
+BOOL_VECTOR_P 2612,83274
+FRAMEP 2618,83367
+IMAGEP 2625,83484
+ARRAYP 2632,83589
+CHECK_LIST 2638,83708
+LISP_MACRO_DEFUN_VOID 2643,83789
+CHECK_STRING_CAR 2653,84086
+CHECK_CONS 2658,84190
+CHECK_VECTOR 2663,84270
+CHECK_BOOL_VECTOR 2668,84356
+CHECK_VECTOR_OR_STRING 2674,84533
+CHECK_ARRAY 2683,84707
+CHECK_BUFFER 2688,84815
+CHECK_WINDOW 2693,84901
+CHECK_PROCESS 2699,85007
+CHECK_NATNUM 2705,85103
+#define CHECK_RANGED_INTEGER(2710,85180
+#define CHECK_TYPE_RANGED_INTEGER(2721,85563
+#define CHECK_NUMBER_COERCE_MARKER(2729,85833
+XFLOATINT 2738,86086
+CHECK_NUMBER_OR_FLOAT 2744,86157
+#define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(2749,86256
+CHECK_NUMBER_CAR 2760,86666
+CHECK_NUMBER_CDR 2768,86788
+#define DEFUN(2803,88383
+#define DEFUN(2812,88851
+FUNCTIONP 2822,89206
+enum maxargs2831,89401
+    MANY 2833,89418
+    UNEVALLED 2834,89433
+#define CALLMANY(2838,89536
+#define CALLN(2844,89889
+#define DEFVAR_LISP(2869,91094
+#define DEFVAR_LISP_NOPRO(2874,91266
+#define DEFVAR_BOOL(2879,91448
+#define DEFVAR_INT(2884,91621
+#define DEFVAR_BUFFER_DEFAULTS(2890,91792
+#define DEFVAR_KBOARD(2896,91996
+typedef jmp_buf sys_jmp_buf;2906,92320
+# define sys_setjmp(2907,92349
+# define sys_longjmp(2908,92384
+typedef sigjmp_buf sys_jmp_buf;2910,92456
+# define sys_setjmp(2911,92488
+# define sys_longjmp(2912,92528
+typedef jmp_buf sys_jmp_buf;2916,92687
+# define sys_setjmp(2917,92716
+# define sys_longjmp(2918,92750
+enum specbind_tag 2943,93802
+  SPECPDL_UNWIND,2944,93822
+  SPECPDL_UNWIND_PTR,2945,93891
+  SPECPDL_UNWIND_INT,2946,93942
+  SPECPDL_UNWIND_VOID,2947,93990
+  SPECPDL_BACKTRACE,2948,94044
+  SPECPDL_LET,2949,94102
+  SPECPDL_LET_LOCAL,2951,94232
+  SPECPDL_LET_DEFAULT  2952,94289
+union specbinding2955,94361
+    ENUM_BF 2957,94383
+      ENUM_BF 2959,94440
+      ENUM_BF 2964,94570
+      ENUM_BF 2969,94693
+      ENUM_BF 2974,94811
+      ENUM_BF 2978,94916
+      ENUM_BF 2983,95091
+enum handlertype 3021,96407
+enum handlertype { CATCHER,3021,96407
+enum handlertype { CATCHER, CONDITION_CASE 3021,96407
+struct handler3023,96454
+  enum handlertype type;3025,96471
+  Lisp_Object tag_or_ch;3026,96496
+  Lisp_Object val;3027,96521
+  struct handler *next;next3028,96540
+  struct handler *nextfree;nextfree3029,96564
+  Lisp_Object *bytecode_top;bytecode_top3036,96922
+  int bytecode_dest;3037,96951
+  struct gcpro *gcpro;gcpro3042,97188
+  sys_jmp_buf jmp;3044,97218
+  EMACS_INT lisp_eval_depth;3045,97237
+  ptrdiff_t pdlcount;3046,97266
+  int poll_suppress_count;3047,97288
+  int interrupt_input_blocked;3048,97315
+  struct byte_stack *byte_stack;byte_stack3049,97346
+#define PUSH_HANDLER(3053,97443
+#define QUIT   3101,99220
+#define QUITP 3112,99470
+struct gcpro3132,100313
+  struct gcpro *next;next3134,100328
+  volatile Lisp_Object *var;var3137,100397
+  ptrdiff_t nvars;3140,100479
+  const char *name;name3144,100564
+  int lineno;3147,100620
+  int idx;3150,100681
+  int level;3153,100717
+#define GC_USE_GCPROS_AS_BEFORE        3171,101294
+#define GC_MAKE_GCPROS_NOOPS   3172,101329
+#define GC_MARK_STACK_CHECK_GCPROS     3173,101361
+#define GC_USE_GCPROS_CHECK_ZOMBIES    3174,101398
+#define GC_MARK_STACK 3177,101459
+#define BYTE_MARK_STACK 3181,101559
+#define GCPRO1(3190,101830
+#define GCPRO2(3191,101870
+#define GCPRO3(3192,101936
+#define GCPRO4(3194,102031
+#define GCPRO5(3196,102151
+#define GCPRO6(3198,102296
+#define GCPRO7(3201,102471
+#define UNGCPRO 3202,102550
+#define GCPRO1(3208,102650
+#define GCPRO2(3212,102772
+#define GCPRO3(3217,102964
+#define GCPRO4(3223,103226
+#define GCPRO5(3230,103557
+#define GCPRO6(3238,103958
+#define GCPRO7(3247,104428
+#define UNGCPRO 3257,104968
+#define GCPRO1(3263,105062
+#define GCPRO2(3269,105296
+#define GCPRO3(3278,105714
+#define GCPRO4(3289,106271
+#define GCPRO5(3302,106969
+#define GCPRO6(3317,107809
+#define GCPRO7(3334,108790
+#define UNGCPRO        3353,109913
+#define RETURN_UNGCPRO(3363,110180
+vcopy 3384,110654
+set_hash_key_slot 3393,110929
+set_hash_value_slot 3399,111068
+set_symbol_function 3408,111303
+set_symbol_plist 3414,111418
+set_symbol_next 3420,111521
+blv_found 3428,111694
+set_overlay_plist 3437,111877
+string_intervals 3445,112028
+set_string_intervals 3453,112150
+set_char_table_defalt 3462,112352
+set_char_table_purpose 3467,112464
+set_char_table_extras 3475,112633
+set_char_table_contents 3482,112842
+set_sub_char_table_contents 3489,113037
+enum Arith_Comparison 3497,113300
+  ARITH_EQUAL,3498,113324
+  ARITH_NOTEQUAL,3499,113339
+  ARITH_LESS,3500,113357
+  ARITH_GRTR,3501,113371
+  ARITH_LESS_OR_EQUAL,3502,113385
+  ARITH_GRTR_OR_EQUAL3503,113408
+#define INTEGER_TO_CONS(3511,113759
+#define CONS_TO_INTEGER(3529,114622
+enum { NEXT_ALMOST_PRIME_LIMIT 3573,116326
+extern EMACS_INT next_almost_prime 3574,116365
+enum constype 3739,123817
+enum constype {CONSTYPE_HEAP,CONSTYPE_HEAP3739,123817
+enum constype {CONSTYPE_HEAP, CONSTYPE_PURE}CONSTYPE_PURE3739,123817
+list2i 3745,124007
+list3i 3751,124116
+list4i 3757,124255
+extern Lisp_Object make_formatted_string 3767,124631
+build_pure_c_string 3792,125659
+build_string 3801,125864
+make_uninit_vector 3820,126435
+make_uninit_sub_char_table 3833,126654
+#define ALLOCATE_PSEUDOVECTOR(3850,127198
+#define ALLOCATE_ZEROED_PSEUDOVECTOR(3858,127534
+INLINE void 3890,128940
+extern void *r_alloc r_alloc3895,129061
+#define FLOAT_TO_STRING_BUFSIZE 3927,130524
+intern 3968,132131
+intern_c_string 3974,132219
+extern _Noreturn void error 4034,135598
+fast_string_match_ignore_case 4136,140086
+INLINE void fixup_locale 4241,143851
+INLINE void synchronize_system_messages_locale 4242,143886
+INLINE void synchronize_system_time_locale 4243,143943
+#define IS_DAEMON 4257,144416
+#define DAEMON_RUNNING 4258,144456
+#define IS_DAEMON 4261,144555
+#define DAEMON_RUNNING 4262,144600
+# define WAIT_READING_MAX 4281,145419
+# define WAIT_READING_MAX 4283,145491
+extern _Noreturn void emacs_abort 4374,148383
+egetenv 4532,152806
+#define eabs(4545,153302
+#define make_fixnum_or_float(4550,153435
+enum MAX_ALLOCA 4556,153686
+enum MAX_ALLOCA { MAX_ALLOCA 4556,153686
+extern void *record_xmalloc record_xmalloc4558,153731
+#define USE_SAFE_ALLOCA        4560,153797
+#define AVAIL_ALLOCA(4564,153930
+#define SAFE_ALLOCA(4568,154041
+#define SAFE_NALLOCA(4576,154382
+#define SAFE_ALLOCA_STRING(4590,154858
+#define SAFE_FREE(4598,155110
+#define SAFE_ALLOCA_LISP(4625,155688
+# define USE_STACK_LISP_OBJECTS 4652,156810
+# undef USE_STACK_LISP_OBJECTS4658,156976
+# define USE_STACK_LISP_OBJECTS 4659,157007
+enum { defined_GC_CHECK_STRING_BYTES 4663,157082
+enum { defined_GC_CHECK_STRING_BYTES 4665,157135
+union Aligned_Cons4670,157269
+  struct Lisp_Cons s;4672,157290
+  double d;4673,157312
+  double d; intmax_t i;4673,157312
+  double d; intmax_t i; void *p;p4673,157312
+union Aligned_String4676,157349
+  struct Lisp_String s;4678,157372
+  double d;4679,157396
+  double d; intmax_t i;4679,157396
+  double d; intmax_t i; void *p;p4679,157396
+    USE_STACK_CONS 4689,157704
+    USE_STACK_STRING 4691,157810
+#define STACK_CONS(4699,158147
+#define AUTO_CONS_EXPR(4701,158244
+#define AUTO_CONS(4709,158607
+#define AUTO_LIST1(4710,158678
+#define AUTO_LIST2(4712,158786
+#define AUTO_LIST3(4716,158941
+#define AUTO_LIST4(4720,159116
+# define verify_ascii(4732,159507
+#define AUTO_STRING(4740,159815
+#define FOR_EACH_TAIL(4752,160279
+#define FOR_EACH_ALIST_VALUE(4766,160770
+maybe_gc 4774,161057
+functionp 4784,161296
+
+c-src/machsyscalls.c,23
+#define        SYSCALL(6,113
+
+c-src/machsyscalls.h,159
+SYSCALL (mach_msg_trap,1,0
+SYSCALL (mach_reply_port,13,314
+SYSCALL (mach_thread_self,18,377
+SYSCALL (mach_task_self,23,441
+SYSCALL (mach_host_self,28,503
+
+c-src/h.h,2394
+   ELEM_I/ELEM_I3,15
+} Fails_t;5,85
+typedef void Lang_function 6,96
+typedef struct tpcmd8,147
+#define ggg 10,170
+  } arg;13,198
+tpcmd;15,209
+typedef struct foobar2_ 16,216
+    fu   int (*funcptr)funcptr17,242
+    long foo;18,279
+    char bar;19,293
+} foobar2;20,307
+    DEVICE_SWP,23,333
+    DEVICE_LAST24,349
+} bsp_DevId;25,365
+  struct constant_args 27,394
+    unsigned int burst;28,419
+  } constant;29,443
+} args;30,457
+typedef int *regset;regset31,465
+typedef int INT;32,486
+typedef union abc33,503
+  int def;35,523
+} ghi1;36,534
+typedef union abc 37,542
+  int def;38,562
+} ghi2;39,573
+typedef struct a 40,581
+} b;41,600
+#define c(42,605
+typedef struct an_extern_linkage 
*an_extern_linkage_ptr;an_extern_linkage_ptr43,619
+typedef struct an_extern_linkage 44,676
+               kind;46,733
+               is_explicit;49,812
+  a_byte_boolean is_curly_brace_form;54,1009
+} an_extern_linkage;56,1054
+typedef struct pollfd   pfdset[pfdset57,1075
+typedef union rtunion_def58,1119
+    int rtint;60,1149
+    char *rtstr;rtstr61,1164
+    struct rtx_def *rtx;rtx62,1181
+  } womboid 63,1206
+typedef union rtunion_def64,1220
+  int rtint;68,1250
+  char *rtstr;rtstr69,1263
+  struct rtx_def *rtxp;rtxp70,1278
+  struct rtx_def rtxnp;71,1302
+womboid75,1330
+enum {dog,dog81,1416
+enum {dog, cat}cat81,1416
+enum {dog, cat} animals;81,1416
+typedef void (_CALLBACK_ *signal_handler)signal_handler82,1441
+typedef void (_CALLBACK_ *signal_handler1)signal_handler183,1489
+/* comment */ #define ANSIC84,1538
+ #define ANSIC85,1566
+typedef void (proc)87,1588
+typedef void OperatorFun(88,1612
+typedef int f(89,1648
+struct my_struct 91,1691
+typedef struct my_struct my_typedef;93,1713
+typedef RETSIGTYPE (*signal_handler_t)signal_handler_t94,1750
+  Date 04 May 87 235311 PDT 96,1802
+typedef unsigned char unchar;99,1880
+typedef int X,100,1910
+typedef int X, Y,100,1910
+typedef int X, Y, Z;100,1910
+typedef mio mao;101,1931
+typedef struct a 103,1966
+typedef struct a { } b;103,1966
+typedef struct b104,1990
+} c;106,2009
+int extvar;109,2053
+#define tag1110,2065
+#define aaaaaa 111,2078
+#define bbbbbb\bbbbbb113,2102
+#define cccccccccc115,2125
+#define enter_critical_section 116,2144
+#define exit_critical_to_previous      117,2199
+#define UNDEFINED118,2259
+struct re_pattern_buffer 119,2277
+struct re_pattern_buffer { unsigned char *buffer;buffer119,2277
+
+cp-src/c.C,3287
+template <typename ipc3dIslandHierarchy,1,0
+template <typename ipc3dIslandHierarchy, typename ipc3dChannelType,1,0
+template <typename ipc3dIslandHierarchy, typename ipc3dChannelType, unsigned 
numOfChannels,1,0
+template <typename ipc3dIslandHierarchy, typename ipc3dChannelType, unsigned 
numOfChannels, typename ipc3dLinkControl,1,0
+class CMultiChannelCSC19_3D2,151
+        ipc3dLinkControlSetup setup;CMultiChannelCSC19_3D::setup5,190
+        ipc3dCSC19<CMultiChannelCSC19_3D::ipc3dCSC196,227
+        
ipc3dCSC19<ipc3dIslandHierarchy,ipcMultiChannel<ipc3dChannelType,numOfChannels>,ipcMultiChannel<ipc3dChannelType,numOfChannels>,ipc3dLinkControl>
 mcCSC;CMultiChannelCSC19_3D::mcCSC6,227
+        advTimer cscInitTime;CMultiChannelCSC19_3D::cscInitTime7,388
+        advTimer 
cscSegmentationTime;CMultiChannelCSC19_3D::cscSegmentationTime8,418
+        advTimer outputTime;CMultiChannelCSC19_3D::outputTime9,456
+        void execute(CMultiChannelCSC19_3D::execute11,493
+int main 25,1026
+double base 26,1088
+typedef struct s1 32,1251
+   int counter;s1::counter33,1271
+} t1;34,1287
+struct s2 35,1293
+   int counter;s2::counter36,1305
+typedef struct s2 t2;38,1324
+class A 39,1346
+  enum { rosso,A::rosso40,1356
+  enum { rosso, giallo,A::giallo40,1356
+  enum { rosso, giallo, verde A::verde40,1356
+  enum { rosso, giallo, verde } colori;A::colori40,1356
+const A& A::operator+(43,1431
+void operator+(44,1467
+void operator -(operator -45,1495
+void operator int(operator int46,1524
+A<int>* f(48,1556
+int f(49,1571
+int A<int>::f(f50,1590
+A<float,B<int> > A<B<float>,int>::f(f51,1618
+template <class C, int n> class AT 52,1668
+template <class C, int n> class AT { C t[AT::t52,1668
+class AU 53,1716
+class AU { T x;AU::x53,1716
+class B<B54,1735
+class B<int> { void f(B::f54,1735
+const A::B::T& abt 55,1765
+class A 56,1791
+class A { class B A::B56,1791
+class A 57,1826
+  A operator+(A::operator+59,1860
+is_muldiv_operation(61,1887
+domain foo 68,1955
+     void f(foo::f69,1968
+void A::A(72,1989
+struct A 73,2004
+struct B 74,2022
+void B::B(75,2041
+void BE_Node::BE_Node(76,2056
+class BE_Node 77,2083
+struct foo 79,2102
+  int x;foo::x80,2115
+class test 86,2156
+  int f(test::f87,2169
+  int ff(test::ff89,2231
+  int g(test::g90,2254
+class  AST_Root 92,2278
+AST_ConcreteType::AST_ConcreteType(99,2393
+AST_Array::AST_Array(107,2532
+     void f(::f115,2733
+struct A 117,2753
+A::~A(120,2777
+struct B 122,2789
+    ~B(B::~B123,2800
+enum {dog,::dog126,2817
+enum {dog, cat}::cat126,2817
+enum {dog, cat} animals;126,2817
+struct {int teats;::teats127,2842
+struct {int teats;} cow;127,2842
+class Boo 129,2868
+    enum {dog,Boo::dog130,2880
+    enum {dog, cat}Boo::cat130,2880
+    enum {dog, cat} animals;Boo::animals130,2880
+    struct {int treats;Boo::treats131,2909
+    struct {int treats;} cow;Boo::cow131,2909
+    int i,Boo::i132,2939
+    int i,a,Boo::a132,2939
+    int i,a,b;Boo::b132,2939
+    foo(Boo::foo133,2954
+    Boo(Boo::Boo137,2995
+Boo::Boo(141,3070
+typedef int should_see_this_one_enclosed_in_extern_C;149,3155
+typedef int 
(*should_see_this_function_pointer)should_see_this_function_pointer153,3228
+typedef int should_see_this_array_type[should_see_this_array_type156,3310
+
+cp-src/abstract.C,11317
+Half_Container::Half_Container(34,703
+void Half_Container::SetPosition(45,941
+void Half_Container::SetDimensions(58,1259
+void Half_Container::SetFather(81,1697
+void Half_Container::SetCollapsed(87,1787
+Specification::Specification(98,1958
+void Specification::SetPosition(119,2453
+void Specification::SetDimensions(164,3742
+void Specification::SetFather(188,4616
+void Specification::SetPath(202,4908
+Coord Specification::GetMaxX(212,5125
+Coord Specification::GetMaxY(215,5174
+Process::Process(222,5298
+void Process::SetPosition(242,5697
+void Process::SetDimensions(291,6959
+void Process::SetFather(315,7913
+void Process::SetPath(326,8123
+Coord Process::GetMaxX(335,8323
+Coord Process::GetMaxY(338,8365
+Choice::Choice(346,8482
+void Choice::SetPosition(357,8698
+void Choice::SetDimensions(405,10053
+void Choice::ChangeH(466,12014
+void Choice::ChangeW(495,12947
+void Choice::SetFather(522,13700
+void Choice::SetTextual(532,13918
+void Choice::SetCollapsed(540,14041
+int Choice::Get_Textual_H(549,14168
+int Choice::Get_Textual_W(557,14408
+void Choice::SetTerminalPos(566,14615
+Stop::Stop(588,15087
+void Stop::SetPosition(595,15207
+void Stop::SetDimensions(605,15373
+void Stop::SetFather(644,16369
+void Stop::SetTextual(652,16537
+void Stop::SetCollapsed(655,16616
+Exit::Exit(667,16768
+void Exit::SetPosition(676,16935
+void Exit::SetDimensions(687,17164
+void Exit::SetFather(695,17350
+Exit_Bex::Exit_Bex(703,17476
+void Exit_Bex::SetPosition(713,17678
+void Exit_Bex::SetDimensions(740,18430
+void Exit_Bex::SetFather(798,20444
+void Exit_Bex::SetTextual(807,20646
+void Exit_Bex::SetCollapsed(814,20757
+NoExit::NoExit(826,20943
+void NoExit::SetPosition(835,21092
+void NoExit::SetDimensions(845,21266
+void NoExit::SetFather(852,21359
+ID_Place::ID_Place(861,21488
+void ID_Place::SetIdent(875,21745
+void ID_Place::SetPosition(886,21936
+void ID_Place::SetDimensions(897,22173
+void ID_Place::SetFather(928,23017
+ID_Place::~ID_Place(932,23073
+void ID_Place::SetVisible(935,23112
+void ID_Place::ClearID(941,23193
+ID_List::ID_List(953,23379
+void ID_List::SetPosition(967,23644
+void ID_List::SetDimensions(999,24385
+void ID_List::SetFather(1038,25456
+void ID_List::SetCollapsed(1047,25595
+void ID_List::HideMe(1056,25734
+void ID_List::SetRBubble(1065,25862
+void ID_List::SetAlignement(1073,25980
+int ID_List::GetCardinality(1082,26123
+void ID_List::SetVisible(1093,26291
+void ID_List::BuildSigSorts(1103,26518
+void ID_List::ClearIDs(1126,27081
+Id_Decl::Id_Decl(1139,27280
+void Id_Decl::SetPosition(1156,27659
+void Id_Decl::SetDimensions(1174,28016
+void Id_Decl::SetFather(1191,28417
+void Id_Decl::SetCollapsed(1200,28568
+Id_Decl_List::Id_Decl_List(1214,28799
+void Id_Decl_List::SetPosition(1227,29069
+void Id_Decl_List::SetDimensions(1245,29424
+void Id_Decl_List::SetFather(1262,29844
+void Id_Decl_List::SetCollapsed(1271,29988
+Comment::Comment(1286,30209
+void Comment::SetComment(1299,30446
+void Comment::SetFather(1317,30800
+void Comment::SetPosition(1321,30854
+void Comment::SetDimensions(1331,31031
+Comment::~Comment(1345,31265
+Comment_List::Comment_List(1352,31382
+void Comment_List::SetPosition(1362,31541
+void Comment_List::SetDimensions(1380,31860
+void Comment_List::SetFather(1392,32139
+Parallel::Parallel(1406,32360
+void Parallel::SetPosition(1417,32573
+void Parallel::SetDimensions(1473,34272
+void Parallel::SetTextual(1534,36167
+int Parallel::Get_Textual_W(1543,36313
+int Parallel::Get_Textual_H(1559,36722
+void Parallel::SetTerminalPos(1570,37191
+void Parallel::SetFather(1590,37698
+void Parallel::SetCollapsed(1601,37950
+Ident_Eq::Ident_Eq(1615,38177
+void Ident_Eq::SetPosition(1632,38546
+void Ident_Eq::SetDimensions(1647,38851
+void Ident_Eq::SetFather(1662,39191
+void Ident_Eq::SetCollapsed(1669,39295
+Ident_Eq_List::Ident_Eq_List(1681,39480
+void Ident_Eq_List::SetPosition(1694,39753
+void Ident_Eq_List::SetDimensions(1712,40111
+void Ident_Eq_List::SetCollapsed(1729,40538
+void Ident_Eq_List::SetFather(1738,40683
+Local_Def::Local_Def(1751,40904
+void Local_Def::SetPosition(1761,41102
+void Local_Def::SetDimensions(1791,41833
+void Local_Def::SetFather(1832,43262
+void Local_Def::SetCollapsed(1839,43370
+void Local_Def::SetTextual(1848,43504
+Hide::Hide(1860,43681
+void Hide::SetPosition(1871,43872
+void Hide::SetDimensions(1901,44569
+void Hide::SetFather(1944,45771
+void Hide::SetCollapsed(1951,45873
+void Hide::SetTextual(1961,46003
+Interl::Interl(1972,46175
+void Interl::SetPosition(1982,46361
+void Interl::SetDimensions(1993,46593
+void Interl::SetFather(2021,47103
+Syncr::Syncr(2031,47257
+void Syncr::SetPosition(2041,47438
+void Syncr::SetDimensions(2051,47609
+void Syncr::SetFather(2079,48153
+Enable::Enable(2090,48436
+void Enable::SetPosition(2102,48690
+void Enable::SetDimensions(2169,50473
+void Enable::SetTextual(2243,53017
+void Enable::SetTerminalPos(2251,53140
+int Enable::Get_Textual_W(2271,53720
+int Enable::Get_Textual_H(2282,53985
+void Enable::SetFather(2285,54104
+void Enable::SetCollapsed(2298,54418
+Disable::Disable(2314,54780
+void Disable::SetPosition(2325,55001
+void Disable::SetDimensions(2376,56251
+void Disable::SetFather(2436,58064
+void Disable::SetCollapsed(2446,58284
+void Disable::SetTextual(2455,58412
+void Disable::SetTerminalPos(2463,58536
+int Disable::Get_Textual_W(2479,58987
+int Disable::Get_Textual_H(2488,59190
+Gen_Paral::Gen_Paral(2500,59630
+void Gen_Paral::SetPosition(2513,59899
+void Gen_Paral::SetDimensions(2540,60659
+void Gen_Paral::SetFather(2590,62171
+void Gen_Paral::SetCollapsed(2597,62290
+Action_Pref::Action_Pref(2609,62583
+void Action_Pref::SetPosition(2620,62829
+void Action_Pref::SetDimensions(2669,63937
+void Action_Pref::SetFather(2724,65777
+void Action_Pref::SetCollapsed(2734,66010
+void Action_Pref::SetTextual(2743,66147
+Internal::Internal(2757,66484
+void Internal::SetPosition(2768,66658
+void Internal::SetDimensions(2778,66838
+void Internal::SetFather(2806,67442
+Communication::Communication(2816,67702
+void Communication::SetPosition(2827,67956
+void Communication::SetDimensions(2897,70390
+void Communication::SetFather(2935,71706
+void Communication::SetCollapsed(2942,71837
+void Communication::SetTextual(2949,71968
+NoGuard::NoGuard(2961,72262
+void NoGuard::SetPosition(2974,72462
+void NoGuard::SetDimensions(2984,72639
+void NoGuard::SetFather(2987,72678
+Guard::Guard(2996,72929
+void Guard::SetPosition(3008,73118
+void Guard::SetDimensions(3022,73428
+void Guard::SetFather(3044,73894
+void Guard::SetCollapsed(3050,73974
+NoExperiment::NoExperiment(3062,74258
+void NoExperiment::SetPosition(3075,74478
+void NoExperiment::SetDimensions(3085,74670
+void NoExperiment::SetFather(3088,74714
+Experiment::Experiment(3097,74978
+void Experiment::SetPosition(3110,75245
+void Experiment::SetDimensions(3128,75611
+void Experiment::SetFather(3150,76066
+void Experiment::SetCollapsed(3157,76188
+void Experiment::SetTextual(3165,76311
+Proc_Inst::Proc_Inst(3175,76476
+void Proc_Inst::SetPosition(3191,76777
+void Proc_Inst::SetDimensions(3236,77965
+void Proc_Inst::SetFather(3286,79596
+void Proc_Inst::SetCollapsed(3294,79739
+void Proc_Inst::SetTextual(3304,79909
+Value_Expr::Value_Expr(3316,80100
+void Value_Expr::SetPosition(3329,80327
+void Value_Expr::SetDimensions(3340,80572
+void Value_Expr::SetFather(3343,80614
+Value_Expr_List::Value_Expr_List(3351,80755
+void Value_Expr_List::SetPosition(3364,81042
+void Value_Expr_List::SetDimensions(3382,81406
+void Value_Expr_List::SetFather(3399,81830
+void Value_Expr_List::SetCollapsed(3408,81977
+Sum_Ident::Sum_Ident(3423,82203
+void Sum_Ident::SetPosition(3435,82445
+void Sum_Ident::SetDimensions(3466,83196
+void Sum_Ident::SetFather(3509,84540
+void Sum_Ident::SetCollapsed(3516,84653
+void Sum_Ident::SetTextual(3525,84793
+void Sum_Ident::SetTerminalPos(3532,84897
+Value::Value(3552,85432
+void Value::SetPosition(3569,85792
+void Value::SetDimensions(3583,86091
+void Value::SetFather(3606,86628
+void Value::SetCollapsed(3613,86731
+Term::Term(3626,86908
+void Term::SetPosition(3646,87323
+void Term::SetDimensions(3671,87942
+void Term::SetFather(3697,88599
+void Term::SetCollapsed(3705,88732
+Exit_Entry::Exit_Entry(3719,88947
+void Exit_Entry::SetPosition(3732,89176
+void Exit_Entry::SetDimensions(3743,89421
+void Exit_Entry::SetFather(3746,89463
+Exit_Entry_List::Exit_Entry_List(3754,89604
+void Exit_Entry_List::SetPosition(3766,89875
+void Exit_Entry_List::SetDimensions(3785,90304
+void Exit_Entry_List::SetFather(3802,90753
+void Exit_Entry_List::SetCollapsed(3811,90900
+Sum_Gate::Sum_Gate(3826,91125
+void Sum_Gate::SetPosition(3837,91363
+void Sum_Gate::SetDimensions(3873,92120
+void Sum_Gate::SetFather(3915,93438
+void Sum_Gate::SetCollapsed(3922,93549
+void Sum_Gate::SetTextual(3931,93687
+void Sum_Gate::SetTerminalPos(3938,93790
+Gate_Decl::Gate_Decl(3959,94421
+void Gate_Decl::SetPosition(3977,94900
+void Gate_Decl::SetDimensions(3995,95298
+void Gate_Decl::SetFather(4011,95694
+void Gate_Decl::SetCollapsed(4020,95871
+Gate_Decl_List::Gate_Decl_List(4034,96130
+void Gate_Decl_List::SetPosition(4047,96414
+void Gate_Decl_List::SetDimensions(4065,96779
+void Gate_Decl_List::SetFather(4082,97207
+void Gate_Decl_List::SetCollapsed(4091,97353
+Par::Par(4106,97572
+void Par::SetPosition(4126,97957
+void Par::SetDimensions(4174,99236
+void Par::SetFather(4226,100814
+void Par::SetCollapsed(4234,100943
+void Par::SetTextual(4245,101100
+Sort_Id_Exit::Sort_Id_Exit(4258,101329
+void Sort_Id_Exit::SetPosition(4270,101556
+void Sort_Id_Exit::SetDimensions(4283,101834
+void Sort_Id_Exit::SetFather(4297,102142
+void Sort_Id_Exit::SetCollapsed(4303,102228
+Equality::Equality(4314,102512
+Equality::Equality(4327,102736
+void Equality::SetPosition(4340,102987
+void Equality::SetDimensions(4357,103329
+void Equality::SetFather(4377,103720
+void Equality::SetCollapsed(4387,103858
+Guarded::Guarded(4401,104167
+void Guarded::SetPosition(4413,104384
+void Guarded::SetDimensions(4441,105084
+void Guarded::SetFather(4482,106273
+void Guarded::SetCollapsed(4489,106377
+void Guarded::SetTextual(4499,106509
+Exper_Off::Exper_Off(4510,106813
+void Exper_Off::SetPosition(4523,107035
+void Exper_Off::SetDimensions(4533,107220
+void Exper_Off::SetFather(4536,107261
+Exper_Off_List::Exper_Off_List(4544,107521
+void Exper_Off_List::SetPosition(4557,107802
+void Exper_Off_List::SetDimensions(4575,108167
+void Exper_Off_List::SetFather(4592,108594
+void Exper_Off_List::SetCollapsed(4601,108740
+Exclam::Exclam(4616,109087
+void Exclam::SetPosition(4629,109300
+void Exclam::SetDimensions(4641,109541
+void Exclam::SetFather(4655,109830
+void Exclam::SetCollapsed(4661,109912
+Query::Query(4673,110194
+void Query::SetPosition(4686,110399
+void Query::SetDimensions(4698,110636
+void Query::SetFather(4712,110918
+void Query::SetCollapsed(4718,110997
+Definition::Definition(4729,111279
+void Definition::SetPosition(4741,111448
+void Definition::SetDimensions(4752,111658
+void Definition::SetFather(4766,111896
+void Definition::SetPath(4777,112089
+Proc_List::Proc_List(4790,112374
+void Proc_List::SetPosition(4799,112505
+void Proc_List::SetDimensions(4809,112686
+void Proc_List::SetFather(4815,112767
+void Proc_List::SetPath(4824,112908
+char *Proc_List::GetPath(Proc_List::GetPath4832,113068
+
+cp-src/abstract.H,10509
+#define abstract_hh16,453
+class ID_Place:ID_Place23,536
+       char *str;ID_Place::str25,571
+       char RBubble;ID_Place::RBubble26,583
+ char *GetIdent(ID_Place::GetIdent41,857
+ void SetRBubble(ID_Place::SetRBubble42,891
+ char GetRBubble(ID_Place::GetRBubble43,934
+class ID_List:ID_List47,1012
+       ID_Place *elem;ID_List::elem49,1046
+       ID_List *next;ID_List::next50,1063
+class Id_Decl:Id_Decl73,1540
+       ID_List *id_list;Id_Decl::id_list75,1574
+       ID_Place *sort_id;Id_Decl::sort_id76,1593
+class Id_Decl_List:Id_Decl_List89,1829
+       Id_Decl *elem;Id_Decl_List::elem91,1868
+       Id_Decl_List *next;Id_Decl_List::next92,1884
+class Comment:Comment105,2140
+       char *comm;Comment::comm107,2174
+class Comment_List:Comment_List122,2440
+       Comment *elem;Comment_List::elem124,2479
+       Comment_List *next;Comment_List::next125,2495
+class Value_Expr:Value_Expr135,2694
+class Value_Expr_List:Value_Expr_List149,2911
+       Tree_Node *elem;Value_Expr_List::elem151,2953
+       Value_Expr_List *next;Value_Expr_List::next152,2971
+class Exit_Entry:Exit_Entry165,3244
+class Exit_Entry_List:Exit_Entry_List179,3460
+       Tree_Node *elem;Exit_Entry_List::elem181,3502
+       Exit_Entry_List *next;Exit_Entry_List::next182,3520
+class Exper_Off:Exper_Off195,3793
+class Exper_Off_List:Exper_Off_List207,3977
+        Exper_Off *elem;Exper_Off_List::elem209,4018
+        Exper_Off_List *next;Exper_Off_List::next210,4043
+class Gate_Decl:Gate_Decl223,4323
+       ID_List *gate_id_list1;Gate_Decl::gate_id_list1225,4359
+       ID_List *gate_id_list2;Gate_Decl::gate_id_list2226,4384
+class Gate_Decl_List:Gate_Decl_List239,4630
+       Gate_Decl *elem;Gate_Decl_List::elem241,4671
+       Gate_Decl_List *next;Gate_Decl_List::next242,4689
+class Ident_Eq:Ident_Eq255,4957
+        Id_Decl *iddecl;Ident_Eq::iddecl257,4992
+        Value_Expr *expr;Ident_Eq::expr258,5017
+class Ident_Eq_List:Ident_Eq_List271,5270
+        Ident_Eq *elem;Ident_Eq_List::elem273,5310
+        Ident_Eq_List *next;Ident_Eq_List::next274,5334
+class Half_Container:Half_Container287,5608
+       ID_List *gate_list;Half_Container::gate_list289,5649
+class Specification:Specification308,5954
+        Comment_List *com_list;Specification::com_list312,6013
+       ID_Place *ident;Specification::ident313,6045
+       ID_List *gate_list;Specification::gate_list314,6063
+       Id_Decl_List *id_decl_list;Specification::id_decl_list315,6084
+        Comment_List *com_list1;Specification::com_list1316,6113
+       Tree_Node *func;Specification::func317,6146
+       Data_List *dt_list;Specification::dt_list318,6164
+       Definition *def;Specification::def319,6185
+       Coord yl1,Specification::yl1320,6203
+       Coord yl1,yl2,Specification::yl2320,6203
+       Coord yl1,yl2,yl3;Specification::yl3320,6203
+       Coord MaxX,Specification::MaxX321,6223
+       Coord MaxX, MaxY;Specification::MaxY321,6223
+class Process:Process337,6609
+        Comment_List *com_list;Process::com_list339,6643
+       ID_Place *ident;Process::ident340,6675
+       ID_List *gate_list;Process::gate_list341,6693
+       Id_Decl_List *id_decl_list;Process::id_decl_list342,6714
+       Definition *def;Process::def343,6743
+       Tree_Node *func;Process::func344,6761
+       char nesting;Process::nesting345,6779
+       Coord yl1,Process::yl1346,6794
+       Coord yl1,yl2,Process::yl2346,6794
+       Coord yl1,yl2,yl3,Process::yl3346,6794
+       Coord yl1,yl2,yl3,ypath;Process::ypath346,6794
+       Coord MaxX,Process::MaxX347,6820
+       Coord MaxX, MaxY;Process::MaxY347,6820
+ char GetNesting(Process::GetNesting363,7186
+class Proc_List:Proc_List367,7257
+        Process *elem;Proc_List::elem369,7293
+        Proc_List *next;Proc_List::next370,7316
+class Definition:Definition382,7574
+        Tree_Node *bex;Definition::bex384,7611
+        Proc_List *process_list;Definition::process_list385,7635
+        Data_List *data_list;Definition::data_list386,7668
+       char path[Definition::path387,7698
+ char *GetPath(Definition::GetPath397,7940
+class Exit:Exit407,8071
+       ID_List *sort_list;Exit::sort_list409,8102
+class NoExit:NoExit421,8305
+class Value:Value440,8560
+       ID_Place *ident;Value::ident442,8592
+       ID_Place *sort_id;Value::sort_id443,8610
+class Term:Term456,8841
+       ID_Place *op_ident;Term::op_ident458,8872
+       Value_Expr_List *expr_list;Term::expr_list459,8893
+       ID_Place *sort_id;Term::sort_id460,8922
+class Equality:Equality473,9169
+        Tree_Node *express1;Equality::express1475,9204
+        Tree_Node *express2;Equality::express2476,9233
+class Sort_Id_Exit:Sort_Id_Exit490,9504
+       ID_Place *sort_id;Sort_Id_Exit::sort_id492,9543
+class NoGuard:NoGuard511,9837
+class Guard:Guard524,10045
+        Equality *equality;Guard::equality526,10077
+class NoExperiment:NoExperiment545,10368
+class Experiment:Experiment558,10591
+        Exper_Off_List *exp_offer_list;Experiment::exp_offer_list560,10628
+        Tree_Node *guard_option;Experiment::guard_option561,10668
+ Tree_Node *GetGuard(Experiment::GetGuard574,10962
+class Exclam:Exclam578,11053
+        Tree_Node *value_exp;Exclam::value_exp580,11086
+class Query:Query593,11324
+        Id_Decl *id_decl;Query::id_decl595,11356
+class Internal:Internal614,11643
+class Communication:Communication627,11854
+       ID_Place *gate_identifier;Communication::gate_identifier629,11894
+        Tree_Node 
*experiment_option;Communication::experiment_option630,11922
+        Coord xl,Communication::xl631,11960
+        Coord xl, yl;Communication::yl631,11960
+        int hr;Communication::hr632,11982
+class Gen_Paral:Gen_Paral652,12337
+        ID_List *gate_id_list;Gen_Paral::gate_id_list654,12373
+       Coord Xclose;Gen_Paral::Xclose655,12404
+       char border;Gen_Paral::border656,12419
+ void HideGate(Gen_Paral::HideGate668,12634
+class Interl:Interl672,12730
+class Syncr:Syncr685,12929
+class Action_Pref:Action_Pref704,13185
+        Tree_Node *action_den;Action_Pref::action_den706,13223
+        Tree_Node *bex;Action_Pref::bex707,13254
+       char havebox;Action_Pref::havebox708,13278
+       char border;Action_Pref::border709,13293
+class Enable:Enable723,13577
+        Tree_Node *bex1,Enable::bex1725,13610
+        Tree_Node *bex1, *bex2;Enable::bex2725,13610
+       ID_List *gate_id_list;Enable::gate_id_list726,13642
+        Coord xl,Enable::xl727,13666
+        Coord xl, yl1,Enable::yl1727,13666
+        Coord xl, yl1, xl2,Enable::xl2727,13666
+        Coord xl, yl1, xl2, yl2,Enable::yl2727,13666
+        Coord xl, yl1, xl2, yl2, xid,Enable::xid727,13666
+        Coord xl, yl1, xl2, yl2, xid, yid,Enable::yid727,13666
+        Coord xl, yl1, xl2, yl2, xid, yid, Yclose;Enable::Yclose727,13666
+       char havebox;Enable::havebox728,13717
+       char border;Enable::border729,13732
+class Disable:Disable746,14097
+        Tree_Node *bex1,Disable::bex1748,14131
+        Tree_Node *bex1, *bex2;Disable::bex2748,14131
+        Coord xl,Disable::xl749,14163
+        Coord xl, yl,Disable::yl749,14163
+        Coord xl, yl, yl2;Disable::yl2749,14163
+       char havebox;Disable::havebox750,14190
+       char border;Disable::border751,14205
+class Choice:Choice768,14561
+       Tree_Node *bex1,Choice::bex1770,14594
+       Tree_Node *bex1, *bex2;Choice::bex2770,14594
+       Coord xl,Choice::xl771,14619
+       Coord xl, yl,Choice::yl771,14619
+       Coord xl, yl, yl1;Choice::yl1771,14619
+       char havebox;Choice::havebox772,14639
+       int delta;Choice::delta773,14654
+       char border;Choice::border774,14666
+class Stop:Stop793,15054
+       char havebox;Stop::havebox795,15085
+       char border;Stop::border796,15100
+class Exit_Bex:Exit_Bex810,15338
+       Exit_Entry_List *entry_list;Exit_Bex::entry_list812,15373
+       Coord Xopen,Exit_Bex::Xopen813,15404
+       Coord Xopen, Xclose;Exit_Bex::Xclose813,15404
+       char havebox;Exit_Bex::havebox814,15426
+       char border;Exit_Bex::border815,15441
+class Hide:Hide829,15707
+       ID_List *gate_list;Hide::gate_list831,15738
+       Tree_Node *bex;Hide::bex832,15759
+       char border;Hide::border833,15776
+       Coord yl;Hide::yl834,15790
+class Guarded:Guarded848,16047
+        Equality *equality;Guarded::equality850,16081
+        Tree_Node *bex;Guarded::bex851,16109
+       Coord Xclose;Guarded::Xclose852,16133
+       char border;Guarded::border853,16148
+class Proc_Inst:Proc_Inst867,16425
+       ID_List *gate_list;Proc_Inst::gate_list869,16461
+       ID_Place *ident;Proc_Inst::ident870,16482
+       Value_Expr_List *value_expr_list;Proc_Inst::value_expr_list871,16500
+       Coord yp,Proc_Inst::yp872,16535
+       Coord yp, yl1,Proc_Inst::yl1872,16535
+       Coord yp, yl1, Xopen,Proc_Inst::Xopen872,16535
+       Coord yp, yl1, Xopen, Xclose;Proc_Inst::Xclose872,16535
+       int hp;Proc_Inst::hp873,16566
+       char border;Proc_Inst::border874,16575
+class Parallel:Parallel888,16870
+       Tree_Node *bex1,Parallel::bex1890,16905
+       Tree_Node *bex1, *bex2,Parallel::bex2890,16905
+       Tree_Node *bex1, *bex2, *oper;Parallel::oper890,16905
+       Coord xl,Parallel::xl891,16937
+       Coord xl, yl,Parallel::yl891,16937
+       Coord xl, yl, yl1;Parallel::yl1891,16937
+       char havebox;Parallel::havebox892,16957
+       int delta;Parallel::delta893,16972
+       char border;Parallel::border894,16984
+ char GetOperType(Parallel::GetOperType910,17343
+class Local_Def:Local_Def914,17429
+       Ident_Eq_List *equa_list;Local_Def::equa_list916,17465
+       Tree_Node *bex;Local_Def::bex917,17492
+       Coord yl;Local_Def::yl918,17509
+       char border;Local_Def::border919,17520
+class Par:Par933,17801
+       Gate_Decl_List *gate_decl_list;Par::gate_decl_list935,17831
+       Tree_Node *oper,Par::oper936,17864
+       Tree_Node *oper, *bex;Par::bex936,17864
+       Coord xl,Par::xl937,17888
+       Coord xl, yl;Par::yl937,17888
+       char border;Par::border938,17903
+class Sum_Gate:Sum_Gate952,18180
+       Gate_Decl_List *gate_decl_list;Sum_Gate::gate_decl_list954,18215
+       Tree_Node *bex;Sum_Gate::bex955,18248
+       Coord xl,Sum_Gate::xl956,18265
+       Coord xl, yl,Sum_Gate::yl956,18265
+       Coord xl, yl, Xch,Sum_Gate::Xch956,18265
+       Coord xl, yl, Xch, Ych,Sum_Gate::Ych956,18265
+       Coord xl, yl, Xch, Ych, Xclose,Sum_Gate::Xclose956,18265
+       Coord xl, yl, Xch, Ych, Xclose, Yclose;Sum_Gate::Yclose956,18265
+       char border;Sum_Gate::border957,18306
+class Sum_Ident:Sum_Ident972,18613
+       Id_Decl_List *ident_decl_list;Sum_Ident::ident_decl_list974,18649
+       Tree_Node *bex;Sum_Ident::bex975,18681
+       Coord xl,Sum_Ident::xl976,18698
+       Coord xl, yl,Sum_Ident::yl976,18698
+       Coord xl, yl, Xch,Sum_Ident::Xch976,18698
+       Coord xl, yl, Xch, Ych,Sum_Ident::Ych976,18698
+       Coord xl, yl, Xch, Ych, Xclose,Sum_Ident::Xclose976,18698
+       Coord xl, yl, Xch, Ych, Xclose, Yclose;Sum_Ident::Yclose976,18698
+       char border;Sum_Ident::border977,18739
+
+cp-src/cfront.H,8316
+struct loc     67,1948
+       short   file;loc::file69,1988
+       short   line;loc::line70,2036
+struct ea 80,2150
+               void* p;ea::p82,2224
+               int i;ea::i83,2235
+       ea(ea::ea86,2249
+       ea(ea::ea87,2275
+       ea(ea::ea88,2301
+       ea(ea::ea89,2310
+overload error;94,2349
+#define DEL(161,4040
+#define PERM(162,4092
+#define UNPERM(163,4123
+struct node 165,4157
+       TOK     base;node::base166,4171
+       TOK     n_key;node::n_key167,4182
+       bit     permanent;node::permanent168,4226
+struct table 175,4321
+       char    init_stat;table::init_stat177,4406
+       short   size;table::size181,4571
+       short   hashsize;table::hashsize182,4584
+       short   free_slot;table::free_slot183,4601
+       Pname*  entries;table::entries184,4651
+       short*  hashtbl;table::hashtbl185,4668
+       Pstmt   real_block;table::real_block186,4685
+       Ptable  next;table::next189,4787
+       Pname   t_name;table::t_name190,4834
+       void    set_scope(table::set_scope198,4988
+       void    set_name(table::set_name199,5029
+       int     max(table::max201,5091
+#define DEFINED 230,5655
+#define SIMPLIFIED 231,5712
+#define DEF_SEEN 232,5754
+#define IN_ERROR 234,5859
+struct type 236,5881
+       bit     defined;type::defined237,5902
+       TOK     integral(type::integral255,6278
+       TOK     numeric(type::numeric256,6324
+       TOK     num_ptr(type::num_ptr257,6370
+struct enumdef 265,6500
+       bit     e_body;enumdef::e_body266,6535
+       short   no_of_enumerators;enumdef::no_of_enumerators267,6548
+       Pname   mem;enumdef::mem268,6574
+               enumdef(enumdef::enumdef269,6586
+struct classdef 278,6732
+       bit     pubbase;classdef::pubbase279,6769
+       bit     c_body;classdef::c_body280,6783
+       TOK     csu;classdef::csu281,6830
+       char    obj_align;classdef::obj_align282,6877
+       char    bit_ass;classdef::bit_ass283,6894
+       char    virt_count;classdef::virt_count284,6943
+       Pname   clbase;classdef::clbase286,7033
+       char*   string;classdef::string287,7063
+       Pname   mem_list;classdef::mem_list288,7099
+       Ptable  memtbl;classdef::memtbl289,7116
+       int     obj_size;classdef::obj_size290,7132
+       int     real_size;classdef::real_size291,7147
+       Plist   friend_list;classdef::friend_list292,7196
+       Pname   pubdef;classdef::pubdef293,7216
+       Plist   tn_list;classdef::tn_list294,7231
+       Pclass  in_class;classdef::in_class295,7289
+       Ptype   this_type;classdef::this_type296,7335
+       Pname*  virt_init;classdef::virt_init297,7353
+       Pname   itor;classdef::itor298,7412
+       Pname   conv;classdef::conv299,7450
+       TOK     is_simple(classdef::is_simple302,7506
+       Pname   has_ctor(classdef::has_ctor314,7759
+       Pname   has_dtor(classdef::has_dtor315,7813
+       Pname   has_itor(classdef::has_itor316,7867
+struct basetype 323,7935
+       bit     b_unsigned;basetype::b_unsigned334,8195
+       bit     b_const;basetype::b_const335,8212
+       bit     b_typedef;basetype::b_typedef336,8226
+       bit     b_inline;basetype::b_inline337,8242
+       bit     b_virtual;basetype::b_virtual338,8257
+       bit     b_short;basetype::b_short339,8273
+       bit     b_long;basetype::b_long340,8287
+       char    b_bits;basetype::b_bits341,8300
+       char    b_offset;basetype::b_offset342,8345
+       TOK     b_sto;basetype::b_sto343,8384
+       Pname   b_name;basetype::b_name344,8433
+       Ptable  b_table;basetype::b_table345,8478
+       Pexpr   b_field;basetype::b_field346,8525
+       Pname   b_xname;basetype::b_xname347,8582
+       Ptype   b_fieldtype;basetype::b_fieldtype348,8615
+struct fct 365,8857
+       TOK     nargs;fct::nargs367,8885
+       TOK     nargs_known;fct::nargs_known368,8897
+       char    f_virtual;fct::f_virtual369,8940
+       char    f_inline;fct::f_inline370,8991
+       Ptype   returns;fct::returns371,9052
+       Pname   argtype;fct::argtype372,9068
+       Ptype   s_returns;fct::s_returns373,9084
+       Pname   f_this;fct::f_this374,9102
+       Pclass  memof;fct::memof375,9117
+       Pblock  body;fct::body376,9158
+       Pname   f_init;fct::f_init377,9172
+       Pexpr   b_init;fct::b_init380,9295
+       Pexpr   f_expr;fct::f_expr383,9389
+       Pexpr   last_expanded;fct::last_expanded384,9441
+       Pname   f_result;fct::f_result385,9463
+       bit     declared(fct::declared396,9724
+struct name_list 403,9827
+       Pname   f;name_list::f404,9846
+       Plist   l;name_list::l405,9856
+       name_list(name_list::name_list406,9866
+struct gen 410,9931
+       Plist   fct_list;gen::fct_list411,9964
+       char*   string;gen::string412,9981
+struct pvtyp 419,10071
+       Ptype typ;pvtyp::typ420,10093
+struct vec 423,10109
+       Pexpr   dim;vec::dim426,10157
+       int     size;vec::size427,10169
+       vec(vec::vec429,10182
+struct ptr 435,10289
+       Pclass  memof;ptr::memof437,10339
+       bit     rdo;ptr::rdo438,10395
+       ptr(ptr::ptr440,10419
+inline Pptr type::addrof(447,10546
+struct expr 469,11113
+               Ptype   tp;expr::tp481,11414
+               int     syn_class;expr::syn_class482,11426
+               Pexpr   e1;expr::e1485,11456
+               char*   string;expr::string486,11468
+               int     i1;expr::i1487,11484
+               Pexpr   e2;expr::e2490,11507
+               Pexpr   n_initializer;expr::n_initializer491,11519
+               char*   string2;expr::string2492,11542
+               Ptype   tp2;expr::tp2495,11608
+               Pname   fct_name;expr::fct_name496,11621
+               Pexpr   cond;expr::cond497,11639
+               Pname   mem;expr::mem498,11653
+               Ptype   as_type;expr::as_type499,11666
+               Ptable  n_table;expr::n_table500,11683
+               Pin     il;expr::il501,11701
+struct texpr 527,12108
+       texpr(texpr::texpr528,12149
+struct ival 531,12218
+       ival(ival::ival532,12258
+struct call 535,12308
+       call(call::call536,12338
+struct qexpr 543,12453
+       qexpr(qexpr::qexpr544,12500
+struct ref 547,12582
+       ref(ref::ref548,12632
+struct text_expr 551,12697
+       text_expr(text_expr::text_expr552,12731
+struct name 557,12884
+       TOK     n_oper;name::n_oper558,12948
+       TOK     n_sto;name::n_sto559,12987
+       TOK     n_stclass;name::n_stclass560,13038
+       TOK     n_scope;name::n_scope561,13080
+       unsigned char   n_union;name::n_union562,13129
+       bit     n_evaluated;name::n_evaluated563,13173
+       bit     n_xref;name::n_xref564,13221
+       unsigned char   lex_level;name::lex_level565,13261
+       TOK     n_protect;name::n_protect566,13287
+       short   n_addr_taken;name::n_addr_taken567,13337
+       short   n_used;name::n_used568,13358
+       short   n_assigned_to;name::n_assigned_to569,13373
+       Loc     where;name::where570,13395
+       int     n_val;name::n_val571,13407
+       int     n_offset;name::n_offset574,13518
+       Pname   n_list;name::n_list575,13567
+       Pname   n_tbl_list;name::n_tbl_list576,13582
+               Pname   n_qualifier;name::n_qualifier578,13610
+               Ptable  n_realscope;name::n_realscope579,13659
+       void    unhide(name::unhide592,13929
+       void    use(name::use596,14025
+       void    take_addr(name::take_addr598,14069
+struct stmt 615,14374
+       Pstmt   s;stmt::s617,14479
+       Pstmt   s_list;stmt::s_list618,14489
+       Loc     where;stmt::where619,14504
+               Pname   d;stmt::d621,14525
+               Pexpr   e2;stmt::e2622,14536
+               Pstmt   has_default;stmt::has_default623,14548
+               int     case_value;stmt::case_value624,14569
+               Ptype   ret_tp;stmt::ret_tp625,14587
+               Pexpr   e;stmt::e628,14616
+               bit     own_tbl;stmt::own_tbl629,14627
+               Pstmt   s2;stmt::s2630,14642
+       Ptable  memtbl;stmt::memtbl632,14658
+               Pstmt   for_init;stmt::for_init634,14683
+               Pstmt   else_stmt;stmt::else_stmt635,14701
+               Pstmt   case_list;stmt::case_list636,14720
+               bit     empty;stmt::empty637,14739
+struct estmt 662,15111
+       estmt(estmt::estmt669,15303
+struct ifstmt 672,15379
+       ifstmt(ifstmt::ifstmt676,15484
+struct lstmt 680,15586
+       lstmt(lstmt::lstmt686,15650
+struct forstmt 689,15728
+       forstmt(forstmt::forstmt690,15759
+struct block 694,15880
+       block(block::block695,15919
+struct pair 703,16060
+       pair(pair::pair704,16096
+struct nlist 708,16173
+       Pname   head;nlist::head709,16188
+       Pname   tail;nlist::tail710,16201
+       void    add(nlist::add712,16230
+struct slist 718,16344
+       Pstmt   head;slist::head719,16359
+       Pstmt   tail;slist::tail720,16372
+               slist(slist::slist721,16385
+       void    add(slist::add722,16430
+struct elist 727,16521
+       Pexpr   head;elist::head728,16536
+       Pexpr   tail;elist::tail729,16549
+               elist(elist::elist730,16562
+       void    add(elist::add731,16607
+struct dcl_context 739,16739
+       Pname   c_this;dcl_context::c_this740,16760
+       Ptype   tot;dcl_context::tot741,16802
+       Pname   not;dcl_context::not742,16840
+       Pclass  cot;dcl_context::cot743,16886
+       Ptable  ftbl;dcl_context::ftbl744,16938
+       Pname   nof;dcl_context::nof745,16985
+       void    stack(dcl_context::stack747,17023
+       void    unstack(dcl_context::unstack748,17064
+#define MAXCONT        751,17095
+const MIA 779,17690
+struct iline 780,17705
+       Pname   fct_name;iline::fct_name781,17720
+       Pin     i_next;iline::i_next782,17754
+       Ptable  i_table;iline::i_table783,17767
+       Pname   local[iline::local784,17784
+       Pexpr   arg[iline::arg785,17838
+       Ptype   tp[iline::tp786,17887
+#define FUDGE111 791,17985
+#define DB(831,18890
+#define DB(833,18920
+
+cp-src/burton.cpp,103
+::dummy::dummy test::dummy1(1,0
+::dummy::dummy test::dummy2(6,64
+::dummy::dummy test::dummy3(11,143
+
+cp-src/functions.cpp,807
+void Date::setDate 5,148
+void Date::plus 32,939
+void Date::minus 42,1229
+void Date::shift 52,1407
+Date & Date::operator = Date::operator =62,1628
+Date & Date::operator += Date::operator +=69,1789
+Date & Date::operator -= Date::operator -=78,1939
+Date & Date::operator ++ Date::operator ++87,2080
+Date & Date::operator -- Date::operator --96,2216
+int Date::operator - Date::operator -104,2331
+int Date::operator < Date::operator <112,2483
+int Date::operator > Date::operator >116,2557
+int Date::operator == Date::operator ==120,2631
+ostream& operator << operator <<124,2707
+istream& operator >> operator >>133,2943
+bool isLeap 159,3543
+bool isHoliday 163,3629
+void asort(173,3865
+void ReadVacation 186,4064
+void Debug 201,4523
+int WorkingDays(211,4867
+Date StartDay(226,5129
+
+cp-src/MDiagArray2.h,709
+#define octave_MDiagArray2_h 29,870
+#undef LTGT35,967
+#define LTGT39,1031
+#define LTGT 42,1051
+class MDiagArray2 78,2022
+  MDiagArray2 MDiagArray2::MDiagArray282,2077
+  MDiagArray2 MDiagArray2::MDiagArray286,2154
+  MDiagArray2 MDiagArray2::MDiagArray287,2198
+  MDiagArray2 MDiagArray2::MDiagArray288,2254
+  MDiagArray2 MDiagArray2::MDiagArray289,2329
+  MDiagArray2 MDiagArray2::MDiagArray290,2387
+  MDiagArray2 MDiagArray2::MDiagArray291,2450
+  ~MDiagArray2 MDiagArray2::~MDiagArray293,2515
+  MDiagArray2<T>& operator = MDiagArray2::operator =95,2542
+  operator MArray2<T> MDiagArray2::operator MArray2<T>101,2667
+#undef LTGT144,3874
+#define INSTANTIATE_MDIAGARRAY_FRIENDS(146,3887
+
+cp-src/Pctest.h,665
+#define PCTEST_H24,837
+    PctestActionValid,::PctestActionValid47,1286
+    PctestActionValidLasthop,::PctestActionValidLasthop49,1370
+    PctestActionFiltered,::PctestActionFiltered51,1481
+    PctestActionAbort  ::PctestActionAbort53,1566
+} PctestActionType;54,1616
+class Pctest 56,1637
+    Pctest(Pctest::Pctest59,1663
+    virtual ~Pctest(Pctest::~Pctest65,1813
+    virtual char *GetTargetName(Pctest::GetTargetName77,2171
+    virtual PctestActionType GetAction(Pctest::GetAction86,2555
+    int initialized;Pctest::initialized93,2698
+    char *targetName;Pctest::targetName94,2743
+    struct timeval syscallTime;Pctest::syscallTime95,2785
+
+cp-src/Range.h,595
+#define octave_Range_h 24,765
+Range35,891
+  Range Range::Range39,909
+  Range Range::Range42,995
+  Range Range::Range46,1130
+  Range Range::Range50,1248
+  double base Range::base54,1376
+  double limit Range::limit55,1425
+  double inc Range::inc56,1475
+  int nelem Range::nelem57,1523
+  void set_base Range::set_base68,1728
+  void set_limit Range::set_limit69,1774
+  void set_inc Range::set_inc70,1821
+  double rng_base;Range::rng_base79,2023
+  double rng_limit;Range::rng_limit80,2042
+  double rng_inc;Range::rng_inc81,2062
+  int rng_nelem;Range::rng_nelem83,2081
+
+cp-src/screen.cpp,228
+unsigned char cursor_x,15,548
+unsigned char cursor_x, cursor_y;15,548
+static union REGS regs;16,582
+void goto_xy(18,607
+void hide_cursor(27,774
+void cursor_position(32,836
+void clear_screen(41,997
+void write_xyc(55,1247
+
+cp-src/screen.hpp,667
+#define __COLORS9,401
+enum COLORS 11,419
+    BLACK,COLORS::BLACK12,433
+    BLUE,COLORS::BLUE13,471
+    GREEN,COLORS::GREEN14,481
+    CYAN,COLORS::CYAN15,492
+    RED,COLORS::RED16,502
+    MAGENTA,COLORS::MAGENTA17,511
+    BROWN,COLORS::BROWN18,524
+    LIGHTGRAY,COLORS::LIGHTGRAY19,535
+    DARKGRAY,COLORS::DARKGRAY20,550
+    LIGHTBLUE,COLORS::LIGHTBLUE21,589
+    LIGHTGREEN,COLORS::LIGHTGREEN22,604
+    LIGHTCYAN,COLORS::LIGHTCYAN23,620
+    LIGHTRED,COLORS::LIGHTRED24,635
+    LIGHTMAGENTA,COLORS::LIGHTMAGENTA25,649
+    YELLOW,COLORS::YELLOW26,667
+    WHITECOLORS::WHITE27,679
+#define SCREEN_FP(31,700
+#define SCREEN_START 33,795
+
+cp-src/conway.cpp,270
+#define max(12,357
+#define min(13,393
+const int num_rows 15,430
+const int num_columns 16,470
+class site *field_of_play[field_of_play18,499
+int site::total_surrounding(20,550
+void display(37,958
+void glider(50,1239
+void traffic_light(59,1478
+void main(67,1633
+
+cp-src/conway.hpp,396
+class site:site5,235
+    char x,site::x7,269
+    char x, y,site::y7,269
+    char x, y, alive,site::alive7,269
+    char x, y, alive, next_alive;site::next_alive7,269
+    site(site::site10,344
+    char read(site::read12,410
+    void set(site::set13,444
+    void clear(site::clear14,478
+    void compute_next_state(site::compute_next_state15,514
+    void step(site::step22,717
+
+cp-src/clheir.cpp,307
+const int max_num_generic_objects 9,298
+generic_object * object_registry[object_registry10,340
+void init_registry(12,400
+void step_everybody(19,527
+void discrete_location::clear_neighbors(31,852
+generic_object::generic_object(36,981
+generic_object::~generic_object(48,1255
+void agent::move(53,1353
+
+cp-src/clheir.hpp,1057
+class generic_object13,520
+    int where_in_registry;generic_object::where_in_registry15,547
+    virtual void compute_next_state(generic_object::compute_next_state21,842
+    virtual void step(generic_object::step22,888
+const int max_num_directions 31,1219
+class location:location33,1289
+    location(location::location43,1642
+class irregular_location:irregular_location47,1686
+    double x,irregular_location::x49,1734
+    double x, y,irregular_location::y49,1734
+    double x, y, z;irregular_location::z49,1734
+    irregular_location(irregular_location::irregular_location51,1762
+class discrete_location:discrete_location56,1889
+    int x,discrete_location::x58,1936
+    int x, y,discrete_location::y58,1936
+    int x, y, z;discrete_location::z58,1936
+    class location *neighbors[discrete_location::neighbors59,1953
+    discrete_location(discrete_location::discrete_location62,2044
+    void assign_neighbor(discrete_location::assign_neighbor66,2184
+class agent:agent75,2508
+    location *where;agent::where77,2549
+
+cp-src/fail.C,417
+struct A 7,263
+          struct B A::B8,274
+                  struct C A::B::C9,289
+                          int x;A::B::C::x10,305
+                          C(A::B::C::C11,318
+                          operator int(A::B::C::operator int12,342
+                  typedef C T;A::B::T14,389
+          typedef B T2;A::T216,414
+class A 23,453
+       class B A::B24,463
+               class C A::B::C25,474
+               int f(A::B::f26,488
+int A::B::f(31,521
+main(37,571
+       class D 41,622
+               D(D::D43,659
+               int x;D::x44,694
+
+el-src/TAGTEST.EL,148
+(foo::defmumble bletch 1,0
+(defalias 'pending-delete-mode pending-delete-mode5,102
+(defalias (quote explicitly-quoted-pending-delete-mode)8,175
+
+el-src/emacs/lisp/progmodes/etags.el,5069
+(defvar tags-file-name 34,1034
+(defgroup etags 43,1498
+(defcustom tags-case-fold-search 47,1566
+(defcustom tags-table-list 59,2051
+(defcustom tags-compression-info-list69,2449
+(defcustom tags-add-tables 88,3231
+(defcustom tags-revert-without-query 98,3627
+(defvar tags-table-computed-list 103,3778
+(defvar tags-table-computed-list-for 112,4262
+(defvar tags-table-list-pointer 117,4510
+(defvar tags-table-list-started-at 121,4701
+(defvar tags-table-set-list 124,4821
+(defcustom find-tag-hook 129,5000
+(defcustom find-tag-default-function 137,5263
+(define-obsolete-variable-alias 
'find-tag-marker-ring-lengthfind-tag-marker-ring-length145,5602
+(defcustom tags-tag-face 148,5699
+(defcustom tags-apropos-verbose 154,5834
+(defcustom tags-apropos-additional-actions 160,5998
+(defvaralias 'find-tag-marker-ring find-tag-marker-ring183,6917
+(defvar default-tags-table-function 189,7097
+(defvar tags-location-ring 194,7323
+(defvar tags-table-files 201,7599
+(defvar tags-completion-table 206,7766
+(defvar tags-included-tables 209,7858
+(defvar next-file-list 212,7953
+(defvar tags-table-format-functions 217,8059
+(defvar file-of-tag-function 224,8440
+(defvar tags-table-files-function 228,8634
+(defvar tags-completion-table-function 230,8745
+(defvar snarf-tag-function 232,8840
+(defvar goto-tag-location-function 236,9049
+(defvar find-tag-regexp-search-function 239,9222
+(defvar find-tag-regexp-tag-order 241,9343
+(defvar find-tag-regexp-next-line-after-failure-p 243,9452
+(defvar find-tag-search-function 245,9572
+(defvar find-tag-tag-order 247,9679
+(defvar find-tag-next-line-after-failure-p 249,9774
+(defvar list-tags-function 251,9880
+(defvar tags-apropos-function 253,9968
+(defvar tags-included-tables-function 255,10062
+(defvar verify-tags-table-function 257,10181
+(defun initialize-new-tags-table 260,10292
+(defun tags-table-mode 276,10980
+(defun visit-tags-table 285,11245
+(defun tags-table-check-computed-list 321,12783
+(defun tags-table-extend-computed-list 360,14654
+(defun tags-expand-table-name 400,16367
+(defun tags-table-list-member 409,16710
+(defun tags-verify-table 421,17182
+(defun tags-table-including 470,19302
+(defun tags-next-table 522,21346
+(defun visit-tags-table-buffer 543,22203
+(defun tags-reset-tags-tables 712,28513
+(defun file-of-tag 731,29170
+(defun tags-table-files 740,29519
+(defun tags-included-tables 749,29869
+(defun tags-completion-table 755,30115
+(defun tags-lazy-completion-table 783,31309
+(defun tags-completion-at-point-function 799,31944
+(defun find-tag-tag 818,32694
+(defvar last-tag 837,33367
+(defun find-tag-interactive 840,33426
+(defvar find-tag-history 852,33841
+(defun find-tag-noselect 860,34011
+(defun find-tag 932,37125
+(defun find-tag-other-window 959,38341
+(defun find-tag-other-frame 1000,40269
+(defun find-tag-regexp 1025,41443
+(defalias 'pop-tag-mark pop-tag-mark1049,42605
+(defvar tag-lines-already-matched 1052,42656
+(defun find-tag-in-order 1055,42763
+(defun tag-find-file-of-tag-noselect 1167,47109
+(defun tag-find-file-of-tag 1200,48955
+(defun etags-recognize-tags-table 1208,49181
+(defun etags-verify-tags-table 1241,50812
+(defun etags-file-of-tag 1246,51010
+(defun etags-tags-completion-table 1256,51345
+(defun etags-snarf-tag 1286,52551
+(defun etags-goto-tag-location 1324,54120
+(defun etags-list-tags 1388,56563
+(defmacro tags-with-face 1423,57838
+(defun etags-tags-apropos-additional 1431,58171
+(defun etags-tags-apropos 1465,59408
+(defun etags-tags-table-files 1527,61617
+(defun etags-tags-included-tables 1542,62053
+(defun tags-recognize-empty-tags-table 1559,62593
+(defun tag-exact-file-name-match-p 1587,63739
+(defun tag-file-name-match-p 1596,64132
+(defun tag-exact-match-p 1609,64688
+(defun tag-implicit-name-match-p 1620,65256
+(defun tag-symbol-match-p 1633,65856
+(defun tag-word-match-p 1643,66292
+(defun tag-partial-file-name-match-p 1652,66690
+(defun tag-any-match-p 1662,67134
+(defun tag-re-match-p 1667,67318
+(defcustom tags-loop-revert-buffers 1675,67567
+(defun next-file 1685,67976
+(defvar tags-loop-operate 1760,70890
+(defvar tags-loop-scan1763,70984
+(defun tags-loop-eval 1771,71314
+(defun tags-loop-continue 1782,71643
+(defun tags-search 1850,73949
+(defun tags-query-replace 1871,74775
+(defun tags-complete-tags-table-file 1896,75999
+(defun list-tags 1906,76378
+(defun tags-apropos 1934,77331
+(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78157
+(defun select-tags-table 1964,78396
+(defvar select-tags-table-mode-map 2019,80523
+(define-derived-mode select-tags-table-mode 2030,80906
+(defun select-tags-table-select 2034,81090
+(defun select-tags-table-quit 2043,81456
+(defun complete-tag 2049,81611
+(defconst etags--xref-limit 2074,82552
+(defvar etags-xref-find-definitions-tag-order 2076,82587
+(defun etags-xref-find 2082,82877
+(defun etags--xref-find-definitions 2096,83406
+(defclass xref-etags-location 2129,85121
+(defun xref-make-etags-location 2135,85344
+(cl-defmethod xref-location-marker 2139,85499
+(cl-defmethod xref-location-line 2146,85743
+
+erl-src/gs_dialog.erl,98
+-define(VERSION2,32
+behaviour_info(51,2177
+show(124,5458
+dialog_loop(219,9529
+test(252,10806
+
+erl-src/lines.erl,386
+-define(BREAK66,2377
+-define(dbg68,2437
+new(73,2565
+count(80,2686
+nth(87,2815
+append(104,3301
+replace(119,3816
+insert(138,4559
+insert_after(165,5501
+delete(192,6456
+convert_to_list(215,7110
+convert_from_list(220,7259
+replace_nth(229,7518
+insert_nth(234,7618
+insert_after_nth(239,7711
+delete_nth(244,7828
+split_at(252,8027
+balance_left(267,8451
+balance_right(282,8865
+
+erl-src/lists.erl,593
+member(21,663
+append(30,790
+reverse(48,1099
+nth(59,1310
+nthtail(64,1382
+prefix(73,1546
+suffix(83,1707
+last(92,1882
+seq(101,2058
+sum(109,2265
+duplicate(116,2432
+min(124,2628
+max(132,2837
+sublist(141,3083
+delete(152,3329
+sort(161,3483
+split_and_sort(165,3559
+merge(175,3811
+concat(190,4219
+thing_to_list(195,4300
+flatten(204,4606
+flat_length(222,5003
+keymember(239,5451
+keysearch(246,5609
+keydelete(253,5770
+keyreplace(260,5923
+keysort(266,6113
+split_and_keysort(270,6229
+keymerge(277,6504
+keymap(288,6851
+map(311,7829
+foldl(315,7919
+foldr(320,8037
+zf(325,8155
+
+f-src/entry.for,172
+      LOGICAL FUNCTION PRTPKG 3,75
+       ENTRY  SETPRT 194,3866
+       ENTRY  MSGSEL 395,8478
+     & intensity1(577,12231
+       character*(*) function foo(579,12307
+
+f-src/entry.strange_suffix,172
+      LOGICAL FUNCTION PRTPKG 3,75
+       ENTRY  SETPRT 194,3866
+       ENTRY  MSGSEL 395,8478
+     & intensity1(577,12231
+       character*(*) function foo(579,12307
+
+f-src/entry.strange,103
+       ENTRY  MSGSEL 193,4382
+     & intensity1(375,8135
+       character*(*) function foo(377,8211
+
+forth-src/test-forth.fth,408
+: a-forth-word 20,301
+99 constant a-forth-constant!22,343
+55 value a-forth-value?23,373
+create :a-forth-dictionary-entry24,397
+defer #a-defer-word27,460
+: (another-forth-word)(another-forth-word29,481
+   9   field   >field136,582
+   5   field   >field237,605
+constant (a-forth-constant(a-forth-constant38,628
+2000 buffer: #some-storage41,657
+code assemby-code-word 43,685
+: a-forth-word 50,870
+
+html-src/softwarelibero.html,198
+Cos'� il software libero?4,38
+Licenze d'uso di un programmalicenze65,2474
+Sfatiamo alcuni miti138,6064
+Il movimento open sourceoss191,7968
+Impatto pratico del software liberoimpatto231,9986
+
+html-src/index.shtml,104
+&nbsp;8,281
+In evidenza15,446
+Comunicati e iniziative32,974
+Ultime notizie dall'associazione63,2027
+
+html-src/algrthms.html,467
+Tutorial on Convolutional Coding with Viterbi Decoding--Description of the 
Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and 
Quantizing Algorithms7,276
+Descriptionalgorithms10,477
+Generating the Datagenalgorithm48,1953
+Convolutionallyconalgorithm55,2463
+Nextstatetable262,11331
+Outputoutputtable350,13571
+Mapping the Channel Symbolsmapping433,15786
+Adding Noise to theaddnoise439,16174
+Quantizing the Receivedquantizing469,18637
+
+html-src/software.html,438
+Francesco Potort� Software Page9,280
+Software that I wrote for supporting my research activitysimulation36,1400
+MTGmtg41,1484
+Fracasfracas65,2626
+GaliLEOgalileo101,4234
+Leasqrleasqr114,4679
+Free software that I wrote for the GNU project or for my personal or 
workgnu142,6067
+Etagsetags148,6182
+checkiso161,6731
+cgrep178,7549
+debian-bug.eldebian-bug190,7981
+tcpdump205,8566
+Links to interesting softwarelinks216,8893
+
+java-src/AWTEMul.java,4481
+public class AWTEventMulticaster 63,2111
+    protected EventListener a,AWTEventMulticaster.a69,2356
+    protected EventListener a, b;AWTEventMulticaster.b69,2356
+    protected 
AWTEventMulticaster(AWTEventMulticaster.AWTEventMulticaster77,2555
+    protected EventListener remove(AWTEventMulticaster.remove86,2820
+    public void componentResized(AWTEventMulticaster.componentResized102,3294
+    public void componentMoved(AWTEventMulticaster.componentMoved112,3626
+    public void componentShown(AWTEventMulticaster.componentShown122,3952
+    public void componentHidden(AWTEventMulticaster.componentHidden132,4280
+    public void componentAdded(AWTEventMulticaster.componentAdded142,4619
+    public void componentRemoved(AWTEventMulticaster.componentRemoved152,4959
+    public void focusGained(AWTEventMulticaster.focusGained162,5281
+    public void focusLost(AWTEventMulticaster.focusLost172,5572
+    public void keyTyped(AWTEventMulticaster.keyTyped182,5853
+    public void keyPressed(AWTEventMulticaster.keyPressed192,6129
+    public void keyReleased(AWTEventMulticaster.keyReleased202,6413
+    public void mouseClicked(AWTEventMulticaster.mouseClicked212,6704
+    public void mousePressed(AWTEventMulticaster.mousePressed222,7004
+    public void mouseReleased(AWTEventMulticaster.mouseReleased232,7306
+    public void mouseEntered(AWTEventMulticaster.mouseEntered242,7609
+    public void mouseExited(AWTEventMulticaster.mouseExited252,7907
+    public void mouseDragged(AWTEventMulticaster.mouseDragged262,8204
+    public void mouseMoved(AWTEventMulticaster.mouseMoved272,8512
+    public void windowOpened(AWTEventMulticaster.windowOpened282,8819
+    public void windowClosing(AWTEventMulticaster.windowClosing292,9125
+    public void windowClosed(AWTEventMulticaster.windowClosed302,9432
+    public void windowIconified(AWTEventMulticaster.windowIconified312,9742
+    public void 
windowDeiconified(AWTEventMulticaster.windowDeiconified322,10064
+    public void windowActivated(AWTEventMulticaster.windowActivated332,10389
+    public void 
windowDeactivated(AWTEventMulticaster.windowDeactivated342,10712
+    public void actionPerformed(AWTEventMulticaster.actionPerformed352,11037
+    public void 
itemStateChanged(AWTEventMulticaster.itemStateChanged362,11356
+    public void 
adjustmentValueChanged(AWTEventMulticaster.adjustmentValueChanged372,11690
+    public void 
textValueChanged(AWTEventMulticaster.textValueChanged376,11874
+    public static ComponentListener add(AWTEventMulticaster.add387,12225
+    public static ContainerListener add(AWTEventMulticaster.add397,12571
+    public static FocusListener add(AWTEventMulticaster.add407,12901
+    public static KeyListener add(AWTEventMulticaster.add417,13207
+    public static MouseListener add(AWTEventMulticaster.add427,13513
+    public static MouseMotionListener add(AWTEventMulticaster.add437,13855
+    public static WindowListener add(AWTEventMulticaster.add447,14197
+    public static ActionListener add(AWTEventMulticaster.add457,14519
+    public static ItemListener add(AWTEventMulticaster.add467,14833
+    public static AdjustmentListener add(AWTEventMulticaster.add477,15163
+    public static TextListener add(AWTEventMulticaster.add480,15310
+    public static ComponentListener 
remove(AWTEventMulticaster.remove490,15664
+    public static ContainerListener 
remove(AWTEventMulticaster.remove500,16044
+    public static FocusListener remove(AWTEventMulticaster.remove510,16408
+    public static KeyListener remove(AWTEventMulticaster.remove520,16748
+    public static MouseListener remove(AWTEventMulticaster.remove530,17088
+    public static MouseMotionListener 
remove(AWTEventMulticaster.remove540,17465
+    public static WindowListener remove(AWTEventMulticaster.remove550,17841
+    public static ActionListener remove(AWTEventMulticaster.remove560,18197
+    public static ItemListener remove(AWTEventMulticaster.remove570,18545
+    public static AdjustmentListener 
remove(AWTEventMulticaster.remove580,18909
+    public static TextListener remove(AWTEventMulticaster.remove583,19062
+    protected static EventListener 
addInternal(AWTEventMulticaster.addInternal597,19608
+    protected static EventListener 
removeInternal(AWTEventMulticaster.removeInternal614,20244
+    protected void saveInternal(AWTEventMulticaster.saveInternal628,20582
+    static void save(AWTEventMulticaster.save646,21131
+
+java-src/KeyEve.java,8202
+public class KeyEvent 36,1075
+    public static final int KEY_FIRST KeyEvent.KEY_FIRST41,1201
+    public static final int KEY_LAST KeyEvent.KEY_LAST46,1328
+    public static final int KEY_TYPED KeyEvent.KEY_TYPED52,1513
+    public static final int KEY_PRESSED KeyEvent.KEY_PRESSED57,1616
+    public static final int KEY_RELEASED KeyEvent.KEY_RELEASED62,1744
+    public static final int VK_ENTER KeyEvent.VK_ENTER85,2950
+    public static final int VK_BACK_SPACE KeyEvent.VK_BACK_SPACE86,3004
+    public static final int VK_TAB KeyEvent.VK_TAB87,3058
+    public static final int VK_CANCEL KeyEvent.VK_CANCEL88,3112
+    public static final int VK_CLEAR KeyEvent.VK_CLEAR89,3166
+    public static final int VK_SHIFT KeyEvent.VK_SHIFT90,3220
+    public static final int VK_CONTROL KeyEvent.VK_CONTROL91,3274
+    public static final int VK_ALT KeyEvent.VK_ALT92,3328
+    public static final int VK_PAUSE KeyEvent.VK_PAUSE93,3382
+    public static final int VK_CAPS_LOCK KeyEvent.VK_CAPS_LOCK94,3436
+    public static final int VK_ESCAPE KeyEvent.VK_ESCAPE95,3490
+    public static final int VK_SPACE KeyEvent.VK_SPACE96,3544
+    public static final int VK_PAGE_UP KeyEvent.VK_PAGE_UP97,3598
+    public static final int VK_PAGE_DOWN KeyEvent.VK_PAGE_DOWN98,3652
+    public static final int VK_END KeyEvent.VK_END99,3706
+    public static final int VK_HOME KeyEvent.VK_HOME100,3760
+    public static final int VK_LEFT KeyEvent.VK_LEFT101,3814
+    public static final int VK_UP KeyEvent.VK_UP102,3868
+    public static final int VK_RIGHT KeyEvent.VK_RIGHT103,3922
+    public static final int VK_DOWN KeyEvent.VK_DOWN104,3976
+    public static final int VK_COMMA KeyEvent.VK_COMMA105,4030
+    public static final int VK_PERIOD KeyEvent.VK_PERIOD106,4084
+    public static final int VK_SLASH KeyEvent.VK_SLASH107,4138
+    public static final int VK_0 KeyEvent.VK_0110,4268
+    public static final int VK_1 KeyEvent.VK_1111,4322
+    public static final int VK_2 KeyEvent.VK_2112,4376
+    public static final int VK_3 KeyEvent.VK_3113,4430
+    public static final int VK_4 KeyEvent.VK_4114,4484
+    public static final int VK_5 KeyEvent.VK_5115,4538
+    public static final int VK_6 KeyEvent.VK_6116,4592
+    public static final int VK_7 KeyEvent.VK_7117,4646
+    public static final int VK_8 KeyEvent.VK_8118,4700
+    public static final int VK_9 KeyEvent.VK_9119,4754
+    public static final int VK_SEMICOLON KeyEvent.VK_SEMICOLON121,4809
+    public static final int VK_EQUALS KeyEvent.VK_EQUALS122,4863
+    public static final int VK_A KeyEvent.VK_A125,4993
+    public static final int VK_B KeyEvent.VK_B126,5047
+    public static final int VK_C KeyEvent.VK_C127,5101
+    public static final int VK_D KeyEvent.VK_D128,5155
+    public static final int VK_E KeyEvent.VK_E129,5209
+    public static final int VK_F KeyEvent.VK_F130,5263
+    public static final int VK_G KeyEvent.VK_G131,5317
+    public static final int VK_H KeyEvent.VK_H132,5371
+    public static final int VK_I KeyEvent.VK_I133,5425
+    public static final int VK_J KeyEvent.VK_J134,5479
+    public static final int VK_K KeyEvent.VK_K135,5533
+    public static final int VK_L KeyEvent.VK_L136,5587
+    public static final int VK_M KeyEvent.VK_M137,5641
+    public static final int VK_N KeyEvent.VK_N138,5695
+    public static final int VK_O KeyEvent.VK_O139,5749
+    public static final int VK_P KeyEvent.VK_P140,5803
+    public static final int VK_Q KeyEvent.VK_Q141,5857
+    public static final int VK_R KeyEvent.VK_R142,5911
+    public static final int VK_S KeyEvent.VK_S143,5965
+    public static final int VK_T KeyEvent.VK_T144,6019
+    public static final int VK_U KeyEvent.VK_U145,6073
+    public static final int VK_V KeyEvent.VK_V146,6127
+    public static final int VK_W KeyEvent.VK_W147,6181
+    public static final int VK_X KeyEvent.VK_X148,6235
+    public static final int VK_Y KeyEvent.VK_Y149,6289
+    public static final int VK_Z KeyEvent.VK_Z150,6343
+    public static final int VK_OPEN_BRACKET KeyEvent.VK_OPEN_BRACKET152,6398
+    public static final int VK_BACK_SLASH KeyEvent.VK_BACK_SLASH153,6452
+    public static final int VK_CLOSE_BRACKET 
KeyEvent.VK_CLOSE_BRACKET154,6506
+    public static final int VK_NUMPAD0 KeyEvent.VK_NUMPAD0156,6561
+    public static final int VK_NUMPAD1 KeyEvent.VK_NUMPAD1157,6615
+    public static final int VK_NUMPAD2 KeyEvent.VK_NUMPAD2158,6669
+    public static final int VK_NUMPAD3 KeyEvent.VK_NUMPAD3159,6723
+    public static final int VK_NUMPAD4 KeyEvent.VK_NUMPAD4160,6777
+    public static final int VK_NUMPAD5 KeyEvent.VK_NUMPAD5161,6831
+    public static final int VK_NUMPAD6 KeyEvent.VK_NUMPAD6162,6885
+    public static final int VK_NUMPAD7 KeyEvent.VK_NUMPAD7163,6939
+    public static final int VK_NUMPAD8 KeyEvent.VK_NUMPAD8164,6993
+    public static final int VK_NUMPAD9 KeyEvent.VK_NUMPAD9165,7047
+    public static final int VK_MULTIPLY KeyEvent.VK_MULTIPLY166,7101
+    public static final int VK_ADD KeyEvent.VK_ADD167,7155
+    public static final int VK_SEPARATER KeyEvent.VK_SEPARATER168,7209
+    public static final int VK_SUBTRACT KeyEvent.VK_SUBTRACT169,7263
+    public static final int VK_DECIMAL KeyEvent.VK_DECIMAL170,7317
+    public static final int VK_DIVIDE KeyEvent.VK_DIVIDE171,7371
+    public static final int VK_F1 KeyEvent.VK_F1172,7425
+    public static final int VK_F2 KeyEvent.VK_F2173,7479
+    public static final int VK_F3 KeyEvent.VK_F3174,7533
+    public static final int VK_F4 KeyEvent.VK_F4175,7587
+    public static final int VK_F5 KeyEvent.VK_F5176,7641
+    public static final int VK_F6 KeyEvent.VK_F6177,7695
+    public static final int VK_F7 KeyEvent.VK_F7178,7749
+    public static final int VK_F8 KeyEvent.VK_F8179,7803
+    public static final int VK_F9 KeyEvent.VK_F9180,7857
+    public static final int VK_F10 KeyEvent.VK_F10181,7911
+    public static final int VK_F11 KeyEvent.VK_F11182,7965
+    public static final int VK_F12 KeyEvent.VK_F12183,8019
+    public static final int VK_DELETE KeyEvent.VK_DELETE184,8073
+    public static final int VK_NUM_LOCK KeyEvent.VK_NUM_LOCK185,8143
+    public static final int VK_SCROLL_LOCK KeyEvent.VK_SCROLL_LOCK186,8197
+    public static final int VK_PRINTSCREEN KeyEvent.VK_PRINTSCREEN188,8252
+    public static final int VK_INSERT KeyEvent.VK_INSERT189,8306
+    public static final int VK_HELP KeyEvent.VK_HELP190,8360
+    public static final int VK_META KeyEvent.VK_META191,8414
+    public static final int VK_BACK_QUOTE KeyEvent.VK_BACK_QUOTE193,8469
+    public static final int VK_QUOTE KeyEvent.VK_QUOTE194,8523
+    public static final int VK_FINAL KeyEvent.VK_FINAL197,8608
+    public static final int VK_CONVERT KeyEvent.VK_CONVERT198,8662
+    public static final int VK_NONCONVERT KeyEvent.VK_NONCONVERT199,8716
+    public static final int VK_ACCEPT KeyEvent.VK_ACCEPT200,8770
+    public static final int VK_MODECHANGE KeyEvent.VK_MODECHANGE201,8824
+    public static final int VK_KANA KeyEvent.VK_KANA202,8878
+    public static final int VK_KANJI KeyEvent.VK_KANJI203,8932
+    public static final int VK_UNDEFINED KeyEvent.VK_UNDEFINED208,9062
+    public static final char CHAR_UNDEFINED KeyEvent.CHAR_UNDEFINED214,9259
+    int  keyCode;KeyEvent.keyCode216,9313
+    char keyChar;KeyEvent.keyChar217,9331
+     private static final long serialVersionUID 
KeyEvent.serialVersionUID222,9398
+    public KeyEvent(KeyEvent.KeyEvent234,9912
+    public KeyEvent(KeyEvent.KeyEvent252,10510
+    public int getKeyCode(KeyEvent.getKeyCode261,10836
+    public void setKeyCode(KeyEvent.setKeyCode265,10897
+    public void setKeyChar(KeyEvent.setKeyChar269,10978
+    public void setModifiers(KeyEvent.setModifiers273,11060
+    public char getKeyChar(KeyEvent.getKeyChar282,11331
+    public static String getKeyText(KeyEvent.getKeyText290,11561
+    public static String 
getKeyModifiersText(KeyEvent.getKeyModifiersText377,16662
+    public boolean isActionKey(KeyEvent.isActionKey403,17618
+    public String paramString(KeyEvent.paramString407,17704
+
+java-src/SMan.java,5231
+class SecurityManager 80,3387
+    protected boolean inCheck;SecurityManager.inCheck87,3576
+    private boolean initialized SecurityManager.initialized90,3678
+    public boolean getInCheck(SecurityManager.getInCheck101,4075
+    protected SecurityManager(SecurityManager.SecurityManager114,4497
+    protected Class 
currentLoadedClass(SecurityManager.currentLoadedClass149,5707
+    protected boolean inClass(SecurityManager.inClass184,7034
+    protected boolean inClassLoader(SecurityManager.inClassLoader196,7372
+    public Object 
getSecurityContext(SecurityManager.getSecurityContext221,8485
+    public void 
checkCreateClassLoader(SecurityManager.checkCreateClassLoader238,9069
+    public void checkAccess(SecurityManager.checkAccess268,10298
+    public void checkAccess(SecurityManager.checkAccess298,11632
+    public void checkExit(SecurityManager.checkExit323,12649
+    public void checkExec(SecurityManager.checkExec349,13734
+    public void checkLink(SecurityManager.checkLink375,14813
+    public void checkRead(SecurityManager.checkRead394,15485
+    public void checkRead(SecurityManager.checkRead412,16111
+    public void checkRead(SecurityManager.checkRead434,17017
+    public void checkWrite(SecurityManager.checkWrite453,17706
+    public void checkWrite(SecurityManager.checkWrite471,18337
+    public void checkDelete(SecurityManager.checkDelete493,19165
+    public void checkConnect(SecurityManager.checkConnect517,20119
+    public void checkConnect(SecurityManager.checkConnect543,21254
+    public void checkListen(SecurityManager.checkListen561,21910
+    public void checkAccept(SecurityManager.checkAccept585,22887
+    public void checkMulticast(SecurityManager.checkMulticast597,23272
+    public void checkMulticast(SecurityManager.checkMulticast610,23732
+    public void 
checkPropertiesAccess(SecurityManager.checkPropertiesAccess632,24609
+    public void 
checkPropertyAccess(SecurityManager.checkPropertyAccess654,25449
+    public boolean 
checkTopLevelWindow(SecurityManager.checkTopLevelWindow680,26580
+    public void 
checkPrintJobAccess(SecurityManager.checkPrintJobAccess689,26763
+    public void 
checkSystemClipboardAccess(SecurityManager.checkSystemClipboardAccess698,26958
+    public void 
checkAwtEventQueueAccess(SecurityManager.checkAwtEventQueueAccess707,27159
+    public void 
checkPackageAccess(SecurityManager.checkPackageAccess729,27966
+    public void 
checkPackageDefinition(SecurityManager.checkPackageDefinition751,28803
+    public void checkSetFactory(SecurityManager.checkSetFactory775,29929
+    public void checkMemberAccess(SecurityManager.checkMemberAccess786,30209
+    public void 
checkSecurityAccess(SecurityManager.checkSecurityAccess796,30430
+    public ThreadGroup getThreadGroup(SecurityManager.getThreadGroup811,30923
+class NullSecurityManager 817,31025
+    public void 
checkCreateClassLoader(NullSecurityManager.checkCreateClassLoader818,31077
+    public void checkAccess(NullSecurityManager.checkAccess819,31123
+    public void checkAccess(NullSecurityManager.checkAccess820,31165
+    public void checkExit(NullSecurityManager.checkExit821,31212
+    public void checkExec(NullSecurityManager.checkExec822,31254
+    public void checkLink(NullSecurityManager.checkLink823,31296
+    public void checkRead(NullSecurityManager.checkRead824,31338
+    public void checkRead(NullSecurityManager.checkRead825,31387
+    public void checkRead(NullSecurityManager.checkRead826,31430
+    public void checkWrite(NullSecurityManager.checkWrite827,31489
+    public void checkWrite(NullSecurityManager.checkWrite828,31539
+    public void checkDelete(NullSecurityManager.checkDelete829,31583
+    public void checkConnect(NullSecurityManager.checkConnect830,31628
+    public void checkConnect(NullSecurityManager.checkConnect831,31684
+    public void checkListen(NullSecurityManager.checkListen832,31756
+    public void checkAccept(NullSecurityManager.checkAccept833,31798
+    public void checkMulticast(NullSecurityManager.checkMulticast834,31853
+    public void checkMulticast(NullSecurityManager.checkMulticast835,31907
+    public void 
checkPropertiesAccess(NullSecurityManager.checkPropertiesAccess836,31971
+    public void 
checkPropertyAccess(NullSecurityManager.checkPropertyAccess837,32015
+    public void 
checkPropertyAccess(NullSecurityManager.checkPropertyAccess838,32067
+    public boolean 
checkTopLevelWindow(NullSecurityManager.checkTopLevelWindow839,32131
+    public void 
checkPrintJobAccess(NullSecurityManager.checkPrintJobAccess840,32202
+    public void 
checkSystemClipboardAccess(NullSecurityManager.checkSystemClipboardAccess841,32244
+    public void 
checkAwtEventQueueAccess(NullSecurityManager.checkAwtEventQueueAccess842,32293
+    public void 
checkPackageAccess(NullSecurityManager.checkPackageAccess843,32340
+    public void 
checkPackageDefinition(NullSecurityManager.checkPackageDefinition844,32391
+    public void checkSetFactory(NullSecurityManager.checkSetFactory845,32446
+    public void 
checkMemberAccess(NullSecurityManager.checkMemberAccess846,32484
+    public void 
checkSecurityAccess(NullSecurityManager.checkSecurityAccess847,32546
+
+java-src/SysCol.java,4721
+public final class SystemColor 37,1402
+    public final static int DESKTOP SystemColor.DESKTOP42,1555
+    public final static int ACTIVE_CAPTION SystemColor.ACTIVE_CAPTION47,1677
+    public final static int ACTIVE_CAPTION_TEXT 
SystemColor.ACTIVE_CAPTION_TEXT52,1800
+    public final static int ACTIVE_CAPTION_BORDER 
SystemColor.ACTIVE_CAPTION_BORDER57,1930
+    public final static int INACTIVE_CAPTION 
SystemColor.INACTIVE_CAPTION62,2068
+    public final static int INACTIVE_CAPTION_TEXT 
SystemColor.INACTIVE_CAPTION_TEXT67,2195
+    public final static int INACTIVE_CAPTION_BORDER 
SystemColor.INACTIVE_CAPTION_BORDER72,2329
+    public final static int WINDOW SystemColor.WINDOW77,2459
+    public final static int WINDOW_BORDER SystemColor.WINDOW_BORDER82,2568
+    public final static int WINDOW_TEXT SystemColor.WINDOW_TEXT87,2682
+    public final static int MENU SystemColor.MENU92,2798
+    public final static int MENU_TEXT SystemColor.MENU_TEXT97,2902
+    public final static int TEXT SystemColor.TEXT102,3017
+    public final static int TEXT_TEXT SystemColor.TEXT_TEXT107,3121
+    public final static int TEXT_HIGHLIGHT SystemColor.TEXT_HIGHLIGHT112,3235
+    public final static int TEXT_HIGHLIGHT_TEXT 
SystemColor.TEXT_HIGHLIGHT_TEXT117,3359
+    public final static int TEXT_INACTIVE_TEXT 
SystemColor.TEXT_INACTIVE_TEXT122,3487
+    public final static int CONTROL SystemColor.CONTROL127,3614
+    public final static int CONTROL_TEXT SystemColor.CONTROL_TEXT132,3724
+    public final static int CONTROL_HIGHLIGHT 
SystemColor.CONTROL_HIGHLIGHT137,3844
+    public final static int CONTROL_LT_HIGHLIGHT 
SystemColor.CONTROL_LT_HIGHLIGHT142,3975
+    public final static int CONTROL_SHADOW SystemColor.CONTROL_SHADOW147,4100
+    public final static int CONTROL_DK_SHADOW 
SystemColor.CONTROL_DK_SHADOW152,4224
+    public final static int SCROLLBAR SystemColor.SCROLLBAR157,4352
+    public final static int INFO SystemColor.INFO162,4467
+    public final static int INFO_TEXT SystemColor.INFO_TEXT167,4571
+    public final static int NUM_COLORS SystemColor.NUM_COLORS172,4681
+    public final static SystemColor desktop SystemColor.desktop177,4790
+    public final static SystemColor activeCaption 
SystemColor.activeCaption182,4945
+    public final static SystemColor activeCaptionText 
SystemColor.activeCaptionText187,5107
+    public final static SystemColor activeCaptionBorder 
SystemColor.activeCaptionBorder192,5280
+    public final static SystemColor inactiveCaption 
SystemColor.inactiveCaption197,5470
+    public final static SystemColor inactiveCaptionText 
SystemColor.inactiveCaptionText202,5645
+    public final static SystemColor inactiveCaptionBorder 
SystemColor.inactiveCaptionBorder207,5830
+    public final static SystemColor window SystemColor.window212,5996
+    public final static SystemColor windowBorder 
SystemColor.windowBorder217,6126
+    public final static SystemColor windowText SystemColor.windowText222,6267
+    public final static SystemColor menu SystemColor.menu227,6408
+    public final static SystemColor menuText SystemColor.menuText232,6530
+    public final static SystemColor text SystemColor.text237,6677
+    public final static SystemColor textText SystemColor.textText242,6809
+    public final static SystemColor textHighlight 
SystemColor.textHighlight247,6957
+    public final static SystemColor textHighlightText 
SystemColor.textHighlightText252,7109
+    public final static SystemColor textInactiveText 
SystemColor.textInactiveText257,7267
+    public final static SystemColor control SystemColor.control262,7431
+    public final static SystemColor controlText 
SystemColor.controlText267,7569
+    public final static SystemColor controlHighlight 
SystemColor.controlHighlight272,7727
+    public final static SystemColor controlLtHighlight 
SystemColor.controlLtHighlight277,7897
+    public final static SystemColor controlShadow 
SystemColor.controlShadow282,8069
+    public final static SystemColor controlDkShadow 
SystemColor.controlDkShadow287,8227
+    public final static SystemColor scrollbar SystemColor.scrollbar292,8384
+    public final static SystemColor info SystemColor.info297,8532
+    public final static SystemColor infoText SystemColor.infoText302,8664
+    private static int[] systemColors SystemColor.systemColors308,8885
+    private static final long serialVersionUID 
SystemColor.serialVersionUID340,10406
+    private static void 
updateSystemColors(SystemColor.updateSystemColors349,10617
+    private SystemColor(SystemColor.SystemColor357,10885
+    public int getRGB(SystemColor.getRGB370,11245
+    public String toString(SystemColor.toString377,11388
+
+java-src/TG.java,2547
+class ThreadGroup 54,2104
+    ThreadGroup parent;ThreadGroup.parent55,2124
+    String name;ThreadGroup.name56,2148
+    int maxPriority;ThreadGroup.maxPriority57,2165
+    boolean destroyed;ThreadGroup.destroyed58,2186
+    boolean daemon;ThreadGroup.daemon59,2209
+    boolean vmAllowSuspension;ThreadGroup.vmAllowSuspension60,2229
+    int nthreads;ThreadGroup.nthreads62,2261
+    Thread threads[ThreadGroup.threads63,2279
+    int ngroups;ThreadGroup.ngroups65,2302
+    ThreadGroup groups[ThreadGroup.groups66,2319
+    private ThreadGroup(ThreadGroup.ThreadGroup72,2495
+    public ThreadGroup(ThreadGroup.ThreadGroup84,2848
+    public ThreadGroup(ThreadGroup.ThreadGroup105,3714
+    public final String getName(ThreadGroup.getName124,4189
+    public final ThreadGroup getParent(ThreadGroup.getParent135,4492
+    public final int getMaxPriority(ThreadGroup.getMaxPriority148,4867
+    public final boolean isDaemon(ThreadGroup.isDaemon161,5305
+    public synchronized boolean isDestroyed(ThreadGroup.isDestroyed170,5470
+    public final void setDaemon(ThreadGroup.setDaemon192,6368
+    public final void setMaxPriority(ThreadGroup.setMaxPriority213,7110
+    public final boolean parentOf(ThreadGroup.parentOf246,8106
+    public final void checkAccess(ThreadGroup.checkAccess268,8834
+    public int activeCount(ThreadGroup.activeCount283,9286
+    public int enumerate(ThreadGroup.enumerate322,10497
+    public int enumerate(ThreadGroup.enumerate344,11481
+    private int enumerate(ThreadGroup.enumerate348,11584
+    public int activeGroupCount(ThreadGroup.activeGroupCount389,12588
+    public int enumerate(ThreadGroup.enumerate425,13727
+    public int enumerate(ThreadGroup.enumerate445,14595
+    private int enumerate(ThreadGroup.enumerate449,14703
+    public final void stop(ThreadGroup.stop499,16212
+    public final void suspend(ThreadGroup.suspend537,17477
+    public final void resume(ThreadGroup.resume575,18749
+    public final void destroy(ThreadGroup.destroy607,19779
+    private final void add(ThreadGroup.add643,20704
+    private void remove(ThreadGroup.remove668,21402
+    void add(ThreadGroup.add697,22142
+    void remove(ThreadGroup.remove722,22808
+    public void list(ThreadGroup.list751,23503
+    void list(ThreadGroup.list754,23556
+    public void uncaughtException(ThreadGroup.uncaughtException810,25512
+    public boolean 
allowThreadSuspension(ThreadGroup.allowThreadSuspension823,25823
+    public String toString(ThreadGroup.toString837,26142
+
+lua-src/allegro.lua,400
+local function get_layer_by_name 7,175
+local function count_layers 33,621
+function GetLayerByName 54,980
+function GetUniqueLayerName 65,1204
+function SelectLayer 76,1415
+function NewLayer 86,1773
+function NewLayerSet 144,3226
+function RemoveLayer 170,3750
+function MoveLayerTop 211,4767
+function MoveLayerBottom 223,5079
+function MoveLayerBefore 236,5457
+function MoveLayerAfter 258,6090
+
+make-src/Makefile,1133
+LATEST=1,0
+NONSRCS=35,1578
+CPPFLAGS=49,2191
+LDFLAGS=50,2260
+FASTCFLAGS=55,2531
+FILTER=58,2642
+       @-$($72,3064
+       @-$($73,3113
+       @-$($74,3177
+       @-$($75,3223
+       @-$($76,3291
+       @-$($77,3383
+       @$(81,3466
+       @$(82,3514
+       @$(83,3577
+       @$(84,3622
+       @$(85,3689
+       @$(86,3780
+${CHECKOBJS}: CFLAGS=88,3806
+       @env CHECKEROPTS=92,3922
+       @$(98,4094
+       @$(106,4250
+       @$(110,4374
+       @$(114,4500
+       @for i in $(SRCS); do echo $$i;140,5315
+       $(160,6053
+       $(163,6114
+       $(166,6177
+       $(169,6228
+       $(172,6317
+       sdiff --suppress-common-lines --width=width186,6614
+       sdiff --suppress-common-lines --width=width189,6703
+       sdiff --suppress-common-lines --width=width192,6791
+       sdiff --suppress-common-lines --width=width195,6880
+       TEXTAGS=204,7122
+       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* 
--regex=regex204,7122
+       ${RUN} etags12 --members -o $@ --regex=regex207,7239
+       ${RUN} ./ctags -o $@ --regex=regex213,7388
+       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=regex216,7464
+       TEXTAGS=219,7583
+       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ 
--regex=regex219,7583
+       ${RUN} ./extags -e --regex-c=c222,7710
+
+objc-src/Subprocess.h,98
+#define Subprocess 41,1217
+#define BUFFERSIZE 43,1267
address@hidden Subprocess:Subprocess45,1292
+
+objc-src/Subprocess.m,475
+#define        PTY_TEMPLATE 20,494
+#define        PTY_LENGTH 21,528
address@hidden Subprocess(Private)Subprocess(Private)32,737
+- childDidExit39,851
+- fdHandler:67,1589
+showError 98,2360
+fdHandler 112,2785
+getptys 119,2907
+- init:183,4815
+    andStdErr:init:withDelegate:andPtySupport:andStdErr:197,5147
+- send:(const char *)string withNewline:send:withNewline:300,7436
+- send:308,7599
+- terminateInput314,7689
+- terminate:321,7810
+- setDelegate:332,7961
+- delegate338,8031
+
+objc-src/PackInsp.h,109
+#define NUMSTATS       36,1101
+#define TYPESTOSTAT    37,1120
address@hidden PackageInspector:PackageInspector39,1172
+
+objc-src/PackInsp.m,1360
+static const char RCSid[RCSid30,1032
+#define VERSION        34,1116
+#   define DEBUG 37,1155
+#define LISTCONTENTS   39,1181
+#define OPENBUTTON     47,1352
+#define LISTCONTENTSBUTTON     48,1449
+#define LISTDESCRIPTIONBUTTON  49,1562
+#define STATE_UNINSTALLED      52,1687
+#define STATE_INSTALLED        53,1807
+#define STATE_COMPRESSD        54,1948
+#define SIZEFORMAT     57,2152
+#define KBYTES 58,2362
+#define MBYTES 59,2473
+#define LOCALIZE(61,2585
+#define LOCALIZE_ARCH(62,2668
++newnew67,2802
+-showInfo:showInfo:93,3417
+-revert:revert:107,3737
+-ok:ok:136,4297
+-loadload143,4424
+#define LOOKUP(156,4826
+#undef LOOKUP176,5694
+-loadKeyValuesFrom:(const char *)type 
inTable:loadKeyValuesFrom:inTable:186,5852
+-loadContentsOf:(const char *)type inTable:loadContentsOf:inTable:238,7079
+-loadImageloadImage257,7552
+#define STAT_EQ(275,7940
+-(BOOL)shouldLoad280,8116
+-toggleDescriptiontoggleDescription301,8626
+-(const char *)getPath:(char *)buf forType:getPath:forType:317,8899
+-setRevertButtonTitlesetRevertButtonTitle333,9320
+-(const char *)formatSize:(const char *)size inBuf:formatSize:inBuf:344,9525
+#define WORKING        368,10045
+-(void)getArchs370,10100
+-(void)addArchs:385,10520
+-subprocess:(Subprocess *)sender output:subprocess:output:428,11351
+-subprocessDone:subprocessDone:436,11484
+static void openInWorkspace(446,11634
+-open:open:464,12063
+
+objcpp-src/SimpleCalc.H,41
address@hidden SimpleCalc:SimpleCalc14,400
+
+objcpp-src/SimpleCalc.M,300
+- init52,1747
+- appendToDisplay:60,1933
+- registerAction:70,2210
+- decimalKey:77,2348
+- numberKeys:91,2661
+- equalsKey:112,3192
+- operationKeys:131,3680
+- clearKey:153,4301
+- clearAllKey:160,4410
+- appDidInit:168,4591
+- windowWillClose:178,4882
+- infoPanel:186,5132
+- helpPanel:198,5482
+
+pas-src/common.pas,1875
+procedure InitializeStringPackage;26,527
+function newtextstring;34,874
+procedure disposetextstring;52,1404
+function ConcatT;78,2066
+function AppendTextString;112,3238
+function CopyTextString;132,3947
+procedure CONVERT_CHARSTRING_TO_VALUE;151,4505
+procedure append_string;172,5166
+function To_Upper;186,5462
+function To_Lower;194,5617
+function EmptyNmStr(209,6213
+function chartonmstr;219,6436
+function LowerCaseNmStr;230,6682
+function concatenatenamestrings;242,7007
+procedure writenamestring;263,7517
+function IsControlChar;277,7928
+function namestringequal;283,8079
+function NameStringLess;302,8539
+function IsControlCharName(343,9710
+function SubString;358,10208
+function SkipChars;379,10791
+function RemoveUnderlineControl;397,11311
+procedure First100Chars;427,12162
+procedure SkipSpaces;462,13298
+function SkipBlanks;477,13782
+function stripname;505,14595
+function Locate;522,15039
+function NameHasChar;543,15581
+function integertonmstr;561,16134
+function NmStrToInteger;585,16901
+function AddNullToNmStr;600,17317
+function ValToNmStr;611,17585
+function ChangeFileType;625,18037
+function StripPath;647,18734
+function ReprOfChar;675,19343
+procedure ExtractCommentInfo;702,20749
+procedure INSERT_TREE_NODE;784,24053
+function GetNameList;920,27926
+procedure DisposeANameList(925,28010
+procedure DisposeNameList;938,28340
+function GetNewNameListNode;943,28409
+function insertname;972,29051
+procedure InitNameList;988,29471
+procedure InitNameStringPool;998,29767
+procedure NewNameString;1004,29867
+procedure ReleaseNameString;1022,30232
+procedure SDTrefStringToRec 1045,30741
+procedure SDTrefSkipSpaces;1059,31092
+function SDTrefIsEnd 1070,31323
+function SDTrefGetInteger 1082,31529
+procedure SDTrefRecToString 1303,37546
+function NmStrToErrStr;1497,42305
+function ErrStrToNmStr;1509,42557
+function GetTextRef;1529,43112
+
+php-src/lce_functions.php,2864
+  define("LCE_FUNCTIONS"LCE_FUNCTIONS4,38
+  define("LCE_UNKNOWN"LCE_UNKNOWN9,145
+  define("LCE_WS"LCE_WS11,194
+  define("LCE_COMMENT"LCE_COMMENT13,244
+  define("LCE_COMMENT_USER"LCE_COMMENT_USER15,303
+  define("LCE_COMMENT_TOOL"LCE_COMMENT_TOOL17,366
+  define("LCE_MSGID"LCE_MSGID19,430
+  define("LCE_MSGSTR"LCE_MSGSTR21,488
+  define("LCE_TEXT"LCE_TEXT23,541
+  define("STATE_ABORT"STATE_ABORT25,567
+  define("STATE_OK"STATE_OK26,595
+  define("STATE_LOOP"STATE_LOOP27,620
+  class POEntryAD 29,648
+      function validate(31,683
+      function checkQuotation(59,1384
+  class CommentAD 70,1639
+      var $prefix;72,1674
+      function CommentAD(73,1693
+      function validate(83,1944
+  class POEntry 105,2410
+      var $msgid;107,2454
+      var $msgstr;108,2472
+      var $user_comment;109,2491
+      var $sys_comment;110,2516
+      var $unk_comment;111,2540
+      var $msgid_lc 113,2565
+      var $msgstr_lc 114,2590
+      var $user_comment_lc 115,2616
+      var $sys_comment_lc 116,2648
+      var $unk_comment_lc 117,2679
+      function POEntry(119,2711
+      function lineCount(135,3255
+      function serializeToVars(141,3365
+      function write(151,3800
+  class POReader 163,4178
+      var $msgid;165,4223
+      var $msgstr;166,4241
+      var $user_comment;167,4260
+      var $sys_comment;168,4285
+      var $unk_comment;169,4309
+      var $state;170,4333
+      var $ignore_ws;171,4351
+      var $po_entries;172,4373
+      var $poe_num;173,4396
+      var $filename;174,4416
+      var $domain;175,4437
+      function gettext(177,4457
+      function parseFromVars(189,4705
+      function serializeToVars(215,5331
+      function POReader(229,5613
+      function read(243,5983
+      function write(259,6307
+      function isComment(277,6645
+      function comment(284,6822
+      function msgid(304,7247
+      function msgstr(320,7574
+      function start(340,8232
+      function createPOEntries(360,8644
+      function stripLine(394,9472
+      function printClassification(421,10056
+      function classifyLine(432,10301
+  function getTextDomains(471,11094
+  class PORManager 498,11756
+      var      $por_a;500,11803
+      function PORManager(502,11822
+      function addPOReader(507,11896
+      function &getPOReader(getPOReader512,11992
+      function getDomainNames(517,12081
+  function &loadPORManager(loadPORManager523,12174
+  function fileJoin(536,12436
+      function lce_bindtextdomain(557,12839
+      function lce_textdomain(614,14530
+      function lce_gettext(620,14641
+      function lce_dgettext(626,14767
+      function lce(634,14966
+      function lce_bindtextdomain(651,15488
+      function lce_textdomain(656,15592
+      function lce_gettext(661,15674
+      function lce_dgettext(666,15755
+      function lce(670,15855
+  function lce_geteditcode(676,15898
+
+php-src/ptest.php,135
+define("TEST"TEST1,0
+test 4,26
+       var $member;8,71
+       var $memassign=9,85
+       var $memassign_space 10,110
+       var $test12,176
+foo(16,200
+
+perl-src/htlmify-cystic,1443
+my @section_name;section_name12,236
+my @appendix_name;appendix_name13,254
+my @section_toc;section_toc15,274
+my @appendix_toc;appendix_toc16,291
+my $new_tag new_tag18,310
+my $appendix;appendix24,409
+my $section;section25,423
+my $subsection;subsection26,436
+my $subsubsection;subsubsection27,452
+my $this_file_toc this_file_toc29,472
+my %file_tocs;file_tocs30,496
+my @output_files output_files32,512
+my $file_index file_index33,535
+my $output_file;output_file35,556
+my $line;line37,574
+my $subsection_marker;subsection_marker161,3883
+my $new;new163,3907
+sub read_toc main::read_toc165,3917
+         my $entry entry218,5621
+         my $entry entry234,6077
+             my $entry entry245,6351
+         my $entry entry252,6536
+         my $entry entry268,7010
+             my $entry entry276,7204
+         my $entry entry281,7328
+      my $entry entry296,7698
+sub finish_subsubsections main::finish_subsubsections302,7805
+sub finish_subsections main::finish_subsections309,7987
+sub finish_sections main::finish_sections320,8310
+sub finish_appendices main::finish_appendices331,8599
+sub section_url_base main::section_url_base337,8724
+sub section_url_name main::section_url_name342,8922
+sub section_url main::section_url355,9284
+  my $name name357,9336
+sub section_href main::section_href364,9452
+sub section_name main::section_name368,9551
+sub toc_line main::toc_line372,9655
+sub file_end main::file_end375,9750
+
+perl-src/yagrip.pl,258
+sub getopt main::getopt7,156
+       local($_,$flag,$opt,$f,$r,@temp)($_,$flag,$opt,$f,$r,@temp8,169
+sub usage main::usage38,856
+       local($prog,$_,@list)($prog,$_,@list39,868
+       
local($string,$flag,@string,@temp,@last)($string,$flag,@string,@temp,@last40,897
+
+perl-src/kai-test.pl,244
+sub f1 main::f12,16
+sub main::f2 6,50
+package Foo;10,90
+sub f3 Foo::f312,104
+sub Bar::f4 16,138
+package Bar;20,177
+sub f5 Bar::f522,191
+package Foo::Bar;26,225
+sub f6 Foo::Bar::f628,244
+package main;32,278
+sub f7 main::f734,293
+
+perl-src/mirror.pl,13410
+sub msg_versionmain::msg_version459,18271
+       local( $arg )( $arg 468,18582
+               local( $flag, $p )( $flag, $p 480,18757
+               local( $site_path )( $site_path 525,19687
+                       local( $site, $path )( $site, $path 539,19958
+               local( $key_val )( $key_val 578,20743
+               local( $user )( $user 595,21097
+               local( $c )( $c 634,21853
+                       local( $sec,$min,$hour,$mday,$mon,$year,( 
$sec,$min,$hour,$mday,$mon,$year,678,22807
+       local( $c )( $c 706,23393
+       local( $dir, $mp )( $dir, $mp 723,23695
+               local( $f )( $f 725,23740
+sub interpret_config_filesmain::interpret_config_files756,24304
+       local( $fname )( $fname 758,24333
+sub interpret_configmain::interpret_config785,24927
+sub parse_linemain::parse_line827,25710
+       local( $eqpl )( $eqpl 829,25727
+       local( $cont )( $cont 830,25744
+                       local( $v )( $v 839,26029
+sub set_defaultsmain::set_defaults860,26448
+sub command_line_overridemain::command_line_override868,26579
+       local( $key, $val, $overrides )( $key, $val, $overrides 870,26607
+sub set_variablesmain::set_variables894,27072
+       local( $key, $val )( $key, $val 896,27092
+                       local( $val_name )( $val_name 902,27259
+               local( $val )( $val 953,28825
+sub upd_valmain::upd_val962,28974
+       local( $key )( $key 964,28988
+sub pr_variablesmain::pr_variables970,29083
+       local( $msg )( $msg 972,29102
+       local( $nle )( $nle 973,29123
+       local( $out )( $out 974,29144
+       local( $key, $val, $str )( $key, $val, $str 975,29164
+sub do_mirrormain::do_mirror1007,29923
+       local( $get_one_package )( $get_one_package 1009,29939
+       local( $exit_status )( $exit_status 1030,30384
+                       local( @t )( @t 1154,33165
+       local( $con )( $con 1241,35499
+               local( @rhelp )( @rhelp 1289,36702
+       local( @sub_dirs )( @sub_dirs 1329,37778
+       local( $now )( $now 1493,41348
+               local( $arg )( $arg 1506,41774
+sub disconnectmain::disconnect1528,42250
+sub connectmain::connect1546,42576
+       local( $attempts )( $attempts 1548,42590
+       local( $res )( $res 1549,42642
+sub prodmain::prod1573,43156
+sub checkout_regexpsmain::checkout_regexps1585,43327
+       local( $ret )( $ret 1587,43350
+       local( $t )( $t 1589,43395
+               local( $val )( $val 1597,43701
+                       local( $err )( $err 1601,43786
+sub clear_localmain::clear_local1610,43909
+sub clear_remotemain::clear_remote1625,44172
+sub get_local_directory_detailsmain::get_local_directory_details1640,44445
+       local( @dirs, $dir )( @dirs, $dir 1642,44479
+       local( $last_prodded )( $last_prodded 1643,44502
+       local( $dir_level )( $dir_level 1691,45615
+       local( $i )( $i 1692,45641
+       local( $path, $time, $size, $type, $mode, $name, $isdir, $value, 
$follow )( $path, $time, $size, $type, $mode, $name, $isdir, $value, $follow 
1693,45659
+       local( $dev,$ino,$fmode,$nlink,$uid,$gid,$rdev,$ssize,( 
$dev,$ino,$fmode,$nlink,$uid,$gid,$rdev,$ssize,1694,45736
+                       local( $mapi )( $mapi 1763,47586
+sub get_remote_directory_detailsmain::get_remote_directory_details1789,48122
+       local( $type_changed )( $type_changed 1791,48157
+       local( $udirtmp )( $udirtmp 1792,48186
+       local( $storename )( $storename 1793,48206
+       local( $rls )( $rls 1825,48944
+               local( $dirtmp )( $dirtmp 1830,49002
+               local( $unsquish )( $unsquish 1832,49130
+                       local( $f )( $f 1840,49360
+               local( $dirtmp )( $dirtmp 1859,49866
+               local( $unsquish )( $unsquish 1870,50215
+                       local( $f, $uf )( $f, $uf 1878,50445
+               local( $flags )( $flags 1912,51259
+       local( $parse_state )( $parse_state 1946,52111
+                       local( $msg )( $msg 1963,52486
+sub patch_ls_lR_filemain::patch_ls_lR_file1984,52955
+       local( $f, $fr, $flb, $flt, $flp, $flz, $frb, $frt )( $f, $fr, $flb, 
$flt, $flp, $flz, $frb, $frt 1990,53055
+       local( $to , $tn )( $to , $tn 1991,53110
+       local( $tlb )( $tlb 1995,53225
+               local( $p, $s, $trz, $t, $m )( $p, $s, $trz, $t, $m 2030,54182
+               local( $tlz )( $tlz 2037,54467
+sub parse_timeoutmain::parse_timeout2089,55670
+sub parse_remote_detailsmain::parse_remote_details2095,55754
+       local( $ret )( $ret 2097,55781
+       local( $old_sig )( $old_sig 2098,55797
+sub parse_remote_details_realmain::parse_remote_details_real2125,56234
+       local( $path, $size, $time, $type, $mode, $rdir, $rcwd )( $path, 
$size, $time, $type, $mode, $rdir, $rcwd 2127,56266
+       local( @dir_list )( @dir_list 2128,56325
+       local( $i )( $i 2129,56346
+       local( $old_path )( $old_path 2130,56364
+                               local( $old_path )( $old_path 2143,56630
+                               local( $ri )( $ri 2203,58078
+                       local( $mapi )( $mapi 2214,58335
+                       local( $done )( $done 2239,58911
+sub compare_dirsmain::compare_dirs2283,59825
+       local( *src_paths,( *src_paths,2286,59915
+       local( $src_path, $dest_path, $i )( $src_path, $dest_path, $i 
2293,60099
+       local( $last_prodded )( $last_prodded 2294,60136
+       local( $desti, $srci, $compress, $srciZ, $srcigz, $split, 
$dest_path_real )( $desti, $srci, $compress, $srciZ, $srcigz, $split, 
$dest_path_real 2299,60350
+       local( $old_dest_path, $existing_path, $tmp, $restart )( 
$old_dest_path, $existing_path, $tmp, $restart 2300,60428
+       local( $sp, $dp )( $sp, $dp 2301,60486
+                  local( $real, $reali, $reali1 )( $real, $reali, $reali1 
2352,62034
+                  local( $count )( $count 2353,62072
+                       local( $value )( $value 2408,63996
+                       local( $real )( $real 2409,64028
+                       local( $reali )( $reali 2410,64086
+                               local( $old )( $old 2421,64571
+                       local( $old_dest_path )( $old_dest_path 2432,64842
+                               local( $dpp, $dps )( $dpp, $dps 2509,67031
+               local( $update )( $update 2534,67671
+sub map_namemain::map_name2651,71028
+       local( $name )( $name 2653,71043
+               local( $old_name )( $old_name 2656,71089
+               local( $tmp )( $tmp 2666,71252
+sub set_timestampsmain::set_timestamps2675,71362
+       local( $src_path )( $src_path 2677,71383
+       local( $dest_path, $dest_loc_mapi, $src_rem_mapi,  $rtime )( 
$dest_path, $dest_loc_mapi, $src_rem_mapi,  $rtime 2685,71517
+sub set_timestampmain::set_timestamp2699,71901
+       local( $path, $time )( $path, $time 2701,71921
+       local( $pr_time )( $pr_time 2703,71953
+sub make_dirsmain::make_dirs2719,72284
+       local( $thing )( $thing 2721,72300
+sub make_symlinksmain::make_symlinks2736,72489
+       local( $thing )( $thing 2738,72509
+               local( $dest, $existing )( $dest, $existing 2745,72623
+               local( $dirpart )( $dirpart 2746,72663
+               local( $ft )( $ft 2747,72704
+               local( $p )( $p 2762,73261
+                       local( $f )( $f 2770,73467
+                       local( $dl )( $dl 2788,74038
+sub do_all_transfersmain::do_all_transfers2806,74439
+       local( $src_path )( $src_path 2808,74462
+       local( $dest_path, $attribs )( $dest_path, $attribs 2809,74483
+       local( $srci )( $srci 2810,74515
+               local( $newpath )( $newpath 2838,75124
+sub transfer_filemain::transfer_file2869,75847
+       local( $src_path, $dest_path, $attribs, $timestamp )( $src_path, 
$dest_path, $attribs, $timestamp 2871,75867
+       local( $dir, $file, $temp, $compress, $split, $restart, $mesg, 
$got_mesg )( $dir, $file, $temp, $compress, $split, $restart, $mesg, $got_mesg 
2872,75927
+               local( $src_file )( $src_file 2915,76782
+               local( $comptemp )( $comptemp 2916,76816
+                       local( $f )( $f 2921,76964
+               local($filesize)($filesize2944,77569
+                       local( $ti )( $ti 2975,78401
+               local( $f )( $f 2997,78887
+               local( $comp )( $comp 2998,78912
+       local( $filesize )( $filesize 3015,79427
+       local( $sizemsg )( $sizemsg 3016,79469
+       local( $srcsize )( $srcsize 3017,79501
+               local( $time )( $time 3029,79865
+       local( $as )( $as 3046,80223
+       local( $locali )( $locali 3054,80499
+sub filename_to_tempnamemain::filename_to_tempname3062,80713
+       local( $dir, $file )( $dir, $file 3064,80740
+       local ( $dest_path )( $dest_path 3066,80769
+sub log_uploadmain::log_upload3090,81228
+       local( $src_path, $dest_path, $got_mesg, $size )( $src_path, 
$dest_path, $got_mesg, $size 3092,81245
+sub do_deletesmain::do_deletes3118,81773
+       local( *src_paths,( *src_paths,3121,81861
+       local( $files_to_go, $dirs_to_go )( $files_to_go, $dirs_to_go 
3125,81960
+       local( $src_path, $i )( $src_path, $i 3131,82055
+       local( $orig_do_deletes )( $orig_do_deletes 3132,82080
+       local( $orig_save_deletes )( $orig_save_deletes 3133,82122
+       local( $del_patt )( $del_patt 3135,82169
+               local( $per )( $per 3162,82843
+               local( $per )( $per 3184,83513
+                       local( $save_dir_tail )( $save_dir_tail 3226,84617
+sub save_deletemain::save_delete3245,85019
+       local( $save, $kind )( $save, $kind 3247,85037
+       local( $real_save_dir, $save_dest )( $real_save_dir, $save_dest 
3249,85067
+       local( $dirname )( $dirname 3284,85704
+sub save_mkdirmain::save_mkdir3304,86155
+       local( $dir )( $dir 3306,86172
+sub do_deletemain::do_delete3320,86459
+       local( $del, $kind )( $del, $kind 3322,86475
+sub filesizemain::filesize3377,87532
+       local( $fname )( $fname 3379,87547
+sub istruemain::istrue3390,87654
+       local( $val )( $val 3392,87667
+sub mksymlinkmain::mksymlink3398,87773
+       local( $dest_path, $existing_path )( $dest_path, $existing_path 
3400,87789
+               local( $msg )( $msg 3417,88246
+               local( $msg )( $msg 3431,88590
+               local( $status )( $status 3442,88816
+sub mkdirsmain::mkdirs3457,89196
+       local( $dir )( $dir 3459,89209
+       local( @dir, $d, $path )( @dir, $d, $path 3460,89230
+sub make_dirmain::make_dir3497,90042
+       local( $dir, $mode )( $dir, $mode 3499,90057
+       local( $val )( $val 3500,90085
+sub dir_existsmain::dir_exists3528,90573
+       local( $dir )( $dir 3530,90590
+       local( $val )( $val 3531,90611
+               local($old_dir)($old_dir3539,90750
+sub set_attribsmain::set_attribs3553,91053
+       local( $path, $src_path, $type )( $path, $src_path, $type 3555,91071
+       local( $mode )( $mode 3556,91111
+               local( $pathi )( $pathi 3564,91229
+               local( $pathi )( $pathi 3568,91320
+sub get_passwdmain::get_passwd3606,91977
+       local( $user )( $user 3608,91994
+       local( $pass )( $pass 3609,92016
+       local( $| )( $| 3610,92033
+sub compare_timesmain::compare_times3631,92384
+       local( $t1, $t2 )( $t1, $t2 3637,92564
+       local( $diff )( $diff 3638,92589
+sub create_assocsmain::create_assocs3643,92688
+       local( $map )( $map 3645,92708
+sub delete_assocsmain::delete_assocs3657,92957
+       local( $map )( $map 3659,92977
+sub unlink_dbmmain::unlink_dbm3671,93247
+       local( $file )( $file 3673,93264
+sub bsplitmain::bsplit3681,93462
+       local( $temp, $dest_path, $time )( $temp, $dest_path, $time 3683,93475
+       local( $dest_dir )( $dest_dir 3684,93516
+       local( $bufsiz )( $bufsiz 3685,93558
+       local( $buffer, $in, $sofar )( $buffer, $in, $sofar 3686,93583
+       local( $d )( $d 3691,93721
+       local( $index )( $index 3697,93840
+       local( $part )( $part 3698,93865
+                       local( $locali )( $locali 3714,94336
+       local( $readme )( $readme 3730,94740
+sub sysmain::sys3739,95116
+       local( $com )( $com 3741,95126
+sub set_assoc_from_arraymain::set_assoc_from_array3751,95355
+       local( *things )( *things 3754,95453
+sub find_progmain::find_prog3760,95537
+       local( $prog )( $prog 3762,95553
+       local( $path )( $path 3763,95575
+               local( $path )( $path 3766,95657
+sub real_dir_from_pathmain::real_dir_from_path3780,95842
+       local( $program )( $program 3782,95867
+       local( @prog_path )( @prog_path 3783,95892
+       local( $dir )( $dir 3784,95970
+sub msgmain::msg3807,96489
+       local( $todo, $msg )( $todo, $msg 3809,96499
+sub to_bytesmain::to_bytes3838,96979
+       local( $size )( $size 3840,96994
+sub unix2vmsmain::unix2vms3858,97332
+       local( $v, $kind )( $v, $kind 3860,97347
+                       local( $dir, $rest )( $dir, $rest 3873,97559
+sub dirpartmain::dirpart3886,97730
+       local( $path )( $path 3888,97744
+sub expand_symlinkmain::expand_symlink3902,98076
+       local( $orig_path, $points_to )( $orig_path, $points_to 3904,98097
+       local( $dirpart )( $dirpart 3905,98136
+sub flatten_pathmain::flatten_path3913,98365
+       local( $path )( $path 3915,98384
+       local( $changed )( $changed 3916,98406
+       local( $i )( $i 3917,98430
+       local( $rooted )( $rooted 3919,98446
+       local( $count )( $count 3920,98482
+       local( $orig_path )( $orig_path 3921,98504
+               local( $in )( $in 3932,98741
+               local( @parts )( @parts 3933,98765
+sub fix_packagemain::fix_package3963,99438
+       local( $package )( $package 3965,99456
+sub will_compressmain::will_compress3970,99529
+sub will_splitmain::will_split3981,99859
+sub myflockmain::myflock3989,100001
+       local( $file, $kind )( $file, $kind 3991,100015
+sub t2strmain::t2str4004,100221
+       local( @t )( @t 4006,100233
+       
local($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst4013,100335
+sub handlermain::handler4022,100583
+        local( $sig )( $sig 4029,100651
+        local( $msg )( $msg 4030,100679
+        local( $package, $filename, $line )( $package, $filename, $line 
4031,100737
+sub trap_signalsmain::trap_signals4036,100859
+       local( $sig )( $sig 4038,100878
+sub map_user_groupmain::map_user_group4047,101158
+sub keepmain::keep4069,101537
+       local( $pathi, $path, *keep, *keep_totals, *keep_map, $kind )( $pathi, 
$path, *keep, *keep_totals, *keep_map, $kind 4071,101548
+sub alarmmain::alarm4104,102330
+       local( $time_to_sig )( $time_to_sig 4106,102342
+sub chownmain::chown4110,102405
+       local( $uid, $gid, $path )( $uid, $gid, $path 4112,102417
+sub utimemain::utime4116,102494
+       local( $atime, $mtime, $path )( $atime, $mtime, $path 4118,102506
+       local( $old_mode )( $old_mode 4124,102685
+       local( $tmp_mode )( $tmp_mode 4125,102730
+       local( $ret )( $ret 4126,102763
+sub cwdmain::cwd4135,102913
+       local( $lcwd )( $lcwd 4137,102923
+
+ps-src/rfc1245.ps,2478
+/FMversion 12,311
+/FrameDict 17,500
+/FMVERSION 47,1307
+/FMLOCAL 56,1494
+/FMDOCUMENT 73,1766
+/FMBEGINPAGE 95,2279
+/FMENDPAGE 109,2516
+/FMDEFINEFONT 115,2582
+/FMNORMALIZEGRAPHICS 126,2725
+/FMBEGINEPSF 142,2955
+/FMENDEPSF 153,3207
+/setmanualfeed 158,3283
+/max 163,3386
+/min 164,3426
+/inch 165,3466
+/pagedimen 166,3485
+/setpapername 172,3629
+/papersize 190,4214
+/manualpapersize 211,4789
+/desperatepapersize 230,5211
+/savematrix 239,5370
+/restorematrix 242,5425
+/dmatrix 245,5475
+/dpi 246,5495
+/freq 248,5583
+/sangle 249,5658
+/DiacriticEncoding 250,5717
+/.notdef 251,5738
+/.notdef 252,5801
+/.notdef 253,5864
+/.notdef 254,5927
+/.notdef 255,5990
+/numbersign 256,6051
+/parenright 257,6115
+/two 258,6184
+/less 259,6251
+/L 260,6320
+/bracketright 261,6389
+/i 262,6459
+/braceright 263,6529
+/Ntilde 264,6598
+/atilde 265,6668
+/iacute 266,6733
+/ocircumflex 267,6797
+/udieresis 268,6858
+/paragraph 269,6919
+/dieresis 270,6983
+/yen 271,7050
+/ordfeminine 272,7109
+/exclamdown 273,7171
+/guillemotleft 274,7230
+/Otilde 275,7296
+/quoteleft 276,7357
+/fraction 277,7420
+/periodcentered 278,7490
+/Acircumflex 279,7549
+/Icircumflex 280,7610
+/Uacute 281,7680
+/breve 282,7746
+/ReEncode 284,7814
+/graymode 300,8020
+/setpattern 310,8184
+/grayness 331,8725
+/normalize 394,9873
+/dnormalize 397,9942
+/lnormalize 400,10014
+/H 403,10104
+/Z 406,10147
+/X 409,10176
+/V 412,10219
+/N 415,10260
+/M 418,10286
+/E 419,10315
+/D 420,10336
+/O 421,10358
+/L 423,10394
+/Y 430,10489
+/R 439,10588
+/RR 450,10696
+/C 467,10959
+/U 473,11004
+/F 477,11039
+/T 481,11084
+/RF 484,11115
+/TF 488,11164
+/P 495,11219
+/PF 499,11270
+/S 506,11344
+/SF 510,11384
+/B 517,11446
+/BF 521,11505
+/W 538,11714
+/G 573,12382
+/A 582,12525
+/BEGINPRINTCODE 606,12918
+/ENDPRINTCODE 615,13131
+/gn 620,13259
+/cfs 631,13384
+/ic 636,13473
+/ms 658,14285
+/ip 668,14395
+/wh 678,14492
+/bl 684,14607
+/s1 690,14722
+/fl 691,14739
+/hx 698,14887
+/wbytes 709,15055
+/BEGINBITMAPBWc 713,15147
+/BEGINBITMAPGRAYc 716,15198
+/BEGINBITMAP2BITc 719,15251
+/COMMONBITMAPc 722,15304
+/BEGINBITMAPBW 739,15660
+/BEGINBITMAPGRAY 742,15709
+/BEGINBITMAP2BIT 745,15760
+/COMMONBITMAP 748,15811
+/Fmcc 765,16156
+/ngrayt 773,16371
+/nredt 774,16393
+/nbluet 775,16414
+/ngreent 776,16436
+/colorsetup 787,16603
+/fakecolorsetup 814,17370
+/BITMAPCOLOR 826,17636
+/BITMAPCOLORc 839,17926
+/BITMAPGRAY 855,18275
+/BITMAPGRAYc 858,18335
+/ENDBITMAP 861,18397
+/fillprocs 868,18497
+
+prol-src/ordsets.prolog,525
+is_ordset(47,1310
+list_to_ord_set(63,1688
+ord_add_element(71,1867
+ord_del_element(85,2344
+ord_disjoint(100,2783
+ord_intersect(108,2953
+ord_intersection(126,3552
+ord_intersection3(130,3691
+ord_intersection(150,4531
+ord_intersection4(154,4703
+ord_intersection(176,5664
+ord_intersection2(181,5812
+ord_member(200,6318
+ord_seteq(216,6683
+ord_setproduct(225,6971
+ord_subset(240,7377
+ord_subtract(257,7861
+ord_symdiff(265,8054
+ord_union(288,8887
+ord_union4(303,9352
+ord_union(324,10171
+ord_union_all(329,10313
+
+prol-src/natded.prolog,2319
+expandmng(100,2879
+normalize(116,3359
+fresh_vars(125,3716
+subst(138,4134
+normalize_fresh(159,4660
+reduce_subterm(171,5112
+reduce(185,5559
+free_var(196,5903
+free_for(209,6246
+compile_lex(231,6875
+consult_lex:-consult_lex248,7384
+lex(259,7754
+expandsyn(267,8068
+bas_syn(292,8897
+compile_empty:-compile_empty310,9376
+complete(328,10055
+add_active(340,10527
+parse(353,10949
+derived_analyses(364,11341
+build(378,11965
+buildact(392,12521
+mapsyn(412,13542
+add_edge(434,14278
+findcats(447,14758
+normalize_tree(465,15478
+normalize_trees(475,15856
+expandmng_tree(486,16248
+expandmng_trees(496,16614
+cat(511,17013
+subtree(644,21266
+hypothetical_mem(653,21565
+make_coor(667,22130
+start_up:-start_up688,23013
+tokenizeatom(710,23921
+tokenize(720,24348
+isoperator(752,25377
+isoptab(756,25431
+specialsymbol(765,25756
+sstab(771,25861
+parse_cgi(787,26347
+keyvalseq(792,26510
+andkeyvalseq(796,26609
+keyval(799,26688
+valseq(807,26920
+plusvalseq(810,27007
+val(816,27109
+argvals(824,27426
+commaargvals(828,27503
+atomval(833,27578
+atom(836,27640
+action(846,28004
+keyvalcgi(864,28649
+keyvalscgi(865,28670
+outsyn(868,28726
+act(876,29060
+actout(901,29906
+texttreelist(912,30089
+htmltreelist(918,30190
+fitchtreelist(924,30304
+pp_html_table_tree(938,30759
+pp_html_tree(949,31113
+pp_html_trees(988,32381
+pp_html_table_fitch_tree(999,32769
+pp_html_fitch_tree(1017,33672
+removeexp(1129,39002
+splitexp(1142,39490
+pp_exp(1155,39990
+map_word(1168,40249
+pp_exps(1180,40474
+pp_tree(1188,40777
+pp_trees(1216,41807
+pp_word_list(1225,42128
+pp_word(1231,42262
+pp_word_list_rest(1238,42569
+pp_cat(1248,42929
+pp_syn(1255,43196
+pp_syn_paren(1276,43899
+pp_paren(1293,44377
+pp_syn_back(1300,44661
+pp_bas_cat(1311,45001
+writecat(1322,45409
+writesubs(1351,46455
+writesups(1361,46757
+writelistsubs(1371,47090
+pp_lam(1380,47408
+pp_lam_bracket(1398,48022
+pp_lam_paren(1407,48338
+pp_rule(1429,49238
+member(1447,49866
+append_list(1451,49919
+append(1456,50010
+at_least_one_member(1460,50076
+numbervars(1464,50171
+reverse(1467,50209
+select(1471,50290
+select_last(1475,50357
+cat_atoms(1479,50436
+writelist(1485,50524
+write_lex_cat(1492,50676
+writebreaklex(1500,50988
+write_lex(1513,51265
+writebreak(1521,51541
+tt:-tt1531,51713
+mt:-mt1534,51784
+cmt:-cmt1537,51878
+
+pyt-src/server.py,1438
+class Controls:Controls17,358
+    def __init__(18,374
+    def __repr__(24,590
+    def __str__(34,871
+class Server:Server37,934
+    def __init__(38,948
+    def dump(73,2198
+    def __repr__(125,3896
+    def __str__(128,3945
+class User:User131,4014
+    def __init__(132,4026
+    def __repr__(172,5445
+    def __str__(206,6883
+def flag2str(223,7212
+class LabeledEntry(232,7442
+    def bind(234,7525
+    def focus_set(236,7584
+    def __init__(238,7629
+def ButtonBar(245,7909
+def helpwin(255,8280
+class ListEdit(267,8707
+    def __init__(269,8808
+    def handleList(303,10042
+    def handleNew(306,10094
+    def editItem(314,10426
+    def deleteItem(320,10596
+def ConfirmQuit(326,10760
+class ControlEdit(375,12377
+    def PostControls(376,12403
+    def GatherControls(421,13530
+class ServerEdit(512,16264
+    def __init__(513,16289
+    def post(525,16629
+    def gather(543,17191
+    def nosave(547,17304
+    def save(551,17408
+    def refreshPort(556,17509
+    def createWidgets(561,17663
+    def edituser(631,20708
+class UserEdit(645,20921
+    def __init__(646,20944
+    def post(658,21283
+    def gather(676,21841
+    def nosave(680,21950
+    def save(684,22052
+    def createWidgets(689,22151
+class Configure(760,24879
+    def __init__(761,24916
+    def MakeDispose(772,25211
+    def MakeSitelist(786,25706
+    def editsite(794,25949
+    def save(797,26022
+    def nosave(807,26310
+
+tex-src/testenv.tex,52
+\newcommand{\nm}\nm4,77
+\section{blah}blah8,139
+
+tex-src/gzip.texi,303
address@hidden Top,62,2139
address@hidden Copying,80,2652
address@hidden Overview,83,2705
address@hidden Sample,166,7272
address@hidden Invoking gzip,Invoking gzip210,8828
address@hidden Advanced usage,Advanced usage357,13495
address@hidden Environment,420,15207
address@hidden Tapes,437,15768
address@hidden Problems,460,16767
address@hidden Concept Index,Concept Index473,17287
+
+tex-src/texinfo.tex,30626
+\def\texinfoversion{\texinfoversion25,1019
+\def\tie{\tie48,1510
+\def\gloggingall{\gloggingall71,2260
+\def\loggingall{\loggingall72,2329
+\def\onepageout#1{\onepageout98,3266
+\def\croppageout#1{\croppageout114,4016
+\def\cropmarks{\cropmarks141,5076
+\def\pagebody#1{\pagebody143,5123
+\def\ewtop{\ewtop156,5578
+\def\nstop{\nstop157,5642
+\def\ewbot{\ewbot159,5725
+\def\nsbot{\nsbot160,5789
+\def\parsearg #1{\parsearg169,6088
+\def\parseargx{\parseargx171,6166
+\def\parseargline{\parseargline181,6406
+\def\flushcr{\flushcr185,6527
+\newif\ifENV \ENVfalse \def\inENV{\inENV189,6726
+\def\ENVcheck{\ENVcheck190,6790
+\outer\def\begin{\begin197,7037
+\def\beginxxx #1{\beginxxx199,7075
+\def\end{\end207,7330
+\def\endxxx #1{\endxxx209,7358
+\def\errorE#1{\errorE215,7547
+\def\singlespace{\singlespace221,7741
address@hidden@231,7964
+\def\`{\`235,8064
+\def\'{\'236,8076
+\def\mylbrace {\mylbrace240,8124
+\def\myrbrace {\myrbrace241,8157
+\def\:{\:246,8271
+\def\*{\*249,8325
+\def\.{\.252,8401
+\def\w#1{\w257,8632
+\def\group{\group267,9115
+  \def\Egroup{\Egroup272,9279
+\def\need{\need288,9721
+\def\needx#1{\needx299,9998
+\def\dots{\dots338,11384
+\def\page{\page342,11448
+\def\exdent{\exdent352,11775
+\def\exdentyyy #1{\exdentyyy353,11808
+\def\nofillexdent{\nofillexdent356,11952
+\def\nofillexdentyyy #1{\nofillexdentyyy357,11997
+\def\include{\include364,12181
+\def\includezzz #1{\includezzz365,12216
+\def\thisfile{\thisfile368,12267
+\def\center{\center372,12330
+\def\centerzzz #1{\centerzzz373,12363
+\def\sp{\sp379,12505
+\def\spxxx #1{\spxxx380,12530
+\def\comment{\comment386,12704
+\def\commentxxx #1{\commentxxx389,12801
+\def\ignoresections{\ignoresections395,12970
+\let\chapter=\relax=\relax396,12992
+\let\section=\relax=\relax405,13237
+\let\subsection=\relax=\relax408,13298
+\let\subsubsection=\relax=\relax409,13321
+\let\appendix=\relax=\relax410,13347
+\let\appendixsec=\relaxsec=\relax411,13368
+\let\appendixsection=\relaxsection=\relax412,13392
+\let\appendixsubsec=\relaxsubsec=\relax413,13420
+\let\appendixsubsection=\relaxsubsection=\relax414,13447
+\let\appendixsubsubsec=\relaxsubsubsec=\relax415,13478
+\let\appendixsubsubsection=\relaxsubsubsection=\relax416,13508
+\def\ignore{\ignore422,13610
+\long\def\ignorexxx #1\end ignore{\ignorexxx426,13750
+\def\direntry{\direntry428,13809
+\long\def\direntryxxx #1\end direntry{\direntryxxx429,13848
+\def\ifset{\ifset433,13958
+\def\ifsetxxx #1{\ifsetxxx435,14016
+\def\Eifset{\Eifset439,14143
+\def\ifsetfail{\ifsetfail440,14157
+\long\def\ifsetfailxxx #1\end ifset{\ifsetfailxxx441,14213
+\def\ifclear{\ifclear443,14274
+\def\ifclearxxx #1{\ifclearxxx445,14336
+\def\Eifclear{\Eifclear449,14467
+\def\ifclearfail{\ifclearfail450,14483
+\long\def\ifclearfailxxx #1\end ifclear{\ifclearfailxxx451,14543
+\def\set{\set455,14694
+\def\setxxx #1{\setxxx456,14721
+\def\clear{\clear459,14783
+\def\clearxxx #1{\clearxxx460,14814
+\def\iftex{\iftex465,14931
+\def\Eiftex{\Eiftex466,14944
+\def\ifinfo{\ifinfo467,14958
+\long\def\ifinfoxxx #1\end ifinfo{\ifinfoxxx468,15008
+\long\def\menu #1\end menu{\menu470,15067
+\def\asis#1{\asis471,15096
+\def\math#1{\math484,15639
+\def\node{\node486,15683
+\def\nodezzz#1{\nodezzz487,15721
+\def\nodexxx[#1,#2]{\nodexxx[488,15752
+\def\donoderef{\donoderef491,15814
+\def\unnumbnoderef{\unnumbnoderef495,15935
+\def\appendixnoderef{\appendixnoderef499,16066
+\expandafter\expandafter\expandafter\appendixsetref{setref500,16112
+\let\refill=\relaxill=\relax503,16201
+\def\setfilename{\setfilename508,16415
+\outer\def\bye{\bye517,16661
+\def\inforef #1{\inforef519,16717
+\def\inforefzzz #1,#2,#3,#4**{\inforefzzz520,16755
+\def\losespace #1{\losespace522,16852
+\def\sf{\sf531,17056
+\font\defbf=cmbx10 scaled \magstep1 %was 1314bf=cmbx10557,17851
+\font\deftt=cmtt10 scaled \magstep1tt=cmtt10558,17897
+\def\df{\df559,17933
+\def\resetmathfonts{\resetmathfonts634,20527
+\def\textfonts{\textfonts647,21116
+\def\chapfonts{\chapfonts652,21331
+\def\secfonts{\secfonts657,21547
+\def\subsecfonts{\subsecfonts662,21752
+\def\indexfonts{\indexfonts667,21969
+\def\smartitalicx{\smartitalicx690,22701
+\def\smartitalic#1{\smartitalic691,22777
+\let\cite=\smartitalic=\smartitalic697,22922
+\def\b#1{\b699,22946
+\def\t#1{\t702,22981
+\def\samp #1{\samp705,23133
+\def\key #1{\key706,23166
+\def\ctrl #1{\ctrl707,23227
+\def\tclose#1{\tclose715,23429
+\def\ {\719,23595
+\def\xkey{\xkey727,23864
+\def\kbdfoo#1#2#3\par{\kbdfoo728,23880
+\def\dmn#1{\dmn737,24181
+\def\kbd#1{\kbd739,24208
+\def\l#1{\l741,24265
+\def\r#1{\r743,24294
+\def\sc#1{\sc745,24362
+\def\ii#1{\ii746,24405
+\def\titlefont#1{\titlefont754,24638
+\def\titlepage{\titlepage760,24741
+   \def\subtitlefont{\subtitlefont765,24968
+   \def\authorfont{\authorfont767,25052
+   \def\title{\title773,25262
+   \def\titlezzz##1{\titlezzz774,25297
+   \def\subtitle{\subtitle782,25612
+   \def\subtitlezzz##1{\subtitlezzz783,25653
+   \def\author{\author786,25771
+   \def\authorzzz##1{\authorzzz787,25808
+   \def\page{\page793,26099
+\def\Etitlepage{\Etitlepage803,26268
+\def\finishtitlepage{\finishtitlepage816,26656
+\def\evenheading{\evenheading845,27664
+\def\oddheading{\oddheading846,27707
+\def\everyheading{\everyheading847,27748
+\def\evenfooting{\evenfooting849,27794
+\def\oddfooting{\oddfooting850,27837
+\def\everyfooting{\everyfooting851,27878
+\def\headings #1 {\headings892,29570
+\def\HEADINGSoff{\HEADINGSoff894,29619
+\def\HEADINGSdouble{\HEADINGSdouble903,30046
+\def\HEADINGSsingle{\HEADINGSsingle913,30366
+\def\HEADINGSon{\HEADINGSon921,30587
+\def\HEADINGSafter{\HEADINGSafter923,30621
+\def\HEADINGSdoublex{\HEADINGSdoublex925,30716
+\def\HEADINGSsingleafter{\HEADINGSsingleafter932,30904
+\def\HEADINGSsinglex{\HEADINGSsinglex933,30965
+\def\today{\today942,31240
+\def\thistitle{\thistitle957,31785
+\def\settitle{\settitle958,31810
+\def\settitlezzz #1{\settitlezzz959,31847
+\def\internalBitem{\internalBitem991,32777
+\def\internalBitemx{\internalBitemx992,32827
+\def\internalBxitem "#1"{\internalBxitem994,32872
+\def\internalBxitemx "#1"{\internalBxitemx995,32952
+\def\internalBkitem{\internalBkitem997,33027
+\def\internalBkitemx{\internalBkitemx998,33079
+\def\kitemzzz #1{\kitemzzz1000,33126
+\def\xitemzzz #1{\xitemzzz1003,33228
+\def\itemzzz #1{\itemzzz1006,33331
+\def\item{\item1036,34402
+\def\itemx{\itemx1037,34453
+\def\kitem{\kitem1038,34506
+\def\kitemx{\kitemx1039,34559
+\def\xitem{\xitem1040,34614
+\def\xitemx{\xitemx1041,34667
+\def\description{\description1044,34777
+\def\table{\table1046,34827
+\def\ftable{\ftable1051,34971
+\def\Eftable{\Eftable1055,35117
+\def\vtable{\vtable1058,35186
+\def\Evtable{\Evtable1062,35332
+\def\dontindex #1{\dontindex1065,35401
+\def\fnitemindex #1{\fnitemindex1066,35421
+\def\vritemindex #1{\vritemindex1067,35466
+\def\tablez #1#2#3#4#5#6{\tablez1073,35615
+\def\Edescription{\Edescription1076,35673
+\def\itemfont{\itemfont1081,35875
+\def\Etable{\Etable1089,36101
+\def\itemize{\itemize1102,36425
+\def\itemizezzz #1{\itemizezzz1104,36461
+\def\itemizey #1#2{\itemizey1109,36556
+\def#2{1118,36802
+\def\itemcontents{\itemcontents1119,36843
+\def\bullet{\bullet1122,36891
+\def\minus{\minus1123,36918
+\def\frenchspacing{\frenchspacing1127,37026
+\def\splitoff#1#2\endmark{\splitoff1133,37251
+\def\enumerate{\enumerate1139,37481
+\def\enumeratezzz #1{\enumeratezzz1140,37520
+\def\enumeratey #1 #2\endenumeratey{\enumeratey1141,37573
+  \def\thearg{\thearg1145,37720
+  \ifx\thearg\empty \def\thearg{\thearg1146,37739
+\def\numericenumerate{\numericenumerate1183,39073
+\def\lowercaseenumerate{\lowercaseenumerate1189,39203
+\def\uppercaseenumerate{\uppercaseenumerate1202,39550
+\def\startenumeration#1{\startenumeration1218,40040
+\def\alphaenumerate{\alphaenumerate1226,40222
+\def\capsenumerate{\capsenumerate1227,40257
+\def\Ealphaenumerate{\Ealphaenumerate1228,40291
+\def\Ecapsenumerate{\Ecapsenumerate1229,40325
+\def\itemizeitem{\itemizeitem1233,40405
+\def\newindex #1{\newindex1258,41262
+\def\defindex{\defindex1267,41551
+\def\newcodeindex #1{\newcodeindex1271,41659
+\def\defcodeindex{\defcodeindex1278,41919
+\def\synindex #1 #2 {\synindex1282,42099
+\def\syncodeindex #1 #2 {\syncodeindex1291,42439
+\def\doindex#1{\doindex1308,43118
+\def\singleindexer #1{\singleindexer1309,43177
+\def\docodeindex#1{\docodeindex1312,43289
+\def\singlecodeindexer #1{\singlecodeindexer1313,43356
+\def\indexdummies{\indexdummies1315,43414
+\def\_{\_1316,43434
+\def\w{\w1317,43462
+\def\bf{\bf1318,43489
+\def\rm{\rm1319,43518
+\def\sl{\sl1320,43547
+\def\sf{\sf1321,43576
+\def\tt{\tt1322,43604
+\def\gtr{\gtr1323,43632
+\def\less{\less1324,43662
+\def\hat{\hat1325,43694
+\def\char{\char1326,43724
+\def\TeX{\TeX1327,43756
+\def\dots{\dots1328,43786
+\def\copyright{\copyright1329,43819
+\def\tclose##1{\tclose1330,43862
+\def\code##1{\code1331,43907
+\def\samp##1{\samp1332,43948
+\def\t##1{\t1333,43989
+\def\r##1{\r1334,44024
+\def\i##1{\i1335,44059
+\def\b##1{\b1336,44094
+\def\cite##1{\cite1337,44129
+\def\key##1{\key1338,44170
+\def\file##1{\file1339,44209
+\def\var##1{\var1340,44250
+\def\kbd##1{\kbd1341,44289
+\def\indexdummyfont#1{\indexdummyfont1346,44445
+\def\indexdummytex{\indexdummytex1347,44471
+\def\indexdummydots{\indexdummydots1348,44495
+\def\indexnofonts{\indexnofonts1350,44521
+\let\w=\indexdummyfontdummyfont1351,44541
+\let\t=\indexdummyfontdummyfont1352,44564
+\let\r=\indexdummyfontdummyfont1353,44587
+\let\i=\indexdummyfontdummyfont1354,44610
+\let\b=\indexdummyfontdummyfont1355,44633
+\let\emph=\indexdummyfontdummyfont1356,44656
+\let\strong=\indexdummyfontdummyfont1357,44682
+\let\cite=\indexdummyfont=\indexdummyfont1358,44710
+\let\sc=\indexdummyfontdummyfont1359,44736
+\let\tclose=\indexdummyfontdummyfont1363,44908
+\let\code=\indexdummyfontdummyfont1364,44936
+\let\file=\indexdummyfontdummyfont1365,44962
+\let\samp=\indexdummyfontdummyfont1366,44988
+\let\kbd=\indexdummyfontdummyfont1367,45014
+\let\key=\indexdummyfontdummyfont1368,45039
+\let\var=\indexdummyfontdummyfont1369,45064
+\let\TeX=\indexdummytexdummytex1370,45089
+\let\dots=\indexdummydotsdummydots1371,45113
+\let\indexbackslash=0  %overridden during \printindex.backslash=01381,45365
+\def\doind #1#2{\doind1383,45421
+{\indexdummies % Must do this here, since \bf, etc expand at this 
stagedummies1385,45464
+\def\rawbackslashxx{\rawbackslashxx1388,45604
+{\indexnofontsnofonts1393,45866
+\def\dosubind #1#2#3{\dosubind1404,46177
+{\indexdummies % Must do this here, since \bf, etc expand at this 
stagedummies1406,46225
+\def\rawbackslashxx{\rawbackslashxx1409,46329
+{\indexnofontsnofonts1413,46483
+\def\findex {\findex1442,47414
+\def\kindex {\kindex1443,47437
+\def\cindex {\cindex1444,47460
+\def\vindex {\vindex1445,47483
+\def\tindex {\tindex1446,47506
+\def\pindex {\pindex1447,47529
+\def\cindexsub {\cindexsub1449,47553
+\def\printindex{\printindex1461,47880
+\def\doprintindex#1{\doprintindex1463,47921
+  \def\indexbackslash{\indexbackslash1480,48406
+  \indexfonts\rm \tolerance=9500 \advance\baselineskip -1ptfonts\rm1481,48445
+\def\initial #1{\initial1516,49517
+\def\entry #1#2{\entry1522,49724
+  \null\nobreak\indexdotfill % Have leaders before the page 
number.dotfill1539,50371
+\def\indexdotfill{\indexdotfill1548,50699
+\def\primary #1{\primary1551,50805
+\def\secondary #1#2{\secondary1555,50887
+\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\pardotfill1558,50969
+\newbox\partialpageialpage1565,51142
+\def\begindoublecolumns{\begindoublecolumns1571,51300
+  \output={\global\setbox\partialpage=ialpage=1572,51336
+\def\enddoublecolumns{\enddoublecolumns1576,51524
+\def\doublecolumnout{\doublecolumnout1579,51609
+  address@hidden \advance\dimen@ by-\ht\partialpageialpage1580,51678
+\def\pagesofar{\pagesofar1583,51856
+\def\balancecolumns{\balancecolumns1587,52093
+  address@hidden \advance\availdimen@ by-\ht\partialpageialpage1593,52264
+     address@hidden \advance\dimen@ by-\ht\partialpageialpage1599,52525
+\newcount \appendixno  \appendixno = address@hidden,53430
+\def\appendixletter{\appendixletter1627,53471
+\def\opencontents{\opencontents1631,53574
+\def\thischapter{\thischapter1636,53755
+\def\seccheck#1{\seccheck1637,53793
+\def\chapternofonts{\chapternofonts1642,53897
+\def\result{\result1645,53972
+\def\equiv{\equiv1646,54007
+\def\expansion{\expansion1647,54040
+\def\print{\print1648,54081
+\def\TeX{\TeX1649,54114
+\def\dots{\dots1650,54143
+\def\copyright{\copyright1651,54174
+\def\tt{\tt1652,54215
+\def\bf{\bf1653,54242
+\def\w{\w1654,54270
+\def\less{\less1655,54295
+\def\gtr{\gtr1656,54326
+\def\hat{\hat1657,54355
+\def\char{\char1658,54384
+\def\tclose##1{\tclose1659,54415
+\def\code##1{\code1660,54459
+\def\samp##1{\samp1661,54499
+\def\r##1{\r1662,54539
+\def\b##1{\b1663,54573
+\def\key##1{\key1664,54607
+\def\file##1{\file1665,54645
+\def\kbd##1{\kbd1666,54685
+\def\i##1{\i1668,54793
+\def\cite##1{\cite1669,54827
+\def\var##1{\var1670,54867
+\def\emph##1{\emph1671,54905
+\def\dfn##1{\dfn1672,54945
+\def\thischaptername{\thischaptername1675,54986
+\outer\def\chapter{\chapter1676,55025
+\def\chapterzzz #1{\chapterzzz1677,55066
+{\chapternofonts%nofonts%1686,55462
+\global\let\section = \numberedsec=1691,55615
+\global\let\subsection = \numberedsubsec=1692,55650
+\global\let\subsubsection = \numberedsubsubsec=1693,55691
+\outer\def\appendix{\appendix1696,55742
+\def\appendixzzz #1{\appendixzzz1697,55785
+\global\advance \appendixno by 1 \message{no1699,55862
+\chapmacro {#1}{Appendix \appendixletter}letter1700,55931
+\xdef\thischapter{Appendix \appendixletter: 
\noexpand\thischaptername}letter:1703,56024
+{\chapternofonts%nofonts%1704,56096
+  {#1}{Appendix \appendixletter}letter1706,56152
+\appendixnoderef %noderef1709,56252
+\global\let\section = \appendixsec=1710,56271
+\global\let\subsection = \appendixsubsec=1711,56306
+\global\let\subsubsection = \appendixsubsubsec=1712,56347
+\outer\def\top{\top1715,56398
+\outer\def\unnumbered{\unnumbered1716,56438
+\def\unnumberedzzz #1{\unnumberedzzz1717,56485
+{\chapternofonts%nofonts%1721,56648
+\global\let\section = \unnumberedsec=1726,56798
+\global\let\subsection = \unnumberedsubsec=1727,56835
+\global\let\subsubsection = \unnumberedsubsubsec=1728,56878
+\outer\def\numberedsec{\numberedsec1731,56931
+\def\seczzz #1{\seczzz1732,56972
+{\chapternofonts%nofonts%1735,57128
+\outer\def\appendixsection{\appendixsection1744,57314
+\outer\def\appendixsec{\appendixsec1745,57371
+\def\appendixsectionzzz #1{\appendixsectionzzz1746,57424
+\gdef\thissection{#1}\secheading {#1}{\appendixletter}letter1748,57536
+{\chapternofonts%nofonts%1749,57604
+{#1}{\appendixletter}letter1751,57660
+\appendixnoderef %noderef1754,57760
+\outer\def\unnumberedsec{\unnumberedsec1758,57800
+\def\unnumberedseczzz #1{\unnumberedseczzz1759,57853
+{\chapternofonts%nofonts%1761,57948
+\outer\def\numberedsubsec{\numberedsubsec1769,58116
+\def\numberedsubseczzz #1{\numberedsubseczzz1770,58171
+{\chapternofonts%nofonts%1773,58350
+\outer\def\appendixsubsec{\appendixsubsec1782,58554
+\def\appendixsubseczzz #1{\appendixsubseczzz1783,58609
+\subsecheading {#1}{\appendixletter}letter1785,58731
+{\chapternofonts%nofonts%1786,58796
+{#1}{\appendixletter}letter1788,58855
+\appendixnoderef %noderef1791,58970
+\outer\def\unnumberedsubsec{\unnumberedsubsec1795,59010
+\def\unnumberedsubseczzz #1{\unnumberedsubseczzz1796,59069
+{\chapternofonts%nofonts%1798,59170
+\outer\def\numberedsubsubsec{\numberedsubsubsec1806,59341
+\def\numberedsubsubseczzz #1{\numberedsubsubseczzz1807,59402
+{\chapternofonts%nofonts%1811,59599
+\outer\def\appendixsubsubsec{\appendixsubsubsec1822,59832
+\def\appendixsubsubseczzz #1{\appendixsubsubseczzz1823,59893
+  {\appendixletter}letter1826,60032
+{\chapternofonts%nofonts%1827,60098
+  {\appendixletter}letter1829,60163
+\appendixnoderef %noderef1833,60297
+\outer\def\unnumberedsubsubsec{\unnumberedsubsubsec1837,60337
+\def\unnumberedsubsubseczzz #1{\unnumberedsubsubseczzz1838,60402
+{\chapternofonts%nofonts%1840,60509
+\def\infotop{\infotop1850,60838
+\def\infounnumbered{\infounnumbered1851,60876
+\def\infounnumberedsec{\infounnumberedsec1852,60921
+\def\infounnumberedsubsec{\infounnumberedsubsec1853,60972
+\def\infounnumberedsubsubsec{\infounnumberedsubsubsec1854,61029
+\def\infoappendix{\infoappendix1856,61093
+\def\infoappendixsec{\infoappendixsec1857,61134
+\def\infoappendixsubsec{\infoappendixsubsec1858,61181
+\def\infoappendixsubsubsec{\infoappendixsubsubsec1859,61234
+\def\infochapter{\infochapter1861,61294
+\def\infosection{\infosection1862,61333
+\def\infosubsection{\infosubsection1863,61372
+\def\infosubsubsection{\infosubsubsection1864,61417
+\global\let\section = \numberedsec=1869,61654
+\global\let\subsection = \numberedsubsec=1870,61689
+\global\let\subsubsection = \numberedsubsubsec=1871,61730
+\def\majorheading{\majorheading1885,62237
+\def\majorheadingzzz #1{\majorheadingzzz1886,62282
+\def\chapheading{\chapheading1892,62515
+\def\chapheadingzzz #1{\chapheadingzzz1893,62558
+\def\heading{\heading1898,62753
+\def\subheading{\subheading1900,62790
+\def\subsubheading{\subsubheading1902,62833
+\def\dobreak#1#2{\dobreak1909,63110
+\def\setchapterstyle #1 {\setchapterstyle1911,63188
+\def\chapbreak{\chapbreak1918,63443
+\def\chappager{\chappager1919,63493
+\def\chapoddpage{\chapoddpage1920,63531
+\def\setchapternewpage #1 {\setchapternewpage1922,63610
+\def\CHAPPAGoff{\CHAPPAGoff1924,63667
+\def\CHAPPAGon{\CHAPPAGon1928,63761
+\global\def\HEADINGSon{\HEADINGSon1931,63852
+\def\CHAPPAGodd{\CHAPPAGodd1933,63894
+\global\def\HEADINGSon{\HEADINGSon1936,63990
+\def\CHAPFplain{\CHAPFplain1940,64044
+\def\chfplain #1#2{\chfplain1944,64136
+\def\unnchfplain #1{\unnchfplain1955,64359
+\def\unnchfopen #1{\unnchfopen1963,64588
+\def\chfopen #1#2{\chfopen1969,64796
+\def\CHAPFopen{\CHAPFopen1974,64940
+\def\subsecheadingbreak{\subsecheadingbreak1981,65158
+\def\secheadingbreak{\secheadingbreak1984,65287
+\def\secheading #1#2#3{\secheading1992,65569
+\def\plainsecheading #1{\plainsecheading1993,65625
+\def\secheadingi #1{\secheadingi1994,65668
+\def\subsecheading #1#2#3#4{\subsecheading2005,66036
+\def\subsecheadingi #1{\subsecheadingi2006,66103
+\def\subsubsecfonts{\subsubsecfonts2013,66400
+\def\subsubsecheading #1#2#3#4#5{\subsubsecheading2016,66523
+\def\subsubsecheadingi #1{\subsubsecheadingi2017,66601
+\def\startcontents#1{\startcontents2031,67073
+   \unnumbchapmacro{#1}\def\thischapter{\thischapter2039,67346
+\outer\def\contents{\contents2048,67705
+\outer\def\summarycontents{\summarycontents2056,67849
+      \def\secentry ##1##2##3##4{\secentry2066,68220
+      \def\unnumbsecentry ##1##2{\unnumbsecentry2067,68255
+      \def\subsecentry ##1##2##3##4##5{\subsecentry2068,68290
+      \def\unnumbsubsecentry ##1##2{\unnumbsubsecentry2069,68331
+      \def\subsubsecentry ##1##2##3##4##5##6{\subsubsecentry2070,68369
+      \def\unnumbsubsubsecentry ##1##2{\unnumbsubsubsecentry2071,68416
+\def\chapentry#1#2#3{\chapentry2084,68850
+\def\shortchapentry#1#2#3{\shortchapentry2087,68967
+    {#2\labelspace #1}space2090,69077
+\def\unnumbchapentry#1#2{\unnumbchapentry2093,69131
+\def\shortunnumberedentry#1#2{\shortunnumberedentry2094,69178
+\def\secentry#1#2#3#4{\secentry2101,69342
+\def\unnumbsecentry#1#2{\unnumbsecentry2102,69401
+\def\subsecentry#1#2#3#4#5{\subsecentry2105,69462
+\def\unnumbsubsecentry#1#2{\unnumbsubsecentry2106,69532
+\def\subsubsecentry#1#2#3#4#5#6{\subsubsecentry2109,69606
+  \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}space2110,69640
+\def\unnumbsubsubsecentry#1#2{\unnumbsubsubsecentry2111,69691
+\def\dochapentry#1#2{\dochapentry2122,70065
+\def\dosecentry#1#2{\dosecentry2137,70670
+\def\dosubsecentry#1#2{\dosubsecentry2144,70848
+\def\dosubsubsecentry#1#2{\dosubsubsecentry2151,71033
+\def\labelspace{\labelspace2159,71284
+\def\dopageno#1{\dopageno2161,71319
+\def\doshortpageno#1{\doshortpageno2162,71345
+\def\chapentryfonts{\chapentryfonts2164,71377
+\def\secentryfonts{\secentryfonts2165,71412
+\def\point{\point2191,72371
+\def\result{\result2193,72392
+\def\expansion{\expansion2194,72465
+\def\print{\print2195,72536
+\def\equiv{\equiv2197,72603
+\def\error{\error2217,73376
+\def\tex{\tex2223,73605
address@hidden@2241,73988
+\gdef\sepspaces{\def {\ }}}\2264,74720
+\def\aboveenvbreak{\aboveenvbreak2267,74802
+\def\afterenvbreak{\afterenvbreak2271,74968
+\def\ctl{\ctl2285,75479
+\def\ctr{\ctr2286,75551
+\def\cbl{\cbl2287,75590
+\def\cbr{\cbr2288,75630
+\def\carttop{\carttop2289,75669
+\def\cartbot{\cartbot2292,75777
+\long\def\cartouche{\cartouche2298,75917
+\def\Ecartouche{\Ecartouche2325,76705
+\def\lisp{\lisp2337,76840
+\def\Elisp{\Elisp2347,77187
+\def\next##1{\next2359,77513
+\def\Eexample{\Eexample2363,77555
+\def\Esmallexample{\Esmallexample2366,77602
+\def\smalllispx{\smalllispx2372,77780
+\def\Esmalllisp{\Esmalllisp2382,78134
+\obeyspaces \obeylines \ninett \indexfonts \rawbackslashfonts2395,78490
+\def\next##1{\next2396,78547
+\def\display{\display2400,78627
+\def\Edisplay{\Edisplay2409,78946
+\def\next##1{\next2421,79257
+\def\format{\format2425,79360
+\def\Eformat{\Eformat2433,79656
+\def\next##1{\next2436,79745
+\def\flushleft{\flushleft2440,79797
+\def\Eflushleft{\Eflushleft2450,80168
+\def\next##1{\next2453,80261
+\def\flushright{\flushright2455,80283
+\def\Eflushright{\Eflushright2465,80655
+\def\next##1{\next2469,80786
+\def\quotation{\quotation2473,80844
+\def\Equotation{\Equotation2479,81036
+\def\setdeffont #1 {\setdeffont2492,81434
+\newskip\defbodyindent \defbodyindent=.4inbodyindent2494,81480
+\newskip\defargsindent \defargsindent=50ptargsindent2495,81523
+\newskip\deftypemargin \deftypemargin=12pttypemargin2496,81566
+\newskip\deflastargmargin \deflastargmargin=18ptlastargmargin2497,81609
+\def\activeparens{\activeparens2502,81807
+\def\opnr{\opnr2528,83019
+\def\lbrb{\lbrb2529,83084
+\def\defname #1#2{\defname2535,83285
+\advance\dimen2 by -\defbodyindentbodyindent2539,83403
+\advance\dimen3 by -\defbodyindentbodyindent2541,83457
+\setbox0=\hbox{\hskip \deflastargmargin{lastargmargin2543,83511
+\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for 
continuationsargsindent2545,83653
+\parshape 2 0in \dimen0 \defargsindent \dimen1     %argsindent2546,83728
+\rlap{\rightline{{\rm #2}\hskip \deftypemargin}typemargin2553,84097
+\advance\leftskip by -\defbodyindentbodyindent2556,84231
+\exdentamount=\defbodyindentbodyindent2557,84268
+\def\defparsebody #1#2#3{\defparsebody2567,84627
+\def#1{2571,84811
+\def#2{2572,84847
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2574,84919
+\exdentamount=\defbodyindentbodyindent2575,84993
+\def\defmethparsebody #1#2#3#4 {\defmethparsebody2580,85097
+\def#1{2584,85258
+\def#2##1 {2585,85294
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2587,85377
+\exdentamount=\defbodyindentbodyindent2588,85451
+\def\defopparsebody #1#2#3#4#5 {\defopparsebody2591,85536
+\def#1{2595,85697
+\def#2##1 ##2 {2596,85733
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2599,85833
+\exdentamount=\defbodyindentbodyindent2600,85907
+\def\defvarparsebody #1#2#3{\defvarparsebody2607,86178
+\def#1{2611,86365
+\def#2{2612,86401
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2614,86460
+\exdentamount=\defbodyindentbodyindent2615,86534
+\def\defvrparsebody #1#2#3#4 {\defvrparsebody2620,86625
+\def#1{2624,86784
+\def#2##1 {2625,86820
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2627,86890
+\exdentamount=\defbodyindentbodyindent2628,86964
+\def\defopvarparsebody #1#2#3#4#5 {\defopvarparsebody2631,87036
+\def#1{2635,87200
+\def#2##1 ##2 {2636,87236
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2639,87323
+\exdentamount=\defbodyindentbodyindent2640,87397
+\def\defunargs #1{\defunargs2663,88157
+\def\deftypefunargs #1{\deftypefunargs2675,88539
+\def\deffn{\deffn2689,88921
+\def\deffnheader #1#2#3{\deffnheader2691,88978
+\begingroup\defname {name2692,89026
+\def\defun{\defun2698,89171
+\def\defunheader #1#2{\defunheader2700,89224
+\begingroup\defname {name2701,89299
+\defunargs {unargs2702,89335
+\def\deftypefun{\deftypefun2708,89483
+\def\deftypefunheader #1#2{\deftypefunheader2711,89605
+\def\deftypefunheaderx #1#2 #3\relax{\deftypefunheaderx2713,89714
+\begingroup\defname {name2715,89806
+\deftypefunargs {typefunargs2716,89852
+\def\deftypefn{\deftypefn2722,90023
+\def\deftypefnheader #1#2#3{\deftypefnheader2725,90172
+\def\deftypefnheaderx #1#2#3 #4\relax{\deftypefnheaderx2727,90308
+\begingroup\defname {name2729,90401
+\deftypefunargs {typefunargs2730,90441
+\def\defmac{\defmac2736,90562
+\def\defmacheader #1#2{\defmacheader2738,90619
+\begingroup\defname {name2739,90695
+\defunargs {unargs2740,90728
+\def\defspec{\defspec2746,90852
+\def\defspecheader #1#2{\defspecheader2748,90913
+\begingroup\defname {name2749,90990
+\defunargs {unargs2750,91030
+\def\deffnx #1 {\deffnx2757,91225
+\def\defunx #1 {\defunx2758,91282
+\def\defmacx #1 {\defmacx2759,91339
+\def\defspecx #1 {\defspecx2760,91398
+\def\deftypefnx #1 {\deftypefnx2761,91459
+\def\deftypeunx #1 {\deftypeunx2762,91524
+\def\defop #1 {\defop2768,91670
+\defopparsebody\Edefop\defopx\defopheader\defoptype}opparsebody\Edefop\defopx\defopheader\defoptype2769,91705
+\def\defopheader #1#2#3{\defopheader2771,91759
+\begingroup\defname {name2773,91848
+\defunargs {unargs2774,91894
+\def\defmethod{\defmethod2779,91955
+\def\defmethodheader #1#2#3{\defmethodheader2781,92028
+\begingroup\defname {name2783,92116
+\defunargs {unargs2784,92156
+\def\defcv #1 {\defcv2789,92230
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}opvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype2790,92265
+\def\defcvarheader #1#2#3{\defcvarheader2792,92324
+\begingroup\defname {name2794,92410
+\defvarargs {varargs2795,92456
+\def\defivar{\defivar2800,92529
+\def\defivarheader #1#2#3{\defivarheader2802,92592
+\begingroup\defname {name2804,92678
+\defvarargs {varargs2805,92729
+\def\defopx #1 {\defopx2811,92878
+\def\defmethodx #1 {\defmethodx2812,92935
+\def\defcvx #1 {\defcvx2813,93000
+\def\defivarx #1 {\defivarx2814,93057
+\def\defvarargs #1{\defvarargs2821,93328
+\def\defvr{\defvr2827,93472
+\def\defvrheader #1#2#3{\defvrheader2829,93527
+\begingroup\defname {name2830,93575
+\def\defvar{\defvar2834,93660
+\def\defvarheader #1#2{\defvarheader2836,93720
+\begingroup\defname {name2837,93791
+\defvarargs {varargs2838,93827
+\def\defopt{\defopt2843,93893
+\def\defoptheader #1#2{\defoptheader2845,93953
+\begingroup\defname {name2846,94024
+\defvarargs {varargs2847,94063
+\def\deftypevar{\deftypevar2852,94120
+\def\deftypevarheader #1#2{\deftypevarheader2855,94236
+\begingroup\defname {name2857,94319
+\def\deftypevr{\deftypevr2864,94493
+\def\deftypevrheader #1#2#3{\deftypevrheader2866,94564
+\begingroup\defname {name2867,94616
+\def\defvrx #1 {\defvrx2875,94853
+\def\defvarx #1 {\defvarx2876,94910
+\def\defoptx #1 {\defoptx2877,94969
+\def\deftypevarx #1 {\deftypevarx2878,95028
+\def\deftypevrx #1 {\deftypevrx2879,95095
+\def\deftpargs #1{\deftpargs2884,95244
+\def\deftp{\deftp2888,95324
+\def\deftpheader #1#2#3{\deftpheader2890,95379
+\begingroup\defname {name2891,95427
+\def\deftpx #1 {\deftpx2896,95586
+\def\setref#1{\setref2907,95907
+\def\unnumbsetref#1{\unnumbsetref2912,96021
+\def\appendixsetref#1{\appendixsetref2917,96128
+\def\pxref#1{\pxref2928,96539
+\def\xref#1{\xref2929,96575
+\def\ref#1{\ref2930,96610
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\xrefX[2931,96640
+\def\printedmanual{\printedmanual2932,96683
+\def\printednodename{\printednodename2933,96721
+\def\printednodename{\printednodename2938,96846
+section ``\printednodename'' in \cite{\printedmanual}\printedmanual2953,97479
+\refx{x2956,97557
+\def\dosetq #1#2{\dosetq2964,97777
+\def\internalsetq #1#2{\internalsetq2972,98035
+\def\Ypagenumber{\Ypagenumber2976,98136
+\def\Ytitle{\Ytitle2978,98162
+\def\Ynothing{\Ynothing2980,98189
+\def\Ysectionnumberandtype{\Ysectionnumberandtype2982,98206
+\def\Yappendixletterandtype{\Yappendixletterandtype2991,98522
+\ifnum\secno=0 Appendix\xreftie'char\the\appendixno{no2992,98552
+\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno 
%no.\the\secno2993,98607
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno 
%no.\the\secno.\the\subsecno2995,98711
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno 
%no.\the\secno.\the\subsecno.\the\subsubsecno2997,98782
+  \def\linenumber{\linenumber3008,99121
+\def\refx#1#2{\refx3014,99305
+\def\xrdef #1#2{\xrdef3036,99931
+\def\readauxfile{\readauxfile3039,100016
+\def\supereject{\supereject3109,101797
+\footstrut\parindent=\defaultparindent\hang\textindent{aultparindent\hang\textindent3130,102482
+\def\openindices{\openindices3138,102668
+\newdimen\defaultparindent \defaultparindent = 15ptaultparindent3150,102893
+\parindent = \defaultparindentaultparindent3151,102945
+\def\smallbook{\smallbook3174,103669
+\global\def\Esmallexample{\Esmallexample3191,104096
+\def\afourpaper{\afourpaper3195,104187
+\def\finalout{\finalout3223,104995
+\def\normaldoublequote{\normaldoublequote3234,105256
+\def\normaltilde{\normaltilde3235,105282
+\def\normalcaret{\normalcaret3236,105302
+\def\normalunderscore{\normalunderscore3237,105322
+\def\normalverticalbar{\normalverticalbar3238,105347
+\def\normalless{\normalless3239,105373
+\def\normalgreater{\normalgreater3240,105392
+\def\normalplus{\normalplus3241,105414
+\def\ifusingtt#1#2{\ifusingtt3252,105906
+\def\activedoublequote{\activedoublequote3260,106234
+\def~{~3263,106320
+\def^{^3266,106381
+\def_{_3269,106420
+\def\_{\_3271,106494
+\def\lvvmode{\lvvmode3278,106831
+\def|{|3281,106881
+\def<{<3284,106944
+\def>{>3287,107001
+\def+{+3289,107039
+\def\turnoffactive{\turnoffactive3295,107200
+\global\def={=3306,107486
+\def\normalbackslash{\normalbackslash3320,107868
+
+c-src//c.c,76
+T f(1,0
+}T i;2,14
+void bar(5,69
+int foobar(6,94
+interface_locate(9,131
+
+c.c,1963
+my_printf 135,
+void fatala 138,
+max 141,
+struct bar 143,
+  char z;144,
+  struct foo f;145,
+__attribute__ ((always_inline)) max 147,
+struct foo150,
+  char a;152,
+  int x[x153,
+char stack[stack155,
+struct S 156,
+struct S { short f[f156,
+  int *__ip;__ip159,
+  union wait *__up;__up160,
+} wait_status_ptr_t 161,
+Some_Class  A 162,
+typedef T1 T3 163,
+T3 z 164,
+typedef int more_aligned_int 165,
+struct S  __attribute__ ((vector_size (16))) foo;166,
+int foo 167,
+char *__attribute__((aligned(8))) *f;f168,
+int i 169,
+extern void foobar 170,
+typedef struct cacheLRUEntry_s172,
+  U16 next;174,
+  U16 prev;175,
+__attribute__ ((packed)) cacheLRUEntry_t;177,
+struct foo 178,
+  int x;179,
+  char a,180,
+  char a, b,180,
+  char a, b, c,180,
+  char a, b, c, d;180,
+     f1 183,
+void f2 184,
+int x 188,
+struct foo 189,
+struct foo { int x[x189,
+short array[array190,
+int f193,
+DEAFUN 196,
+XDEFUN 203,
+DEFUN ("x-get-selection-internal", 
Fx_get_selection_internal,x-get-selection-internal206,
+       Fx_get_selection_internal,x-get-selection-internal212,
+      Fy_get_selection_internal,y-get-selection-internal216,
+defun_func1(218,
+DEFUN_func2(220,
+typedef int bool;222,
+bool funcboo 223,
+struct my_struct 226,
+typedef struct my_struct my_typedef;228,
+int bla 229,
+a(234,
+int func1237,
+static struct cca_control init_control 239,
+static tpcmd rbtp 240,
+static byte ring1 241,
+static byte ring2 242,
+request request 243,
+int func2 246,
+  aaa;249,
+  bbb;251,
+struct sss1 252,
+struct sss2253,
+  struct ss3255,
+struct a b;259,
+struct aa *b;b260,
+  **b;b262,
+caccacacca 263,
+a 267,
+  typedef struct aa 269,
+  typedef struct aa {} aaa;269,
+static void inita 271,
+node *lasta lasta272,
+b 273,
+  typedef  int bb;275,
+static void initb 277,
+node *lastb lastb278,
+typedef enum { REG_ENOSYS 279,
+typedef enum { REG_ENOSYS = -1, aa 279,
+typedef enum { REG_ENOSYS = -1, aa } reg_errcode_t;279,
+
+c-src/a/b/b.c,18
+#define this 1,0
+
+../c/c.web,20
+#define questo 34,
+
+y-src/parse.y,738
+#define obstack_chunk_alloc 46,1111
+#define obstack_chunk_free 47,1149
+VOIDSTAR parse_hash;63,1400
+unsigned char fnin[fnin67,1519
+#define YYSTYPE 71,1617
+typedef struct node *YYSTYPE;YYSTYPE72,1648
+YYSTYPE parse_return;73,1678
+char *instr;instr80,1790
+int parse_error 81,1803
+line:line86,1862
+exp:exp94,1975
+exp_list:exp_list262,5642
+range_exp:range_exp268,5740
+range_exp_list:range_exp_list272,5770
+cell:cell278,5888
+yyerror FUN1(285,5935
+make_list FUN2(292,6015
+#define ERROR 303,6215
+yylex FUN0(314,6392
+parse_cell_or_range FUN2(586,11758
+#define CK_ABS_R(670,13200
+#define CK_REL_R(674,13279
+#define CK_ABS_C(679,13408
+#define CK_REL_C(683,13487
+#define MAYBEREL(688,13616
+str_to_col FUN1(846,16817
+
+y-src/parse.c,520
+#define YYBISON 4,64
+# define       NE      6,114
+# define       LE      7,130
+# define       GE      8,146
+# define       NEG     9,162
+# define       L_CELL  10,179
+# define       L_RANGE 11,199
+# define       L_VAR   12,220
+# define       L_CONST 13,239
+# define       L_FN0   14,260
+# define       L_FN1   15,279
+# define       L_FN2   16,298
+# define       L_FN3   17,317
+# define       L_FN4   18,336
+# define       L_FNN   19,355
+# define       L_FN1R  20,374
+# define       L_FN2R  21,394
+# define       L_FN3R  22,414
+# define       L_FN4R  23,434
+# define       L_FNNR  24,454
+# define       L_LE    25,474
+# define       L_NE    26,492
+# define       L_GE    27,510
+
+parse.y,1181
+#define obstack_chunk_alloc 46,
+#define obstack_chunk_free 47,
+VOIDSTAR parse_hash;63,
+unsigned char fnin[fnin67,
+#define YYSTYPE 71,
+typedef struct node *YYSTYPE;YYSTYPE72,
+YYSTYPE parse_return;73,
+char *instr;instr80,
+int parse_error 81,
+#define YYSTYPE 85,
+# define YYDEBUG 88,
+#define        YYFINAL 93,
+#define        YYFLAG  94,
+#define        YYNTBASE        95,
+#define YYTRANSLATE(98,
+static const char yytranslate[yytranslate101,
+static const short yyprhs[yyprhs134,
+static const short yyrhs[yyrhs142,
+static const short yyrline[yyrline171,
+static const char *const yytname[yytname185,
+static const short yyr1[yyr1197,
+static const short yyr2[yyr2207,
+static const short yydefact[yydefact219,
+static const short yydefgoto[yydefgoto237,
+static const short yypact[yypact242,
+static const short yypgoto[yypgoto260,
+#define        YYLAST  266,
+static const short yytable[yytable269,
+static const short yycheck[yycheck330,
+yyerror FUN1(285,
+make_list FUN2(292,
+#define ERROR 303,
+yylex FUN0(314,
+parse_cell_or_range FUN2(586,
+#define CK_ABS_R(670,
+#define CK_REL_R(674,
+#define CK_ABS_C(679,
+#define CK_REL_C(683,
+#define MAYBEREL(688,
+str_to_col FUN1(846,
+
+/usr/share/bison/bison.simple,2168
+# define YYSTD(40,
+# define YYSTD(42,
+#  define YYSTACK_ALLOC 50,
+#  define YYSIZE_T 51,
+#    define YYSTACK_ALLOC 55,
+#    define YYSIZE_T 56,
+#     define YYSTACK_ALLOC 59,
+#  define YYSTACK_FREE(67,
+#   define YYSIZE_T 71,
+#    define YYSIZE_T 75,
+#  define YYSTACK_ALLOC 78,
+#  define YYSTACK_FREE 79,
+union yyalloc83,
+  short yyss;85,
+  YYSTYPE yyvs;86,
+  YYLTYPE yyls;88,
+# define YYSTACK_GAP_MAX 93,
+#  define YYSTACK_BYTES(98,
+#  define YYSTACK_BYTES(102,
+# define YYSTACK_RELOCATE(112,
+# define YYSIZE_T 128,
+# define YYSIZE_T 131,
+#  define YYSIZE_T 136,
+#   define YYSIZE_T 140,
+# define YYSIZE_T 145,
+#define yyerrok        148,
+#define yyclearin      149,
+#define YYEMPTY        150,
+#define YYEOF  151,
+#define YYACCEPT       152,
+#define YYABORT 153,
+#define YYERROR        154,
+#define YYFAIL 158,
+#define YYRECOVERING(159,
+#define YYBACKUP(160,
+#define YYTERROR       177,
+#define YYERRCODE      178,
+# define YYLLOC_DEFAULT(189,
+#   define YYLEX       200,
+#   define YYLEX       202,
+#   define YYLEX       206,
+#   define YYLEX       208,
+# define YYLEX 212,
+#  define YYFPRINTF 225,
+# define YYDPRINTF(228,
+int yydebug;237,
+# define YYDPRINTF(239,
+# define YYINITDEPTH 244,
+# undef YYMAXDEPTH255,
+# define YYMAXDEPTH 259,
+#  define yymemcpy 264,
+yymemcpy 271,
+#   define yystrlen 293,
+yystrlen 298,
+#   define yystpcpy 316,
+yystpcpy 322,
+#  define YYPARSE_PARAM_ARG 351,
+#  define YYPARSE_PARAM_DECL352,
+#  define YYPARSE_PARAM_ARG 354,
+#  define YYPARSE_PARAM_DECL 355,
+# define YYPARSE_PARAM_ARG358,
+# define YYPARSE_PARAM_DECL359,
+#define YY_DECL_NON_LSP_VARIABLES      374,
+# define YY_DECL_VARIABLES     385,
+# define YY_DECL_VARIABLES     391,
+yyparse 403,
+# define YYPOPSTACK 445,
+# define YYPOPSTACK 447,
+# undef YYSTACK_RELOCATE548,
+  *++yyvsp yyvsp746,
+  *++yylsp yylsp748,
+  yyn 755,
+  yystate 757,
+    yystate 761,
+  goto yynewstate;763,
+  goto yyerrlab1;823,
+  yyerrstatus 846,
+  goto yyerrhandle;848,
+  yyn 861,
+  yystate 875,
+  yyn 895,
+  yyn 903,
+  *++yyvsp yyvsp919,
+  *++yylsp yylsp921,
+  yystate 924,
+  goto yynewstate;925,
+  yyresult 932,
+  goto yyreturn;933,
+  yyresult 939,
+  goto yyreturn;940,
+  yyresult 947,
+
+y-src/atest.y,9
+exp    2,3
+
+y-src/cccp.c,303
+#define YYBISON 4,63
+# define       INT     6,113
+# define       CHAR    7,130
+# define       NAME    8,148
+# define       ERROR   9,166
+# define       OR      10,185
+# define       AND     11,201
+# define       EQUAL   12,218
+# define       NOTEQUAL        13,237
+# define       LEQ     14,259
+# define       GEQ     15,276
+# define       LSH     16,293
+# define       RSH     17,310
+# define       UNARY   18,327
+
+cccp.y,2106
+typedef unsigned char U_CHAR;38,
+struct arglist 41,
+  struct arglist *next;next42,
+  U_CHAR *name;name43,
+  int length;44,
+  int argno;45,
+#define NULL 51,
+#define GENERIC_PTR 56,
+#define GENERIC_PTR 58,
+#define NULL_PTR 63,
+int expression_value;68,
+static jmp_buf parse_return_error;70,
+static int keyword_parsing 73,
+#define CHAR_TYPE_SIZE 87,
+#define INT_TYPE_SIZE 91,
+#define LONG_TYPE_SIZE 95,
+#define WCHAR_TYPE_SIZE 99,
+#define possible_sum_sign(104,
+  struct constant 113,
+  struct constant {long value;113,
+  struct constant {long value; int unsignedp;113,
+  struct constant {long value; int unsignedp;} integer;113,
+  struct name 114,
+  struct name {U_CHAR *address;address114,
+  struct name {U_CHAR *address; int length;114,
+  struct name {U_CHAR *address; int length;} name;114,
+  struct arglist *keywords;keywords115,
+  int voidval;116,
+  char *sval;sval117,
+} yystype;118,
+# define YYSTYPE 119,
+# define YYDEBUG 122,
+#define        YYFINAL 127,
+#define        YYFLAG  128,
+#define        YYNTBASE        129,
+#define YYTRANSLATE(132,
+static const char yytranslate[yytranslate135,
+static const short yyprhs[yyprhs167,
+static const short yyrhs[yyrhs174,
+static const short yyrline[yyrline195,
+static const char *const yytname[yytname208,
+static const short yyr1[yyr1219,
+static const short yyr2[yyr2228,
+static const short yydefact[yydefact239,
+static const short yydefgoto[yydefgoto251,
+static const short yypact[yypact256,
+static const short yypgoto[yypgoto268,
+#define        YYLAST  274,
+static const short yytable[yytable277,
+static const short yycheck[yycheck301,
+static char *lexptr;lexptr332,
+parse_number 341,
+struct token 437,
+  char *operator;operator438,
+  int token;439,
+static struct token tokentab2[tokentab2442,
+yylex 459,
+parse_escape 740,
+yyerror 836,
+integer_overflow 844,
+left_shift 851,
+right_shift 873,
+parse_c_expression 893,
+main 923,
+unsigned char is_idchar[is_idchar948,
+unsigned char is_idstart[is_idstart950,
+char is_hor_space[is_hor_space953,
+initialize_random_junk 958,
+error 988,
+warning 993,
+lookup 999,
+
+/usr/share/bison/bison.simple,2168
+# define YYSTD(40,
+# define YYSTD(42,
+#  define YYSTACK_ALLOC 50,
+#  define YYSIZE_T 51,
+#    define YYSTACK_ALLOC 55,
+#    define YYSIZE_T 56,
+#     define YYSTACK_ALLOC 59,
+#  define YYSTACK_FREE(67,
+#   define YYSIZE_T 71,
+#    define YYSIZE_T 75,
+#  define YYSTACK_ALLOC 78,
+#  define YYSTACK_FREE 79,
+union yyalloc83,
+  short yyss;85,
+  YYSTYPE yyvs;86,
+  YYLTYPE yyls;88,
+# define YYSTACK_GAP_MAX 93,
+#  define YYSTACK_BYTES(98,
+#  define YYSTACK_BYTES(102,
+# define YYSTACK_RELOCATE(112,
+# define YYSIZE_T 128,
+# define YYSIZE_T 131,
+#  define YYSIZE_T 136,
+#   define YYSIZE_T 140,
+# define YYSIZE_T 145,
+#define yyerrok        148,
+#define yyclearin      149,
+#define YYEMPTY        150,
+#define YYEOF  151,
+#define YYACCEPT       152,
+#define YYABORT 153,
+#define YYERROR        154,
+#define YYFAIL 158,
+#define YYRECOVERING(159,
+#define YYBACKUP(160,
+#define YYTERROR       177,
+#define YYERRCODE      178,
+# define YYLLOC_DEFAULT(189,
+#   define YYLEX       200,
+#   define YYLEX       202,
+#   define YYLEX       206,
+#   define YYLEX       208,
+# define YYLEX 212,
+#  define YYFPRINTF 225,
+# define YYDPRINTF(228,
+int yydebug;237,
+# define YYDPRINTF(239,
+# define YYINITDEPTH 244,
+# undef YYMAXDEPTH255,
+# define YYMAXDEPTH 259,
+#  define yymemcpy 264,
+yymemcpy 271,
+#   define yystrlen 293,
+yystrlen 298,
+#   define yystpcpy 316,
+yystpcpy 322,
+#  define YYPARSE_PARAM_ARG 351,
+#  define YYPARSE_PARAM_DECL352,
+#  define YYPARSE_PARAM_ARG 354,
+#  define YYPARSE_PARAM_DECL 355,
+# define YYPARSE_PARAM_ARG358,
+# define YYPARSE_PARAM_DECL359,
+#define YY_DECL_NON_LSP_VARIABLES      374,
+# define YY_DECL_VARIABLES     385,
+# define YY_DECL_VARIABLES     391,
+yyparse 403,
+# define YYPOPSTACK 445,
+# define YYPOPSTACK 447,
+# undef YYSTACK_RELOCATE548,
+  *++yyvsp yyvsp746,
+  *++yylsp yylsp748,
+  yyn 755,
+  yystate 757,
+    yystate 761,
+  goto yynewstate;763,
+  goto yyerrlab1;823,
+  yyerrstatus 846,
+  goto yyerrhandle;848,
+  yyn 861,
+  yystate 875,
+  yyn 895,
+  yyn 903,
+  *++yyvsp yyvsp919,
+  *++yylsp yylsp921,
+  yystate 924,
+  goto yynewstate;925,
+  yyresult 932,
+  goto yyreturn;933,
+  yyresult 939,
+  goto yyreturn;940,
+  yyresult 947,
+
+y-src/cccp.y,1696
+typedef unsigned char U_CHAR;38,1201
+struct arglist 41,1301
+  struct arglist *next;next42,1318
+  U_CHAR *name;name43,1342
+  int length;44,1358
+  int argno;45,1372
+#define NULL 51,1468
+#define GENERIC_PTR 56,1578
+#define GENERIC_PTR 58,1611
+#define NULL_PTR 63,1670
+int expression_value;68,1743
+static jmp_buf parse_return_error;70,1766
+static int keyword_parsing 73,1865
+#define CHAR_TYPE_SIZE 87,2162
+#define INT_TYPE_SIZE 91,2229
+#define LONG_TYPE_SIZE 95,2296
+#define WCHAR_TYPE_SIZE 99,2365
+#define possible_sum_sign(104,2556
+  struct constant 112,2733
+  struct constant {long value;112,2733
+  struct constant {long value; int unsignedp;112,2733
+  struct constant {long value; int unsignedp;} integer;112,2733
+  struct name 113,2789
+  struct name {U_CHAR *address;address113,2789
+  struct name {U_CHAR *address; int length;113,2789
+  struct name {U_CHAR *address; int length;} name;113,2789
+  struct arglist *keywords;keywords114,2840
+  int voidval;115,2868
+  char *sval;sval116,2883
+start 143,3226
+exp1   148,3330
+exp    156,3505
+exp    185,4295
+keywords 306,7835
+static char *lexptr;lexptr332,8579
+parse_number 341,8842
+struct token 437,11038
+  char *operator;operator438,11053
+  int token;439,11071
+static struct token tokentab2[tokentab2442,11088
+yylex 459,11367
+parse_escape 740,17718
+yyerror 836,19599
+integer_overflow 844,19690
+left_shift 851,19804
+right_shift 873,20194
+parse_c_expression 893,20732
+main 923,21483
+unsigned char is_idchar[is_idchar948,21901
+unsigned char is_idstart[is_idstart950,21996
+char is_hor_space[is_hor_space953,22160
+initialize_random_junk 958,22259
+error 988,22915
+warning 993,22963
+lookup 999,23033
+
+tex-src/nonewline.tex,0
+
+php-src/sendmail.php,0
+
+c-src/fail.c,0
+
+a-src/empty.zz,0
diff --git a/test/etags/ETAGS.good_4 b/test/etags/ETAGS.good_4
new file mode 100644
index 0000000..4468cdb
--- /dev/null
+++ b/test/etags/ETAGS.good_4
@@ -0,0 +1,5378 @@
+
+Makefile,701
+ADASRC=1,0
+ASRC=2,91
+CSRC=3,139
+CPSRC=7,410
+ELSRC=10,624
+ERLSRC=11,694
+FORTHSRC=12,759
+FSRC=13,809
+HTMLSRC=14,881
+JAVASRC=15,974
+LUASRC=16,1062
+MAKESRC=17,1105
+OBJCSRC=18,1147
+OBJCPPSRC=19,1228
+PASSRC=20,1291
+PERLSRC=21,1333
+PHPSRC=22,1413
+PSSRC=23,1485
+PROLSRC=24,1525
+PYTSRC=25,1587
+TEXSRC=26,1628
+YSRC=27,1707
+SRCS=28,1772
+NONSRCS=32,2024
+ETAGS_PROG=34,2098
+CTAGS_PROG=35,2129
+REGEX=37,2161
+xx=38,2207
+RUN=40,2256
+OPTIONS=42,2262
+ARGS=43,2314
+infiles 45,2332
+check:check47,2394
+ediff%:ediff%55,2697
+cdiff:cdiff58,2798
+ETAGS:ETAGS61,2895
+CTAGS:CTAGS64,2965
+srclist:srclist67,3043
+regexfile:regexfile71,3134
+.PRECIOUS:.PRECIOUS77,3311
+FRC:FRC79,3345
+
+ada-src/etags-test-for.ada,1969
+   type LL_Task_Procedure_Access LL_Task_Procedure_Access/t1,0
+   function Body_RequiredBody_Required/f3,78
+   type Type_Specific_Data Type_Specific_Data/t11,280
+   function "abs"abs/f19,504
+   type Barrier_Function_Pointer Barrier_Function_Pointer/t21,577
+   function "="=/f27,722
+   type usfreelock_ptr usfreelock_ptr/t30,803
+   function p p/f33,891
+   procedure LL_Wrapper LL_Wrapper/p37,1054
+function p p/f39,1094
+package Pkg1 Pkg1/s44,1203
+  type Private_T Private_T/t46,1220
+  package Inner1 Inner1/s48,1250
+    procedure Private_T;Private_T/p49,1270
+  package Inner2 Inner2/s52,1310
+    task Private_T;Private_T/k53,1330
+  type Public_T Public_T/t56,1365
+  procedure Pkg1_Proc1;Pkg1_Proc1/p62,1450
+  procedure Pkg1_Proc2 Pkg1_Proc2/p64,1475
+  function Pkg1_Func1 Pkg1_Func1/f66,1514
+  function Pkg1_Func2 Pkg1_Func2/f68,1553
+  package Pkg1_Pkg1 Pkg1_Pkg1/s71,1622
+    procedure Pkg1_Pkg1_Proc1;Pkg1_Pkg1_Proc1/p72,1645
+  task type Task_Type Task_Type/k75,1694
+  type Private_T Private_T/t82,1786
+package body Pkg1 Pkg1/b89,1882
+  procedure Pkg1_Proc1 Pkg1_Proc1/p91,1904
+  package body Inner1 Inner1/b96,1956
+    procedure Private_T Private_T/p97,1981
+  package body Inner2 Inner2/b103,2054
+    task body Private_T Private_T/b104,2079
+  task body Task_Type Task_Type/b112,2181
+  procedure Pkg1_Proc2 Pkg1_Proc2/p126,2367
+  function Pkg1_Func1 Pkg1_Func1/f132,2445
+  function Pkg1_Func2 Pkg1_Func2/f134,2496
+  package body Pkg1_Pkg1 Pkg1_Pkg1/b140,2596
+package body Pkg1_Pkg1 Pkg1_Pkg1/b146,2663
+  procedure Pkg1_Pkg1_Proc1 Pkg1_Pkg1_Proc1/p147,2689
+function  Pkg1_Func1 Pkg1_Func1/f155,2778
+package Truc Truc/s162,2887
+package Truc.Bidule Truc.Bidule/s166,2929
+  protected Bidule Bidule/t168,2953
+  protected type Machin_T Machin_T/t172,3007
+package body Truc.Bidule Truc.Bidule/b178,3087
+  protected body Bidule Bidule/b179,3115
+  protected Machin_T Machin_T/t186,3207
+
+ada-src/2ataspri.adb,2190
+package body System.Task_Primitives System.Task_Primitives/b64,2603
+   package RTE RTE/s69,2712
+   package TSL TSL/s70,2759
+   function To_void_ptr To_void_ptr/f86,3287
+   function To_TCB_Ptr To_TCB_Ptr/f89,3366
+   function 
pthread_mutexattr_setprotocolpthread_mutexattr_setprotocol/f92,3444
+   function 
pthread_mutexattr_setprio_ceilingpthread_mutexattr_setprio_ceiling/f99,3728
+   procedure Abort_WrapperAbort_Wrapper/p115,4302
+   procedure LL_Wrapper LL_Wrapper/p122,4526
+   procedure Initialize_LL_Tasks Initialize_LL_Tasks/p131,4830
+   function Self Self/f160,5586
+   procedure Initialize_LockInitialize_Lock/p174,5958
+   procedure Finalize_Lock Finalize_Lock/p210,6927
+   procedure Write_Lock Write_Lock/p226,7338
+   procedure Read_Lock Read_Lock/p239,7700
+   procedure Unlock Unlock/p246,7850
+   procedure Initialize_Cond Initialize_Cond/p258,8160
+   procedure Finalize_Cond Finalize_Cond/p286,8979
+   procedure Cond_Wait Cond_Wait/p300,9303
+   procedure Cond_Timed_WaitCond_Timed_Wait/p312,9661
+   procedure Cond_Signal Cond_Signal/p343,10510
+   procedure Set_PrioritySet_Priority/p355,10836
+   procedure Set_Own_Priority Set_Own_Priority/p372,11243
+   function Get_Priority Get_Priority/f385,11598
+   function Get_Own_Priority Get_Own_Priority/f398,12023
+   procedure Create_LL_TaskCreate_LL_Task/p412,12438
+      function To_Start_Addr To_Start_Addr/f426,12873
+   procedure Exit_LL_Task Exit_LL_Task/p491,14995
+   procedure Abort_Task Abort_Task/p500,15158
+   procedure Test_Abort Test_Abort/p518,15716
+   procedure Install_Abort_Handler Install_Abort_Handler/p527,15878
+   procedure Abort_WrapperAbort_Wrapper/p557,16939
+      function Address_To_Call_State Address_To_Call_State/f562,17062
+   procedure Install_Error_Handler Install_Error_Handler/p573,17351
+   procedure LL_Assert LL_Assert/p599,18146
+   procedure LL_Wrapper LL_Wrapper/p608,18299
+   procedure Initialize_TAS_Cell Initialize_TAS_Cell/p630,19010
+   procedure Finalize_TAS_Cell Finalize_TAS_Cell/p635,19129
+   procedure Clear Clear/p640,19236
+   procedure Test_And_Set Test_And_Set/p645,19330
+   function  Is_Set Is_Set/f659,19676
+
+ada-src/2ataspri.ads,2313
+package System.Task_Primitives System.Task_Primitives/s58,3169
+   type LL_Task_Procedure_Access LL_Task_Procedure_Access/t62,3253
+   type Pre_Call_State Pre_Call_State/t64,3331
+   type Task_Storage_Size Task_Storage_Size/t66,3378
+   type Machine_Exceptions Machine_Exceptions/t68,3433
+   type Error_Information Error_Information/t70,3499
+   type Lock Lock/t72,3569
+   type Condition_Variable Condition_Variable/t73,3594
+   type Task_Control_Block Task_Control_Block/t81,3955
+   type TCB_Ptr TCB_Ptr/t89,4241
+   function Address_To_TCB_Ptr Address_To_TCB_Ptr/f93,4333
+   procedure Initialize_LL_Tasks Initialize_LL_Tasks/p96,4425
+   function Self Self/f100,4602
+   procedure Initialize_Lock Initialize_Lock/p103,4707
+   procedure Finalize_Lock Finalize_Lock/p107,4879
+   procedure Write_Lock Write_Lock/p111,5034
+   procedure Read_Lock Read_Lock/p118,5428
+   procedure Unlock Unlock/p128,5995
+   procedure Initialize_Cond Initialize_Cond/p135,6300
+   procedure Finalize_Cond Finalize_Cond/p138,6413
+   procedure Cond_Wait Cond_Wait/p142,6591
+   procedure Cond_Timed_WaitCond_Timed_Wait/p155,7396
+   procedure Cond_Signal Cond_Signal/p164,7812
+   procedure Set_Priority Set_Priority/p169,8040
+   procedure Set_Own_Priority Set_Own_Priority/p173,8200
+   function Get_Priority Get_Priority/f177,8348
+   function Get_Own_Priority Get_Own_Priority/f181,8504
+   procedure Create_LL_TaskCreate_LL_Task/p185,8647
+   procedure Exit_LL_Task;Exit_LL_Task/p198,9282
+   procedure Abort_Task Abort_Task/p203,9516
+   procedure Test_Abort;Test_Abort/p210,9878
+   type Abort_Handler_Pointer Abort_Handler_Pointer/t217,10233
+   procedure Install_Abort_Handler Install_Abort_Handler/p219,10312
+   procedure Install_Error_Handler Install_Error_Handler/p226,10741
+   procedure LL_Assert LL_Assert/p231,10983
+   type Proc Proc/t238,11240
+   type TAS_Cell TAS_Cell/t242,11328
+   procedure Initialize_TAS_Cell Initialize_TAS_Cell/p249,11670
+   procedure Finalize_TAS_Cell Finalize_TAS_Cell/p255,11941
+   procedure Clear Clear/p260,12157
+   procedure Test_And_Set Test_And_Set/p267,12462
+   function  Is_Set Is_Set/f275,12877
+   type Lock Lock/t283,13155
+   type Condition_Variable Condition_Variable/t288,13267
+   type TAS_Cell TAS_Cell/t293,13389
+
+ada-src/waroquiers.ada,1503
+package Pkg1 Pkg1/s3,89
+  type Private_T Private_T/t5,106
+  package Inner1 Inner1/s7,136
+    procedure Private_T;Private_T/p8,156
+  package Inner2 Inner2/s11,196
+    task Private_T;Private_T/k12,216
+  type Public_T Public_T/t15,251
+  procedure Pkg1_Proc1;Pkg1_Proc1/p21,336
+  procedure Pkg1_Proc2 Pkg1_Proc2/p23,361
+  function Pkg1_Func1 Pkg1_Func1/f25,400
+  function Pkg1_Func2 Pkg1_Func2/f27,439
+  package Pkg1_Pkg1 Pkg1_Pkg1/s30,508
+    procedure Pkg1_Pkg1_Proc1;Pkg1_Pkg1_Proc1/p31,531
+  task type Task_Type Task_Type/k34,580
+  type Private_T Private_T/t40,671
+package body Pkg1 Pkg1/b46,766
+  procedure Pkg1_Proc1 Pkg1_Proc1/p48,788
+  package body Inner1 Inner1/b53,840
+    procedure Private_T Private_T/p54,865
+  package body Inner2 Inner2/b60,938
+    task body Private_T Private_T/b61,963
+  task body Task_Type Task_Type/b68,1064
+  procedure Pkg1_Proc2 Pkg1_Proc2/p82,1250
+  function Pkg1_Func1 Pkg1_Func1/f88,1328
+  function Pkg1_Func2 Pkg1_Func2/f90,1379
+  package body Pkg1_Pkg1 Pkg1_Pkg1/b96,1479
+package body Pkg1_Pkg1 Pkg1_Pkg1/b100,1544
+  procedure Pkg1_Pkg1_Proc1 Pkg1_Pkg1_Proc1/p101,1570
+function  Pkg1_Func1 Pkg1_Func1/f107,1657
+package Truc Truc/s112,1764
+package Truc.Bidule Truc.Bidule/s116,1816
+  protected Bidule Bidule/t125,1964
+  protected type Machin_T Machin_T/t131,2046
+package body Truc.Bidule Truc.Bidule/b138,2153
+  protected body Bidule Bidule/b139,2181
+  protected body Machin_T Machin_T/b146,2281
+
+c-src/abbrev.c,2634
+Lisp_Object Vabbrev_table_name_list;42,1416
+Lisp_Object Vglobal_abbrev_table;47,1561
+Lisp_Object Vfundamental_mode_abbrev_table;51,1672
+int abbrevs_changed;55,1773
+int abbrev_all_caps;57,1795
+Lisp_Object Vabbrev_start_location;62,1944
+Lisp_Object Vabbrev_start_location_buffer;65,2033
+Lisp_Object Vlast_abbrev;69,2142
+Lisp_Object Vlast_abbrev_text;74,2311
+int last_abbrev_point;78,2401
+Lisp_Object Vpre_abbrev_expand_hook,82,2474
+Lisp_Object Vpre_abbrev_expand_hook, Qpre_abbrev_expand_hook;82,2474
+DEFUN ("make-abbrev-table", Fmake_abbrev_table,make-abbrev-table84,2538
+DEFUN ("clear-abbrev-table", Fclear_abbrev_table,clear-abbrev-table91,2730
+DEFUN ("define-abbrev", Fdefine_abbrev,define-abbrev106,3111
+DEFUN ("define-global-abbrev", 
Fdefine_global_abbrev,define-global-abbrev148,4430
+DEFUN ("define-mode-abbrev", Fdefine_mode_abbrev,define-mode-abbrev159,4801
+DEFUN ("abbrev-symbol", Fabbrev_symbol,abbrev-symbol173,5269
+DEFUN ("abbrev-expansion", Fabbrev_expansion,abbrev-expansion201,6233
+DEFUN ("expand-abbrev", Fexpand_abbrev,expand-abbrev217,6748
+DEFUN ("unexpand-abbrev", Funexpand_abbrev,unexpand-abbrev388,11669
+write_abbrev 425,12876
+describe_abbrev 444,13311
+DEFUN ("insert-abbrev-table-description", 
Finsert_abbrev_table_description,insert-abbrev-table-description465,13826
+DEFUN ("define-abbrev-table", 
Fdefine_abbrev_table,define-abbrev-table505,14982
+syms_of_abbrev 539,16059
+  DEFVAR_LISP ("abbrev-table-name-list"541,16079
+  DEFVAR_LISP ("global-abbrev-table"547,16341
+  DEFVAR_LISP ("fundamental-mode-abbrev-table"554,16663
+  DEFVAR_LISP ("last-abbrev"560,17005
+  DEFVAR_LISP ("last-abbrev-text"563,17128
+  DEFVAR_INT ("last-abbrev-location"567,17286
+  DEFVAR_LISP ("abbrev-start-location"574,17485
+  DEFVAR_LISP ("abbrev-start-location-buffer"580,17762
+  DEFVAR_PER_BUFFER ("local-abbrev-table"585,18026
+  DEFVAR_BOOL ("abbrevs-changed"588,18169
+  DEFVAR_BOOL ("abbrev-all-caps"593,18372
+  DEFVAR_LISP ("pre-abbrev-expand-hook"597,18528
+  DEFVAR_LISP ("abbrev-table-name-list",\1541,16079
+  DEFVAR_LISP ("global-abbrev-table",\1547,16341
+  DEFVAR_LISP ("fundamental-mode-abbrev-table",\1554,16663
+  DEFVAR_LISP ("last-abbrev",\1560,17005
+  DEFVAR_LISP ("last-abbrev-text",\1563,17128
+  DEFVAR_INT ("last-abbrev-location",\1567,17286
+  DEFVAR_LISP ("abbrev-start-location",\1574,17485
+  DEFVAR_LISP ("abbrev-start-location-buffer",\1580,17762
+  DEFVAR_PER_BUFFER ("local-abbrev-table",\1585,18026
+  DEFVAR_BOOL ("abbrevs-changed",\1588,18169
+  DEFVAR_BOOL ("abbrev-all-caps",\1593,18372
+  DEFVAR_LISP ("pre-abbrev-expand-hook",\1597,18528
+
+c-src/torture.c,197
+(*tag1 tag118,452
+#define notag2 26,553
+(*tag2 tag229,630
+(*tag3 tag339,772
+#define notag4 45,861
+(*tag4 tag448,955
+tag5 57,1081
+tag6 66,1208
+int pp1(74,1317
+pp287,1419
+pp3(100,1518
+
+c-src/getopt.h,147
+#define _GETOPT_H 19,801
+struct option73,2797
+#define        no_argument     89,3124
+#define required_argument      90,3147
+#define optional_argument      91,3175
+
+c-src/etags.c,10045
+char pot_etags_version[pot_etags_version81,3470
+#  undef DEBUG84,3552
+#  define DEBUG 85,3567
+#  define DEBUG 87,3594
+#  define NDEBUG       88,3617
+# define _GNU_SOURCE 94,3705
+# undef MSDOS100,3876
+# undef  WINDOWSNT101,3890
+# define WINDOWSNT102,3909
+# undef MSDOS106,3968
+# define MSDOS 107,3982
+# define MSDOS 110,4032
+# define MAXPATHLEN 115,4111
+# undef HAVE_NTGUI116,4141
+# undef  DOS_NT117,4160
+# define DOS_NT118,4176
+# undef  assert        135,4482
+# define assert(136,4541
+# undef  CTAGS146,4857
+# define CTAGS 147,4872
+# define CTAGS 149,4898
+#define streq(152,4927
+#define strcaseeq(153,4996
+#define strneq(154,5075
+#define strncaseeq(155,5151
+#define CHARS 157,5238
+#define CHAR(158,5278
+#define        iswhite(159,5329
+#define notinname(160,5394
+#define        begtoken(161,5469
+#define        intoken(162,5542
+#define        endtoken(163,5614
+#define ISALNUM(165,5684
+#define ISALPHA(166,5722
+#define ISDIGIT(167,5760
+#define ISLOWER(168,5798
+#define lowcase(170,5837
+#define xnew(179,6015
+#define xrnew(180,6083
+typedef void Lang_function 182,6164
+} compressor;188,6365
+} language;199,6835
+typedef struct fdesc201,6848
+} fdesc;212,7366
+typedef struct node_st214,7376
+} node;225,7894
+} linebuffer;239,8248
+    at_language,245,8344
+    at_regexp,246,8393
+    at_filename,247,8437
+    at_stdin,248,8473
+    at_end     249,8516
+} argument;253,8698
+typedef struct regexp256,8758
+} regexp;268,9325
+static void error 311,10780
+# undef STDIN408,15073
+#define STDIN 411,15095
+static compressor compressors[compressors457,17664
+static const char *Ada_suffixes Ada_suffixes473,17907
+static const char Ada_help 475,17977
+static const char *Asm_suffixes Asm_suffixes493,18580
+static const char Asm_help 504,18976
+static const char *default_C_suffixes default_C_suffixes512,19312
+static const char default_C_help 515,19413
+static const char default_C_help 523,19850
+static const char *Cplusplus_suffixes Cplusplus_suffixes535,20460
+static const char Cplusplus_help 540,20658
+static const char *Cjava_suffixes Cjava_suffixes549,21113
+static char Cjava_help 551,21172
+static const char *Cobol_suffixes Cobol_suffixes556,21337
+static char Cobol_help 558,21402
+static const char *Cstar_suffixes Cstar_suffixes562,21543
+static const char *Erlang_suffixes Erlang_suffixes565,21607
+static const char Erlang_help 567,21673
+const char *Forth_suffixes Forth_suffixes571,21799
+static const char Forth_help 573,21857
+static const char *Fortran_suffixes Fortran_suffixes577,22008
+static const char Fortran_help 579,22085
+static const char *HTML_suffixes HTML_suffixes582,22190
+static const char HTML_help 584,22264
+static const char *Lisp_suffixes Lisp_suffixes589,22452
+static const char Lisp_help 591,22556
+static const char *Lua_suffixes Lua_suffixes598,22871
+static const char Lua_help 600,22934
+static const char *Makefile_filenames Makefile_filenames603,23010
+static const char Makefile_help 605,23133
+static const char *Objc_suffixes Objc_suffixes609,23277
+static const char Objc_help 613,23399
+static const char *Pascal_suffixes Pascal_suffixes619,23714
+static const char Pascal_help 621,23778
+static const char *Perl_suffixes Perl_suffixes626,23966
+static const char *Perl_interpreters Perl_interpreters628,24028
+static const char Perl_help 630,24100
+static const char *PHP_suffixes PHP_suffixes637,24451
+static const char PHP_help 639,24523
+static const char *plain_C_suffixes plain_C_suffixes643,24678
+static const char *PS_suffixes PS_suffixes647,24762
+static const char PS_help 649,24848
+static const char *Prolog_suffixes Prolog_suffixes652,24931
+static const char Prolog_help 654,24993
+static const char *Python_suffixes Python_suffixes658,25107
+static const char Python_help 660,25165
+static const char *Scheme_suffixes Scheme_suffixes665,25347
+static const char Scheme_help 667,25460
+static const char *TeX_suffixes TeX_suffixes672,25683
+static const char TeX_help 674,25781
+static const char *Texinfo_suffixes Texinfo_suffixes686,26316
+static const char Texinfo_help 688,26395
+static const char *Yacc_suffixes Yacc_suffixes691,26492
+static const char Yacc_help 693,26606
+static const char auto_help 699,26856
+static const char none_help 703,27020
+static const char no_lang_help 707,27143
+static language lang_names 718,27355
+print_language_names 753,29532
+# define EMACS_NAME 786,30755
+# define VERSION 789,30811
+print_version 792,30869
+# define PRINT_UNDOCUMENTED_OPTIONS_HELP 804,31173
+print_help 808,31250
+main 981,37438
+get_compressor_from_suffix 1319,46217
+get_language_from_langname 1355,47158
+get_language_from_interpreter 1377,47545
+get_language_from_filename 1399,47976
+process_file_name 1433,48834
+process_file 1555,51665
+init 1632,54150
+find_entries 1656,54901
+make_tag 1814,59707
+pfnote 1856,60942
+free_tree 1917,62744
+free_fdesc 1935,63029
+add_node 1955,63472
+invalidate_nodes 2035,65537
+static int number_len 2068,66193
+total_size_of_entries 2087,66694
+put_entries 2107,67154
+#define C_EXT  2193,68995
+#define C_PLAIN 2194,69037
+#define C_PLPL 2195,69070
+#define C_STAR 2196,69104
+#define C_JAVA 2197,69137
+#define C_AUTO 2198,69172
+#define YACC   2199,69242
+enum sym_type2204,69312
+  st_none,2206,69328
+  st_C_objprot,2207,69339
+  st_C_objprot, st_C_objimpl,2207,69339
+  st_C_objprot, st_C_objimpl, st_C_objend,2207,69339
+  st_C_gnumacro,2208,69382
+  st_C_ignore,2209,69399
+  st_C_ignore, st_C_attribute,2209,69399
+  st_C_javastruct,2210,69430
+  st_C_operator,2211,69449
+  st_C_class,2212,69466
+  st_C_class, st_C_template,2212,69466
+  st_C_struct,2213,69495
+  st_C_struct, st_C_extern,2213,69495
+  st_C_struct, st_C_extern, st_C_enum,2213,69495
+  st_C_struct, st_C_extern, st_C_enum, st_C_define,2213,69495
+  st_C_struct, st_C_extern, st_C_enum, st_C_define, st_C_typedef2213,69495
+struct C_stab_entry 2271,71278
+hash 2275,71409
+in_word_set 2321,72937
+      TOTAL_KEYWORDS 2325,73018
+      MIN_WORD_LENGTH 2326,73045
+      MAX_WORD_LENGTH 2327,73072
+      MIN_HASH_VALUE 2328,73100
+      MAX_HASH_VALUE 2329,73126
+C_symtype 2387,74985
+static bool inattribute;2400,75234
+  fvnone,2408,75435
+  fdefunkey,2409,75466
+  fdefunname,2410,75512
+  foperator,2411,75556
+  fvnameseen,2412,75613
+  fstartlist,2413,75666
+  finlist,2414,75722
+  flistseen,2415,75765
+  fignore,2416,75813
+  vignore      2417,75856
+} fvdef;2418,75901
+static bool fvextern;2420,75911
+  tnone,2428,76089
+  tkeyseen,2429,76119
+  ttypeseen,2430,76160
+  tinbody,2431,76199
+  tend,2432,76238
+  tignore      2433,76279
+} typdef;2434,76320
+  snone,2443,76499
+  skeyseen,2445,76575
+  stagseen,2446,76620
+  scolonseen   2447,76661
+} structdef;2448,76715
+static const char *objtag objtag2453,76809
+  dnone,2460,76942
+  dsharpseen,2461,76972
+  ddefineseen,2462,77025
+  dignorerest  2463,77070
+} definedef;2464,77112
+  onone,2472,77267
+  oprotocol,2473,77297
+  oimplementation,2474,77347
+  otagseen,2475,77395
+  oparenseen,2476,77431
+  ocatseen,2477,77486
+  oinbody,2478,77525
+  omethodsign,2479,77568
+  omethodtag,2480,77626
+  omethodcolon,2481,77666
+  omethodparm,2482,77709
+  oignore      2483,77755
+} objdef;2484,77787
+static struct tok2491,77944
+} token;2508,78626
+} cstack;2523,79136
+#define nestlev        2525,79264
+#define instruct       2527,79369
+pushclass_above 2531,79489
+popclass_above 2550,79948
+write_classname 2564,80162
+consider_token 2613,81341
+} lbs[lbs2924,88532
+#define current_lb_is_new 2926,88543
+#define switch_line_buffers(2927,88588
+#define curlb 2929,88641
+#define newlb 2930,88672
+#define curlinepos 2931,88703
+#define newlinepos 2932,88744
+#define plainc 2934,88786
+#define cplpl 2935,88830
+#define cjava 2936,88861
+#define CNL_SAVE_DEFINEDEF(2938,88905
+#define CNL(2947,89117
+make_C_tag 2960,89375
+C_entries 2986,90194
+default_C_entries 3833,110156
+plain_C_entries 3840,110276
+Cplusplus_entries 3847,110364
+Cjava_entries 3854,110460
+Cstar_entries 3861,110550
+Yacc_entries 3868,110642
+#define LOOP_ON_INPUT_LINES(3875,110720
+#define LOOKING_AT(3884,111056
+#define LOOKING_AT_NOCASE(3891,111461
+just_read_file 3901,111861
+F_takeprec 3914,112039
+F_getit 3937,112366
+Fortran_functions 3961,112840
+Ada_getit 4052,114669
+Ada_funcs 4115,116044
+Asm_labels 4228,118582
+Perl_functions 4261,119549
+Python_functions 4357,122057
+PHP_functions 4387,122684
+Cobol_paragraphs 4466,124471
+Makefile_targets 4494,125029
+Pascal_functions 4529,125950
+L_getit 4709,130318
+Lisp_functions 4725,130664
+Lua_functions 4785,131850
+PS_functions 4811,132385
+Forth_words 4841,133053
+Scheme_functions 4877,134092
+static linebuffer *TEX_toktab TEX_toktab4908,134781
+static const char *TEX_defenv TEX_defenv4912,134974
+static char TEX_esc 4920,135261
+static char TEX_opgrp 4921,135289
+static char TEX_clgrp 4922,135318
+TeX_commands 4928,135395
+#define TEX_LESC 4986,136652
+#define TEX_SESC 4987,136674
+TEX_mode 4992,136804
+TEX_decode_env 5026,137509
+Texinfo_nodes 5071,138554
+HTML_labels 5094,139013
+Prolog_functions 5219,142347
+prolog_skip_comment 5255,143128
+prolog_pr 5281,143736
+prolog_atom 5319,144628
+Erlang_functions 5379,145666
+erlang_func 5438,146965
+erlang_attribute 5476,147642
+erlang_atom 5496,148061
+scan_separators 5534,149080
+analyze_regex 5586,150460
+add_regex 5654,152050
+substitute 5767,154797
+free_regexps 5814,155837
+regex_tag_multiline 5836,156291
+nocase_tail 5913,158263
+get_tag 5928,158519
+readline_internal 5959,159455
+readline 6037,161296
+savestr 6230,167243
+savenstr 6240,167473
+skip_spaces 6249,167679
+skip_non_spaces 6258,167833
+skip_name 6267,167983
+fatal 6277,168156
+pfatal 6284,168253
+suggest_asking_for_help 6291,168332
+error 6300,168554
+concat 6313,168846
+etags_getcwd 6329,169259
+relative_filename 6350,169725
+absolute_filename 6389,170751
+absolute_dirname 6453,172416
+filename_is_absolute 6472,172845
+canonicalize_filename 6484,173096
+# define ISUPPER(6491,173235
+linebuffer_init 6514,173656
+linebuffer_setlen 6524,173887
+xmalloc 6536,174148
+xrealloc 6545,174314
+
+c-src/exit.c,47
+  } __libc_atexit;30,1011
+DEFUN(exit,38,1252
+
+c-src/exit.strange_suffix,47
+  } __libc_atexit;30,1011
+DEFUN(exit,38,1252
+
+c-src/sysdep.h,491
+#define        ENTRY(21,865
+#define        PSEUDO(26,972
+    movl $SYS_##syscall_nam$SYS_##syscall_na31,1132
+    movl $SYS_##syscall_name, %eax;eax31,1132
+    int $0x80;32,1180
+    test %eax,eax33,1210
+    test %eax, %eax;eax33,1210
+    jl syscall_error;34,1245
+#define        XCHG_0  47,1562
+#define        XCHG_1  48,1606
+#define        XCHG_2  49,1648
+#define        XCHG_3  50,1691
+#define        XCHG_4  51,1734
+#define        XCHG_5  52,1777
+#define        r0      54,1821
+#define        r1      55,1875
+#define scratch 56,1932
+#define MOVE(57,2001
+
+c-src/tab.c,196
+static int             count_words(15,263
+static char            *get_word(get_word35,553
+void                   tab_free(59,966
+char                   **tab_fill(tab_fill70,1129
+int                    tab_delete_first(91,1638
+int                    tab_count_words(103,1820
+
+c-src/dostorture.c,197
+(*tag1 tag118,451
+#define notag2 26,552
+(*tag2 tag229,629
+(*tag3 tag339,771
+#define notag4 45,860
+(*tag4 tag448,954
+tag5 57,1080
+tag6 66,1207
+int pp1(74,1316
+pp287,1418
+pp3(100,1517
+
+c-src/emacs/src/gmalloc.c,3539
+#define USE_PTHREAD25,1002
+#undef get_current_dir_name33,1126
+#undef malloc64,2110
+#undef realloc65,2124
+#undef calloc66,2139
+#undef free67,2153
+#define malloc 68,2165
+#define realloc 69,2188
+#define calloc 70,2213
+#define aligned_alloc 71,2236
+#define free 72,2273
+#define DUMPED 80,2472
+#define ALLOCATED_BEFORE_DUMPING(81,2507
+extern void *malloc malloc94,2718
+#define INT_BIT        124,3934
+#define BLOCKLOG       125,3977
+#define BLOCKSIZE      126,4018
+#define BLOCKIFY(127,4052
+#define HEAP   131,4215
+#define FINAL_FREE_BLOCKS      135,4391
+  } malloc_info;167,5388
+#define BLOCK(176,5620
+#define ADDRESS(177,5682
+struct list186,5939
+struct alignlist196,6153
+#define LOCK(223,7064
+#define UNLOCK(228,7195
+#define LOCK_ALIGNED_BLOCKS(233,7329
+#define UNLOCK_ALIGNED_BLOCKS(238,7484
+#define LOCK(244,7649
+#define UNLOCK(245,7664
+#define LOCK_ALIGNED_BLOCKS(246,7681
+#define UNLOCK_ALIGNED_BLOCKS(247,7711
+enum mcheck_status283,9092
+    MCHECK_DISABLED 285,9115
+    MCHECK_OK,286,9187
+    MCHECK_FREE,287,9226
+    MCHECK_HEAD,288,9270
+    MCHECK_TAIL        289,9334
+struct mstats308,10153
+char *_heapbase;_heapbase355,11829
+malloc_info *_heapinfo;_heapinfo358,11927
+static size_t heapsize;361,11983
+size_t _heapindex;364,12047
+size_t _heaplimit;367,12109
+struct list _fraghead[_fraghead370,12171
+size_t _chunks_used;373,12229
+size_t _bytes_used;374,12250
+size_t _chunks_free;375,12270
+size_t _bytes_free;376,12291
+int __malloc_initialized;379,12340
+size_t __malloc_extra_blocks;381,12367
+static int state_protected_p;400,12912
+static size_t last_state_size;401,12942
+static malloc_info *last_heapinfo;last_heapinfo402,12973
+protect_malloc_state 405,13014
+#define PROTECT_MALLOC_STATE(426,13627
+#define PROTECT_MALLOC_STATE(429,13697
+align 435,13794
+get_contiguous_space 466,14616
+register_heapinfo 497,15325
+pthread_mutex_t _malloc_mutex 517,15879
+pthread_mutex_t _aligned_blocks_mutex 518,15938
+int _malloc_thread_enabled_p;519,16005
+malloc_atfork_handler_prepare 522,16048
+malloc_atfork_handler_parent 529,16139
+malloc_atfork_handler_child 536,16233
+malloc_enable_thread 544,16375
+malloc_initialize_1 563,16961
+__malloc_initialize 594,17793
+static int morecore_recursing;604,17926
+morecore_nolock 609,18066
+_malloc_internal_nolock 722,21584
+_malloc_internal 920,28102
+malloc 932,28247
+_malloc 961,29140
+_free 967,29196
+_realloc 973,29240
+struct alignlist *_aligned_blocks _aligned_blocks1004,30345
+_free_internal_nolock 1009,30474
+_free_internal 1255,38476
+free 1265,38603
+weak_alias 1277,38799
+#define min(1306,39813
+_realloc_internal_nolock 1319,40309
+_realloc_internal 1435,43563
+realloc 1447,43726
+calloc 1478,44894
+#define        __sbrk  1513,46042
+__default_morecore 1525,46511
+aligned_alloc 1557,47522
+memalign 1647,49704
+posix_memalign 1656,49909
+static size_t pagesize;1703,51317
+valloc 1706,51349
+#undef malloc1715,51490
+#undef realloc1716,51504
+#undef calloc1717,51519
+#undef aligned_alloc1718,51533
+#undef free1719,51554
+hybrid_malloc 1736,52083
+hybrid_calloc 1744,52188
+hybrid_free 1752,52319
+hybrid_aligned_alloc 1765,52626
+hybrid_realloc 1780,52984
+hybrid_get_current_dir_name 1811,53797
+#define MAGICWORD      1854,55206
+#define MAGICFREE      1855,55261
+#define MAGICBYTE      1856,55316
+#define MALLOCFLOOD    1857,55348
+#define FREEFLOOD      1858,55382
+struct hdr1860,55415
+checkhdr 1867,55581
+freehook 1891,56022
+mallochook 1927,56804
+reallochook 1944,57143
+mabort 1978,57901
+static int mcheck_used 2012,58586
+mcheck 2015,58619
+mprobe 2035,59138
+
+c-src/emacs/src/regex.h,3761
+#define _REGEX_H 21,836
+typedef unsigned long reg_syntax_t;43,1577
+#define RE_BACKSLASH_ESCAPE_IN_LISTS 47,1749
+#define RE_BK_PLUS_QM 52,1969
+#define RE_CHAR_CLASSES 58,2298
+#define RE_CONTEXT_INDEP_ANCHORS 72,3032
+#define RE_CONTEXT_INDEP_OPS 80,3458
+#define RE_CONTEXT_INVALID_OPS 84,3658
+#define RE_DOT_NEWLINE 88,3801
+#define RE_DOT_NOT_NULL 92,3937
+#define RE_HAT_LISTS_NOT_NEWLINE 96,4082
+#define RE_INTERVALS 101,4292
+#define RE_LIMITED_OPS 105,4441
+#define RE_NEWLINE_ALT 109,4583
+#define RE_NO_BK_BRACES 114,4773
+#define RE_NO_BK_PARENS 118,4964
+#define RE_NO_BK_REFS 122,5120
+#define RE_NO_BK_VBAR 126,5316
+#define RE_NO_EMPTY_RANGES 132,5610
+#define RE_UNMATCHED_RIGHT_PAREN_ORD 136,5766
+#define RE_NO_POSIX_BACKTRACKING 140,5937
+#define RE_NO_GNU_OPS 144,6133
+#define RE_FRUGAL 147,6253
+#define RE_SHY_GROUPS 150,6360
+#define RE_NO_NEWLINE_ANCHOR 153,6468
+#define RE_DEBUG 161,6884
+#define RE_SYNTAX_EMACS        183,7684
+#define RE_SYNTAX_AWK  186,7780
+#define RE_SYNTAX_GNU_AWK      193,8084
+#define RE_SYNTAX_POSIX_AWK 197,8255
+#define RE_SYNTAX_GREP 201,8393
+#define RE_SYNTAX_EGREP        206,8549
+#define RE_SYNTAX_POSIX_EGREP  212,8765
+#define RE_SYNTAX_ED 216,8910
+#define RE_SYNTAX_SED 218,8954
+#define _RE_SYNTAX_POSIX_COMMON        221,9072
+#define RE_SYNTAX_POSIX_BASIC  225,9215
+#define RE_SYNTAX_POSIX_MINIMAL_BASIC  231,9508
+#define RE_SYNTAX_POSIX_EXTENDED       234,9598
+#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED       242,9967
+# undef RE_DUP_MAX253,10454
+#define RE_DUP_MAX 256,10540
+#define REG_EXTENDED 263,10762
+#define REG_ICASE 267,10886
+#define REG_NEWLINE 272,11070
+#define REG_NOSUB 276,11248
+#define REG_NOTBOL 286,11614
+#define REG_NOTEOL 289,11688
+  REG_ENOSYS 297,11859
+  REG_NOERROR 300,11941
+  REG_NOMATCH,301,11976
+  REG_BADPAT,305,12123
+  REG_ECOLLATE,306,12162
+  REG_ECTYPE,307,12203
+  REG_EESCAPE,308,12255
+  REG_ESUBREG,309,12298
+  REG_EBRACK,310,12345
+  REG_EPAREN,311,12391
+  REG_EBRACE,312,12436
+  REG_BADBR,313,12472
+  REG_ERANGE,314,12519
+  REG_ESPACE,315,12560
+  REG_BADRPT,316,12601
+  REG_EEND,319,12693
+  REG_ESIZE,320,12728
+  REG_ERPAREN,321,12790
+  REG_ERANGEX  322,12859
+} reg_errcode_t;323,12911
+# define RE_TRANSLATE_TYPE 332,13273
+struct re_pattern_buffer335,13315
+#define REGS_UNALLOCATED 376,14889
+#define REGS_REALLOCATE 377,14916
+#define REGS_FIXED 378,14942
+typedef struct re_pattern_buffer regex_t;416,16098
+typedef ssize_t regoff_t;423,16492
+struct re_registers428,16652
+# define RE_NREGS 440,16942
+} regmatch_t;451,17317
+#  define _Restrict_ 540,20886
+#  define _Restrict_ 542,20979
+#  define _Restrict_544,21018
+#  define _Restrict_arr_ 555,21418
+#  define _Restrict_arr_557,21461
+#  define CHAR_CLASS_MAX_LENGTH 593,22470
+#  define CHAR_CLASS_MAX_LENGTH 597,22648
+typedef wctype_t re_wctype_t;599,22692
+typedef wchar_t re_wchar_t;600,22722
+# define re_wctype 601,22750
+# define re_iswctype 602,22776
+# define re_wctype_to_bit(603,22806
+# define CHAR_CLASS_MAX_LENGTH 605,22844
+# define btowc(606,22906
+typedef enum { RECC_ERROR 609,22953
+              RECC_ALNUM,610,22984
+              RECC_ALNUM, RECC_ALPHA,610,22984
+              RECC_ALNUM, RECC_ALPHA, RECC_WORD,610,22984
+              RECC_GRAPH,611,23027
+              RECC_GRAPH, RECC_PRINT,611,23027
+              RECC_LOWER,612,23059
+              RECC_LOWER, RECC_UPPER,612,23059
+              RECC_PUNCT,613,23091
+              RECC_PUNCT, RECC_CNTRL,613,23091
+              RECC_DIGIT,614,23123
+              RECC_DIGIT, RECC_XDIGIT,614,23123
+              RECC_BLANK,615,23156
+              RECC_BLANK, RECC_SPACE,615,23156
+              RECC_MULTIBYTE,616,23188
+              RECC_MULTIBYTE, RECC_NONASCII,616,23188
+              RECC_ASCII,617,23227
+              RECC_ASCII, RECC_UNIBYTE617,23227
+} re_wctype_t;618,23260
+typedef int re_wchar_t;623,23387
+
+c-src/emacs/src/keyboard.c,20957
+volatile int interrupt_input_blocked;76,1808
+volatile bool pending_signals;80,1944
+#define KBD_BUFFER_SIZE 82,1976
+KBOARD *initial_kboard;initial_kboard84,2006
+KBOARD *current_kboard;current_kboard85,2030
+static KBOARD *all_kboards;all_kboards86,2054
+static bool single_kboard;89,2154
+#define NUM_RECENT_KEYS 91,2182
+static int recent_keys_index;94,2269
+static int total_keys;97,2357
+static Lisp_Object recent_keys;100,2443
+Lisp_Object this_command_keys;107,2777
+ptrdiff_t this_command_key_count;108,2808
+static bool this_command_key_count_reset;112,2922
+static Lisp_Object raw_keybuf;116,3074
+static int raw_keybuf_count;117,3105
+#define GROW_RAW_KEYBUF        119,3135
+static ptrdiff_t this_single_command_key_start;125,3350
+static ptrdiff_t before_command_key_count;129,3498
+static ptrdiff_t before_command_echo_length;130,3541
+sigjmp_buf return_to_command_loop;135,3677
+static Lisp_Object recover_top_level_message;138,3791
+static Lisp_Object regular_top_level_message;143,3930
+static sys_jmp_buf getcjmp;147,4031
+bool waiting_for_input;150,4095
+static bool echoing;154,4186
+static struct kboard 
*ok_to_echo_at_next_pause;ok_to_echo_at_next_pause159,4328
+struct kboard *echo_kboard;echo_kboard166,4632
+Lisp_Object echo_message_buffer;171,4744
+bool immediate_quit;174,4837
+int quit_char;192,5623
+EMACS_INT command_loop_level;195,5680
+Lisp_Object unread_switch_frame;204,6108
+static ptrdiff_t last_non_minibuf_size;207,6216
+uintmax_t num_input_events;210,6334
+static EMACS_INT last_auto_save;214,6428
+static ptrdiff_t last_point_position;217,6523
+Lisp_Object internal_last_event_frame;228,7028
+static Lisp_Object read_key_sequence_cmd;232,7168
+static Lisp_Object read_key_sequence_remapped;233,7210
+static FILE *dribble;dribble236,7310
+bool input_pending;239,7368
+static bool input_was_pending;287,10022
+static struct input_event kbd_buffer[kbd_buffer291,10107
+static struct input_event *kbd_fetch_ptr;kbd_fetch_ptr297,10386
+static struct input_event * volatile kbd_store_ptr;302,10601
+unsigned timers_run;320,11296
+struct timespec 
*input_available_clear_time;input_available_clear_time324,11408
+bool interrupt_input;328,11573
+bool interrupts_deferred;331,11671
+static struct timespec timer_idleness_start_time;335,11746
+static struct timespec timer_last_idleness_start_time;340,11916
+#define READABLE_EVENTS_DO_TIMERS_NOW  346,12046
+#define READABLE_EVENTS_FILTER_EVENTS  347,12094
+#define READABLE_EVENTS_IGNORE_SQUEEZABLES     348,12142
+kset_echo_string 392,14088
+kset_kbd_queue 397,14184
+kset_keyboard_translate_table 402,14276
+kset_last_prefix_arg 407,14399
+kset_last_repeatable_command 412,14504
+kset_local_function_key_map 417,14625
+kset_overriding_terminal_local_map 422,14744
+kset_real_last_command 427,14877
+kset_system_key_syms 432,14986
+echo_add_key 443,15249
+echo_char 527,17527
+echo_dash 541,17813
+echo_now 586,19140
+cancel_echoing 635,20614
+echo_length 648,20922
+echo_truncate 660,21253
+add_command_key 672,21582
+recursive_edit_1 697,22406
+record_auto_save 742,23848
+force_auto_save_soon 751,24016
+DEFUN ("recursive-edit", Frecursive_edit,recursive-edit759,24137
+recursive_edit_unwind 804,25747
+any_kboard_state 817,26013
+single_kboard_state 838,26665
+not_single_kboard_state 848,26803
+struct kboard_stack858,27065
+static struct kboard_stack *kboard_stack;kboard_stack864,27138
+push_kboard 867,27186
+pop_kboard 879,27375
+temporarily_switch_to_single_kboard 914,28263
+record_single_kboard_state 943,29437
+restore_kboard_configuration 952,29621
+cmd_error 970,30077
+cmd_error_internal 1024,31510
+DEFUN ("command-error-default-function", 
Fcommand_error_default_function,command-error-default-function1043,32030
+command_loop 1094,33916
+command_loop_2 1134,35135
+top_level_2 1146,35339
+top_level_1 1152,35417
+DEFUN ("top-level", Ftop_level,top-level1164,35787
+user_error 1183,36288
+DEFUN ("exit-recursive-edit", 
Fexit_recursive_edit,exit-recursive-edit1189,36429
+DEFUN ("abort-recursive-edit", 
Fabort_recursive_edit,abort-recursive-edit1201,36819
+tracking_off 1216,37281
+DEFUN ("internal--track-mouse", Ftrack_mouse,track-mouse1234,37816
+bool ignore_mouse_drag_p;1256,38392
+some_mouse_moved 1259,38441
+Lisp_Object last_undo_boundary;1287,39032
+command_loop_1 1294,39273
+read_menu_command 1649,50889
+adjust_point_for_property 1678,51617
+safe_run_hooks_1 1831,57339
+safe_run_hooks_error 1841,57569
+safe_run_hook_funcall 1878,58576
+safe_run_hooks 1893,59058
+int poll_suppress_count;1908,59397
+static struct atimer *poll_timer;poll_timer1915,59487
+poll_for_input_1 1919,59589
+poll_for_input 1930,59789
+start_polling 1942,60053
+input_polling_used 1979,61091
+stop_polling 1994,61390
+set_poll_suppress_count 2009,61759
+bind_polling_period 2029,62141
+make_ctrl_char 2048,62492
+show_help_echo 2113,64455
+static Lisp_Object help_form_saved_window_configs;2156,65638
+read_char_help_form_unwind 2158,65701
+#define STOP_POLLING   2166,65959
+#define RESUME_POLLING 2170,66084
+read_event_from_main_queue 2175,66229
+read_decoded_event_from_main_queue 2249,68417
+#define MAX_ENCODED_BYTES 2254,68664
+echo_keystrokes_p 2342,71556
+read_char 2376,72848
+record_menu_key 3225,98949
+help_char_p 3258,99674
+record_char 3273,99953
+save_getcjmp 3412,104235
+restore_getcjmp 3418,104326
+readable_events 3430,104697
+int stop_character EXTERNALLY_VISIBLE;3497,106437
+event_to_kboard 3500,106493
+kbd_buffer_nr_stored 3522,107142
+kbd_buffer_store_event 3534,107483
+kbd_buffer_store_event_hold 3550,108025
+kbd_buffer_unget_event 3684,111617
+#define INPUT_EVENT_POS_MAX 3698,112018
+#define INPUT_EVENT_POS_MIN 3701,112147
+position_to_Time 3706,112287
+Time_to_position 3716,112514
+gen_help_event 3738,113171
+kbd_buffer_store_help_event 3756,113611
+discard_mouse_events 3773,113976
+kbd_buffer_events_waiting 3803,114711
+clear_event 3823,115068
+kbd_buffer_get_event 3836,115408
+process_special_events 4258,127881
+swallow_events 4322,129705
+timer_start_idle 4339,130098
+timer_stop_idle 4355,130576
+timer_resume_idle 4363,130720
+struct input_event last_timer_event EXTERNALLY_VISIBLE;4372,130912
+Lisp_Object pending_funcalls;4377,131172
+decode_timer 4381,131293
+timer_check_2 4414,132246
+timer_check 4572,136817
+DEFUN ("current-idle-time", Fcurrent_idle_time,current-idle-time4607,137662
+static Lisp_Object accent_key_syms;4625,138239
+static Lisp_Object func_key_syms;4626,138275
+static Lisp_Object mouse_syms;4627,138309
+static Lisp_Object wheel_syms;4628,138340
+static Lisp_Object drag_n_drop_syms;4629,138371
+static const int lispy_accent_codes[lispy_accent_codes4634,138516
+static const char *const lispy_accent_keys[lispy_accent_keys4741,139878
+#define FUNCTION_KEY_OFFSET 4766,140314
+const char *const lispy_function_keys[lispy_function_keys4768,140347
+static const char *const 
lispy_multimedia_keys[lispy_multimedia_keys4962,148901
+static const char *const lispy_kana_keys[lispy_kana_keys5026,150135
+#define FUNCTION_KEY_OFFSET 5061,151751
+static const char *const lispy_function_keys[lispy_function_keys5065,151894
+#define ISO_FUNCTION_KEY_OFFSET 5149,154429
+static const char *const 
iso_lispy_function_keys[iso_lispy_function_keys5151,154469
+static Lisp_Object Vlispy_mouse_stem;5172,155328
+static const char *const lispy_wheel_names[lispy_wheel_names5174,155367
+static const char *const 
lispy_drag_n_drop_names[lispy_drag_n_drop_names5181,155619
+static short const scroll_bar_parts[scroll_bar_parts5189,155885
+static Lisp_Object button_down_location;5210,156910
+static int last_mouse_button;5215,157065
+static int last_mouse_x;5216,157095
+static int last_mouse_y;5217,157120
+static Time button_down_time;5218,157145
+static int double_click_count;5222,157229
+make_lispy_position 5228,157390
+toolkit_menubar_in_use 5456,163953
+make_scroll_bar_position 5469,164321
+make_lispy_event 5485,164967
+make_lispy_movement 6104,183531
+make_lispy_switch_frame 6131,184262
+make_lispy_focus_in 6137,184369
+make_lispy_focus_out 6145,184495
+parse_modifiers_uncached 6163,184945
+#define SINGLE_LETTER_MOD(6185,185465
+#undef SINGLE_LETTER_MOD6212,185906
+#define MULTI_LETTER_MOD(6214,185932
+#undef MULTI_LETTER_MOD6231,186400
+apply_modifiers_uncached 6273,187574
+static const char *const modifier_names[modifier_names6319,189193
+#define NUM_MOD_NAMES 6325,189399
+static Lisp_Object modifier_symbols;6327,189449
+lispy_modifier_list 6331,189586
+#define KEY_TO_CHAR(6353,190252
+parse_modifiers 6356,190328
+DEFUN ("internal-event-symbol-parse-modifiers", 
Fevent_symbol_parse_modifiers,event-symbol-parse-modifiers6399,191517
+apply_modifiers 6422,192391
+reorder_modifiers 6491,194720
+modify_event_symbol 6536,196528
+DEFUN ("event-convert-list", 
Fevent_convert_list,event-convert-list6628,199244
+parse_solitary_modifier 6695,201135
+#define SINGLE_LETTER_MOD(6701,201258
+#define MULTI_LETTER_MOD(6705,201343
+#undef SINGLE_LETTER_MOD6763,202641
+#undef MULTI_LETTER_MOD6764,202666
+lucid_event_type_list_p 6775,202889
+get_input_pending 6814,203960
+record_asynch_buffer_change 6834,204579
+gobble_input 6872,205702
+tty_read_avail_input 6967,208310
+handle_async_input 7149,214039
+process_pending_signals 7165,214359
+unblock_input_to 7177,214645
+unblock_input 7200,215277
+totally_unblock_input 7209,215445
+handle_input_available_signal 7217,215529
+deliver_input_available_signal 7226,215700
+struct user_signal_info7235,215865
+static struct user_signal_info *user_signals user_signals7250,216090
+add_user_signal 7253,216149
+handle_user_signal 7275,216598
+deliver_user_signal 7316,217558
+find_user_signal_name 7322,217659
+store_user_signal_events 7334,217841
+static Lisp_Object menu_bar_one_keymap_changed_items;7363,218416
+static Lisp_Object menu_bar_items_vector;7368,218630
+static int menu_bar_items_index;7369,218672
+static const char *separator_names[separator_names7372,218707
+menu_separator_name_p 7393,219148
+menu_bar_items 7426,219852
+Lisp_Object item_properties;7568,224603
+menu_bar_item 7571,224645
+menu_item_eval_property_1 7647,227175
+eval_dyn 7658,227465
+menu_item_eval_property 7666,227675
+parse_menu_item 7686,228341
+static Lisp_Object tool_bar_items_vector;7965,236336
+static Lisp_Object tool_bar_item_properties;7970,236510
+static int ntool_bar_items;7974,236606
+tool_bar_items 7990,237083
+process_tool_bar_item 8075,239892
+#define PROP(8112,240969
+set_prop 8114,241038
+parse_tool_bar_item 8167,242453
+#undef PROP8379,248844
+init_tool_bar_items 8387,248969
+append_tool_bar_item 8401,249261
+read_char_x_menu_prompt 8443,250771
+read_char_minibuf_menu_prompt 8503,252445
+#define PUSH_C_STR(8527,253014
+follow_key 8726,258553
+active_maps 8733,258695
+typedef struct keyremap8742,259021
+} keyremap;8754,259464
+access_keymap_keyremap 8764,259808
+keyremap_step 8811,261450
+test_undefined 8867,262934
+read_key_sequence 8916,264861
+read_key_sequence_vs 9826,295821
+DEFUN ("read-key-sequence", Fread_key_sequence,read-key-sequence9885,297294
+DEFUN ("read-key-sequence-vector", 
Fread_key_sequence_vector,read-key-sequence-vector9938,299982
+detect_input_pending 9950,300488
+detect_input_pending_ignore_squeezables 9959,300654
+detect_input_pending_run_timers 9967,300870
+clear_input_pending 9985,301362
+requeued_events_pending_p 9997,301732
+DEFUN ("input-pending-p", Finput_pending_p,input-pending-p10002,301813
+DEFUN ("recent-keys", Frecent_keys,recent-keys10024,302596
+DEFUN ("this-command-keys", Fthis_command_keys,this-command-keys10055,303517
+DEFUN ("this-command-keys-vector", 
Fthis_command_keys_vector,this-command-keys-vector10068,303958
+DEFUN ("this-single-command-keys", 
Fthis_single_command_keys,this-single-command-keys10080,304380
+DEFUN ("this-single-command-raw-keys", 
Fthis_single_command_raw_keys,this-single-command-raw-keys10096,304955
+DEFUN ("reset-this-command-lengths", 
Freset_this_command_lengths,reset-this-command-lengths10109,305495
+DEFUN ("clear-this-command-keys", 
Fclear_this_command_keys,clear-this-command-keys10136,306510
+DEFUN ("recursion-depth", Frecursion_depth,recursion-depth10158,307069
+DEFUN ("open-dribble-file", Fopen_dribble_file,open-dribble-file10169,307406
+DEFUN ("discard-input", Fdiscard_input,discard-input10203,308447
+DEFUN ("suspend-emacs", Fsuspend_emacs,suspend-emacs10225,308949
+stuff_buffered_input 10285,311045
+set_waiting_for_input 10323,312016
+clear_waiting_for_input 10337,312390
+handle_interrupt_signal 10351,312754
+deliver_interrupt_signal 10378,313642
+static int volatile force_quit_count;10387,313932
+handle_interrupt 10401,314414
+quit_throw_to_read_char 10541,318711
+DEFUN ("set-input-interrupt-mode", 
Fset_input_interrupt_mode,set-input-interrupt-mode10562,319288
+DEFUN ("set-output-flow-control", 
Fset_output_flow_control,set-output-flow-control10609,320516
+DEFUN ("set-input-meta-mode", 
Fset_input_meta_mode,set-input-meta-mode10643,321432
+DEFUN ("set-quit-char", Fset_quit_char,set-quit-char10694,322706
+DEFUN ("set-input-mode", Fset_input_mode,set-input-mode10729,323570
+DEFUN ("current-input-mode", 
Fcurrent_input_mode,current-input-mode10750,324459
+DEFUN ("posn-at-x-y", Fposn_at_x_y,posn-at-x-y10787,325837
+DEFUN ("posn-at-point", Fposn_at_point,posn-at-point10824,327060
+init_kboard 10861,328214
+allocate_kboard 10893,329284
+wipe_kboard 10909,329637
+delete_kboard 10917,329751
+init_keyboard 10942,330281
+struct event_head11021,332696
+static const struct event_head head_table[head_table11027,332747
+syms_of_keyboard 11045,333577
+  DEFVAR_LISP ("internal--top-level-message"11058,333972
+  DEFVAR_LISP ("last-command-event"11312,342173
+  DEFVAR_LISP ("last-nonmenu-event"11315,342297
+  DEFVAR_LISP ("last-input-event"11321,342636
+  DEFVAR_LISP ("unread-command-events"11324,342730
+  DEFVAR_LISP ("unread-post-input-method-events"11332,343190
+  DEFVAR_LISP ("unread-input-method-events"11338,343529
+  DEFVAR_LISP ("meta-prefix-char"11346,343898
+  DEFVAR_KBOARD ("last-command"11351,344106
+  DEFVAR_KBOARD ("real-last-command"11368,344787
+  DEFVAR_KBOARD ("last-repeatable-command"11372,344973
+  DEFVAR_LISP ("this-command"11378,345261
+  DEFVAR_LISP ("real-this-command"11384,345498
+  DEFVAR_LISP ("this-command-keys-shift-translated"11388,345680
+  DEFVAR_LISP ("this-original-command"11396,346123
+  DEFVAR_INT ("auto-save-interval"11403,346520
+  DEFVAR_LISP ("auto-save-timeout"11408,346734
+  DEFVAR_LISP ("echo-keystrokes"11415,347079
+  DEFVAR_INT ("polling-period"11421,347350
+  DEFVAR_LISP ("double-click-time"11428,347693
+  DEFVAR_INT ("double-click-fuzz"11435,348029
+  DEFVAR_INT ("num-input-keys"11446,348519
+  DEFVAR_INT ("num-nonmacro-input-events"11452,348794
+  DEFVAR_LISP ("last-event-frame"11457,349032
+  DEFVAR_LISP ("tty-erase-char"11463,349311
+  DEFVAR_LISP ("help-char"11466,349434
+  DEFVAR_LISP ("help-event-list"11472,349717
+  DEFVAR_LISP ("help-form"11477,349928
+  DEFVAR_LISP ("prefix-help-command"11483,350176
+  DEFVAR_LISP ("top-level"11489,350454
+  DEFVAR_KBOARD ("keyboard-translate-table"11495,350675
+  DEFVAR_BOOL ("cannot-suspend"11511,351488
+  DEFVAR_BOOL ("menu-prompting"11516,351715
+  DEFVAR_LISP ("menu-prompt-more-char"11526,352145
+  DEFVAR_INT ("extra-keyboard-modifiers"11531,352391
+  DEFVAR_LISP ("deactivate-mark"11545,353117
+  DEFVAR_LISP ("pre-command-hook"11553,353486
+  DEFVAR_LISP ("post-command-hook"11560,353841
+  DEFVAR_LISP ("echo-area-clear-hook"11568,354204
+  DEFVAR_LISP ("lucid-menu-bar-dirty-flag"11574,354419
+  DEFVAR_LISP ("menu-bar-final-items"11578,354622
+  DEFVAR_LISP ("tool-bar-separator-image-expression"11583,354872
+  DEFVAR_KBOARD ("overriding-terminal-local-map"11589,355230
+  DEFVAR_LISP ("overriding-local-map"11598,355652
+  DEFVAR_LISP ("overriding-local-map-menu-flag"11607,356103
+  DEFVAR_LISP ("special-event-map"11613,356442
+  DEFVAR_LISP ("track-mouse"11617,356630
+  DEFVAR_KBOARD ("system-key-alist"11620,356757
+  DEFVAR_KBOARD ("local-function-key-map"11629,357138
+  DEFVAR_KBOARD ("input-decode-map"11658,358597
+  DEFVAR_LISP ("function-key-map"11675,359385
+  DEFVAR_LISP ("key-translation-map"11683,359801
+  DEFVAR_LISP ("deferred-action-list"11689,360145
+  DEFVAR_LISP ("deferred-action-function"11694,360393
+  DEFVAR_LISP ("delayed-warnings-list"11700,360692
+  DEFVAR_LISP ("timer-list"11708,361100
+  DEFVAR_LISP ("timer-idle-list"11712,361252
+  DEFVAR_LISP ("input-method-function"11716,361415
+  DEFVAR_LISP ("input-method-previous-message"11737,362384
+  DEFVAR_LISP ("show-help-function"11744,362745
+  DEFVAR_LISP ("disable-point-adjustment"11749,362977
+  DEFVAR_LISP ("global-disable-point-adjustment"11761,363527
+  DEFVAR_LISP ("minibuffer-message-timeout"11770,363893
+  DEFVAR_LISP ("throw-on-input"11775,364171
+  DEFVAR_LISP ("command-error-function"11781,364422
+  DEFVAR_LISP ("enable-disabled-menus-and-buttons"11790,364909
+  DEFVAR_LISP ("select-active-regions"11798,365236
+  DEFVAR_LISP ("saved-region-selection"11807,365628
+  DEFVAR_LISP ("selection-inhibit-update-commands"11815,366013
+  DEFVAR_LISP ("debug-on-event"11825,366554
+keys_of_keyboard 11841,367115
+mark_kboards 11916,370434
+  DEFVAR_LISP ("internal--top-level-message",\111058,333972
+  DEFVAR_LISP ("last-command-event",\111312,342173
+  DEFVAR_LISP ("last-nonmenu-event",\111315,342297
+  DEFVAR_LISP ("last-input-event",\111321,342636
+  DEFVAR_LISP ("unread-command-events",\111324,342730
+  DEFVAR_LISP ("unread-post-input-method-events",\111332,343190
+  DEFVAR_LISP ("unread-input-method-events",\111338,343529
+  DEFVAR_LISP ("meta-prefix-char",\111346,343898
+  DEFVAR_KBOARD ("last-command",\111351,344106
+  DEFVAR_KBOARD ("real-last-command",\111368,344787
+  DEFVAR_KBOARD ("last-repeatable-command",\111372,344973
+  DEFVAR_LISP ("this-command",\111378,345261
+  DEFVAR_LISP ("real-this-command",\111384,345498
+  DEFVAR_LISP ("this-command-keys-shift-translated",\111388,345680
+  DEFVAR_LISP ("this-original-command",\111396,346123
+  DEFVAR_INT ("auto-save-interval",\111403,346520
+  DEFVAR_LISP ("auto-save-timeout",\111408,346734
+  DEFVAR_LISP ("echo-keystrokes",\111415,347079
+  DEFVAR_INT ("polling-period",\111421,347350
+  DEFVAR_LISP ("double-click-time",\111428,347693
+  DEFVAR_INT ("double-click-fuzz",\111435,348029
+  DEFVAR_INT ("num-input-keys",\111446,348519
+  DEFVAR_INT ("num-nonmacro-input-events",\111452,348794
+  DEFVAR_LISP ("last-event-frame",\111457,349032
+  DEFVAR_LISP ("tty-erase-char",\111463,349311
+  DEFVAR_LISP ("help-char",\111466,349434
+  DEFVAR_LISP ("help-event-list",\111472,349717
+  DEFVAR_LISP ("help-form",\111477,349928
+  DEFVAR_LISP ("prefix-help-command",\111483,350176
+  DEFVAR_LISP ("top-level",\111489,350454
+  DEFVAR_KBOARD ("keyboard-translate-table",\111495,350675
+  DEFVAR_BOOL ("cannot-suspend",\111511,351488
+  DEFVAR_BOOL ("menu-prompting",\111516,351715
+  DEFVAR_LISP ("menu-prompt-more-char",\111526,352145
+  DEFVAR_INT ("extra-keyboard-modifiers",\111531,352391
+  DEFVAR_LISP ("deactivate-mark",\111545,353117
+  DEFVAR_LISP ("pre-command-hook",\111553,353486
+  DEFVAR_LISP ("post-command-hook",\111560,353841
+  DEFVAR_LISP ("echo-area-clear-hook",\111568,354204
+  DEFVAR_LISP ("lucid-menu-bar-dirty-flag",\111574,354419
+  DEFVAR_LISP ("menu-bar-final-items",\111578,354622
+  DEFVAR_LISP ("tool-bar-separator-image-expression",\111583,354872
+  DEFVAR_KBOARD ("overriding-terminal-local-map",\111589,355230
+  DEFVAR_LISP ("overriding-local-map",\111598,355652
+  DEFVAR_LISP ("overriding-local-map-menu-flag",\111607,356103
+  DEFVAR_LISP ("special-event-map",\111613,356442
+  DEFVAR_LISP ("track-mouse",\111617,356630
+  DEFVAR_KBOARD ("system-key-alist",\111620,356757
+  DEFVAR_KBOARD ("local-function-key-map",\111629,357138
+  DEFVAR_KBOARD ("input-decode-map",\111658,358597
+  DEFVAR_LISP ("function-key-map",\111675,359385
+  DEFVAR_LISP ("key-translation-map",\111683,359801
+  DEFVAR_LISP ("deferred-action-list",\111689,360145
+  DEFVAR_LISP ("deferred-action-function",\111694,360393
+  DEFVAR_LISP ("delayed-warnings-list",\111700,360692
+  DEFVAR_LISP ("timer-list",\111708,361100
+  DEFVAR_LISP ("timer-idle-list",\111712,361252
+  DEFVAR_LISP ("input-method-function",\111716,361415
+  DEFVAR_LISP ("input-method-previous-message",\111737,362384
+  DEFVAR_LISP ("show-help-function",\111744,362745
+  DEFVAR_LISP ("disable-point-adjustment",\111749,362977
+  DEFVAR_LISP ("global-disable-point-adjustment",\111761,363527
+  DEFVAR_LISP ("minibuffer-message-timeout",\111770,363893
+  DEFVAR_LISP ("throw-on-input",\111775,364171
+  DEFVAR_LISP ("command-error-function",\111781,364422
+  DEFVAR_LISP ("enable-disabled-menus-and-buttons",\111790,364909
+  DEFVAR_LISP ("select-active-regions",\111798,365236
+  DEFVAR_LISP ("saved-region-selection",\111807,365628
+  DEFVAR_LISP ("selection-inhibit-update-commands",\111815,366013
+  DEFVAR_LISP ("debug-on-event",\111825,366554
+
+c-src/emacs/src/lisp.h,20567
+#define EMACS_LISP_H22,800
+#define DECLARE_GDB_SYM(47,1421
+# define DEFINE_GDB_SYMBOL_BEGIN(49,1508
+# define DEFINE_GDB_SYMBOL_END(50,1578
+# define DEFINE_GDB_SYMBOL_BEGIN(52,1625
+# define DEFINE_GDB_SYMBOL_END(53,1702
+#undef min57,1790
+#undef max58,1801
+#define max(59,1812
+#define min(60,1854
+#define ARRAYELTS(63,1936
+#define GCTYPEBITS 67,2079
+DEFINE_GDB_SYMBOL_BEGIN GCTYPEBITS66,2037
+# define NONPOINTER_BITS 78,2567
+# define NONPOINTER_BITS 80,2600
+typedef int EMACS_INT;91,3023
+typedef unsigned int EMACS_UINT;92,3046
+#  define EMACS_INT_MAX 93,3079
+#  define pI 94,3111
+typedef long int EMACS_INT;96,3203
+typedef unsigned long EMACS_UINT;97,3231
+#  define EMACS_INT_MAX 98,3265
+#  define pI 99,3298
+typedef long long int EMACS_INT;103,3477
+typedef unsigned long long int EMACS_UINT;104,3510
+#  define EMACS_INT_MAX 105,3553
+#  define pI 106,3587
+enum {  BOOL_VECTOR_BITS_PER_CHAR 114,3804
+#define BOOL_VECTOR_BITS_PER_CHAR 115,3840
+typedef size_t bits_word;123,4165
+# define BITS_WORD_MAX 124,4191
+enum { BITS_PER_BITS_WORD 125,4223
+typedef unsigned char bits_word;127,4290
+# define BITS_WORD_MAX 128,4323
+enum { BITS_PER_BITS_WORD 129,4386
+    BITS_PER_CHAR 136,4570
+    BITS_PER_SHORT 137,4605
+    BITS_PER_LONG 138,4657
+    BITS_PER_EMACS_INT 139,4712
+typedef intmax_t printmax_t;148,5089
+typedef uintmax_t uprintmax_t;149,5118
+# define pMd 150,5149
+# define pMu 151,5170
+typedef EMACS_INT printmax_t;153,5197
+typedef EMACS_UINT uprintmax_t;154,5227
+# define pMd 155,5259
+# define pMu 156,5278
+# define pD 165,5664
+# define pD 167,5709
+# define pD 169,5756
+# define pD 171,5779
+# define eassert(200,7062
+# define eassume(201,7140
+# define eassert(208,7319
+# define eassume(212,7450
+enum Lisp_Bits239,8519
+#define GCALIGNMENT 243,8647
+    VALBITS 246,8742
+    INTTYPEBITS 249,8838
+    FIXNUM_BITS 252,8945
+#define VAL_MAX 263,9327
+#define USE_LSB_TAG 271,9777
+DEFINE_GDB_SYMBOL_BEGIN USE_LSB_TAG270,9733
+# define alignas(281,10077
+# define GCALIGNED 288,10227
+# define GCALIGNED 290,10292
+# define lisp_h_XLI(327,11642
+# define lisp_h_XIL(328,11673
+# define lisp_h_XLI(330,11724
+# define lisp_h_XIL(331,11751
+#define lisp_h_CHECK_LIST_CONS(333,11785
+#define lisp_h_CHECK_NUMBER(334,11856
+#define lisp_h_CHECK_SYMBOL(335,11927
+#define lisp_h_CHECK_TYPE(336,11996
+#define lisp_h_CONSP(338,12107
+#define lisp_h_EQ(339,12156
+#define lisp_h_FLOATP(340,12201
+#define lisp_h_INTEGERP(341,12252
+#define lisp_h_MARKERP(342,12333
+#define lisp_h_MISCP(343,12408
+#define lisp_h_NILP(344,12457
+#define lisp_h_SET_SYMBOL_VAL(345,12493
+#define lisp_h_SYMBOL_CONSTANT_P(347,12607
+#define lisp_h_SYMBOL_VAL(348,12671
+#define lisp_h_SYMBOLP(350,12772
+#define lisp_h_VECTORLIKEP(351,12825
+#define lisp_h_XCAR(352,12886
+#define lisp_h_XCDR(353,12924
+#define lisp_h_XCONS(354,12964
+#define lisp_h_XHASH(356,13059
+#define lisp_h_XPNTR(357,13093
+# define lisp_h_check_cons_list(360,13221
+# define lisp_h_make_number(363,13289
+# define lisp_h_XFASTINT(365,13392
+# define lisp_h_XINT(366,13429
+# define lisp_h_XSYMBOL(367,13478
+# define lisp_h_XTYPE(371,13631
+# define lisp_h_XUNTAG(372,13696
+# define XLI(381,14086
+# define XIL(382,14117
+# define CHECK_LIST_CONS(383,14148
+# define CHECK_NUMBER(384,14209
+# define CHECK_SYMBOL(385,14258
+# define CHECK_TYPE(386,14307
+# define CONSP(387,14382
+# define EQ(388,14417
+# define FLOATP(389,14452
+# define INTEGERP(390,14489
+# define MARKERP(391,14530
+# define MISCP(392,14569
+# define NILP(393,14604
+# define SET_SYMBOL_VAL(394,14637
+# define SYMBOL_CONSTANT_P(395,14700
+# define SYMBOL_VAL(396,14763
+# define SYMBOLP(397,14812
+# define VECTORLIKEP(398,14851
+# define XCAR(399,14898
+# define XCDR(400,14931
+# define XCONS(401,14964
+# define XHASH(402,14999
+# define XPNTR(403,15034
+#  define check_cons_list(405,15097
+#  define make_number(408,15176
+#  define XFASTINT(409,15224
+#  define XINT(410,15266
+#  define XSYMBOL(411,15300
+#  define XTYPE(412,15340
+#  define XUNTAG(413,15376
+#define LISP_MACRO_DEFUN(421,15672
+#define LISP_MACRO_DEFUN_VOID(425,15845
+#define INTMASK 437,16289
+#define case_Lisp_Int 438,16342
+#define ENUM_BF(445,16681
+#define ENUM_BF(447,16722
+enum Lisp_Type451,16763
+    Lisp_Symbol 454,16851
+    Lisp_Misc 458,16993
+    Lisp_Int0 461,17067
+    Lisp_Int1 462,17086
+    Lisp_String 466,17264
+    Lisp_Vectorlike 472,17543
+    Lisp_Cons 475,17632
+    Lisp_Float 477,17670
+enum Lisp_Misc_Type485,18016
+    Lisp_Misc_Free 487,18040
+    Lisp_Misc_Marker,488,18069
+    Lisp_Misc_Overlay,489,18091
+    Lisp_Misc_Save_Value,490,18114
+    Lisp_Misc_Finalizer,491,18140
+    Lisp_Misc_Float,494,18275
+    Lisp_Misc_Limit496,18359
+enum Lisp_Fwd_Type502,18543
+    Lisp_Fwd_Int,504,18566
+    Lisp_Fwd_Bool,505,18619
+    Lisp_Fwd_Obj,506,18670
+    Lisp_Fwd_Buffer_Obj,507,18729
+    Lisp_Fwd_Kboard_Obj        508,18800
+typedef struct { EMACS_INT i; } Lisp_Object;567,21781
+#define LISP_INITIALLY(569,21827
+#undef CHECK_LISP_OBJECT_TYPE571,21858
+enum CHECK_LISP_OBJECT_TYPE 572,21888
+enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE 572,21888
+typedef EMACS_INT Lisp_Object;577,22064
+#define LISP_INITIALLY(578,22095
+enum CHECK_LISP_OBJECT_TYPE 579,22125
+enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE 579,22125
+#define LISP_INITIALLY_ZERO 582,22226
+enum symbol_interned639,24199
+  SYMBOL_UNINTERNED 641,24222
+  SYMBOL_INTERNED 642,24247
+  SYMBOL_INTERNED_IN_INITIAL_OBARRAY 643,24270
+enum symbol_redirect646,24315
+  SYMBOL_PLAINVAL 648,24338
+  SYMBOL_VARALIAS 649,24362
+  SYMBOL_LOCALIZED 650,24386
+  SYMBOL_FORWARDED 651,24410
+struct Lisp_Symbol654,24437
+  ENUM_BF 663,24793
+#define EXFUN(707,26252
+#define DEFUN_ARGS_MANY        712,26446
+#define DEFUN_ARGS_UNEVALLED   713,26498
+#define DEFUN_ARGS_0   714,26541
+#define DEFUN_ARGS_1   715,26569
+#define DEFUN_ARGS_2   716,26604
+#define DEFUN_ARGS_3   717,26652
+#define DEFUN_ARGS_4   718,26713
+#define DEFUN_ARGS_5   719,26787
+#define DEFUN_ARGS_6   721,26880
+#define DEFUN_ARGS_7   723,26986
+#define DEFUN_ARGS_8   725,27105
+#define TAG_PTR(729,27296
+#define TAG_SYMOFFSET(734,27543
+#define XLI_BUILTIN_LISPSYM(741,27842
+#define DEFINE_LISP_SYMBOL(746,28101
+# define DEFINE_NON_NIL_Q_SYMBOL_MACROS 755,28572
+LISP_MACRO_DEFUN 762,28777
+# define ARRAY_MARK_FLAG 768,29024
+# define PSEUDOVECTOR_FLAG 774,29267
+enum pvec_type780,29568
+  PVEC_NORMAL_VECTOR,782,29585
+  PVEC_FREE,783,29607
+  PVEC_PROCESS,784,29620
+  PVEC_FRAME,785,29636
+  PVEC_WINDOW,786,29650
+  PVEC_BOOL_VECTOR,787,29665
+  PVEC_BUFFER,788,29685
+  PVEC_HASH_TABLE,789,29700
+  PVEC_TERMINAL,790,29719
+  PVEC_WINDOW_CONFIGURATION,791,29736
+  PVEC_SUBR,792,29765
+  PVEC_OTHER,793,29778
+  PVEC_COMPILED,795,29856
+  PVEC_CHAR_TABLE,796,29873
+  PVEC_SUB_CHAR_TABLE,797,29892
+  PVEC_FONT 798,29915
+enum More_Lisp_Bits801,29991
+    PSEUDOVECTOR_SIZE_BITS 808,30382
+    PSEUDOVECTOR_SIZE_MASK 809,30415
+    PSEUDOVECTOR_REST_BITS 813,30625
+    PSEUDOVECTOR_REST_MASK 814,30658
+    PSEUDOVECTOR_AREA_BITS 818,30823
+    PVEC_TYPE_MASK 819,30901
+# define VALMASK 829,31302
+DEFINE_GDB_SYMBOL_BEGIN VALMASK828,31257
+#define MOST_POSITIVE_FIXNUM 834,31532
+#define MOST_NEGATIVE_FIXNUM 835,31592
+XINT 874,32684
+XFASTINT 889,33035
+XSYMBOL 899,33263
+XTYPE 910,33481
+XUNTAG 918,33661
+LISP_MACRO_DEFUN 927,33857
+LISP_MACRO_DEFUN 940,34242
+#define FIXNUM_OVERFLOW_P(958,34855
+LISP_MACRO_DEFUN FIXNUM_OVERFLOW_P952,34632
+LISP_MACRO_DEFUN 970,35171
+XSTRING 980,35391
+#define SYMBOL_INDEX(988,35575
+XFLOAT 991,35636
+XPROCESS 1000,35778
+XWINDOW 1007,35895
+XTERMINAL 1014,36012
+XSUBR 1021,36134
+XBUFFER 1028,36245
+XCHAR_TABLE 1035,36369
+XSUB_CHAR_TABLE 1042,36506
+XBOOL_VECTOR 1049,36648
+make_lisp_ptr 1058,36827
+make_lisp_symbol 1066,37013
+builtin_lisp_symbol 1074,37197
+#define XSETINT(1079,37279
+#define XSETFASTINT(1080,37325
+#define XSETCONS(1081,37375
+#define XSETVECTOR(1082,37435
+#define XSETSTRING(1083,37503
+#define XSETSYMBOL(1084,37567
+#define XSETFLOAT(1085,37621
+#define XSETMISC(1086,37683
+#define XSETPVECTYPE(1090,37772
+#define XSETPVECTYPESIZE(1092,37888
+#define XSETPSEUDOVECTOR(1099,38185
+#define XSETTYPED_PSEUDOVECTOR(1105,38369
+#define XSETWINDOW_CONFIGURATION(1110,38579
+#define XSETPROCESS(1112,38675
+#define XSETWINDOW(1113,38741
+#define XSETTERMINAL(1114,38805
+#define XSETSUBR(1115,38873
+#define XSETCOMPILED(1116,38933
+#define XSETBUFFER(1117,39001
+#define XSETCHAR_TABLE(1118,39065
+#define XSETBOOL_VECTOR(1119,39137
+#define XSETSUB_CHAR_TABLE(1120,39211
+XINTPTR 1128,39581
+make_pointer_integer 1134,39661
+LISP_MACRO_DEFUN_VOID 1143,39826
+typedef struct interval *INTERVAL;INTERVAL1149,39987
+xcar_addr 1174,40760
+xcdr_addr 1179,40837
+LISP_MACRO_DEFUN 1185,40931
+XSETCDR 1198,41307
+CAR 1205,41457
+CDR 1212,41591
+CAR_SAFE 1221,41791
+CDR_SAFE 1226,41877
+STRING_MULTIBYTE 1243,42250
+#define STRING_BYTES_BOUND 1261,43057
+#define STRING_SET_UNIBYTE(1265,43201
+#define STRING_SET_MULTIBYTE(1275,43516
+SDATA 1286,43830
+SSDATA 1291,43908
+SREF 1297,44037
+SSET 1302,44128
+SCHARS 1307,44242
+STRING_BYTES 1316,44415
+SBYTES 1326,44595
+STRING_SET_CHARS 1331,44681
+struct vectorlike_header1343,45232
+struct Lisp_Vector1369,46482
+    ALIGNOF_STRUCT_LISP_VECTOR1378,46681
+struct Lisp_Bool_Vector1384,46864
+bool_vector_size 1399,47385
+bool_vector_data 1407,47523
+bool_vector_uchar_data 1413,47617
+bool_vector_words 1421,47803
+bool_vector_bytes 1428,47998
+bool_vector_bitref 1437,48238
+bool_vector_ref 1445,48478
+bool_vector_set 1453,48618
+    header_size 1471,49047
+    bool_header_size 1472,49106
+    word_size 1473,49171
+AREF 1479,49284
+aref_addr 1485,49391
+ASIZE 1491,49501
+ASET 1497,49583
+gc_aset 1504,49742
+enum { NIL_IS_ZERO 1515,50269
+memclear 1520,50464
+#define VECSIZE(1531,50762
+#define PSEUDOVECSIZE(1538,51047
+#define UNSIGNED_CMP(1546,51480
+#define ASCII_CHAR_P(1552,51734
+enum CHARTAB_SIZE_BITS1565,52489
+    CHARTAB_SIZE_BITS_0 1567,52516
+    CHARTAB_SIZE_BITS_1 1568,52545
+    CHARTAB_SIZE_BITS_2 1569,52574
+    CHARTAB_SIZE_BITS_3 1570,52603
+struct Lisp_Char_Table1575,52672
+struct Lisp_Sub_Char_Table1606,53752
+CHAR_TABLE_REF_ASCII 1628,54566
+CHAR_TABLE_REF 1648,55113
+CHAR_TABLE_SET 1658,55402
+struct Lisp_Subr1670,55786
+enum char_table_specials1692,56798
+    CHAR_TABLE_STANDARD_SLOTS 1697,56993
+    SUB_CHAR_TABLE_OFFSET 1701,57214
+CHAR_TABLE_EXTRA_SLOTS 1707,57377
+LISP_MACRO_DEFUN 1723,57921
+SYMBOL_BLV 1732,58181
+SYMBOL_FWD 1738,58316
+LISP_MACRO_DEFUN_VOID 1744,58428
+SET_SYMBOL_BLV 1754,58691
+SET_SYMBOL_FWD 1760,58850
+SYMBOL_NAME 1767,59001
+SYMBOL_INTERNED_P 1775,59130
+SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P 1783,59299
+#define DEFSYM(1796,59809
+LISP_MACRO_DEFUN DEFSYM1792,59630
+struct hash_table_test1805,60062
+struct Lisp_Hash_Table1823,60555
+XHASH_TABLE 1880,62531
+#define XSET_HASH_TABLE(1885,62602
+HASH_TABLE_P 1889,62703
+HASH_KEY 1896,62860
+HASH_VALUE 1903,63040
+HASH_NEXT 1911,63254
+HASH_HASH 1918,63431
+HASH_INDEX 1926,63677
+HASH_TABLE_SIZE 1933,63826
+enum DEFAULT_HASH_SIZE 1940,63956
+enum DEFAULT_HASH_SIZE { DEFAULT_HASH_SIZE 1940,63956
+static double const DEFAULT_REHASH_THRESHOLD 1946,64176
+static double const DEFAULT_REHASH_SIZE 1950,64299
+sxhash_combine 1956,64465
+SXHASH_REDUCE 1964,64648
+struct Lisp_Misc_Any   1971,64806
+  ENUM_BF 1973,64866
+struct Lisp_Marker1978,64980
+  ENUM_BF 1980,65001
+struct Lisp_Overlay2021,66838
+    ENUM_BF 2034,67346
+    SAVE_UNUSED,2047,67641
+    SAVE_INTEGER,2048,67658
+    SAVE_FUNCPOINTER,2049,67676
+    SAVE_POINTER,2050,67698
+    SAVE_OBJECT2051,67716
+enum { SAVE_SLOT_BITS 2055,67801
+enum { SAVE_VALUE_SLOTS 2058,67898
+enum { SAVE_TYPE_BITS 2062,68006
+enum Lisp_Save_Type2064,68072
+    SAVE_TYPE_INT_INT 2066,68096
+    SAVE_TYPE_INT_INT_INT2067,68169
+    SAVE_TYPE_OBJ_OBJ 2069,68259
+    SAVE_TYPE_OBJ_OBJ_OBJ 2070,68330
+    SAVE_TYPE_OBJ_OBJ_OBJ_OBJ2071,68411
+    SAVE_TYPE_PTR_INT 2073,68506
+    SAVE_TYPE_PTR_OBJ 2074,68579
+    SAVE_TYPE_PTR_PTR 2075,68651
+    SAVE_TYPE_FUNCPTR_PTR_OBJ2076,68724
+    SAVE_TYPE_MEMORY 2080,68882
+typedef void (*voidfuncptr)voidfuncptr2108,69836
+struct Lisp_Save_Value2110,69873
+    ENUM_BF 2112,69900
+save_type 2134,70752
+XSAVE_POINTER 2143,70982
+set_save_pointer 2149,71144
+XSAVE_FUNCPOINTER 2155,71326
+XSAVE_INTEGER 2164,71546
+set_save_integer 2170,71708
+XSAVE_OBJECT 2179,71929
+struct Lisp_Finalizer2186,72106
+struct Lisp_Free2201,72581
+    ENUM_BF 2203,72602
+union Lisp_Misc2212,72882
+XMISC 2223,73181
+XMISCANY 2229,73270
+XMISCTYPE 2236,73379
+XMARKER 2242,73467
+XOVERLAY 2249,73582
+XSAVE_VALUE 2256,73703
+XFINALIZER 2263,73832
+struct Lisp_Intfwd2274,74117
+struct Lisp_Boolfwd2284,74411
+struct Lisp_Objfwd2294,74702
+struct Lisp_Buffer_Objfwd2302,74934
+struct Lisp_Buffer_Local_Value2334,76470
+struct Lisp_Kboard_Objfwd2362,77729
+union Lisp_Fwd2368,77838
+XFWDTYPE 2378,78084
+XBUFFER_OBJFWD 2384,78180
+struct Lisp_Float2391,78316
+XFLOAT_DATA 2401,78434
+    IEEE_FLOATING_POINT2415,78943
+#define _UCHAR_T2423,79266
+typedef unsigned char UCHAR;2424,79283
+enum Lisp_Compiled2429,79366
+    COMPILED_ARGLIST 2431,79389
+    COMPILED_BYTECODE 2432,79415
+    COMPILED_CONSTANTS 2433,79442
+    COMPILED_STACK_DEPTH 2434,79470
+    COMPILED_DOC_STRING 2435,79500
+    COMPILED_INTERACTIVE 2436,79529
+enum char_bits2443,79831
+    CHAR_ALT 2445,79850
+    CHAR_SUPER 2446,79876
+    CHAR_HYPER 2447,79904
+    CHAR_SHIFT 2448,79932
+    CHAR_CTL 2449,79960
+    CHAR_META 2450,79986
+    CHAR_MODIFIER_MASK 2452,80014
+    CHARACTERBITS 2457,80209
+LISP_MACRO_DEFUN 2462,80267
+NATNUMP 2470,80409
+RANGED_INTEGERP 2476,80490
+#define TYPE_RANGED_INTEGERP(2481,80612
+LISP_MACRO_DEFUN 2486,80797
+VECTORP 2500,81270
+OVERLAYP 2505,81373
+SAVE_VALUEP 2510,81472
+FINALIZERP 2516,81578
+AUTOLOADP 2522,81682
+BUFFER_OBJFWDP 2528,81773
+PSEUDOVECTOR_TYPEP 2534,81871
+PSEUDOVECTORP 2542,82124
+WINDOW_CONFIGURATIONP 2558,82476
+PROCESSP 2564,82586
+WINDOWP 2570,82670
+TERMINALP 2576,82752
+SUBRP 2582,82838
+COMPILEDP 2588,82916
+BUFFERP 2594,83002
+CHAR_TABLE_P 2600,83084
+SUB_CHAR_TABLE_P 2606,83175
+BOOL_VECTOR_P 2612,83274
+FRAMEP 2618,83367
+IMAGEP 2625,83484
+ARRAYP 2632,83589
+CHECK_LIST 2638,83708
+LISP_MACRO_DEFUN_VOID 2643,83789
+CHECK_STRING_CAR 2653,84086
+CHECK_CONS 2658,84190
+CHECK_VECTOR 2663,84270
+CHECK_BOOL_VECTOR 2668,84356
+CHECK_VECTOR_OR_STRING 2674,84533
+CHECK_ARRAY 2683,84707
+CHECK_BUFFER 2688,84815
+CHECK_WINDOW 2693,84901
+CHECK_PROCESS 2699,85007
+CHECK_NATNUM 2705,85103
+#define CHECK_RANGED_INTEGER(2710,85180
+#define CHECK_TYPE_RANGED_INTEGER(2721,85563
+#define CHECK_NUMBER_COERCE_MARKER(2729,85833
+XFLOATINT 2738,86086
+CHECK_NUMBER_OR_FLOAT 2744,86157
+#define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(2749,86256
+CHECK_NUMBER_CAR 2760,86666
+CHECK_NUMBER_CDR 2768,86788
+#define DEFUN(2803,88383
+#define DEFUN(2812,88851
+FUNCTIONP 2822,89206
+enum maxargs2831,89401
+    MANY 2833,89418
+    UNEVALLED 2834,89433
+#define CALLMANY(2838,89536
+#define CALLN(2844,89889
+#define DEFVAR_LISP(2869,91094
+#define DEFVAR_LISP_NOPRO(2874,91266
+#define DEFVAR_BOOL(2879,91448
+#define DEFVAR_INT(2884,91621
+#define DEFVAR_BUFFER_DEFAULTS(2890,91792
+#define DEFVAR_KBOARD(2896,91996
+typedef jmp_buf sys_jmp_buf;2906,92320
+# define sys_setjmp(2907,92349
+# define sys_longjmp(2908,92384
+typedef sigjmp_buf sys_jmp_buf;2910,92456
+# define sys_setjmp(2911,92488
+# define sys_longjmp(2912,92528
+typedef jmp_buf sys_jmp_buf;2916,92687
+# define sys_setjmp(2917,92716
+# define sys_longjmp(2918,92750
+enum specbind_tag 2943,93802
+  SPECPDL_UNWIND,2944,93822
+  SPECPDL_UNWIND_PTR,2945,93891
+  SPECPDL_UNWIND_INT,2946,93942
+  SPECPDL_UNWIND_VOID,2947,93990
+  SPECPDL_BACKTRACE,2948,94044
+  SPECPDL_LET,2949,94102
+  SPECPDL_LET_LOCAL,2951,94232
+  SPECPDL_LET_DEFAULT  2952,94289
+union specbinding2955,94361
+    ENUM_BF 2957,94383
+      ENUM_BF 2959,94440
+      ENUM_BF 2964,94570
+      ENUM_BF 2969,94693
+      ENUM_BF 2974,94811
+      ENUM_BF 2978,94916
+      ENUM_BF 2983,95091
+enum handlertype 3021,96407
+enum handlertype { CATCHER,3021,96407
+enum handlertype { CATCHER, CONDITION_CASE 3021,96407
+struct handler3023,96454
+#define PUSH_HANDLER(3053,97443
+#define QUIT   3101,99220
+#define QUITP 3112,99470
+struct gcpro3132,100313
+#define GC_USE_GCPROS_AS_BEFORE        3171,101294
+#define GC_MAKE_GCPROS_NOOPS   3172,101329
+#define GC_MARK_STACK_CHECK_GCPROS     3173,101361
+#define GC_USE_GCPROS_CHECK_ZOMBIES    3174,101398
+#define GC_MARK_STACK 3177,101459
+#define BYTE_MARK_STACK 3181,101559
+#define GCPRO1(3190,101830
+#define GCPRO2(3191,101870
+#define GCPRO3(3192,101936
+#define GCPRO4(3194,102031
+#define GCPRO5(3196,102151
+#define GCPRO6(3198,102296
+#define GCPRO7(3201,102471
+#define UNGCPRO 3202,102550
+#define GCPRO1(3208,102650
+#define GCPRO2(3212,102772
+#define GCPRO3(3217,102964
+#define GCPRO4(3223,103226
+#define GCPRO5(3230,103557
+#define GCPRO6(3238,103958
+#define GCPRO7(3247,104428
+#define UNGCPRO 3257,104968
+#define GCPRO1(3263,105062
+#define GCPRO2(3269,105296
+#define GCPRO3(3278,105714
+#define GCPRO4(3289,106271
+#define GCPRO5(3302,106969
+#define GCPRO6(3317,107809
+#define GCPRO7(3334,108790
+#define UNGCPRO        3353,109913
+#define RETURN_UNGCPRO(3363,110180
+vcopy 3384,110654
+set_hash_key_slot 3393,110929
+set_hash_value_slot 3399,111068
+set_symbol_function 3408,111303
+set_symbol_plist 3414,111418
+set_symbol_next 3420,111521
+blv_found 3428,111694
+set_overlay_plist 3437,111877
+string_intervals 3445,112028
+set_string_intervals 3453,112150
+set_char_table_defalt 3462,112352
+set_char_table_purpose 3467,112464
+set_char_table_extras 3475,112633
+set_char_table_contents 3482,112842
+set_sub_char_table_contents 3489,113037
+enum Arith_Comparison 3497,113300
+  ARITH_EQUAL,3498,113324
+  ARITH_NOTEQUAL,3499,113339
+  ARITH_LESS,3500,113357
+  ARITH_GRTR,3501,113371
+  ARITH_LESS_OR_EQUAL,3502,113385
+  ARITH_GRTR_OR_EQUAL3503,113408
+#define INTEGER_TO_CONS(3511,113759
+#define CONS_TO_INTEGER(3529,114622
+enum { NEXT_ALMOST_PRIME_LIMIT 3573,116326
+extern EMACS_INT next_almost_prime 3574,116365
+enum constype 3739,123817
+enum constype {CONSTYPE_HEAP,CONSTYPE_HEAP3739,123817
+enum constype {CONSTYPE_HEAP, CONSTYPE_PURE}CONSTYPE_PURE3739,123817
+list2i 3745,124007
+list3i 3751,124116
+list4i 3757,124255
+extern Lisp_Object make_formatted_string 3767,124631
+build_pure_c_string 3792,125659
+build_string 3801,125864
+make_uninit_vector 3820,126435
+make_uninit_sub_char_table 3833,126654
+#define ALLOCATE_PSEUDOVECTOR(3850,127198
+#define ALLOCATE_ZEROED_PSEUDOVECTOR(3858,127534
+INLINE void 3890,128940
+extern void *r_alloc r_alloc3895,129061
+#define FLOAT_TO_STRING_BUFSIZE 3927,130524
+intern 3968,132131
+intern_c_string 3974,132219
+extern _Noreturn void error 4034,135598
+fast_string_match_ignore_case 4136,140086
+INLINE void fixup_locale 4241,143851
+INLINE void synchronize_system_messages_locale 4242,143886
+INLINE void synchronize_system_time_locale 4243,143943
+#define IS_DAEMON 4257,144416
+#define DAEMON_RUNNING 4258,144456
+#define IS_DAEMON 4261,144555
+#define DAEMON_RUNNING 4262,144600
+# define WAIT_READING_MAX 4281,145419
+# define WAIT_READING_MAX 4283,145491
+extern _Noreturn void emacs_abort 4374,148383
+egetenv 4532,152806
+#define eabs(4545,153302
+#define make_fixnum_or_float(4550,153435
+enum MAX_ALLOCA 4556,153686
+enum MAX_ALLOCA { MAX_ALLOCA 4556,153686
+extern void *record_xmalloc record_xmalloc4558,153731
+#define USE_SAFE_ALLOCA        4560,153797
+#define AVAIL_ALLOCA(4564,153930
+#define SAFE_ALLOCA(4568,154041
+#define SAFE_NALLOCA(4576,154382
+#define SAFE_ALLOCA_STRING(4590,154858
+#define SAFE_FREE(4598,155110
+#define SAFE_ALLOCA_LISP(4625,155688
+# define USE_STACK_LISP_OBJECTS 4652,156810
+# undef USE_STACK_LISP_OBJECTS4658,156976
+# define USE_STACK_LISP_OBJECTS 4659,157007
+enum { defined_GC_CHECK_STRING_BYTES 4663,157082
+enum { defined_GC_CHECK_STRING_BYTES 4665,157135
+union Aligned_Cons4670,157269
+union Aligned_String4676,157349
+    USE_STACK_CONS 4689,157704
+    USE_STACK_STRING 4691,157810
+#define STACK_CONS(4699,158147
+#define AUTO_CONS_EXPR(4701,158244
+#define AUTO_CONS(4709,158607
+#define AUTO_LIST1(4710,158678
+#define AUTO_LIST2(4712,158786
+#define AUTO_LIST3(4716,158941
+#define AUTO_LIST4(4720,159116
+# define verify_ascii(4732,159507
+#define AUTO_STRING(4740,159815
+#define FOR_EACH_TAIL(4752,160279
+#define FOR_EACH_ALIST_VALUE(4766,160770
+maybe_gc 4774,161057
+functionp 4784,161296
+
+c-src/machsyscalls.c,23
+#define        SYSCALL(6,113
+
+c-src/machsyscalls.h,159
+SYSCALL (mach_msg_trap,1,0
+SYSCALL (mach_reply_port,13,314
+SYSCALL (mach_thread_self,18,377
+SYSCALL (mach_task_self,23,441
+SYSCALL (mach_host_self,28,503
+
+c-src/h.h,1850
+   ELEM_I/ELEM_I3,15
+} Fails_t;5,85
+typedef void Lang_function 6,96
+typedef struct tpcmd8,147
+#define ggg 10,170
+tpcmd;15,209
+typedef struct foobar2_ 16,216
+} foobar2;20,307
+    DEVICE_SWP,23,333
+    DEVICE_LAST24,349
+} bsp_DevId;25,365
+  struct constant_args 27,394
+} args;30,457
+typedef int *regset;regset31,465
+typedef int INT;32,486
+typedef union abc33,503
+} ghi1;36,534
+typedef union abc 37,542
+} ghi2;39,573
+typedef struct a 40,581
+} b;41,600
+#define c(42,605
+typedef struct an_extern_linkage 
*an_extern_linkage_ptr;an_extern_linkage_ptr43,619
+typedef struct an_extern_linkage 44,676
+} an_extern_linkage;56,1054
+typedef struct pollfd   pfdset[pfdset57,1075
+typedef union rtunion_def58,1119
+  } womboid 63,1206
+typedef union rtunion_def64,1220
+womboid75,1330
+enum {dog,dog81,1416
+enum {dog, cat}cat81,1416
+enum {dog, cat} animals;81,1416
+typedef void (_CALLBACK_ *signal_handler)signal_handler82,1441
+typedef void (_CALLBACK_ *signal_handler1)signal_handler183,1489
+/* comment */ #define ANSIC84,1538
+ #define ANSIC85,1566
+typedef void (proc)87,1588
+typedef void OperatorFun(88,1612
+typedef int f(89,1648
+struct my_struct 91,1691
+typedef struct my_struct my_typedef;93,1713
+typedef RETSIGTYPE (*signal_handler_t)signal_handler_t94,1750
+  Date 04 May 87 235311 PDT 96,1802
+typedef unsigned char unchar;99,1880
+typedef int X,100,1910
+typedef int X, Y,100,1910
+typedef int X, Y, Z;100,1910
+typedef mio mao;101,1931
+typedef struct a 103,1966
+typedef struct a { } b;103,1966
+typedef struct b104,1990
+} c;106,2009
+int extvar;109,2053
+#define tag1110,2065
+#define aaaaaa 111,2078
+#define bbbbbb\bbbbbb113,2102
+#define cccccccccc115,2125
+#define enter_critical_section 116,2144
+#define exit_critical_to_previous      117,2199
+#define UNDEFINED118,2259
+struct re_pattern_buffer 119,2277
+
+cp-src/c.C,2225
+template <typename ipc3dIslandHierarchy,1,0
+template <typename ipc3dIslandHierarchy, typename ipc3dChannelType,1,0
+template <typename ipc3dIslandHierarchy, typename ipc3dChannelType, unsigned 
numOfChannels,1,0
+template <typename ipc3dIslandHierarchy, typename ipc3dChannelType, unsigned 
numOfChannels, typename ipc3dLinkControl,1,0
+class CMultiChannelCSC19_3D2,151
+        void execute(CMultiChannelCSC19_3D::execute11,493
+int main 25,1026
+double base 26,1088
+typedef struct s1 32,1251
+} t1;34,1287
+struct s2 35,1293
+typedef struct s2 t2;38,1324
+class A 39,1346
+  enum { rosso,A::rosso40,1356
+  enum { rosso, giallo,A::giallo40,1356
+  enum { rosso, giallo, verde A::verde40,1356
+const A& A::operator+(43,1431
+void operator+(44,1467
+void operator -(operator -45,1495
+void operator int(operator int46,1524
+A<int>* f(48,1556
+int f(49,1571
+int A<int>::f(f50,1590
+A<float,B<int> > A<B<float>,int>::f(f51,1618
+template <class C, int n> class AT 52,1668
+class AU 53,1716
+class B<B54,1735
+class B<int> { void f(B::f54,1735
+const A::B::T& abt 55,1765
+class A 56,1791
+class A { class B A::B56,1791
+class A 57,1826
+  A operator+(A::operator+59,1860
+is_muldiv_operation(61,1887
+domain foo 68,1955
+     void f(foo::f69,1968
+void A::A(72,1989
+struct A 73,2004
+struct B 74,2022
+void B::B(75,2041
+void BE_Node::BE_Node(76,2056
+class BE_Node 77,2083
+struct foo 79,2102
+class test 86,2156
+  int f(test::f87,2169
+  int ff(test::ff89,2231
+  int g(test::g90,2254
+class  AST_Root 92,2278
+AST_ConcreteType::AST_ConcreteType(99,2393
+AST_Array::AST_Array(107,2532
+     void f(::f115,2733
+struct A 117,2753
+A::~A(120,2777
+struct B 122,2789
+    ~B(B::~B123,2800
+enum {dog,::dog126,2817
+enum {dog, cat}::cat126,2817
+enum {dog, cat} animals;126,2817
+struct {int teats;} cow;127,2842
+class Boo 129,2868
+    enum {dog,Boo::dog130,2880
+    enum {dog, cat}Boo::cat130,2880
+    foo(Boo::foo133,2954
+    Boo(Boo::Boo137,2995
+Boo::Boo(141,3070
+typedef int should_see_this_one_enclosed_in_extern_C;149,3155
+typedef int 
(*should_see_this_function_pointer)should_see_this_function_pointer153,3228
+typedef int should_see_this_array_type[should_see_this_array_type156,3310
+
+cp-src/abstract.C,11317
+Half_Container::Half_Container(34,703
+void Half_Container::SetPosition(45,941
+void Half_Container::SetDimensions(58,1259
+void Half_Container::SetFather(81,1697
+void Half_Container::SetCollapsed(87,1787
+Specification::Specification(98,1958
+void Specification::SetPosition(119,2453
+void Specification::SetDimensions(164,3742
+void Specification::SetFather(188,4616
+void Specification::SetPath(202,4908
+Coord Specification::GetMaxX(212,5125
+Coord Specification::GetMaxY(215,5174
+Process::Process(222,5298
+void Process::SetPosition(242,5697
+void Process::SetDimensions(291,6959
+void Process::SetFather(315,7913
+void Process::SetPath(326,8123
+Coord Process::GetMaxX(335,8323
+Coord Process::GetMaxY(338,8365
+Choice::Choice(346,8482
+void Choice::SetPosition(357,8698
+void Choice::SetDimensions(405,10053
+void Choice::ChangeH(466,12014
+void Choice::ChangeW(495,12947
+void Choice::SetFather(522,13700
+void Choice::SetTextual(532,13918
+void Choice::SetCollapsed(540,14041
+int Choice::Get_Textual_H(549,14168
+int Choice::Get_Textual_W(557,14408
+void Choice::SetTerminalPos(566,14615
+Stop::Stop(588,15087
+void Stop::SetPosition(595,15207
+void Stop::SetDimensions(605,15373
+void Stop::SetFather(644,16369
+void Stop::SetTextual(652,16537
+void Stop::SetCollapsed(655,16616
+Exit::Exit(667,16768
+void Exit::SetPosition(676,16935
+void Exit::SetDimensions(687,17164
+void Exit::SetFather(695,17350
+Exit_Bex::Exit_Bex(703,17476
+void Exit_Bex::SetPosition(713,17678
+void Exit_Bex::SetDimensions(740,18430
+void Exit_Bex::SetFather(798,20444
+void Exit_Bex::SetTextual(807,20646
+void Exit_Bex::SetCollapsed(814,20757
+NoExit::NoExit(826,20943
+void NoExit::SetPosition(835,21092
+void NoExit::SetDimensions(845,21266
+void NoExit::SetFather(852,21359
+ID_Place::ID_Place(861,21488
+void ID_Place::SetIdent(875,21745
+void ID_Place::SetPosition(886,21936
+void ID_Place::SetDimensions(897,22173
+void ID_Place::SetFather(928,23017
+ID_Place::~ID_Place(932,23073
+void ID_Place::SetVisible(935,23112
+void ID_Place::ClearID(941,23193
+ID_List::ID_List(953,23379
+void ID_List::SetPosition(967,23644
+void ID_List::SetDimensions(999,24385
+void ID_List::SetFather(1038,25456
+void ID_List::SetCollapsed(1047,25595
+void ID_List::HideMe(1056,25734
+void ID_List::SetRBubble(1065,25862
+void ID_List::SetAlignement(1073,25980
+int ID_List::GetCardinality(1082,26123
+void ID_List::SetVisible(1093,26291
+void ID_List::BuildSigSorts(1103,26518
+void ID_List::ClearIDs(1126,27081
+Id_Decl::Id_Decl(1139,27280
+void Id_Decl::SetPosition(1156,27659
+void Id_Decl::SetDimensions(1174,28016
+void Id_Decl::SetFather(1191,28417
+void Id_Decl::SetCollapsed(1200,28568
+Id_Decl_List::Id_Decl_List(1214,28799
+void Id_Decl_List::SetPosition(1227,29069
+void Id_Decl_List::SetDimensions(1245,29424
+void Id_Decl_List::SetFather(1262,29844
+void Id_Decl_List::SetCollapsed(1271,29988
+Comment::Comment(1286,30209
+void Comment::SetComment(1299,30446
+void Comment::SetFather(1317,30800
+void Comment::SetPosition(1321,30854
+void Comment::SetDimensions(1331,31031
+Comment::~Comment(1345,31265
+Comment_List::Comment_List(1352,31382
+void Comment_List::SetPosition(1362,31541
+void Comment_List::SetDimensions(1380,31860
+void Comment_List::SetFather(1392,32139
+Parallel::Parallel(1406,32360
+void Parallel::SetPosition(1417,32573
+void Parallel::SetDimensions(1473,34272
+void Parallel::SetTextual(1534,36167
+int Parallel::Get_Textual_W(1543,36313
+int Parallel::Get_Textual_H(1559,36722
+void Parallel::SetTerminalPos(1570,37191
+void Parallel::SetFather(1590,37698
+void Parallel::SetCollapsed(1601,37950
+Ident_Eq::Ident_Eq(1615,38177
+void Ident_Eq::SetPosition(1632,38546
+void Ident_Eq::SetDimensions(1647,38851
+void Ident_Eq::SetFather(1662,39191
+void Ident_Eq::SetCollapsed(1669,39295
+Ident_Eq_List::Ident_Eq_List(1681,39480
+void Ident_Eq_List::SetPosition(1694,39753
+void Ident_Eq_List::SetDimensions(1712,40111
+void Ident_Eq_List::SetCollapsed(1729,40538
+void Ident_Eq_List::SetFather(1738,40683
+Local_Def::Local_Def(1751,40904
+void Local_Def::SetPosition(1761,41102
+void Local_Def::SetDimensions(1791,41833
+void Local_Def::SetFather(1832,43262
+void Local_Def::SetCollapsed(1839,43370
+void Local_Def::SetTextual(1848,43504
+Hide::Hide(1860,43681
+void Hide::SetPosition(1871,43872
+void Hide::SetDimensions(1901,44569
+void Hide::SetFather(1944,45771
+void Hide::SetCollapsed(1951,45873
+void Hide::SetTextual(1961,46003
+Interl::Interl(1972,46175
+void Interl::SetPosition(1982,46361
+void Interl::SetDimensions(1993,46593
+void Interl::SetFather(2021,47103
+Syncr::Syncr(2031,47257
+void Syncr::SetPosition(2041,47438
+void Syncr::SetDimensions(2051,47609
+void Syncr::SetFather(2079,48153
+Enable::Enable(2090,48436
+void Enable::SetPosition(2102,48690
+void Enable::SetDimensions(2169,50473
+void Enable::SetTextual(2243,53017
+void Enable::SetTerminalPos(2251,53140
+int Enable::Get_Textual_W(2271,53720
+int Enable::Get_Textual_H(2282,53985
+void Enable::SetFather(2285,54104
+void Enable::SetCollapsed(2298,54418
+Disable::Disable(2314,54780
+void Disable::SetPosition(2325,55001
+void Disable::SetDimensions(2376,56251
+void Disable::SetFather(2436,58064
+void Disable::SetCollapsed(2446,58284
+void Disable::SetTextual(2455,58412
+void Disable::SetTerminalPos(2463,58536
+int Disable::Get_Textual_W(2479,58987
+int Disable::Get_Textual_H(2488,59190
+Gen_Paral::Gen_Paral(2500,59630
+void Gen_Paral::SetPosition(2513,59899
+void Gen_Paral::SetDimensions(2540,60659
+void Gen_Paral::SetFather(2590,62171
+void Gen_Paral::SetCollapsed(2597,62290
+Action_Pref::Action_Pref(2609,62583
+void Action_Pref::SetPosition(2620,62829
+void Action_Pref::SetDimensions(2669,63937
+void Action_Pref::SetFather(2724,65777
+void Action_Pref::SetCollapsed(2734,66010
+void Action_Pref::SetTextual(2743,66147
+Internal::Internal(2757,66484
+void Internal::SetPosition(2768,66658
+void Internal::SetDimensions(2778,66838
+void Internal::SetFather(2806,67442
+Communication::Communication(2816,67702
+void Communication::SetPosition(2827,67956
+void Communication::SetDimensions(2897,70390
+void Communication::SetFather(2935,71706
+void Communication::SetCollapsed(2942,71837
+void Communication::SetTextual(2949,71968
+NoGuard::NoGuard(2961,72262
+void NoGuard::SetPosition(2974,72462
+void NoGuard::SetDimensions(2984,72639
+void NoGuard::SetFather(2987,72678
+Guard::Guard(2996,72929
+void Guard::SetPosition(3008,73118
+void Guard::SetDimensions(3022,73428
+void Guard::SetFather(3044,73894
+void Guard::SetCollapsed(3050,73974
+NoExperiment::NoExperiment(3062,74258
+void NoExperiment::SetPosition(3075,74478
+void NoExperiment::SetDimensions(3085,74670
+void NoExperiment::SetFather(3088,74714
+Experiment::Experiment(3097,74978
+void Experiment::SetPosition(3110,75245
+void Experiment::SetDimensions(3128,75611
+void Experiment::SetFather(3150,76066
+void Experiment::SetCollapsed(3157,76188
+void Experiment::SetTextual(3165,76311
+Proc_Inst::Proc_Inst(3175,76476
+void Proc_Inst::SetPosition(3191,76777
+void Proc_Inst::SetDimensions(3236,77965
+void Proc_Inst::SetFather(3286,79596
+void Proc_Inst::SetCollapsed(3294,79739
+void Proc_Inst::SetTextual(3304,79909
+Value_Expr::Value_Expr(3316,80100
+void Value_Expr::SetPosition(3329,80327
+void Value_Expr::SetDimensions(3340,80572
+void Value_Expr::SetFather(3343,80614
+Value_Expr_List::Value_Expr_List(3351,80755
+void Value_Expr_List::SetPosition(3364,81042
+void Value_Expr_List::SetDimensions(3382,81406
+void Value_Expr_List::SetFather(3399,81830
+void Value_Expr_List::SetCollapsed(3408,81977
+Sum_Ident::Sum_Ident(3423,82203
+void Sum_Ident::SetPosition(3435,82445
+void Sum_Ident::SetDimensions(3466,83196
+void Sum_Ident::SetFather(3509,84540
+void Sum_Ident::SetCollapsed(3516,84653
+void Sum_Ident::SetTextual(3525,84793
+void Sum_Ident::SetTerminalPos(3532,84897
+Value::Value(3552,85432
+void Value::SetPosition(3569,85792
+void Value::SetDimensions(3583,86091
+void Value::SetFather(3606,86628
+void Value::SetCollapsed(3613,86731
+Term::Term(3626,86908
+void Term::SetPosition(3646,87323
+void Term::SetDimensions(3671,87942
+void Term::SetFather(3697,88599
+void Term::SetCollapsed(3705,88732
+Exit_Entry::Exit_Entry(3719,88947
+void Exit_Entry::SetPosition(3732,89176
+void Exit_Entry::SetDimensions(3743,89421
+void Exit_Entry::SetFather(3746,89463
+Exit_Entry_List::Exit_Entry_List(3754,89604
+void Exit_Entry_List::SetPosition(3766,89875
+void Exit_Entry_List::SetDimensions(3785,90304
+void Exit_Entry_List::SetFather(3802,90753
+void Exit_Entry_List::SetCollapsed(3811,90900
+Sum_Gate::Sum_Gate(3826,91125
+void Sum_Gate::SetPosition(3837,91363
+void Sum_Gate::SetDimensions(3873,92120
+void Sum_Gate::SetFather(3915,93438
+void Sum_Gate::SetCollapsed(3922,93549
+void Sum_Gate::SetTextual(3931,93687
+void Sum_Gate::SetTerminalPos(3938,93790
+Gate_Decl::Gate_Decl(3959,94421
+void Gate_Decl::SetPosition(3977,94900
+void Gate_Decl::SetDimensions(3995,95298
+void Gate_Decl::SetFather(4011,95694
+void Gate_Decl::SetCollapsed(4020,95871
+Gate_Decl_List::Gate_Decl_List(4034,96130
+void Gate_Decl_List::SetPosition(4047,96414
+void Gate_Decl_List::SetDimensions(4065,96779
+void Gate_Decl_List::SetFather(4082,97207
+void Gate_Decl_List::SetCollapsed(4091,97353
+Par::Par(4106,97572
+void Par::SetPosition(4126,97957
+void Par::SetDimensions(4174,99236
+void Par::SetFather(4226,100814
+void Par::SetCollapsed(4234,100943
+void Par::SetTextual(4245,101100
+Sort_Id_Exit::Sort_Id_Exit(4258,101329
+void Sort_Id_Exit::SetPosition(4270,101556
+void Sort_Id_Exit::SetDimensions(4283,101834
+void Sort_Id_Exit::SetFather(4297,102142
+void Sort_Id_Exit::SetCollapsed(4303,102228
+Equality::Equality(4314,102512
+Equality::Equality(4327,102736
+void Equality::SetPosition(4340,102987
+void Equality::SetDimensions(4357,103329
+void Equality::SetFather(4377,103720
+void Equality::SetCollapsed(4387,103858
+Guarded::Guarded(4401,104167
+void Guarded::SetPosition(4413,104384
+void Guarded::SetDimensions(4441,105084
+void Guarded::SetFather(4482,106273
+void Guarded::SetCollapsed(4489,106377
+void Guarded::SetTextual(4499,106509
+Exper_Off::Exper_Off(4510,106813
+void Exper_Off::SetPosition(4523,107035
+void Exper_Off::SetDimensions(4533,107220
+void Exper_Off::SetFather(4536,107261
+Exper_Off_List::Exper_Off_List(4544,107521
+void Exper_Off_List::SetPosition(4557,107802
+void Exper_Off_List::SetDimensions(4575,108167
+void Exper_Off_List::SetFather(4592,108594
+void Exper_Off_List::SetCollapsed(4601,108740
+Exclam::Exclam(4616,109087
+void Exclam::SetPosition(4629,109300
+void Exclam::SetDimensions(4641,109541
+void Exclam::SetFather(4655,109830
+void Exclam::SetCollapsed(4661,109912
+Query::Query(4673,110194
+void Query::SetPosition(4686,110399
+void Query::SetDimensions(4698,110636
+void Query::SetFather(4712,110918
+void Query::SetCollapsed(4718,110997
+Definition::Definition(4729,111279
+void Definition::SetPosition(4741,111448
+void Definition::SetDimensions(4752,111658
+void Definition::SetFather(4766,111896
+void Definition::SetPath(4777,112089
+Proc_List::Proc_List(4790,112374
+void Proc_List::SetPosition(4799,112505
+void Proc_List::SetDimensions(4809,112686
+void Proc_List::SetFather(4815,112767
+void Proc_List::SetPath(4824,112908
+char *Proc_List::GetPath(Proc_List::GetPath4832,113068
+
+cp-src/abstract.H,2253
+#define abstract_hh16,453
+class ID_Place:ID_Place23,536
+ char *GetIdent(ID_Place::GetIdent41,857
+ void SetRBubble(ID_Place::SetRBubble42,891
+ char GetRBubble(ID_Place::GetRBubble43,934
+class ID_List:ID_List47,1012
+class Id_Decl:Id_Decl73,1540
+class Id_Decl_List:Id_Decl_List89,1829
+class Comment:Comment105,2140
+class Comment_List:Comment_List122,2440
+class Value_Expr:Value_Expr135,2694
+class Value_Expr_List:Value_Expr_List149,2911
+class Exit_Entry:Exit_Entry165,3244
+class Exit_Entry_List:Exit_Entry_List179,3460
+class Exper_Off:Exper_Off195,3793
+class Exper_Off_List:Exper_Off_List207,3977
+class Gate_Decl:Gate_Decl223,4323
+class Gate_Decl_List:Gate_Decl_List239,4630
+class Ident_Eq:Ident_Eq255,4957
+class Ident_Eq_List:Ident_Eq_List271,5270
+class Half_Container:Half_Container287,5608
+class Specification:Specification308,5954
+class Process:Process337,6609
+ char GetNesting(Process::GetNesting363,7186
+class Proc_List:Proc_List367,7257
+class Definition:Definition382,7574
+ char *GetPath(Definition::GetPath397,7940
+class Exit:Exit407,8071
+class NoExit:NoExit421,8305
+class Value:Value440,8560
+class Term:Term456,8841
+class Equality:Equality473,9169
+class Sort_Id_Exit:Sort_Id_Exit490,9504
+class NoGuard:NoGuard511,9837
+class Guard:Guard524,10045
+class NoExperiment:NoExperiment545,10368
+class Experiment:Experiment558,10591
+ Tree_Node *GetGuard(Experiment::GetGuard574,10962
+class Exclam:Exclam578,11053
+class Query:Query593,11324
+class Internal:Internal614,11643
+class Communication:Communication627,11854
+class Gen_Paral:Gen_Paral652,12337
+ void HideGate(Gen_Paral::HideGate668,12634
+class Interl:Interl672,12730
+class Syncr:Syncr685,12929
+class Action_Pref:Action_Pref704,13185
+class Enable:Enable723,13577
+class Disable:Disable746,14097
+class Choice:Choice768,14561
+class Stop:Stop793,15054
+class Exit_Bex:Exit_Bex810,15338
+class Hide:Hide829,15707
+class Guarded:Guarded848,16047
+class Proc_Inst:Proc_Inst867,16425
+class Parallel:Parallel888,16870
+ char GetOperType(Parallel::GetOperType910,17343
+class Local_Def:Local_Def914,17429
+class Par:Par933,17801
+class Sum_Gate:Sum_Gate952,18180
+class Sum_Ident:Sum_Ident972,18613
+
+cp-src/cfront.H,2555
+struct loc     67,1948
+struct ea 80,2150
+       ea(ea::ea86,2249
+       ea(ea::ea87,2275
+       ea(ea::ea88,2301
+       ea(ea::ea89,2310
+overload error;94,2349
+#define DEL(161,4040
+#define PERM(162,4092
+#define UNPERM(163,4123
+struct node 165,4157
+struct table 175,4321
+       void    set_scope(table::set_scope198,4988
+       void    set_name(table::set_name199,5029
+       int     max(table::max201,5091
+#define DEFINED 230,5655
+#define SIMPLIFIED 231,5712
+#define DEF_SEEN 232,5754
+#define IN_ERROR 234,5859
+struct type 236,5881
+       TOK     integral(type::integral255,6278
+       TOK     numeric(type::numeric256,6324
+       TOK     num_ptr(type::num_ptr257,6370
+struct enumdef 265,6500
+               enumdef(enumdef::enumdef269,6586
+struct classdef 278,6732
+       TOK     is_simple(classdef::is_simple302,7506
+       Pname   has_ctor(classdef::has_ctor314,7759
+       Pname   has_dtor(classdef::has_dtor315,7813
+       Pname   has_itor(classdef::has_itor316,7867
+struct basetype 323,7935
+struct fct 365,8857
+       bit     declared(fct::declared396,9724
+struct name_list 403,9827
+       name_list(name_list::name_list406,9866
+struct gen 410,9931
+struct pvtyp 419,10071
+struct vec 423,10109
+       vec(vec::vec429,10182
+struct ptr 435,10289
+       ptr(ptr::ptr440,10419
+inline Pptr type::addrof(447,10546
+struct expr 469,11113
+struct texpr 527,12108
+       texpr(texpr::texpr528,12149
+struct ival 531,12218
+       ival(ival::ival532,12258
+struct call 535,12308
+       call(call::call536,12338
+struct qexpr 543,12453
+       qexpr(qexpr::qexpr544,12500
+struct ref 547,12582
+       ref(ref::ref548,12632
+struct text_expr 551,12697
+       text_expr(text_expr::text_expr552,12731
+struct name 557,12884
+       void    unhide(name::unhide592,13929
+       void    use(name::use596,14025
+       void    take_addr(name::take_addr598,14069
+struct stmt 615,14374
+struct estmt 662,15111
+       estmt(estmt::estmt669,15303
+struct ifstmt 672,15379
+       ifstmt(ifstmt::ifstmt676,15484
+struct lstmt 680,15586
+       lstmt(lstmt::lstmt686,15650
+struct forstmt 689,15728
+       forstmt(forstmt::forstmt690,15759
+struct block 694,15880
+       block(block::block695,15919
+struct pair 703,16060
+       pair(pair::pair704,16096
+struct nlist 708,16173
+       void    add(nlist::add712,16230
+struct slist 718,16344
+               slist(slist::slist721,16385
+       void    add(slist::add722,16430
+struct elist 727,16521
+               elist(elist::elist730,16562
+       void    add(elist::add731,16607
+struct dcl_context 739,16739
+       void    stack(dcl_context::stack747,17023
+       void    unstack(dcl_context::unstack748,17064
+#define MAXCONT        751,17095
+const MIA 779,17690
+struct iline 780,17705
+#define FUDGE111 791,17985
+#define DB(831,18890
+#define DB(833,18920
+
+cp-src/burton.cpp,103
+::dummy::dummy test::dummy1(1,0
+::dummy::dummy test::dummy2(6,64
+::dummy::dummy test::dummy3(11,143
+
+cp-src/functions.cpp,807
+void Date::setDate 5,148
+void Date::plus 32,939
+void Date::minus 42,1229
+void Date::shift 52,1407
+Date & Date::operator = Date::operator =62,1628
+Date & Date::operator += Date::operator +=69,1789
+Date & Date::operator -= Date::operator -=78,1939
+Date & Date::operator ++ Date::operator ++87,2080
+Date & Date::operator -- Date::operator --96,2216
+int Date::operator - Date::operator -104,2331
+int Date::operator < Date::operator <112,2483
+int Date::operator > Date::operator >116,2557
+int Date::operator == Date::operator ==120,2631
+ostream& operator << operator <<124,2707
+istream& operator >> operator >>133,2943
+bool isLeap 159,3543
+bool isHoliday 163,3629
+void asort(173,3865
+void ReadVacation 186,4064
+void Debug 201,4523
+int WorkingDays(211,4867
+Date StartDay(226,5129
+
+cp-src/MDiagArray2.h,709
+#define octave_MDiagArray2_h 29,870
+#undef LTGT35,967
+#define LTGT39,1031
+#define LTGT 42,1051
+class MDiagArray2 78,2022
+  MDiagArray2 MDiagArray2::MDiagArray282,2077
+  MDiagArray2 MDiagArray2::MDiagArray286,2154
+  MDiagArray2 MDiagArray2::MDiagArray287,2198
+  MDiagArray2 MDiagArray2::MDiagArray288,2254
+  MDiagArray2 MDiagArray2::MDiagArray289,2329
+  MDiagArray2 MDiagArray2::MDiagArray290,2387
+  MDiagArray2 MDiagArray2::MDiagArray291,2450
+  ~MDiagArray2 MDiagArray2::~MDiagArray293,2515
+  MDiagArray2<T>& operator = MDiagArray2::operator =95,2542
+  operator MArray2<T> MDiagArray2::operator MArray2<T>101,2667
+#undef LTGT144,3874
+#define INSTANTIATE_MDIAGARRAY_FRIENDS(146,3887
+
+cp-src/Pctest.h,507
+#define PCTEST_H24,837
+    PctestActionValid,::PctestActionValid47,1286
+    PctestActionValidLasthop,::PctestActionValidLasthop49,1370
+    PctestActionFiltered,::PctestActionFiltered51,1481
+    PctestActionAbort  ::PctestActionAbort53,1566
+} PctestActionType;54,1616
+class Pctest 56,1637
+    Pctest(Pctest::Pctest59,1663
+    virtual ~Pctest(Pctest::~Pctest65,1813
+    virtual char *GetTargetName(Pctest::GetTargetName77,2171
+    virtual PctestActionType GetAction(Pctest::GetAction86,2555
+
+cp-src/Range.h,424
+#define octave_Range_h 24,765
+Range35,891
+  Range Range::Range39,909
+  Range Range::Range42,995
+  Range Range::Range46,1130
+  Range Range::Range50,1248
+  double base Range::base54,1376
+  double limit Range::limit55,1425
+  double inc Range::inc56,1475
+  int nelem Range::nelem57,1523
+  void set_base Range::set_base68,1728
+  void set_limit Range::set_limit69,1774
+  void set_inc Range::set_inc70,1821
+
+cp-src/screen.cpp,228
+unsigned char cursor_x,15,548
+unsigned char cursor_x, cursor_y;15,548
+static union REGS regs;16,582
+void goto_xy(18,607
+void hide_cursor(27,774
+void cursor_position(32,836
+void clear_screen(41,997
+void write_xyc(55,1247
+
+cp-src/screen.hpp,667
+#define __COLORS9,401
+enum COLORS 11,419
+    BLACK,COLORS::BLACK12,433
+    BLUE,COLORS::BLUE13,471
+    GREEN,COLORS::GREEN14,481
+    CYAN,COLORS::CYAN15,492
+    RED,COLORS::RED16,502
+    MAGENTA,COLORS::MAGENTA17,511
+    BROWN,COLORS::BROWN18,524
+    LIGHTGRAY,COLORS::LIGHTGRAY19,535
+    DARKGRAY,COLORS::DARKGRAY20,550
+    LIGHTBLUE,COLORS::LIGHTBLUE21,589
+    LIGHTGREEN,COLORS::LIGHTGREEN22,604
+    LIGHTCYAN,COLORS::LIGHTCYAN23,620
+    LIGHTRED,COLORS::LIGHTRED24,635
+    LIGHTMAGENTA,COLORS::LIGHTMAGENTA25,649
+    YELLOW,COLORS::YELLOW26,667
+    WHITECOLORS::WHITE27,679
+#define SCREEN_FP(31,700
+#define SCREEN_START 33,795
+
+cp-src/conway.cpp,270
+#define max(12,357
+#define min(13,393
+const int num_rows 15,430
+const int num_columns 16,470
+class site *field_of_play[field_of_play18,499
+int site::total_surrounding(20,550
+void display(37,958
+void glider(50,1239
+void traffic_light(59,1478
+void main(67,1633
+
+cp-src/conway.hpp,244
+class site:site5,235
+    site(site::site10,344
+    char read(site::read12,410
+    void set(site::set13,444
+    void clear(site::clear14,478
+    void compute_next_state(site::compute_next_state15,514
+    void step(site::step22,717
+
+cp-src/clheir.cpp,307
+const int max_num_generic_objects 9,298
+generic_object * object_registry[object_registry10,340
+void init_registry(12,400
+void step_everybody(19,527
+void discrete_location::clear_neighbors(31,852
+generic_object::generic_object(36,981
+generic_object::~generic_object(48,1255
+void agent::move(53,1353
+
+cp-src/clheir.hpp,609
+class generic_object13,520
+    virtual void compute_next_state(generic_object::compute_next_state21,842
+    virtual void step(generic_object::step22,888
+const int max_num_directions 31,1219
+class location:location33,1289
+    location(location::location43,1642
+class irregular_location:irregular_location47,1686
+    irregular_location(irregular_location::irregular_location51,1762
+class discrete_location:discrete_location56,1889
+    discrete_location(discrete_location::discrete_location62,2044
+    void assign_neighbor(discrete_location::assign_neighbor66,2184
+class agent:agent75,2508
+
+cp-src/fail.C,365
+struct A 7,263
+          struct B A::B8,274
+                  struct C A::B::C9,289
+                          C(A::B::C::C11,318
+                          operator int(A::B::C::operator int12,342
+                  typedef C T;A::B::T14,389
+          typedef B T2;A::T216,414
+class A 23,453
+       class B A::B24,463
+               class C A::B::C25,474
+               int f(A::B::f26,488
+int A::B::f(31,521
+main(37,571
+       class D 41,622
+               D(D::D43,659
+
+el-src/TAGTEST.EL,148
+(foo::defmumble bletch 1,0
+(defalias 'pending-delete-mode pending-delete-mode5,102
+(defalias (quote explicitly-quoted-pending-delete-mode)8,175
+
+el-src/emacs/lisp/progmodes/etags.el,5069
+(defvar tags-file-name 34,1034
+(defgroup etags 43,1498
+(defcustom tags-case-fold-search 47,1566
+(defcustom tags-table-list 59,2051
+(defcustom tags-compression-info-list69,2449
+(defcustom tags-add-tables 88,3231
+(defcustom tags-revert-without-query 98,3627
+(defvar tags-table-computed-list 103,3778
+(defvar tags-table-computed-list-for 112,4262
+(defvar tags-table-list-pointer 117,4510
+(defvar tags-table-list-started-at 121,4701
+(defvar tags-table-set-list 124,4821
+(defcustom find-tag-hook 129,5000
+(defcustom find-tag-default-function 137,5263
+(define-obsolete-variable-alias 
'find-tag-marker-ring-lengthfind-tag-marker-ring-length145,5602
+(defcustom tags-tag-face 148,5699
+(defcustom tags-apropos-verbose 154,5834
+(defcustom tags-apropos-additional-actions 160,5998
+(defvaralias 'find-tag-marker-ring find-tag-marker-ring183,6917
+(defvar default-tags-table-function 189,7097
+(defvar tags-location-ring 194,7323
+(defvar tags-table-files 201,7599
+(defvar tags-completion-table 206,7766
+(defvar tags-included-tables 209,7858
+(defvar next-file-list 212,7953
+(defvar tags-table-format-functions 217,8059
+(defvar file-of-tag-function 224,8440
+(defvar tags-table-files-function 228,8634
+(defvar tags-completion-table-function 230,8745
+(defvar snarf-tag-function 232,8840
+(defvar goto-tag-location-function 236,9049
+(defvar find-tag-regexp-search-function 239,9222
+(defvar find-tag-regexp-tag-order 241,9343
+(defvar find-tag-regexp-next-line-after-failure-p 243,9452
+(defvar find-tag-search-function 245,9572
+(defvar find-tag-tag-order 247,9679
+(defvar find-tag-next-line-after-failure-p 249,9774
+(defvar list-tags-function 251,9880
+(defvar tags-apropos-function 253,9968
+(defvar tags-included-tables-function 255,10062
+(defvar verify-tags-table-function 257,10181
+(defun initialize-new-tags-table 260,10292
+(defun tags-table-mode 276,10980
+(defun visit-tags-table 285,11245
+(defun tags-table-check-computed-list 321,12783
+(defun tags-table-extend-computed-list 360,14654
+(defun tags-expand-table-name 400,16367
+(defun tags-table-list-member 409,16710
+(defun tags-verify-table 421,17182
+(defun tags-table-including 470,19302
+(defun tags-next-table 522,21346
+(defun visit-tags-table-buffer 543,22203
+(defun tags-reset-tags-tables 712,28513
+(defun file-of-tag 731,29170
+(defun tags-table-files 740,29519
+(defun tags-included-tables 749,29869
+(defun tags-completion-table 755,30115
+(defun tags-lazy-completion-table 783,31309
+(defun tags-completion-at-point-function 799,31944
+(defun find-tag-tag 818,32694
+(defvar last-tag 837,33367
+(defun find-tag-interactive 840,33426
+(defvar find-tag-history 852,33841
+(defun find-tag-noselect 860,34011
+(defun find-tag 932,37125
+(defun find-tag-other-window 959,38341
+(defun find-tag-other-frame 1000,40269
+(defun find-tag-regexp 1025,41443
+(defalias 'pop-tag-mark pop-tag-mark1049,42605
+(defvar tag-lines-already-matched 1052,42656
+(defun find-tag-in-order 1055,42763
+(defun tag-find-file-of-tag-noselect 1167,47109
+(defun tag-find-file-of-tag 1200,48955
+(defun etags-recognize-tags-table 1208,49181
+(defun etags-verify-tags-table 1241,50812
+(defun etags-file-of-tag 1246,51010
+(defun etags-tags-completion-table 1256,51345
+(defun etags-snarf-tag 1286,52551
+(defun etags-goto-tag-location 1324,54120
+(defun etags-list-tags 1388,56563
+(defmacro tags-with-face 1423,57838
+(defun etags-tags-apropos-additional 1431,58171
+(defun etags-tags-apropos 1465,59408
+(defun etags-tags-table-files 1527,61617
+(defun etags-tags-included-tables 1542,62053
+(defun tags-recognize-empty-tags-table 1559,62593
+(defun tag-exact-file-name-match-p 1587,63739
+(defun tag-file-name-match-p 1596,64132
+(defun tag-exact-match-p 1609,64688
+(defun tag-implicit-name-match-p 1620,65256
+(defun tag-symbol-match-p 1633,65856
+(defun tag-word-match-p 1643,66292
+(defun tag-partial-file-name-match-p 1652,66690
+(defun tag-any-match-p 1662,67134
+(defun tag-re-match-p 1667,67318
+(defcustom tags-loop-revert-buffers 1675,67567
+(defun next-file 1685,67976
+(defvar tags-loop-operate 1760,70890
+(defvar tags-loop-scan1763,70984
+(defun tags-loop-eval 1771,71314
+(defun tags-loop-continue 1782,71643
+(defun tags-search 1850,73949
+(defun tags-query-replace 1871,74775
+(defun tags-complete-tags-table-file 1896,75999
+(defun list-tags 1906,76378
+(defun tags-apropos 1934,77331
+(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78157
+(defun select-tags-table 1964,78396
+(defvar select-tags-table-mode-map 2019,80523
+(define-derived-mode select-tags-table-mode 2030,80906
+(defun select-tags-table-select 2034,81090
+(defun select-tags-table-quit 2043,81456
+(defun complete-tag 2049,81611
+(defconst etags--xref-limit 2074,82552
+(defvar etags-xref-find-definitions-tag-order 2076,82587
+(defun etags-xref-find 2082,82877
+(defun etags--xref-find-definitions 2096,83406
+(defclass xref-etags-location 2129,85121
+(defun xref-make-etags-location 2135,85344
+(cl-defmethod xref-location-marker 2139,85499
+(cl-defmethod xref-location-line 2146,85743
+
+erl-src/gs_dialog.erl,98
+-define(VERSION2,32
+behaviour_info(51,2177
+show(124,5458
+dialog_loop(219,9529
+test(252,10806
+
+erl-src/lines.erl,386
+-define(BREAK66,2377
+-define(dbg68,2437
+new(73,2565
+count(80,2686
+nth(87,2815
+append(104,3301
+replace(119,3816
+insert(138,4559
+insert_after(165,5501
+delete(192,6456
+convert_to_list(215,7110
+convert_from_list(220,7259
+replace_nth(229,7518
+insert_nth(234,7618
+insert_after_nth(239,7711
+delete_nth(244,7828
+split_at(252,8027
+balance_left(267,8451
+balance_right(282,8865
+
+erl-src/lists.erl,593
+member(21,663
+append(30,790
+reverse(48,1099
+nth(59,1310
+nthtail(64,1382
+prefix(73,1546
+suffix(83,1707
+last(92,1882
+seq(101,2058
+sum(109,2265
+duplicate(116,2432
+min(124,2628
+max(132,2837
+sublist(141,3083
+delete(152,3329
+sort(161,3483
+split_and_sort(165,3559
+merge(175,3811
+concat(190,4219
+thing_to_list(195,4300
+flatten(204,4606
+flat_length(222,5003
+keymember(239,5451
+keysearch(246,5609
+keydelete(253,5770
+keyreplace(260,5923
+keysort(266,6113
+split_and_keysort(270,6229
+keymerge(277,6504
+keymap(288,6851
+map(311,7829
+foldl(315,7919
+foldr(320,8037
+zf(325,8155
+
+f-src/entry.for,172
+      LOGICAL FUNCTION PRTPKG 3,75
+       ENTRY  SETPRT 194,3866
+       ENTRY  MSGSEL 395,8478
+     & intensity1(577,12231
+       character*(*) function foo(579,12307
+
+f-src/entry.strange_suffix,172
+      LOGICAL FUNCTION PRTPKG 3,75
+       ENTRY  SETPRT 194,3866
+       ENTRY  MSGSEL 395,8478
+     & intensity1(577,12231
+       character*(*) function foo(579,12307
+
+f-src/entry.strange,103
+       ENTRY  MSGSEL 193,4382
+     & intensity1(375,8135
+       character*(*) function foo(377,8211
+
+forth-src/test-forth.fth,408
+: a-forth-word 20,301
+99 constant a-forth-constant!22,343
+55 value a-forth-value?23,373
+create :a-forth-dictionary-entry24,397
+defer #a-defer-word27,460
+: (another-forth-word)(another-forth-word29,481
+   9   field   >field136,582
+   5   field   >field237,605
+constant (a-forth-constant(a-forth-constant38,628
+2000 buffer: #some-storage41,657
+code assemby-code-word 43,685
+: a-forth-word 50,870
+
+html-src/softwarelibero.html,198
+Cos'� il software libero?4,38
+Licenze d'uso di un programmalicenze65,2474
+Sfatiamo alcuni miti138,6064
+Il movimento open sourceoss191,7968
+Impatto pratico del software liberoimpatto231,9986
+
+html-src/index.shtml,104
+&nbsp;8,281
+In evidenza15,446
+Comunicati e iniziative32,974
+Ultime notizie dall'associazione63,2027
+
+html-src/algrthms.html,467
+Tutorial on Convolutional Coding with Viterbi Decoding--Description of the 
Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and 
Quantizing Algorithms7,276
+Descriptionalgorithms10,477
+Generating the Datagenalgorithm48,1953
+Convolutionallyconalgorithm55,2463
+Nextstatetable262,11331
+Outputoutputtable350,13571
+Mapping the Channel Symbolsmapping433,15786
+Adding Noise to theaddnoise439,16174
+Quantizing the Receivedquantizing469,18637
+
+html-src/software.html,438
+Francesco Potort� Software Page9,280
+Software that I wrote for supporting my research activitysimulation36,1400
+MTGmtg41,1484
+Fracasfracas65,2626
+GaliLEOgalileo101,4234
+Leasqrleasqr114,4679
+Free software that I wrote for the GNU project or for my personal or 
workgnu142,6067
+Etagsetags148,6182
+checkiso161,6731
+cgrep178,7549
+debian-bug.eldebian-bug190,7981
+tcpdump205,8566
+Links to interesting softwarelinks216,8893
+
+java-src/AWTEMul.java,4356
+public class AWTEventMulticaster 63,2111
+    protected 
AWTEventMulticaster(AWTEventMulticaster.AWTEventMulticaster77,2555
+    protected EventListener remove(AWTEventMulticaster.remove86,2820
+    public void componentResized(AWTEventMulticaster.componentResized102,3294
+    public void componentMoved(AWTEventMulticaster.componentMoved112,3626
+    public void componentShown(AWTEventMulticaster.componentShown122,3952
+    public void componentHidden(AWTEventMulticaster.componentHidden132,4280
+    public void componentAdded(AWTEventMulticaster.componentAdded142,4619
+    public void componentRemoved(AWTEventMulticaster.componentRemoved152,4959
+    public void focusGained(AWTEventMulticaster.focusGained162,5281
+    public void focusLost(AWTEventMulticaster.focusLost172,5572
+    public void keyTyped(AWTEventMulticaster.keyTyped182,5853
+    public void keyPressed(AWTEventMulticaster.keyPressed192,6129
+    public void keyReleased(AWTEventMulticaster.keyReleased202,6413
+    public void mouseClicked(AWTEventMulticaster.mouseClicked212,6704
+    public void mousePressed(AWTEventMulticaster.mousePressed222,7004
+    public void mouseReleased(AWTEventMulticaster.mouseReleased232,7306
+    public void mouseEntered(AWTEventMulticaster.mouseEntered242,7609
+    public void mouseExited(AWTEventMulticaster.mouseExited252,7907
+    public void mouseDragged(AWTEventMulticaster.mouseDragged262,8204
+    public void mouseMoved(AWTEventMulticaster.mouseMoved272,8512
+    public void windowOpened(AWTEventMulticaster.windowOpened282,8819
+    public void windowClosing(AWTEventMulticaster.windowClosing292,9125
+    public void windowClosed(AWTEventMulticaster.windowClosed302,9432
+    public void windowIconified(AWTEventMulticaster.windowIconified312,9742
+    public void 
windowDeiconified(AWTEventMulticaster.windowDeiconified322,10064
+    public void windowActivated(AWTEventMulticaster.windowActivated332,10389
+    public void 
windowDeactivated(AWTEventMulticaster.windowDeactivated342,10712
+    public void actionPerformed(AWTEventMulticaster.actionPerformed352,11037
+    public void 
itemStateChanged(AWTEventMulticaster.itemStateChanged362,11356
+    public void 
adjustmentValueChanged(AWTEventMulticaster.adjustmentValueChanged372,11690
+    public void 
textValueChanged(AWTEventMulticaster.textValueChanged376,11874
+    public static ComponentListener add(AWTEventMulticaster.add387,12225
+    public static ContainerListener add(AWTEventMulticaster.add397,12571
+    public static FocusListener add(AWTEventMulticaster.add407,12901
+    public static KeyListener add(AWTEventMulticaster.add417,13207
+    public static MouseListener add(AWTEventMulticaster.add427,13513
+    public static MouseMotionListener add(AWTEventMulticaster.add437,13855
+    public static WindowListener add(AWTEventMulticaster.add447,14197
+    public static ActionListener add(AWTEventMulticaster.add457,14519
+    public static ItemListener add(AWTEventMulticaster.add467,14833
+    public static AdjustmentListener add(AWTEventMulticaster.add477,15163
+    public static TextListener add(AWTEventMulticaster.add480,15310
+    public static ComponentListener 
remove(AWTEventMulticaster.remove490,15664
+    public static ContainerListener 
remove(AWTEventMulticaster.remove500,16044
+    public static FocusListener remove(AWTEventMulticaster.remove510,16408
+    public static KeyListener remove(AWTEventMulticaster.remove520,16748
+    public static MouseListener remove(AWTEventMulticaster.remove530,17088
+    public static MouseMotionListener 
remove(AWTEventMulticaster.remove540,17465
+    public static WindowListener remove(AWTEventMulticaster.remove550,17841
+    public static ActionListener remove(AWTEventMulticaster.remove560,18197
+    public static ItemListener remove(AWTEventMulticaster.remove570,18545
+    public static AdjustmentListener 
remove(AWTEventMulticaster.remove580,18909
+    public static TextListener remove(AWTEventMulticaster.remove583,19062
+    protected static EventListener 
addInternal(AWTEventMulticaster.addInternal597,19608
+    protected static EventListener 
removeInternal(AWTEventMulticaster.removeInternal614,20244
+    protected void saveInternal(AWTEventMulticaster.saveInternal628,20582
+    static void save(AWTEventMulticaster.save646,21131
+
+java-src/KeyEve.java,698
+public class KeyEvent 36,1075
+    public KeyEvent(KeyEvent.KeyEvent234,9912
+    public KeyEvent(KeyEvent.KeyEvent252,10510
+    public int getKeyCode(KeyEvent.getKeyCode261,10836
+    public void setKeyCode(KeyEvent.setKeyCode265,10897
+    public void setKeyChar(KeyEvent.setKeyChar269,10978
+    public void setModifiers(KeyEvent.setModifiers273,11060
+    public char getKeyChar(KeyEvent.getKeyChar282,11331
+    public static String getKeyText(KeyEvent.getKeyText290,11561
+    public static String 
getKeyModifiersText(KeyEvent.getKeyModifiersText377,16662
+    public boolean isActionKey(KeyEvent.isActionKey403,17618
+    public String paramString(KeyEvent.paramString407,17704
+
+java-src/SMan.java,5099
+class SecurityManager 80,3387
+    public boolean getInCheck(SecurityManager.getInCheck101,4075
+    protected SecurityManager(SecurityManager.SecurityManager114,4497
+    protected Class 
currentLoadedClass(SecurityManager.currentLoadedClass149,5707
+    protected boolean inClass(SecurityManager.inClass184,7034
+    protected boolean inClassLoader(SecurityManager.inClassLoader196,7372
+    public Object 
getSecurityContext(SecurityManager.getSecurityContext221,8485
+    public void 
checkCreateClassLoader(SecurityManager.checkCreateClassLoader238,9069
+    public void checkAccess(SecurityManager.checkAccess268,10298
+    public void checkAccess(SecurityManager.checkAccess298,11632
+    public void checkExit(SecurityManager.checkExit323,12649
+    public void checkExec(SecurityManager.checkExec349,13734
+    public void checkLink(SecurityManager.checkLink375,14813
+    public void checkRead(SecurityManager.checkRead394,15485
+    public void checkRead(SecurityManager.checkRead412,16111
+    public void checkRead(SecurityManager.checkRead434,17017
+    public void checkWrite(SecurityManager.checkWrite453,17706
+    public void checkWrite(SecurityManager.checkWrite471,18337
+    public void checkDelete(SecurityManager.checkDelete493,19165
+    public void checkConnect(SecurityManager.checkConnect517,20119
+    public void checkConnect(SecurityManager.checkConnect543,21254
+    public void checkListen(SecurityManager.checkListen561,21910
+    public void checkAccept(SecurityManager.checkAccept585,22887
+    public void checkMulticast(SecurityManager.checkMulticast597,23272
+    public void checkMulticast(SecurityManager.checkMulticast610,23732
+    public void 
checkPropertiesAccess(SecurityManager.checkPropertiesAccess632,24609
+    public void 
checkPropertyAccess(SecurityManager.checkPropertyAccess654,25449
+    public boolean 
checkTopLevelWindow(SecurityManager.checkTopLevelWindow680,26580
+    public void 
checkPrintJobAccess(SecurityManager.checkPrintJobAccess689,26763
+    public void 
checkSystemClipboardAccess(SecurityManager.checkSystemClipboardAccess698,26958
+    public void 
checkAwtEventQueueAccess(SecurityManager.checkAwtEventQueueAccess707,27159
+    public void 
checkPackageAccess(SecurityManager.checkPackageAccess729,27966
+    public void 
checkPackageDefinition(SecurityManager.checkPackageDefinition751,28803
+    public void checkSetFactory(SecurityManager.checkSetFactory775,29929
+    public void checkMemberAccess(SecurityManager.checkMemberAccess786,30209
+    public void 
checkSecurityAccess(SecurityManager.checkSecurityAccess796,30430
+    public ThreadGroup getThreadGroup(SecurityManager.getThreadGroup811,30923
+class NullSecurityManager 817,31025
+    public void 
checkCreateClassLoader(NullSecurityManager.checkCreateClassLoader818,31077
+    public void checkAccess(NullSecurityManager.checkAccess819,31123
+    public void checkAccess(NullSecurityManager.checkAccess820,31165
+    public void checkExit(NullSecurityManager.checkExit821,31212
+    public void checkExec(NullSecurityManager.checkExec822,31254
+    public void checkLink(NullSecurityManager.checkLink823,31296
+    public void checkRead(NullSecurityManager.checkRead824,31338
+    public void checkRead(NullSecurityManager.checkRead825,31387
+    public void checkRead(NullSecurityManager.checkRead826,31430
+    public void checkWrite(NullSecurityManager.checkWrite827,31489
+    public void checkWrite(NullSecurityManager.checkWrite828,31539
+    public void checkDelete(NullSecurityManager.checkDelete829,31583
+    public void checkConnect(NullSecurityManager.checkConnect830,31628
+    public void checkConnect(NullSecurityManager.checkConnect831,31684
+    public void checkListen(NullSecurityManager.checkListen832,31756
+    public void checkAccept(NullSecurityManager.checkAccept833,31798
+    public void checkMulticast(NullSecurityManager.checkMulticast834,31853
+    public void checkMulticast(NullSecurityManager.checkMulticast835,31907
+    public void 
checkPropertiesAccess(NullSecurityManager.checkPropertiesAccess836,31971
+    public void 
checkPropertyAccess(NullSecurityManager.checkPropertyAccess837,32015
+    public void 
checkPropertyAccess(NullSecurityManager.checkPropertyAccess838,32067
+    public boolean 
checkTopLevelWindow(NullSecurityManager.checkTopLevelWindow839,32131
+    public void 
checkPrintJobAccess(NullSecurityManager.checkPrintJobAccess840,32202
+    public void 
checkSystemClipboardAccess(NullSecurityManager.checkSystemClipboardAccess841,32244
+    public void 
checkAwtEventQueueAccess(NullSecurityManager.checkAwtEventQueueAccess842,32293
+    public void 
checkPackageAccess(NullSecurityManager.checkPackageAccess843,32340
+    public void 
checkPackageDefinition(NullSecurityManager.checkPackageDefinition844,32391
+    public void checkSetFactory(NullSecurityManager.checkSetFactory845,32446
+    public void 
checkMemberAccess(NullSecurityManager.checkMemberAccess846,32484
+    public void 
checkSecurityAccess(NullSecurityManager.checkSecurityAccess847,32546
+
+java-src/SysCol.java,295
+public final class SystemColor 37,1402
+    private static void 
updateSystemColors(SystemColor.updateSystemColors349,10617
+    private SystemColor(SystemColor.SystemColor357,10885
+    public int getRGB(SystemColor.getRGB370,11245
+    public String toString(SystemColor.toString377,11388
+
+java-src/TG.java,2041
+class ThreadGroup 54,2104
+    private ThreadGroup(ThreadGroup.ThreadGroup72,2495
+    public ThreadGroup(ThreadGroup.ThreadGroup84,2848
+    public ThreadGroup(ThreadGroup.ThreadGroup105,3714
+    public final String getName(ThreadGroup.getName124,4189
+    public final ThreadGroup getParent(ThreadGroup.getParent135,4492
+    public final int getMaxPriority(ThreadGroup.getMaxPriority148,4867
+    public final boolean isDaemon(ThreadGroup.isDaemon161,5305
+    public synchronized boolean isDestroyed(ThreadGroup.isDestroyed170,5470
+    public final void setDaemon(ThreadGroup.setDaemon192,6368
+    public final void setMaxPriority(ThreadGroup.setMaxPriority213,7110
+    public final boolean parentOf(ThreadGroup.parentOf246,8106
+    public final void checkAccess(ThreadGroup.checkAccess268,8834
+    public int activeCount(ThreadGroup.activeCount283,9286
+    public int enumerate(ThreadGroup.enumerate322,10497
+    public int enumerate(ThreadGroup.enumerate344,11481
+    private int enumerate(ThreadGroup.enumerate348,11584
+    public int activeGroupCount(ThreadGroup.activeGroupCount389,12588
+    public int enumerate(ThreadGroup.enumerate425,13727
+    public int enumerate(ThreadGroup.enumerate445,14595
+    private int enumerate(ThreadGroup.enumerate449,14703
+    public final void stop(ThreadGroup.stop499,16212
+    public final void suspend(ThreadGroup.suspend537,17477
+    public final void resume(ThreadGroup.resume575,18749
+    public final void destroy(ThreadGroup.destroy607,19779
+    private final void add(ThreadGroup.add643,20704
+    private void remove(ThreadGroup.remove668,21402
+    void add(ThreadGroup.add697,22142
+    void remove(ThreadGroup.remove722,22808
+    public void list(ThreadGroup.list751,23503
+    void list(ThreadGroup.list754,23556
+    public void uncaughtException(ThreadGroup.uncaughtException810,25512
+    public boolean 
allowThreadSuspension(ThreadGroup.allowThreadSuspension823,25823
+    public String toString(ThreadGroup.toString837,26142
+
+lua-src/allegro.lua,400
+local function get_layer_by_name 7,175
+local function count_layers 33,621
+function GetLayerByName 54,980
+function GetUniqueLayerName 65,1204
+function SelectLayer 76,1415
+function NewLayer 86,1773
+function NewLayerSet 144,3226
+function RemoveLayer 170,3750
+function MoveLayerTop 211,4767
+function MoveLayerBottom 223,5079
+function MoveLayerBefore 236,5457
+function MoveLayerAfter 258,6090
+
+make-src/Makefile,1133
+LATEST=1,0
+NONSRCS=35,1578
+CPPFLAGS=49,2191
+LDFLAGS=50,2260
+FASTCFLAGS=55,2531
+FILTER=58,2642
+       @-$($72,3064
+       @-$($73,3113
+       @-$($74,3177
+       @-$($75,3223
+       @-$($76,3291
+       @-$($77,3383
+       @$(81,3466
+       @$(82,3514
+       @$(83,3577
+       @$(84,3622
+       @$(85,3689
+       @$(86,3780
+${CHECKOBJS}: CFLAGS=88,3806
+       @env CHECKEROPTS=92,3922
+       @$(98,4094
+       @$(106,4250
+       @$(110,4374
+       @$(114,4500
+       @for i in $(SRCS); do echo $$i;140,5315
+       $(160,6053
+       $(163,6114
+       $(166,6177
+       $(169,6228
+       $(172,6317
+       sdiff --suppress-common-lines --width=width186,6614
+       sdiff --suppress-common-lines --width=width189,6703
+       sdiff --suppress-common-lines --width=width192,6791
+       sdiff --suppress-common-lines --width=width195,6880
+       TEXTAGS=204,7122
+       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* 
--regex=regex204,7122
+       ${RUN} etags12 --members -o $@ --regex=regex207,7239
+       ${RUN} ./ctags -o $@ --regex=regex213,7388
+       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=regex216,7464
+       TEXTAGS=219,7583
+       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ 
--regex=regex219,7583
+       ${RUN} ./extags -e --regex-c=c222,7710
+
+objc-src/Subprocess.h,98
+#define Subprocess 41,1217
+#define BUFFERSIZE 43,1267
address@hidden Subprocess:Subprocess45,1292
+
+objc-src/Subprocess.m,475
+#define        PTY_TEMPLATE 20,494
+#define        PTY_LENGTH 21,528
address@hidden Subprocess(Private)Subprocess(Private)32,737
+- childDidExit39,851
+- fdHandler:67,1589
+showError 98,2360
+fdHandler 112,2785
+getptys 119,2907
+- init:183,4815
+    andStdErr:init:withDelegate:andPtySupport:andStdErr:197,5147
+- send:(const char *)string withNewline:send:withNewline:300,7436
+- send:308,7599
+- terminateInput314,7689
+- terminate:321,7810
+- setDelegate:332,7961
+- delegate338,8031
+
+objc-src/PackInsp.h,109
+#define NUMSTATS       36,1101
+#define TYPESTOSTAT    37,1120
address@hidden PackageInspector:PackageInspector39,1172
+
+objc-src/PackInsp.m,1360
+static const char RCSid[RCSid30,1032
+#define VERSION        34,1116
+#   define DEBUG 37,1155
+#define LISTCONTENTS   39,1181
+#define OPENBUTTON     47,1352
+#define LISTCONTENTSBUTTON     48,1449
+#define LISTDESCRIPTIONBUTTON  49,1562
+#define STATE_UNINSTALLED      52,1687
+#define STATE_INSTALLED        53,1807
+#define STATE_COMPRESSD        54,1948
+#define SIZEFORMAT     57,2152
+#define KBYTES 58,2362
+#define MBYTES 59,2473
+#define LOCALIZE(61,2585
+#define LOCALIZE_ARCH(62,2668
++newnew67,2802
+-showInfo:showInfo:93,3417
+-revert:revert:107,3737
+-ok:ok:136,4297
+-loadload143,4424
+#define LOOKUP(156,4826
+#undef LOOKUP176,5694
+-loadKeyValuesFrom:(const char *)type 
inTable:loadKeyValuesFrom:inTable:186,5852
+-loadContentsOf:(const char *)type inTable:loadContentsOf:inTable:238,7079
+-loadImageloadImage257,7552
+#define STAT_EQ(275,7940
+-(BOOL)shouldLoad280,8116
+-toggleDescriptiontoggleDescription301,8626
+-(const char *)getPath:(char *)buf forType:getPath:forType:317,8899
+-setRevertButtonTitlesetRevertButtonTitle333,9320
+-(const char *)formatSize:(const char *)size inBuf:formatSize:inBuf:344,9525
+#define WORKING        368,10045
+-(void)getArchs370,10100
+-(void)addArchs:385,10520
+-subprocess:(Subprocess *)sender output:subprocess:output:428,11351
+-subprocessDone:subprocessDone:436,11484
+static void openInWorkspace(446,11634
+-open:open:464,12063
+
+objcpp-src/SimpleCalc.H,41
address@hidden SimpleCalc:SimpleCalc14,400
+
+objcpp-src/SimpleCalc.M,300
+- init52,1747
+- appendToDisplay:60,1933
+- registerAction:70,2210
+- decimalKey:77,2348
+- numberKeys:91,2661
+- equalsKey:112,3192
+- operationKeys:131,3680
+- clearKey:153,4301
+- clearAllKey:160,4410
+- appDidInit:168,4591
+- windowWillClose:178,4882
+- infoPanel:186,5132
+- helpPanel:198,5482
+
+pas-src/common.pas,1875
+procedure InitializeStringPackage;26,527
+function newtextstring;34,874
+procedure disposetextstring;52,1404
+function ConcatT;78,2066
+function AppendTextString;112,3238
+function CopyTextString;132,3947
+procedure CONVERT_CHARSTRING_TO_VALUE;151,4505
+procedure append_string;172,5166
+function To_Upper;186,5462
+function To_Lower;194,5617
+function EmptyNmStr(209,6213
+function chartonmstr;219,6436
+function LowerCaseNmStr;230,6682
+function concatenatenamestrings;242,7007
+procedure writenamestring;263,7517
+function IsControlChar;277,7928
+function namestringequal;283,8079
+function NameStringLess;302,8539
+function IsControlCharName(343,9710
+function SubString;358,10208
+function SkipChars;379,10791
+function RemoveUnderlineControl;397,11311
+procedure First100Chars;427,12162
+procedure SkipSpaces;462,13298
+function SkipBlanks;477,13782
+function stripname;505,14595
+function Locate;522,15039
+function NameHasChar;543,15581
+function integertonmstr;561,16134
+function NmStrToInteger;585,16901
+function AddNullToNmStr;600,17317
+function ValToNmStr;611,17585
+function ChangeFileType;625,18037
+function StripPath;647,18734
+function ReprOfChar;675,19343
+procedure ExtractCommentInfo;702,20749
+procedure INSERT_TREE_NODE;784,24053
+function GetNameList;920,27926
+procedure DisposeANameList(925,28010
+procedure DisposeNameList;938,28340
+function GetNewNameListNode;943,28409
+function insertname;972,29051
+procedure InitNameList;988,29471
+procedure InitNameStringPool;998,29767
+procedure NewNameString;1004,29867
+procedure ReleaseNameString;1022,30232
+procedure SDTrefStringToRec 1045,30741
+procedure SDTrefSkipSpaces;1059,31092
+function SDTrefIsEnd 1070,31323
+function SDTrefGetInteger 1082,31529
+procedure SDTrefRecToString 1303,37546
+function NmStrToErrStr;1497,42305
+function ErrStrToNmStr;1509,42557
+function GetTextRef;1529,43112
+
+php-src/lce_functions.php,2152
+  define("LCE_FUNCTIONS"LCE_FUNCTIONS4,38
+  define("LCE_UNKNOWN"LCE_UNKNOWN9,145
+  define("LCE_WS"LCE_WS11,194
+  define("LCE_COMMENT"LCE_COMMENT13,244
+  define("LCE_COMMENT_USER"LCE_COMMENT_USER15,303
+  define("LCE_COMMENT_TOOL"LCE_COMMENT_TOOL17,366
+  define("LCE_MSGID"LCE_MSGID19,430
+  define("LCE_MSGSTR"LCE_MSGSTR21,488
+  define("LCE_TEXT"LCE_TEXT23,541
+  define("STATE_ABORT"STATE_ABORT25,567
+  define("STATE_OK"STATE_OK26,595
+  define("STATE_LOOP"STATE_LOOP27,620
+  class POEntryAD 29,648
+      function validate(31,683
+      function checkQuotation(59,1384
+  class CommentAD 70,1639
+      function CommentAD(73,1693
+      function validate(83,1944
+  class POEntry 105,2410
+      function POEntry(119,2711
+      function lineCount(135,3255
+      function serializeToVars(141,3365
+      function write(151,3800
+  class POReader 163,4178
+      function gettext(177,4457
+      function parseFromVars(189,4705
+      function serializeToVars(215,5331
+      function POReader(229,5613
+      function read(243,5983
+      function write(259,6307
+      function isComment(277,6645
+      function comment(284,6822
+      function msgid(304,7247
+      function msgstr(320,7574
+      function start(340,8232
+      function createPOEntries(360,8644
+      function stripLine(394,9472
+      function printClassification(421,10056
+      function classifyLine(432,10301
+  function getTextDomains(471,11094
+  class PORManager 498,11756
+      function PORManager(502,11822
+      function addPOReader(507,11896
+      function &getPOReader(getPOReader512,11992
+      function getDomainNames(517,12081
+  function &loadPORManager(loadPORManager523,12174
+  function fileJoin(536,12436
+      function lce_bindtextdomain(557,12839
+      function lce_textdomain(614,14530
+      function lce_gettext(620,14641
+      function lce_dgettext(626,14767
+      function lce(634,14966
+      function lce_bindtextdomain(651,15488
+      function lce_textdomain(656,15592
+      function lce_gettext(661,15674
+      function lce_dgettext(666,15755
+      function lce(670,15855
+  function lce_geteditcode(676,15898
+
+php-src/ptest.php,46
+define("TEST"TEST1,0
+test 4,26
+foo(16,200
+
+perl-src/htlmify-cystic,1443
+my @section_name;section_name12,236
+my @appendix_name;appendix_name13,254
+my @section_toc;section_toc15,274
+my @appendix_toc;appendix_toc16,291
+my $new_tag new_tag18,310
+my $appendix;appendix24,409
+my $section;section25,423
+my $subsection;subsection26,436
+my $subsubsection;subsubsection27,452
+my $this_file_toc this_file_toc29,472
+my %file_tocs;file_tocs30,496
+my @output_files output_files32,512
+my $file_index file_index33,535
+my $output_file;output_file35,556
+my $line;line37,574
+my $subsection_marker;subsection_marker161,3883
+my $new;new163,3907
+sub read_toc main::read_toc165,3917
+         my $entry entry218,5621
+         my $entry entry234,6077
+             my $entry entry245,6351
+         my $entry entry252,6536
+         my $entry entry268,7010
+             my $entry entry276,7204
+         my $entry entry281,7328
+      my $entry entry296,7698
+sub finish_subsubsections main::finish_subsubsections302,7805
+sub finish_subsections main::finish_subsections309,7987
+sub finish_sections main::finish_sections320,8310
+sub finish_appendices main::finish_appendices331,8599
+sub section_url_base main::section_url_base337,8724
+sub section_url_name main::section_url_name342,8922
+sub section_url main::section_url355,9284
+  my $name name357,9336
+sub section_href main::section_href364,9452
+sub section_name main::section_name368,9551
+sub toc_line main::toc_line372,9655
+sub file_end main::file_end375,9750
+
+perl-src/yagrip.pl,258
+sub getopt main::getopt7,156
+       local($_,$flag,$opt,$f,$r,@temp)($_,$flag,$opt,$f,$r,@temp8,169
+sub usage main::usage38,856
+       local($prog,$_,@list)($prog,$_,@list39,868
+       
local($string,$flag,@string,@temp,@last)($string,$flag,@string,@temp,@last40,897
+
+perl-src/kai-test.pl,244
+sub f1 main::f12,16
+sub main::f2 6,50
+package Foo;10,90
+sub f3 Foo::f312,104
+sub Bar::f4 16,138
+package Bar;20,177
+sub f5 Bar::f522,191
+package Foo::Bar;26,225
+sub f6 Foo::Bar::f628,244
+package main;32,278
+sub f7 main::f734,293
+
+perl-src/mirror.pl,13410
+sub msg_versionmain::msg_version459,18271
+       local( $arg )( $arg 468,18582
+               local( $flag, $p )( $flag, $p 480,18757
+               local( $site_path )( $site_path 525,19687
+                       local( $site, $path )( $site, $path 539,19958
+               local( $key_val )( $key_val 578,20743
+               local( $user )( $user 595,21097
+               local( $c )( $c 634,21853
+                       local( $sec,$min,$hour,$mday,$mon,$year,( 
$sec,$min,$hour,$mday,$mon,$year,678,22807
+       local( $c )( $c 706,23393
+       local( $dir, $mp )( $dir, $mp 723,23695
+               local( $f )( $f 725,23740
+sub interpret_config_filesmain::interpret_config_files756,24304
+       local( $fname )( $fname 758,24333
+sub interpret_configmain::interpret_config785,24927
+sub parse_linemain::parse_line827,25710
+       local( $eqpl )( $eqpl 829,25727
+       local( $cont )( $cont 830,25744
+                       local( $v )( $v 839,26029
+sub set_defaultsmain::set_defaults860,26448
+sub command_line_overridemain::command_line_override868,26579
+       local( $key, $val, $overrides )( $key, $val, $overrides 870,26607
+sub set_variablesmain::set_variables894,27072
+       local( $key, $val )( $key, $val 896,27092
+                       local( $val_name )( $val_name 902,27259
+               local( $val )( $val 953,28825
+sub upd_valmain::upd_val962,28974
+       local( $key )( $key 964,28988
+sub pr_variablesmain::pr_variables970,29083
+       local( $msg )( $msg 972,29102
+       local( $nle )( $nle 973,29123
+       local( $out )( $out 974,29144
+       local( $key, $val, $str )( $key, $val, $str 975,29164
+sub do_mirrormain::do_mirror1007,29923
+       local( $get_one_package )( $get_one_package 1009,29939
+       local( $exit_status )( $exit_status 1030,30384
+                       local( @t )( @t 1154,33165
+       local( $con )( $con 1241,35499
+               local( @rhelp )( @rhelp 1289,36702
+       local( @sub_dirs )( @sub_dirs 1329,37778
+       local( $now )( $now 1493,41348
+               local( $arg )( $arg 1506,41774
+sub disconnectmain::disconnect1528,42250
+sub connectmain::connect1546,42576
+       local( $attempts )( $attempts 1548,42590
+       local( $res )( $res 1549,42642
+sub prodmain::prod1573,43156
+sub checkout_regexpsmain::checkout_regexps1585,43327
+       local( $ret )( $ret 1587,43350
+       local( $t )( $t 1589,43395
+               local( $val )( $val 1597,43701
+                       local( $err )( $err 1601,43786
+sub clear_localmain::clear_local1610,43909
+sub clear_remotemain::clear_remote1625,44172
+sub get_local_directory_detailsmain::get_local_directory_details1640,44445
+       local( @dirs, $dir )( @dirs, $dir 1642,44479
+       local( $last_prodded )( $last_prodded 1643,44502
+       local( $dir_level )( $dir_level 1691,45615
+       local( $i )( $i 1692,45641
+       local( $path, $time, $size, $type, $mode, $name, $isdir, $value, 
$follow )( $path, $time, $size, $type, $mode, $name, $isdir, $value, $follow 
1693,45659
+       local( $dev,$ino,$fmode,$nlink,$uid,$gid,$rdev,$ssize,( 
$dev,$ino,$fmode,$nlink,$uid,$gid,$rdev,$ssize,1694,45736
+                       local( $mapi )( $mapi 1763,47586
+sub get_remote_directory_detailsmain::get_remote_directory_details1789,48122
+       local( $type_changed )( $type_changed 1791,48157
+       local( $udirtmp )( $udirtmp 1792,48186
+       local( $storename )( $storename 1793,48206
+       local( $rls )( $rls 1825,48944
+               local( $dirtmp )( $dirtmp 1830,49002
+               local( $unsquish )( $unsquish 1832,49130
+                       local( $f )( $f 1840,49360
+               local( $dirtmp )( $dirtmp 1859,49866
+               local( $unsquish )( $unsquish 1870,50215
+                       local( $f, $uf )( $f, $uf 1878,50445
+               local( $flags )( $flags 1912,51259
+       local( $parse_state )( $parse_state 1946,52111
+                       local( $msg )( $msg 1963,52486
+sub patch_ls_lR_filemain::patch_ls_lR_file1984,52955
+       local( $f, $fr, $flb, $flt, $flp, $flz, $frb, $frt )( $f, $fr, $flb, 
$flt, $flp, $flz, $frb, $frt 1990,53055
+       local( $to , $tn )( $to , $tn 1991,53110
+       local( $tlb )( $tlb 1995,53225
+               local( $p, $s, $trz, $t, $m )( $p, $s, $trz, $t, $m 2030,54182
+               local( $tlz )( $tlz 2037,54467
+sub parse_timeoutmain::parse_timeout2089,55670
+sub parse_remote_detailsmain::parse_remote_details2095,55754
+       local( $ret )( $ret 2097,55781
+       local( $old_sig )( $old_sig 2098,55797
+sub parse_remote_details_realmain::parse_remote_details_real2125,56234
+       local( $path, $size, $time, $type, $mode, $rdir, $rcwd )( $path, 
$size, $time, $type, $mode, $rdir, $rcwd 2127,56266
+       local( @dir_list )( @dir_list 2128,56325
+       local( $i )( $i 2129,56346
+       local( $old_path )( $old_path 2130,56364
+                               local( $old_path )( $old_path 2143,56630
+                               local( $ri )( $ri 2203,58078
+                       local( $mapi )( $mapi 2214,58335
+                       local( $done )( $done 2239,58911
+sub compare_dirsmain::compare_dirs2283,59825
+       local( *src_paths,( *src_paths,2286,59915
+       local( $src_path, $dest_path, $i )( $src_path, $dest_path, $i 
2293,60099
+       local( $last_prodded )( $last_prodded 2294,60136
+       local( $desti, $srci, $compress, $srciZ, $srcigz, $split, 
$dest_path_real )( $desti, $srci, $compress, $srciZ, $srcigz, $split, 
$dest_path_real 2299,60350
+       local( $old_dest_path, $existing_path, $tmp, $restart )( 
$old_dest_path, $existing_path, $tmp, $restart 2300,60428
+       local( $sp, $dp )( $sp, $dp 2301,60486
+                  local( $real, $reali, $reali1 )( $real, $reali, $reali1 
2352,62034
+                  local( $count )( $count 2353,62072
+                       local( $value )( $value 2408,63996
+                       local( $real )( $real 2409,64028
+                       local( $reali )( $reali 2410,64086
+                               local( $old )( $old 2421,64571
+                       local( $old_dest_path )( $old_dest_path 2432,64842
+                               local( $dpp, $dps )( $dpp, $dps 2509,67031
+               local( $update )( $update 2534,67671
+sub map_namemain::map_name2651,71028
+       local( $name )( $name 2653,71043
+               local( $old_name )( $old_name 2656,71089
+               local( $tmp )( $tmp 2666,71252
+sub set_timestampsmain::set_timestamps2675,71362
+       local( $src_path )( $src_path 2677,71383
+       local( $dest_path, $dest_loc_mapi, $src_rem_mapi,  $rtime )( 
$dest_path, $dest_loc_mapi, $src_rem_mapi,  $rtime 2685,71517
+sub set_timestampmain::set_timestamp2699,71901
+       local( $path, $time )( $path, $time 2701,71921
+       local( $pr_time )( $pr_time 2703,71953
+sub make_dirsmain::make_dirs2719,72284
+       local( $thing )( $thing 2721,72300
+sub make_symlinksmain::make_symlinks2736,72489
+       local( $thing )( $thing 2738,72509
+               local( $dest, $existing )( $dest, $existing 2745,72623
+               local( $dirpart )( $dirpart 2746,72663
+               local( $ft )( $ft 2747,72704
+               local( $p )( $p 2762,73261
+                       local( $f )( $f 2770,73467
+                       local( $dl )( $dl 2788,74038
+sub do_all_transfersmain::do_all_transfers2806,74439
+       local( $src_path )( $src_path 2808,74462
+       local( $dest_path, $attribs )( $dest_path, $attribs 2809,74483
+       local( $srci )( $srci 2810,74515
+               local( $newpath )( $newpath 2838,75124
+sub transfer_filemain::transfer_file2869,75847
+       local( $src_path, $dest_path, $attribs, $timestamp )( $src_path, 
$dest_path, $attribs, $timestamp 2871,75867
+       local( $dir, $file, $temp, $compress, $split, $restart, $mesg, 
$got_mesg )( $dir, $file, $temp, $compress, $split, $restart, $mesg, $got_mesg 
2872,75927
+               local( $src_file )( $src_file 2915,76782
+               local( $comptemp )( $comptemp 2916,76816
+                       local( $f )( $f 2921,76964
+               local($filesize)($filesize2944,77569
+                       local( $ti )( $ti 2975,78401
+               local( $f )( $f 2997,78887
+               local( $comp )( $comp 2998,78912
+       local( $filesize )( $filesize 3015,79427
+       local( $sizemsg )( $sizemsg 3016,79469
+       local( $srcsize )( $srcsize 3017,79501
+               local( $time )( $time 3029,79865
+       local( $as )( $as 3046,80223
+       local( $locali )( $locali 3054,80499
+sub filename_to_tempnamemain::filename_to_tempname3062,80713
+       local( $dir, $file )( $dir, $file 3064,80740
+       local ( $dest_path )( $dest_path 3066,80769
+sub log_uploadmain::log_upload3090,81228
+       local( $src_path, $dest_path, $got_mesg, $size )( $src_path, 
$dest_path, $got_mesg, $size 3092,81245
+sub do_deletesmain::do_deletes3118,81773
+       local( *src_paths,( *src_paths,3121,81861
+       local( $files_to_go, $dirs_to_go )( $files_to_go, $dirs_to_go 
3125,81960
+       local( $src_path, $i )( $src_path, $i 3131,82055
+       local( $orig_do_deletes )( $orig_do_deletes 3132,82080
+       local( $orig_save_deletes )( $orig_save_deletes 3133,82122
+       local( $del_patt )( $del_patt 3135,82169
+               local( $per )( $per 3162,82843
+               local( $per )( $per 3184,83513
+                       local( $save_dir_tail )( $save_dir_tail 3226,84617
+sub save_deletemain::save_delete3245,85019
+       local( $save, $kind )( $save, $kind 3247,85037
+       local( $real_save_dir, $save_dest )( $real_save_dir, $save_dest 
3249,85067
+       local( $dirname )( $dirname 3284,85704
+sub save_mkdirmain::save_mkdir3304,86155
+       local( $dir )( $dir 3306,86172
+sub do_deletemain::do_delete3320,86459
+       local( $del, $kind )( $del, $kind 3322,86475
+sub filesizemain::filesize3377,87532
+       local( $fname )( $fname 3379,87547
+sub istruemain::istrue3390,87654
+       local( $val )( $val 3392,87667
+sub mksymlinkmain::mksymlink3398,87773
+       local( $dest_path, $existing_path )( $dest_path, $existing_path 
3400,87789
+               local( $msg )( $msg 3417,88246
+               local( $msg )( $msg 3431,88590
+               local( $status )( $status 3442,88816
+sub mkdirsmain::mkdirs3457,89196
+       local( $dir )( $dir 3459,89209
+       local( @dir, $d, $path )( @dir, $d, $path 3460,89230
+sub make_dirmain::make_dir3497,90042
+       local( $dir, $mode )( $dir, $mode 3499,90057
+       local( $val )( $val 3500,90085
+sub dir_existsmain::dir_exists3528,90573
+       local( $dir )( $dir 3530,90590
+       local( $val )( $val 3531,90611
+               local($old_dir)($old_dir3539,90750
+sub set_attribsmain::set_attribs3553,91053
+       local( $path, $src_path, $type )( $path, $src_path, $type 3555,91071
+       local( $mode )( $mode 3556,91111
+               local( $pathi )( $pathi 3564,91229
+               local( $pathi )( $pathi 3568,91320
+sub get_passwdmain::get_passwd3606,91977
+       local( $user )( $user 3608,91994
+       local( $pass )( $pass 3609,92016
+       local( $| )( $| 3610,92033
+sub compare_timesmain::compare_times3631,92384
+       local( $t1, $t2 )( $t1, $t2 3637,92564
+       local( $diff )( $diff 3638,92589
+sub create_assocsmain::create_assocs3643,92688
+       local( $map )( $map 3645,92708
+sub delete_assocsmain::delete_assocs3657,92957
+       local( $map )( $map 3659,92977
+sub unlink_dbmmain::unlink_dbm3671,93247
+       local( $file )( $file 3673,93264
+sub bsplitmain::bsplit3681,93462
+       local( $temp, $dest_path, $time )( $temp, $dest_path, $time 3683,93475
+       local( $dest_dir )( $dest_dir 3684,93516
+       local( $bufsiz )( $bufsiz 3685,93558
+       local( $buffer, $in, $sofar )( $buffer, $in, $sofar 3686,93583
+       local( $d )( $d 3691,93721
+       local( $index )( $index 3697,93840
+       local( $part )( $part 3698,93865
+                       local( $locali )( $locali 3714,94336
+       local( $readme )( $readme 3730,94740
+sub sysmain::sys3739,95116
+       local( $com )( $com 3741,95126
+sub set_assoc_from_arraymain::set_assoc_from_array3751,95355
+       local( *things )( *things 3754,95453
+sub find_progmain::find_prog3760,95537
+       local( $prog )( $prog 3762,95553
+       local( $path )( $path 3763,95575
+               local( $path )( $path 3766,95657
+sub real_dir_from_pathmain::real_dir_from_path3780,95842
+       local( $program )( $program 3782,95867
+       local( @prog_path )( @prog_path 3783,95892
+       local( $dir )( $dir 3784,95970
+sub msgmain::msg3807,96489
+       local( $todo, $msg )( $todo, $msg 3809,96499
+sub to_bytesmain::to_bytes3838,96979
+       local( $size )( $size 3840,96994
+sub unix2vmsmain::unix2vms3858,97332
+       local( $v, $kind )( $v, $kind 3860,97347
+                       local( $dir, $rest )( $dir, $rest 3873,97559
+sub dirpartmain::dirpart3886,97730
+       local( $path )( $path 3888,97744
+sub expand_symlinkmain::expand_symlink3902,98076
+       local( $orig_path, $points_to )( $orig_path, $points_to 3904,98097
+       local( $dirpart )( $dirpart 3905,98136
+sub flatten_pathmain::flatten_path3913,98365
+       local( $path )( $path 3915,98384
+       local( $changed )( $changed 3916,98406
+       local( $i )( $i 3917,98430
+       local( $rooted )( $rooted 3919,98446
+       local( $count )( $count 3920,98482
+       local( $orig_path )( $orig_path 3921,98504
+               local( $in )( $in 3932,98741
+               local( @parts )( @parts 3933,98765
+sub fix_packagemain::fix_package3963,99438
+       local( $package )( $package 3965,99456
+sub will_compressmain::will_compress3970,99529
+sub will_splitmain::will_split3981,99859
+sub myflockmain::myflock3989,100001
+       local( $file, $kind )( $file, $kind 3991,100015
+sub t2strmain::t2str4004,100221
+       local( @t )( @t 4006,100233
+       
local($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst4013,100335
+sub handlermain::handler4022,100583
+        local( $sig )( $sig 4029,100651
+        local( $msg )( $msg 4030,100679
+        local( $package, $filename, $line )( $package, $filename, $line 
4031,100737
+sub trap_signalsmain::trap_signals4036,100859
+       local( $sig )( $sig 4038,100878
+sub map_user_groupmain::map_user_group4047,101158
+sub keepmain::keep4069,101537
+       local( $pathi, $path, *keep, *keep_totals, *keep_map, $kind )( $pathi, 
$path, *keep, *keep_totals, *keep_map, $kind 4071,101548
+sub alarmmain::alarm4104,102330
+       local( $time_to_sig )( $time_to_sig 4106,102342
+sub chownmain::chown4110,102405
+       local( $uid, $gid, $path )( $uid, $gid, $path 4112,102417
+sub utimemain::utime4116,102494
+       local( $atime, $mtime, $path )( $atime, $mtime, $path 4118,102506
+       local( $old_mode )( $old_mode 4124,102685
+       local( $tmp_mode )( $tmp_mode 4125,102730
+       local( $ret )( $ret 4126,102763
+sub cwdmain::cwd4135,102913
+       local( $lcwd )( $lcwd 4137,102923
+
+ps-src/rfc1245.ps,2478
+/FMversion 12,311
+/FrameDict 17,500
+/FMVERSION 47,1307
+/FMLOCAL 56,1494
+/FMDOCUMENT 73,1766
+/FMBEGINPAGE 95,2279
+/FMENDPAGE 109,2516
+/FMDEFINEFONT 115,2582
+/FMNORMALIZEGRAPHICS 126,2725
+/FMBEGINEPSF 142,2955
+/FMENDEPSF 153,3207
+/setmanualfeed 158,3283
+/max 163,3386
+/min 164,3426
+/inch 165,3466
+/pagedimen 166,3485
+/setpapername 172,3629
+/papersize 190,4214
+/manualpapersize 211,4789
+/desperatepapersize 230,5211
+/savematrix 239,5370
+/restorematrix 242,5425
+/dmatrix 245,5475
+/dpi 246,5495
+/freq 248,5583
+/sangle 249,5658
+/DiacriticEncoding 250,5717
+/.notdef 251,5738
+/.notdef 252,5801
+/.notdef 253,5864
+/.notdef 254,5927
+/.notdef 255,5990
+/numbersign 256,6051
+/parenright 257,6115
+/two 258,6184
+/less 259,6251
+/L 260,6320
+/bracketright 261,6389
+/i 262,6459
+/braceright 263,6529
+/Ntilde 264,6598
+/atilde 265,6668
+/iacute 266,6733
+/ocircumflex 267,6797
+/udieresis 268,6858
+/paragraph 269,6919
+/dieresis 270,6983
+/yen 271,7050
+/ordfeminine 272,7109
+/exclamdown 273,7171
+/guillemotleft 274,7230
+/Otilde 275,7296
+/quoteleft 276,7357
+/fraction 277,7420
+/periodcentered 278,7490
+/Acircumflex 279,7549
+/Icircumflex 280,7610
+/Uacute 281,7680
+/breve 282,7746
+/ReEncode 284,7814
+/graymode 300,8020
+/setpattern 310,8184
+/grayness 331,8725
+/normalize 394,9873
+/dnormalize 397,9942
+/lnormalize 400,10014
+/H 403,10104
+/Z 406,10147
+/X 409,10176
+/V 412,10219
+/N 415,10260
+/M 418,10286
+/E 419,10315
+/D 420,10336
+/O 421,10358
+/L 423,10394
+/Y 430,10489
+/R 439,10588
+/RR 450,10696
+/C 467,10959
+/U 473,11004
+/F 477,11039
+/T 481,11084
+/RF 484,11115
+/TF 488,11164
+/P 495,11219
+/PF 499,11270
+/S 506,11344
+/SF 510,11384
+/B 517,11446
+/BF 521,11505
+/W 538,11714
+/G 573,12382
+/A 582,12525
+/BEGINPRINTCODE 606,12918
+/ENDPRINTCODE 615,13131
+/gn 620,13259
+/cfs 631,13384
+/ic 636,13473
+/ms 658,14285
+/ip 668,14395
+/wh 678,14492
+/bl 684,14607
+/s1 690,14722
+/fl 691,14739
+/hx 698,14887
+/wbytes 709,15055
+/BEGINBITMAPBWc 713,15147
+/BEGINBITMAPGRAYc 716,15198
+/BEGINBITMAP2BITc 719,15251
+/COMMONBITMAPc 722,15304
+/BEGINBITMAPBW 739,15660
+/BEGINBITMAPGRAY 742,15709
+/BEGINBITMAP2BIT 745,15760
+/COMMONBITMAP 748,15811
+/Fmcc 765,16156
+/ngrayt 773,16371
+/nredt 774,16393
+/nbluet 775,16414
+/ngreent 776,16436
+/colorsetup 787,16603
+/fakecolorsetup 814,17370
+/BITMAPCOLOR 826,17636
+/BITMAPCOLORc 839,17926
+/BITMAPGRAY 855,18275
+/BITMAPGRAYc 858,18335
+/ENDBITMAP 861,18397
+/fillprocs 868,18497
+
+prol-src/ordsets.prolog,525
+is_ordset(47,1310
+list_to_ord_set(63,1688
+ord_add_element(71,1867
+ord_del_element(85,2344
+ord_disjoint(100,2783
+ord_intersect(108,2953
+ord_intersection(126,3552
+ord_intersection3(130,3691
+ord_intersection(150,4531
+ord_intersection4(154,4703
+ord_intersection(176,5664
+ord_intersection2(181,5812
+ord_member(200,6318
+ord_seteq(216,6683
+ord_setproduct(225,6971
+ord_subset(240,7377
+ord_subtract(257,7861
+ord_symdiff(265,8054
+ord_union(288,8887
+ord_union4(303,9352
+ord_union(324,10171
+ord_union_all(329,10313
+
+prol-src/natded.prolog,2319
+expandmng(100,2879
+normalize(116,3359
+fresh_vars(125,3716
+subst(138,4134
+normalize_fresh(159,4660
+reduce_subterm(171,5112
+reduce(185,5559
+free_var(196,5903
+free_for(209,6246
+compile_lex(231,6875
+consult_lex:-consult_lex248,7384
+lex(259,7754
+expandsyn(267,8068
+bas_syn(292,8897
+compile_empty:-compile_empty310,9376
+complete(328,10055
+add_active(340,10527
+parse(353,10949
+derived_analyses(364,11341
+build(378,11965
+buildact(392,12521
+mapsyn(412,13542
+add_edge(434,14278
+findcats(447,14758
+normalize_tree(465,15478
+normalize_trees(475,15856
+expandmng_tree(486,16248
+expandmng_trees(496,16614
+cat(511,17013
+subtree(644,21266
+hypothetical_mem(653,21565
+make_coor(667,22130
+start_up:-start_up688,23013
+tokenizeatom(710,23921
+tokenize(720,24348
+isoperator(752,25377
+isoptab(756,25431
+specialsymbol(765,25756
+sstab(771,25861
+parse_cgi(787,26347
+keyvalseq(792,26510
+andkeyvalseq(796,26609
+keyval(799,26688
+valseq(807,26920
+plusvalseq(810,27007
+val(816,27109
+argvals(824,27426
+commaargvals(828,27503
+atomval(833,27578
+atom(836,27640
+action(846,28004
+keyvalcgi(864,28649
+keyvalscgi(865,28670
+outsyn(868,28726
+act(876,29060
+actout(901,29906
+texttreelist(912,30089
+htmltreelist(918,30190
+fitchtreelist(924,30304
+pp_html_table_tree(938,30759
+pp_html_tree(949,31113
+pp_html_trees(988,32381
+pp_html_table_fitch_tree(999,32769
+pp_html_fitch_tree(1017,33672
+removeexp(1129,39002
+splitexp(1142,39490
+pp_exp(1155,39990
+map_word(1168,40249
+pp_exps(1180,40474
+pp_tree(1188,40777
+pp_trees(1216,41807
+pp_word_list(1225,42128
+pp_word(1231,42262
+pp_word_list_rest(1238,42569
+pp_cat(1248,42929
+pp_syn(1255,43196
+pp_syn_paren(1276,43899
+pp_paren(1293,44377
+pp_syn_back(1300,44661
+pp_bas_cat(1311,45001
+writecat(1322,45409
+writesubs(1351,46455
+writesups(1361,46757
+writelistsubs(1371,47090
+pp_lam(1380,47408
+pp_lam_bracket(1398,48022
+pp_lam_paren(1407,48338
+pp_rule(1429,49238
+member(1447,49866
+append_list(1451,49919
+append(1456,50010
+at_least_one_member(1460,50076
+numbervars(1464,50171
+reverse(1467,50209
+select(1471,50290
+select_last(1475,50357
+cat_atoms(1479,50436
+writelist(1485,50524
+write_lex_cat(1492,50676
+writebreaklex(1500,50988
+write_lex(1513,51265
+writebreak(1521,51541
+tt:-tt1531,51713
+mt:-mt1534,51784
+cmt:-cmt1537,51878
+
+pyt-src/server.py,1438
+class Controls:Controls17,358
+    def __init__(18,374
+    def __repr__(24,590
+    def __str__(34,871
+class Server:Server37,934
+    def __init__(38,948
+    def dump(73,2198
+    def __repr__(125,3896
+    def __str__(128,3945
+class User:User131,4014
+    def __init__(132,4026
+    def __repr__(172,5445
+    def __str__(206,6883
+def flag2str(223,7212
+class LabeledEntry(232,7442
+    def bind(234,7525
+    def focus_set(236,7584
+    def __init__(238,7629
+def ButtonBar(245,7909
+def helpwin(255,8280
+class ListEdit(267,8707
+    def __init__(269,8808
+    def handleList(303,10042
+    def handleNew(306,10094
+    def editItem(314,10426
+    def deleteItem(320,10596
+def ConfirmQuit(326,10760
+class ControlEdit(375,12377
+    def PostControls(376,12403
+    def GatherControls(421,13530
+class ServerEdit(512,16264
+    def __init__(513,16289
+    def post(525,16629
+    def gather(543,17191
+    def nosave(547,17304
+    def save(551,17408
+    def refreshPort(556,17509
+    def createWidgets(561,17663
+    def edituser(631,20708
+class UserEdit(645,20921
+    def __init__(646,20944
+    def post(658,21283
+    def gather(676,21841
+    def nosave(680,21950
+    def save(684,22052
+    def createWidgets(689,22151
+class Configure(760,24879
+    def __init__(761,24916
+    def MakeDispose(772,25211
+    def MakeSitelist(786,25706
+    def editsite(794,25949
+    def save(797,26022
+    def nosave(807,26310
+
+tex-src/testenv.tex,52
+\newcommand{\nm}\nm4,77
+\section{blah}blah8,139
+
+tex-src/gzip.texi,303
address@hidden Top,62,2139
address@hidden Copying,80,2652
address@hidden Overview,83,2705
address@hidden Sample,166,7272
address@hidden Invoking gzip,Invoking gzip210,8828
address@hidden Advanced usage,Advanced usage357,13495
address@hidden Environment,420,15207
address@hidden Tapes,437,15768
address@hidden Problems,460,16767
address@hidden Concept Index,Concept Index473,17287
+
+tex-src/texinfo.tex,30626
+\def\texinfoversion{\texinfoversion25,1019
+\def\tie{\tie48,1510
+\def\gloggingall{\gloggingall71,2260
+\def\loggingall{\loggingall72,2329
+\def\onepageout#1{\onepageout98,3266
+\def\croppageout#1{\croppageout114,4016
+\def\cropmarks{\cropmarks141,5076
+\def\pagebody#1{\pagebody143,5123
+\def\ewtop{\ewtop156,5578
+\def\nstop{\nstop157,5642
+\def\ewbot{\ewbot159,5725
+\def\nsbot{\nsbot160,5789
+\def\parsearg #1{\parsearg169,6088
+\def\parseargx{\parseargx171,6166
+\def\parseargline{\parseargline181,6406
+\def\flushcr{\flushcr185,6527
+\newif\ifENV \ENVfalse \def\inENV{\inENV189,6726
+\def\ENVcheck{\ENVcheck190,6790
+\outer\def\begin{\begin197,7037
+\def\beginxxx #1{\beginxxx199,7075
+\def\end{\end207,7330
+\def\endxxx #1{\endxxx209,7358
+\def\errorE#1{\errorE215,7547
+\def\singlespace{\singlespace221,7741
address@hidden@231,7964
+\def\`{\`235,8064
+\def\'{\'236,8076
+\def\mylbrace {\mylbrace240,8124
+\def\myrbrace {\myrbrace241,8157
+\def\:{\:246,8271
+\def\*{\*249,8325
+\def\.{\.252,8401
+\def\w#1{\w257,8632
+\def\group{\group267,9115
+  \def\Egroup{\Egroup272,9279
+\def\need{\need288,9721
+\def\needx#1{\needx299,9998
+\def\dots{\dots338,11384
+\def\page{\page342,11448
+\def\exdent{\exdent352,11775
+\def\exdentyyy #1{\exdentyyy353,11808
+\def\nofillexdent{\nofillexdent356,11952
+\def\nofillexdentyyy #1{\nofillexdentyyy357,11997
+\def\include{\include364,12181
+\def\includezzz #1{\includezzz365,12216
+\def\thisfile{\thisfile368,12267
+\def\center{\center372,12330
+\def\centerzzz #1{\centerzzz373,12363
+\def\sp{\sp379,12505
+\def\spxxx #1{\spxxx380,12530
+\def\comment{\comment386,12704
+\def\commentxxx #1{\commentxxx389,12801
+\def\ignoresections{\ignoresections395,12970
+\let\chapter=\relax=\relax396,12992
+\let\section=\relax=\relax405,13237
+\let\subsection=\relax=\relax408,13298
+\let\subsubsection=\relax=\relax409,13321
+\let\appendix=\relax=\relax410,13347
+\let\appendixsec=\relaxsec=\relax411,13368
+\let\appendixsection=\relaxsection=\relax412,13392
+\let\appendixsubsec=\relaxsubsec=\relax413,13420
+\let\appendixsubsection=\relaxsubsection=\relax414,13447
+\let\appendixsubsubsec=\relaxsubsubsec=\relax415,13478
+\let\appendixsubsubsection=\relaxsubsubsection=\relax416,13508
+\def\ignore{\ignore422,13610
+\long\def\ignorexxx #1\end ignore{\ignorexxx426,13750
+\def\direntry{\direntry428,13809
+\long\def\direntryxxx #1\end direntry{\direntryxxx429,13848
+\def\ifset{\ifset433,13958
+\def\ifsetxxx #1{\ifsetxxx435,14016
+\def\Eifset{\Eifset439,14143
+\def\ifsetfail{\ifsetfail440,14157
+\long\def\ifsetfailxxx #1\end ifset{\ifsetfailxxx441,14213
+\def\ifclear{\ifclear443,14274
+\def\ifclearxxx #1{\ifclearxxx445,14336
+\def\Eifclear{\Eifclear449,14467
+\def\ifclearfail{\ifclearfail450,14483
+\long\def\ifclearfailxxx #1\end ifclear{\ifclearfailxxx451,14543
+\def\set{\set455,14694
+\def\setxxx #1{\setxxx456,14721
+\def\clear{\clear459,14783
+\def\clearxxx #1{\clearxxx460,14814
+\def\iftex{\iftex465,14931
+\def\Eiftex{\Eiftex466,14944
+\def\ifinfo{\ifinfo467,14958
+\long\def\ifinfoxxx #1\end ifinfo{\ifinfoxxx468,15008
+\long\def\menu #1\end menu{\menu470,15067
+\def\asis#1{\asis471,15096
+\def\math#1{\math484,15639
+\def\node{\node486,15683
+\def\nodezzz#1{\nodezzz487,15721
+\def\nodexxx[#1,#2]{\nodexxx[488,15752
+\def\donoderef{\donoderef491,15814
+\def\unnumbnoderef{\unnumbnoderef495,15935
+\def\appendixnoderef{\appendixnoderef499,16066
+\expandafter\expandafter\expandafter\appendixsetref{setref500,16112
+\let\refill=\relaxill=\relax503,16201
+\def\setfilename{\setfilename508,16415
+\outer\def\bye{\bye517,16661
+\def\inforef #1{\inforef519,16717
+\def\inforefzzz #1,#2,#3,#4**{\inforefzzz520,16755
+\def\losespace #1{\losespace522,16852
+\def\sf{\sf531,17056
+\font\defbf=cmbx10 scaled \magstep1 %was 1314bf=cmbx10557,17851
+\font\deftt=cmtt10 scaled \magstep1tt=cmtt10558,17897
+\def\df{\df559,17933
+\def\resetmathfonts{\resetmathfonts634,20527
+\def\textfonts{\textfonts647,21116
+\def\chapfonts{\chapfonts652,21331
+\def\secfonts{\secfonts657,21547
+\def\subsecfonts{\subsecfonts662,21752
+\def\indexfonts{\indexfonts667,21969
+\def\smartitalicx{\smartitalicx690,22701
+\def\smartitalic#1{\smartitalic691,22777
+\let\cite=\smartitalic=\smartitalic697,22922
+\def\b#1{\b699,22946
+\def\t#1{\t702,22981
+\def\samp #1{\samp705,23133
+\def\key #1{\key706,23166
+\def\ctrl #1{\ctrl707,23227
+\def\tclose#1{\tclose715,23429
+\def\ {\719,23595
+\def\xkey{\xkey727,23864
+\def\kbdfoo#1#2#3\par{\kbdfoo728,23880
+\def\dmn#1{\dmn737,24181
+\def\kbd#1{\kbd739,24208
+\def\l#1{\l741,24265
+\def\r#1{\r743,24294
+\def\sc#1{\sc745,24362
+\def\ii#1{\ii746,24405
+\def\titlefont#1{\titlefont754,24638
+\def\titlepage{\titlepage760,24741
+   \def\subtitlefont{\subtitlefont765,24968
+   \def\authorfont{\authorfont767,25052
+   \def\title{\title773,25262
+   \def\titlezzz##1{\titlezzz774,25297
+   \def\subtitle{\subtitle782,25612
+   \def\subtitlezzz##1{\subtitlezzz783,25653
+   \def\author{\author786,25771
+   \def\authorzzz##1{\authorzzz787,25808
+   \def\page{\page793,26099
+\def\Etitlepage{\Etitlepage803,26268
+\def\finishtitlepage{\finishtitlepage816,26656
+\def\evenheading{\evenheading845,27664
+\def\oddheading{\oddheading846,27707
+\def\everyheading{\everyheading847,27748
+\def\evenfooting{\evenfooting849,27794
+\def\oddfooting{\oddfooting850,27837
+\def\everyfooting{\everyfooting851,27878
+\def\headings #1 {\headings892,29570
+\def\HEADINGSoff{\HEADINGSoff894,29619
+\def\HEADINGSdouble{\HEADINGSdouble903,30046
+\def\HEADINGSsingle{\HEADINGSsingle913,30366
+\def\HEADINGSon{\HEADINGSon921,30587
+\def\HEADINGSafter{\HEADINGSafter923,30621
+\def\HEADINGSdoublex{\HEADINGSdoublex925,30716
+\def\HEADINGSsingleafter{\HEADINGSsingleafter932,30904
+\def\HEADINGSsinglex{\HEADINGSsinglex933,30965
+\def\today{\today942,31240
+\def\thistitle{\thistitle957,31785
+\def\settitle{\settitle958,31810
+\def\settitlezzz #1{\settitlezzz959,31847
+\def\internalBitem{\internalBitem991,32777
+\def\internalBitemx{\internalBitemx992,32827
+\def\internalBxitem "#1"{\internalBxitem994,32872
+\def\internalBxitemx "#1"{\internalBxitemx995,32952
+\def\internalBkitem{\internalBkitem997,33027
+\def\internalBkitemx{\internalBkitemx998,33079
+\def\kitemzzz #1{\kitemzzz1000,33126
+\def\xitemzzz #1{\xitemzzz1003,33228
+\def\itemzzz #1{\itemzzz1006,33331
+\def\item{\item1036,34402
+\def\itemx{\itemx1037,34453
+\def\kitem{\kitem1038,34506
+\def\kitemx{\kitemx1039,34559
+\def\xitem{\xitem1040,34614
+\def\xitemx{\xitemx1041,34667
+\def\description{\description1044,34777
+\def\table{\table1046,34827
+\def\ftable{\ftable1051,34971
+\def\Eftable{\Eftable1055,35117
+\def\vtable{\vtable1058,35186
+\def\Evtable{\Evtable1062,35332
+\def\dontindex #1{\dontindex1065,35401
+\def\fnitemindex #1{\fnitemindex1066,35421
+\def\vritemindex #1{\vritemindex1067,35466
+\def\tablez #1#2#3#4#5#6{\tablez1073,35615
+\def\Edescription{\Edescription1076,35673
+\def\itemfont{\itemfont1081,35875
+\def\Etable{\Etable1089,36101
+\def\itemize{\itemize1102,36425
+\def\itemizezzz #1{\itemizezzz1104,36461
+\def\itemizey #1#2{\itemizey1109,36556
+\def#2{1118,36802
+\def\itemcontents{\itemcontents1119,36843
+\def\bullet{\bullet1122,36891
+\def\minus{\minus1123,36918
+\def\frenchspacing{\frenchspacing1127,37026
+\def\splitoff#1#2\endmark{\splitoff1133,37251
+\def\enumerate{\enumerate1139,37481
+\def\enumeratezzz #1{\enumeratezzz1140,37520
+\def\enumeratey #1 #2\endenumeratey{\enumeratey1141,37573
+  \def\thearg{\thearg1145,37720
+  \ifx\thearg\empty \def\thearg{\thearg1146,37739
+\def\numericenumerate{\numericenumerate1183,39073
+\def\lowercaseenumerate{\lowercaseenumerate1189,39203
+\def\uppercaseenumerate{\uppercaseenumerate1202,39550
+\def\startenumeration#1{\startenumeration1218,40040
+\def\alphaenumerate{\alphaenumerate1226,40222
+\def\capsenumerate{\capsenumerate1227,40257
+\def\Ealphaenumerate{\Ealphaenumerate1228,40291
+\def\Ecapsenumerate{\Ecapsenumerate1229,40325
+\def\itemizeitem{\itemizeitem1233,40405
+\def\newindex #1{\newindex1258,41262
+\def\defindex{\defindex1267,41551
+\def\newcodeindex #1{\newcodeindex1271,41659
+\def\defcodeindex{\defcodeindex1278,41919
+\def\synindex #1 #2 {\synindex1282,42099
+\def\syncodeindex #1 #2 {\syncodeindex1291,42439
+\def\doindex#1{\doindex1308,43118
+\def\singleindexer #1{\singleindexer1309,43177
+\def\docodeindex#1{\docodeindex1312,43289
+\def\singlecodeindexer #1{\singlecodeindexer1313,43356
+\def\indexdummies{\indexdummies1315,43414
+\def\_{\_1316,43434
+\def\w{\w1317,43462
+\def\bf{\bf1318,43489
+\def\rm{\rm1319,43518
+\def\sl{\sl1320,43547
+\def\sf{\sf1321,43576
+\def\tt{\tt1322,43604
+\def\gtr{\gtr1323,43632
+\def\less{\less1324,43662
+\def\hat{\hat1325,43694
+\def\char{\char1326,43724
+\def\TeX{\TeX1327,43756
+\def\dots{\dots1328,43786
+\def\copyright{\copyright1329,43819
+\def\tclose##1{\tclose1330,43862
+\def\code##1{\code1331,43907
+\def\samp##1{\samp1332,43948
+\def\t##1{\t1333,43989
+\def\r##1{\r1334,44024
+\def\i##1{\i1335,44059
+\def\b##1{\b1336,44094
+\def\cite##1{\cite1337,44129
+\def\key##1{\key1338,44170
+\def\file##1{\file1339,44209
+\def\var##1{\var1340,44250
+\def\kbd##1{\kbd1341,44289
+\def\indexdummyfont#1{\indexdummyfont1346,44445
+\def\indexdummytex{\indexdummytex1347,44471
+\def\indexdummydots{\indexdummydots1348,44495
+\def\indexnofonts{\indexnofonts1350,44521
+\let\w=\indexdummyfontdummyfont1351,44541
+\let\t=\indexdummyfontdummyfont1352,44564
+\let\r=\indexdummyfontdummyfont1353,44587
+\let\i=\indexdummyfontdummyfont1354,44610
+\let\b=\indexdummyfontdummyfont1355,44633
+\let\emph=\indexdummyfontdummyfont1356,44656
+\let\strong=\indexdummyfontdummyfont1357,44682
+\let\cite=\indexdummyfont=\indexdummyfont1358,44710
+\let\sc=\indexdummyfontdummyfont1359,44736
+\let\tclose=\indexdummyfontdummyfont1363,44908
+\let\code=\indexdummyfontdummyfont1364,44936
+\let\file=\indexdummyfontdummyfont1365,44962
+\let\samp=\indexdummyfontdummyfont1366,44988
+\let\kbd=\indexdummyfontdummyfont1367,45014
+\let\key=\indexdummyfontdummyfont1368,45039
+\let\var=\indexdummyfontdummyfont1369,45064
+\let\TeX=\indexdummytexdummytex1370,45089
+\let\dots=\indexdummydotsdummydots1371,45113
+\let\indexbackslash=0  %overridden during \printindex.backslash=01381,45365
+\def\doind #1#2{\doind1383,45421
+{\indexdummies % Must do this here, since \bf, etc expand at this 
stagedummies1385,45464
+\def\rawbackslashxx{\rawbackslashxx1388,45604
+{\indexnofontsnofonts1393,45866
+\def\dosubind #1#2#3{\dosubind1404,46177
+{\indexdummies % Must do this here, since \bf, etc expand at this 
stagedummies1406,46225
+\def\rawbackslashxx{\rawbackslashxx1409,46329
+{\indexnofontsnofonts1413,46483
+\def\findex {\findex1442,47414
+\def\kindex {\kindex1443,47437
+\def\cindex {\cindex1444,47460
+\def\vindex {\vindex1445,47483
+\def\tindex {\tindex1446,47506
+\def\pindex {\pindex1447,47529
+\def\cindexsub {\cindexsub1449,47553
+\def\printindex{\printindex1461,47880
+\def\doprintindex#1{\doprintindex1463,47921
+  \def\indexbackslash{\indexbackslash1480,48406
+  \indexfonts\rm \tolerance=9500 \advance\baselineskip -1ptfonts\rm1481,48445
+\def\initial #1{\initial1516,49517
+\def\entry #1#2{\entry1522,49724
+  \null\nobreak\indexdotfill % Have leaders before the page 
number.dotfill1539,50371
+\def\indexdotfill{\indexdotfill1548,50699
+\def\primary #1{\primary1551,50805
+\def\secondary #1#2{\secondary1555,50887
+\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\pardotfill1558,50969
+\newbox\partialpageialpage1565,51142
+\def\begindoublecolumns{\begindoublecolumns1571,51300
+  \output={\global\setbox\partialpage=ialpage=1572,51336
+\def\enddoublecolumns{\enddoublecolumns1576,51524
+\def\doublecolumnout{\doublecolumnout1579,51609
+  address@hidden \advance\dimen@ by-\ht\partialpageialpage1580,51678
+\def\pagesofar{\pagesofar1583,51856
+\def\balancecolumns{\balancecolumns1587,52093
+  address@hidden \advance\availdimen@ by-\ht\partialpageialpage1593,52264
+     address@hidden \advance\dimen@ by-\ht\partialpageialpage1599,52525
+\newcount \appendixno  \appendixno = address@hidden,53430
+\def\appendixletter{\appendixletter1627,53471
+\def\opencontents{\opencontents1631,53574
+\def\thischapter{\thischapter1636,53755
+\def\seccheck#1{\seccheck1637,53793
+\def\chapternofonts{\chapternofonts1642,53897
+\def\result{\result1645,53972
+\def\equiv{\equiv1646,54007
+\def\expansion{\expansion1647,54040
+\def\print{\print1648,54081
+\def\TeX{\TeX1649,54114
+\def\dots{\dots1650,54143
+\def\copyright{\copyright1651,54174
+\def\tt{\tt1652,54215
+\def\bf{\bf1653,54242
+\def\w{\w1654,54270
+\def\less{\less1655,54295
+\def\gtr{\gtr1656,54326
+\def\hat{\hat1657,54355
+\def\char{\char1658,54384
+\def\tclose##1{\tclose1659,54415
+\def\code##1{\code1660,54459
+\def\samp##1{\samp1661,54499
+\def\r##1{\r1662,54539
+\def\b##1{\b1663,54573
+\def\key##1{\key1664,54607
+\def\file##1{\file1665,54645
+\def\kbd##1{\kbd1666,54685
+\def\i##1{\i1668,54793
+\def\cite##1{\cite1669,54827
+\def\var##1{\var1670,54867
+\def\emph##1{\emph1671,54905
+\def\dfn##1{\dfn1672,54945
+\def\thischaptername{\thischaptername1675,54986
+\outer\def\chapter{\chapter1676,55025
+\def\chapterzzz #1{\chapterzzz1677,55066
+{\chapternofonts%nofonts%1686,55462
+\global\let\section = \numberedsec=1691,55615
+\global\let\subsection = \numberedsubsec=1692,55650
+\global\let\subsubsection = \numberedsubsubsec=1693,55691
+\outer\def\appendix{\appendix1696,55742
+\def\appendixzzz #1{\appendixzzz1697,55785
+\global\advance \appendixno by 1 \message{no1699,55862
+\chapmacro {#1}{Appendix \appendixletter}letter1700,55931
+\xdef\thischapter{Appendix \appendixletter: 
\noexpand\thischaptername}letter:1703,56024
+{\chapternofonts%nofonts%1704,56096
+  {#1}{Appendix \appendixletter}letter1706,56152
+\appendixnoderef %noderef1709,56252
+\global\let\section = \appendixsec=1710,56271
+\global\let\subsection = \appendixsubsec=1711,56306
+\global\let\subsubsection = \appendixsubsubsec=1712,56347
+\outer\def\top{\top1715,56398
+\outer\def\unnumbered{\unnumbered1716,56438
+\def\unnumberedzzz #1{\unnumberedzzz1717,56485
+{\chapternofonts%nofonts%1721,56648
+\global\let\section = \unnumberedsec=1726,56798
+\global\let\subsection = \unnumberedsubsec=1727,56835
+\global\let\subsubsection = \unnumberedsubsubsec=1728,56878
+\outer\def\numberedsec{\numberedsec1731,56931
+\def\seczzz #1{\seczzz1732,56972
+{\chapternofonts%nofonts%1735,57128
+\outer\def\appendixsection{\appendixsection1744,57314
+\outer\def\appendixsec{\appendixsec1745,57371
+\def\appendixsectionzzz #1{\appendixsectionzzz1746,57424
+\gdef\thissection{#1}\secheading {#1}{\appendixletter}letter1748,57536
+{\chapternofonts%nofonts%1749,57604
+{#1}{\appendixletter}letter1751,57660
+\appendixnoderef %noderef1754,57760
+\outer\def\unnumberedsec{\unnumberedsec1758,57800
+\def\unnumberedseczzz #1{\unnumberedseczzz1759,57853
+{\chapternofonts%nofonts%1761,57948
+\outer\def\numberedsubsec{\numberedsubsec1769,58116
+\def\numberedsubseczzz #1{\numberedsubseczzz1770,58171
+{\chapternofonts%nofonts%1773,58350
+\outer\def\appendixsubsec{\appendixsubsec1782,58554
+\def\appendixsubseczzz #1{\appendixsubseczzz1783,58609
+\subsecheading {#1}{\appendixletter}letter1785,58731
+{\chapternofonts%nofonts%1786,58796
+{#1}{\appendixletter}letter1788,58855
+\appendixnoderef %noderef1791,58970
+\outer\def\unnumberedsubsec{\unnumberedsubsec1795,59010
+\def\unnumberedsubseczzz #1{\unnumberedsubseczzz1796,59069
+{\chapternofonts%nofonts%1798,59170
+\outer\def\numberedsubsubsec{\numberedsubsubsec1806,59341
+\def\numberedsubsubseczzz #1{\numberedsubsubseczzz1807,59402
+{\chapternofonts%nofonts%1811,59599
+\outer\def\appendixsubsubsec{\appendixsubsubsec1822,59832
+\def\appendixsubsubseczzz #1{\appendixsubsubseczzz1823,59893
+  {\appendixletter}letter1826,60032
+{\chapternofonts%nofonts%1827,60098
+  {\appendixletter}letter1829,60163
+\appendixnoderef %noderef1833,60297
+\outer\def\unnumberedsubsubsec{\unnumberedsubsubsec1837,60337
+\def\unnumberedsubsubseczzz #1{\unnumberedsubsubseczzz1838,60402
+{\chapternofonts%nofonts%1840,60509
+\def\infotop{\infotop1850,60838
+\def\infounnumbered{\infounnumbered1851,60876
+\def\infounnumberedsec{\infounnumberedsec1852,60921
+\def\infounnumberedsubsec{\infounnumberedsubsec1853,60972
+\def\infounnumberedsubsubsec{\infounnumberedsubsubsec1854,61029
+\def\infoappendix{\infoappendix1856,61093
+\def\infoappendixsec{\infoappendixsec1857,61134
+\def\infoappendixsubsec{\infoappendixsubsec1858,61181
+\def\infoappendixsubsubsec{\infoappendixsubsubsec1859,61234
+\def\infochapter{\infochapter1861,61294
+\def\infosection{\infosection1862,61333
+\def\infosubsection{\infosubsection1863,61372
+\def\infosubsubsection{\infosubsubsection1864,61417
+\global\let\section = \numberedsec=1869,61654
+\global\let\subsection = \numberedsubsec=1870,61689
+\global\let\subsubsection = \numberedsubsubsec=1871,61730
+\def\majorheading{\majorheading1885,62237
+\def\majorheadingzzz #1{\majorheadingzzz1886,62282
+\def\chapheading{\chapheading1892,62515
+\def\chapheadingzzz #1{\chapheadingzzz1893,62558
+\def\heading{\heading1898,62753
+\def\subheading{\subheading1900,62790
+\def\subsubheading{\subsubheading1902,62833
+\def\dobreak#1#2{\dobreak1909,63110
+\def\setchapterstyle #1 {\setchapterstyle1911,63188
+\def\chapbreak{\chapbreak1918,63443
+\def\chappager{\chappager1919,63493
+\def\chapoddpage{\chapoddpage1920,63531
+\def\setchapternewpage #1 {\setchapternewpage1922,63610
+\def\CHAPPAGoff{\CHAPPAGoff1924,63667
+\def\CHAPPAGon{\CHAPPAGon1928,63761
+\global\def\HEADINGSon{\HEADINGSon1931,63852
+\def\CHAPPAGodd{\CHAPPAGodd1933,63894
+\global\def\HEADINGSon{\HEADINGSon1936,63990
+\def\CHAPFplain{\CHAPFplain1940,64044
+\def\chfplain #1#2{\chfplain1944,64136
+\def\unnchfplain #1{\unnchfplain1955,64359
+\def\unnchfopen #1{\unnchfopen1963,64588
+\def\chfopen #1#2{\chfopen1969,64796
+\def\CHAPFopen{\CHAPFopen1974,64940
+\def\subsecheadingbreak{\subsecheadingbreak1981,65158
+\def\secheadingbreak{\secheadingbreak1984,65287
+\def\secheading #1#2#3{\secheading1992,65569
+\def\plainsecheading #1{\plainsecheading1993,65625
+\def\secheadingi #1{\secheadingi1994,65668
+\def\subsecheading #1#2#3#4{\subsecheading2005,66036
+\def\subsecheadingi #1{\subsecheadingi2006,66103
+\def\subsubsecfonts{\subsubsecfonts2013,66400
+\def\subsubsecheading #1#2#3#4#5{\subsubsecheading2016,66523
+\def\subsubsecheadingi #1{\subsubsecheadingi2017,66601
+\def\startcontents#1{\startcontents2031,67073
+   \unnumbchapmacro{#1}\def\thischapter{\thischapter2039,67346
+\outer\def\contents{\contents2048,67705
+\outer\def\summarycontents{\summarycontents2056,67849
+      \def\secentry ##1##2##3##4{\secentry2066,68220
+      \def\unnumbsecentry ##1##2{\unnumbsecentry2067,68255
+      \def\subsecentry ##1##2##3##4##5{\subsecentry2068,68290
+      \def\unnumbsubsecentry ##1##2{\unnumbsubsecentry2069,68331
+      \def\subsubsecentry ##1##2##3##4##5##6{\subsubsecentry2070,68369
+      \def\unnumbsubsubsecentry ##1##2{\unnumbsubsubsecentry2071,68416
+\def\chapentry#1#2#3{\chapentry2084,68850
+\def\shortchapentry#1#2#3{\shortchapentry2087,68967
+    {#2\labelspace #1}space2090,69077
+\def\unnumbchapentry#1#2{\unnumbchapentry2093,69131
+\def\shortunnumberedentry#1#2{\shortunnumberedentry2094,69178
+\def\secentry#1#2#3#4{\secentry2101,69342
+\def\unnumbsecentry#1#2{\unnumbsecentry2102,69401
+\def\subsecentry#1#2#3#4#5{\subsecentry2105,69462
+\def\unnumbsubsecentry#1#2{\unnumbsubsecentry2106,69532
+\def\subsubsecentry#1#2#3#4#5#6{\subsubsecentry2109,69606
+  \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}space2110,69640
+\def\unnumbsubsubsecentry#1#2{\unnumbsubsubsecentry2111,69691
+\def\dochapentry#1#2{\dochapentry2122,70065
+\def\dosecentry#1#2{\dosecentry2137,70670
+\def\dosubsecentry#1#2{\dosubsecentry2144,70848
+\def\dosubsubsecentry#1#2{\dosubsubsecentry2151,71033
+\def\labelspace{\labelspace2159,71284
+\def\dopageno#1{\dopageno2161,71319
+\def\doshortpageno#1{\doshortpageno2162,71345
+\def\chapentryfonts{\chapentryfonts2164,71377
+\def\secentryfonts{\secentryfonts2165,71412
+\def\point{\point2191,72371
+\def\result{\result2193,72392
+\def\expansion{\expansion2194,72465
+\def\print{\print2195,72536
+\def\equiv{\equiv2197,72603
+\def\error{\error2217,73376
+\def\tex{\tex2223,73605
address@hidden@2241,73988
+\gdef\sepspaces{\def {\ }}}\2264,74720
+\def\aboveenvbreak{\aboveenvbreak2267,74802
+\def\afterenvbreak{\afterenvbreak2271,74968
+\def\ctl{\ctl2285,75479
+\def\ctr{\ctr2286,75551
+\def\cbl{\cbl2287,75590
+\def\cbr{\cbr2288,75630
+\def\carttop{\carttop2289,75669
+\def\cartbot{\cartbot2292,75777
+\long\def\cartouche{\cartouche2298,75917
+\def\Ecartouche{\Ecartouche2325,76705
+\def\lisp{\lisp2337,76840
+\def\Elisp{\Elisp2347,77187
+\def\next##1{\next2359,77513
+\def\Eexample{\Eexample2363,77555
+\def\Esmallexample{\Esmallexample2366,77602
+\def\smalllispx{\smalllispx2372,77780
+\def\Esmalllisp{\Esmalllisp2382,78134
+\obeyspaces \obeylines \ninett \indexfonts \rawbackslashfonts2395,78490
+\def\next##1{\next2396,78547
+\def\display{\display2400,78627
+\def\Edisplay{\Edisplay2409,78946
+\def\next##1{\next2421,79257
+\def\format{\format2425,79360
+\def\Eformat{\Eformat2433,79656
+\def\next##1{\next2436,79745
+\def\flushleft{\flushleft2440,79797
+\def\Eflushleft{\Eflushleft2450,80168
+\def\next##1{\next2453,80261
+\def\flushright{\flushright2455,80283
+\def\Eflushright{\Eflushright2465,80655
+\def\next##1{\next2469,80786
+\def\quotation{\quotation2473,80844
+\def\Equotation{\Equotation2479,81036
+\def\setdeffont #1 {\setdeffont2492,81434
+\newskip\defbodyindent \defbodyindent=.4inbodyindent2494,81480
+\newskip\defargsindent \defargsindent=50ptargsindent2495,81523
+\newskip\deftypemargin \deftypemargin=12pttypemargin2496,81566
+\newskip\deflastargmargin \deflastargmargin=18ptlastargmargin2497,81609
+\def\activeparens{\activeparens2502,81807
+\def\opnr{\opnr2528,83019
+\def\lbrb{\lbrb2529,83084
+\def\defname #1#2{\defname2535,83285
+\advance\dimen2 by -\defbodyindentbodyindent2539,83403
+\advance\dimen3 by -\defbodyindentbodyindent2541,83457
+\setbox0=\hbox{\hskip \deflastargmargin{lastargmargin2543,83511
+\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for 
continuationsargsindent2545,83653
+\parshape 2 0in \dimen0 \defargsindent \dimen1     %argsindent2546,83728
+\rlap{\rightline{{\rm #2}\hskip \deftypemargin}typemargin2553,84097
+\advance\leftskip by -\defbodyindentbodyindent2556,84231
+\exdentamount=\defbodyindentbodyindent2557,84268
+\def\defparsebody #1#2#3{\defparsebody2567,84627
+\def#1{2571,84811
+\def#2{2572,84847
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2574,84919
+\exdentamount=\defbodyindentbodyindent2575,84993
+\def\defmethparsebody #1#2#3#4 {\defmethparsebody2580,85097
+\def#1{2584,85258
+\def#2##1 {2585,85294
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2587,85377
+\exdentamount=\defbodyindentbodyindent2588,85451
+\def\defopparsebody #1#2#3#4#5 {\defopparsebody2591,85536
+\def#1{2595,85697
+\def#2##1 ##2 {2596,85733
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2599,85833
+\exdentamount=\defbodyindentbodyindent2600,85907
+\def\defvarparsebody #1#2#3{\defvarparsebody2607,86178
+\def#1{2611,86365
+\def#2{2612,86401
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2614,86460
+\exdentamount=\defbodyindentbodyindent2615,86534
+\def\defvrparsebody #1#2#3#4 {\defvrparsebody2620,86625
+\def#1{2624,86784
+\def#2##1 {2625,86820
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2627,86890
+\exdentamount=\defbodyindentbodyindent2628,86964
+\def\defopvarparsebody #1#2#3#4#5 {\defopvarparsebody2631,87036
+\def#1{2635,87200
+\def#2##1 ##2 {2636,87236
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2639,87323
+\exdentamount=\defbodyindentbodyindent2640,87397
+\def\defunargs #1{\defunargs2663,88157
+\def\deftypefunargs #1{\deftypefunargs2675,88539
+\def\deffn{\deffn2689,88921
+\def\deffnheader #1#2#3{\deffnheader2691,88978
+\begingroup\defname {name2692,89026
+\def\defun{\defun2698,89171
+\def\defunheader #1#2{\defunheader2700,89224
+\begingroup\defname {name2701,89299
+\defunargs {unargs2702,89335
+\def\deftypefun{\deftypefun2708,89483
+\def\deftypefunheader #1#2{\deftypefunheader2711,89605
+\def\deftypefunheaderx #1#2 #3\relax{\deftypefunheaderx2713,89714
+\begingroup\defname {name2715,89806
+\deftypefunargs {typefunargs2716,89852
+\def\deftypefn{\deftypefn2722,90023
+\def\deftypefnheader #1#2#3{\deftypefnheader2725,90172
+\def\deftypefnheaderx #1#2#3 #4\relax{\deftypefnheaderx2727,90308
+\begingroup\defname {name2729,90401
+\deftypefunargs {typefunargs2730,90441
+\def\defmac{\defmac2736,90562
+\def\defmacheader #1#2{\defmacheader2738,90619
+\begingroup\defname {name2739,90695
+\defunargs {unargs2740,90728
+\def\defspec{\defspec2746,90852
+\def\defspecheader #1#2{\defspecheader2748,90913
+\begingroup\defname {name2749,90990
+\defunargs {unargs2750,91030
+\def\deffnx #1 {\deffnx2757,91225
+\def\defunx #1 {\defunx2758,91282
+\def\defmacx #1 {\defmacx2759,91339
+\def\defspecx #1 {\defspecx2760,91398
+\def\deftypefnx #1 {\deftypefnx2761,91459
+\def\deftypeunx #1 {\deftypeunx2762,91524
+\def\defop #1 {\defop2768,91670
+\defopparsebody\Edefop\defopx\defopheader\defoptype}opparsebody\Edefop\defopx\defopheader\defoptype2769,91705
+\def\defopheader #1#2#3{\defopheader2771,91759
+\begingroup\defname {name2773,91848
+\defunargs {unargs2774,91894
+\def\defmethod{\defmethod2779,91955
+\def\defmethodheader #1#2#3{\defmethodheader2781,92028
+\begingroup\defname {name2783,92116
+\defunargs {unargs2784,92156
+\def\defcv #1 {\defcv2789,92230
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}opvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype2790,92265
+\def\defcvarheader #1#2#3{\defcvarheader2792,92324
+\begingroup\defname {name2794,92410
+\defvarargs {varargs2795,92456
+\def\defivar{\defivar2800,92529
+\def\defivarheader #1#2#3{\defivarheader2802,92592
+\begingroup\defname {name2804,92678
+\defvarargs {varargs2805,92729
+\def\defopx #1 {\defopx2811,92878
+\def\defmethodx #1 {\defmethodx2812,92935
+\def\defcvx #1 {\defcvx2813,93000
+\def\defivarx #1 {\defivarx2814,93057
+\def\defvarargs #1{\defvarargs2821,93328
+\def\defvr{\defvr2827,93472
+\def\defvrheader #1#2#3{\defvrheader2829,93527
+\begingroup\defname {name2830,93575
+\def\defvar{\defvar2834,93660
+\def\defvarheader #1#2{\defvarheader2836,93720
+\begingroup\defname {name2837,93791
+\defvarargs {varargs2838,93827
+\def\defopt{\defopt2843,93893
+\def\defoptheader #1#2{\defoptheader2845,93953
+\begingroup\defname {name2846,94024
+\defvarargs {varargs2847,94063
+\def\deftypevar{\deftypevar2852,94120
+\def\deftypevarheader #1#2{\deftypevarheader2855,94236
+\begingroup\defname {name2857,94319
+\def\deftypevr{\deftypevr2864,94493
+\def\deftypevrheader #1#2#3{\deftypevrheader2866,94564
+\begingroup\defname {name2867,94616
+\def\defvrx #1 {\defvrx2875,94853
+\def\defvarx #1 {\defvarx2876,94910
+\def\defoptx #1 {\defoptx2877,94969
+\def\deftypevarx #1 {\deftypevarx2878,95028
+\def\deftypevrx #1 {\deftypevrx2879,95095
+\def\deftpargs #1{\deftpargs2884,95244
+\def\deftp{\deftp2888,95324
+\def\deftpheader #1#2#3{\deftpheader2890,95379
+\begingroup\defname {name2891,95427
+\def\deftpx #1 {\deftpx2896,95586
+\def\setref#1{\setref2907,95907
+\def\unnumbsetref#1{\unnumbsetref2912,96021
+\def\appendixsetref#1{\appendixsetref2917,96128
+\def\pxref#1{\pxref2928,96539
+\def\xref#1{\xref2929,96575
+\def\ref#1{\ref2930,96610
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\xrefX[2931,96640
+\def\printedmanual{\printedmanual2932,96683
+\def\printednodename{\printednodename2933,96721
+\def\printednodename{\printednodename2938,96846
+section ``\printednodename'' in \cite{\printedmanual}\printedmanual2953,97479
+\refx{x2956,97557
+\def\dosetq #1#2{\dosetq2964,97777
+\def\internalsetq #1#2{\internalsetq2972,98035
+\def\Ypagenumber{\Ypagenumber2976,98136
+\def\Ytitle{\Ytitle2978,98162
+\def\Ynothing{\Ynothing2980,98189
+\def\Ysectionnumberandtype{\Ysectionnumberandtype2982,98206
+\def\Yappendixletterandtype{\Yappendixletterandtype2991,98522
+\ifnum\secno=0 Appendix\xreftie'char\the\appendixno{no2992,98552
+\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno 
%no.\the\secno2993,98607
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno 
%no.\the\secno.\the\subsecno2995,98711
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno 
%no.\the\secno.\the\subsecno.\the\subsubsecno2997,98782
+  \def\linenumber{\linenumber3008,99121
+\def\refx#1#2{\refx3014,99305
+\def\xrdef #1#2{\xrdef3036,99931
+\def\readauxfile{\readauxfile3039,100016
+\def\supereject{\supereject3109,101797
+\footstrut\parindent=\defaultparindent\hang\textindent{aultparindent\hang\textindent3130,102482
+\def\openindices{\openindices3138,102668
+\newdimen\defaultparindent \defaultparindent = 15ptaultparindent3150,102893
+\parindent = \defaultparindentaultparindent3151,102945
+\def\smallbook{\smallbook3174,103669
+\global\def\Esmallexample{\Esmallexample3191,104096
+\def\afourpaper{\afourpaper3195,104187
+\def\finalout{\finalout3223,104995
+\def\normaldoublequote{\normaldoublequote3234,105256
+\def\normaltilde{\normaltilde3235,105282
+\def\normalcaret{\normalcaret3236,105302
+\def\normalunderscore{\normalunderscore3237,105322
+\def\normalverticalbar{\normalverticalbar3238,105347
+\def\normalless{\normalless3239,105373
+\def\normalgreater{\normalgreater3240,105392
+\def\normalplus{\normalplus3241,105414
+\def\ifusingtt#1#2{\ifusingtt3252,105906
+\def\activedoublequote{\activedoublequote3260,106234
+\def~{~3263,106320
+\def^{^3266,106381
+\def_{_3269,106420
+\def\_{\_3271,106494
+\def\lvvmode{\lvvmode3278,106831
+\def|{|3281,106881
+\def<{<3284,106944
+\def>{>3287,107001
+\def+{+3289,107039
+\def\turnoffactive{\turnoffactive3295,107200
+\global\def={=3306,107486
+\def\normalbackslash{\normalbackslash3320,107868
+
+c-src//c.c,76
+T f(1,0
+}T i;2,14
+void bar(5,69
+int foobar(6,94
+interface_locate(9,131
+
+c.c,1663
+my_printf 135,
+void fatala 138,
+max 141,
+struct bar 143,
+__attribute__ ((always_inline)) max 147,
+struct foo150,
+char stack[stack155,
+struct S 156,
+} wait_status_ptr_t 161,
+Some_Class  A 162,
+typedef T1 T3 163,
+T3 z 164,
+typedef int more_aligned_int 165,
+struct S  __attribute__ ((vector_size (16))) foo;166,
+int foo 167,
+char *__attribute__((aligned(8))) *f;f168,
+int i 169,
+extern void foobar 170,
+typedef struct cacheLRUEntry_s172,
+__attribute__ ((packed)) cacheLRUEntry_t;177,
+struct foo 178,
+     f1 183,
+void f2 184,
+int x 188,
+struct foo 189,
+short array[array190,
+int f193,
+DEAFUN 196,
+XDEFUN 203,
+DEFUN ("x-get-selection-internal", 
Fx_get_selection_internal,x-get-selection-internal206,
+       Fx_get_selection_internal,x-get-selection-internal212,
+      Fy_get_selection_internal,y-get-selection-internal216,
+defun_func1(218,
+DEFUN_func2(220,
+typedef int bool;222,
+bool funcboo 223,
+struct my_struct 226,
+typedef struct my_struct my_typedef;228,
+int bla 229,
+a(234,
+int func1237,
+static struct cca_control init_control 239,
+static tpcmd rbtp 240,
+static byte ring1 241,
+static byte ring2 242,
+request request 243,
+int func2 246,
+  aaa;249,
+  bbb;251,
+struct sss1 252,
+struct sss2253,
+  struct ss3255,
+struct a b;259,
+struct aa *b;b260,
+  **b;b262,
+caccacacca 263,
+a 267,
+  typedef struct aa 269,
+  typedef struct aa {} aaa;269,
+static void inita 271,
+node *lasta lasta272,
+b 273,
+  typedef  int bb;275,
+static void initb 277,
+node *lastb lastb278,
+typedef enum { REG_ENOSYS 279,
+typedef enum { REG_ENOSYS = -1, aa 279,
+typedef enum { REG_ENOSYS = -1, aa } reg_errcode_t;279,
+
+c-src/a/b/b.c,18
+#define this 1,0
+
+../c/c.web,20
+#define questo 34,
+
+y-src/parse.y,738
+#define obstack_chunk_alloc 46,1111
+#define obstack_chunk_free 47,1149
+VOIDSTAR parse_hash;63,1400
+unsigned char fnin[fnin67,1519
+#define YYSTYPE 71,1617
+typedef struct node *YYSTYPE;YYSTYPE72,1648
+YYSTYPE parse_return;73,1678
+char *instr;instr80,1790
+int parse_error 81,1803
+line:line86,1862
+exp:exp94,1975
+exp_list:exp_list262,5642
+range_exp:range_exp268,5740
+range_exp_list:range_exp_list272,5770
+cell:cell278,5888
+yyerror FUN1(285,5935
+make_list FUN2(292,6015
+#define ERROR 303,6215
+yylex FUN0(314,6392
+parse_cell_or_range FUN2(586,11758
+#define CK_ABS_R(670,13200
+#define CK_REL_R(674,13279
+#define CK_ABS_C(679,13408
+#define CK_REL_C(683,13487
+#define MAYBEREL(688,13616
+str_to_col FUN1(846,16817
+
+y-src/parse.c,520
+#define YYBISON 4,64
+# define       NE      6,114
+# define       LE      7,130
+# define       GE      8,146
+# define       NEG     9,162
+# define       L_CELL  10,179
+# define       L_RANGE 11,199
+# define       L_VAR   12,220
+# define       L_CONST 13,239
+# define       L_FN0   14,260
+# define       L_FN1   15,279
+# define       L_FN2   16,298
+# define       L_FN3   17,317
+# define       L_FN4   18,336
+# define       L_FNN   19,355
+# define       L_FN1R  20,374
+# define       L_FN2R  21,394
+# define       L_FN3R  22,414
+# define       L_FN4R  23,434
+# define       L_FNNR  24,454
+# define       L_LE    25,474
+# define       L_NE    26,492
+# define       L_GE    27,510
+
+parse.y,1181
+#define obstack_chunk_alloc 46,
+#define obstack_chunk_free 47,
+VOIDSTAR parse_hash;63,
+unsigned char fnin[fnin67,
+#define YYSTYPE 71,
+typedef struct node *YYSTYPE;YYSTYPE72,
+YYSTYPE parse_return;73,
+char *instr;instr80,
+int parse_error 81,
+#define YYSTYPE 85,
+# define YYDEBUG 88,
+#define        YYFINAL 93,
+#define        YYFLAG  94,
+#define        YYNTBASE        95,
+#define YYTRANSLATE(98,
+static const char yytranslate[yytranslate101,
+static const short yyprhs[yyprhs134,
+static const short yyrhs[yyrhs142,
+static const short yyrline[yyrline171,
+static const char *const yytname[yytname185,
+static const short yyr1[yyr1197,
+static const short yyr2[yyr2207,
+static const short yydefact[yydefact219,
+static const short yydefgoto[yydefgoto237,
+static const short yypact[yypact242,
+static const short yypgoto[yypgoto260,
+#define        YYLAST  266,
+static const short yytable[yytable269,
+static const short yycheck[yycheck330,
+yyerror FUN1(285,
+make_list FUN2(292,
+#define ERROR 303,
+yylex FUN0(314,
+parse_cell_or_range FUN2(586,
+#define CK_ABS_R(670,
+#define CK_REL_R(674,
+#define CK_ABS_C(679,
+#define CK_REL_C(683,
+#define MAYBEREL(688,
+str_to_col FUN1(846,
+
+/usr/share/bison/bison.simple,2110
+# define YYSTD(40,
+# define YYSTD(42,
+#  define YYSTACK_ALLOC 50,
+#  define YYSIZE_T 51,
+#    define YYSTACK_ALLOC 55,
+#    define YYSIZE_T 56,
+#     define YYSTACK_ALLOC 59,
+#  define YYSTACK_FREE(67,
+#   define YYSIZE_T 71,
+#    define YYSIZE_T 75,
+#  define YYSTACK_ALLOC 78,
+#  define YYSTACK_FREE 79,
+union yyalloc83,
+# define YYSTACK_GAP_MAX 93,
+#  define YYSTACK_BYTES(98,
+#  define YYSTACK_BYTES(102,
+# define YYSTACK_RELOCATE(112,
+# define YYSIZE_T 128,
+# define YYSIZE_T 131,
+#  define YYSIZE_T 136,
+#   define YYSIZE_T 140,
+# define YYSIZE_T 145,
+#define yyerrok        148,
+#define yyclearin      149,
+#define YYEMPTY        150,
+#define YYEOF  151,
+#define YYACCEPT       152,
+#define YYABORT 153,
+#define YYERROR        154,
+#define YYFAIL 158,
+#define YYRECOVERING(159,
+#define YYBACKUP(160,
+#define YYTERROR       177,
+#define YYERRCODE      178,
+# define YYLLOC_DEFAULT(189,
+#   define YYLEX       200,
+#   define YYLEX       202,
+#   define YYLEX       206,
+#   define YYLEX       208,
+# define YYLEX 212,
+#  define YYFPRINTF 225,
+# define YYDPRINTF(228,
+int yydebug;237,
+# define YYDPRINTF(239,
+# define YYINITDEPTH 244,
+# undef YYMAXDEPTH255,
+# define YYMAXDEPTH 259,
+#  define yymemcpy 264,
+yymemcpy 271,
+#   define yystrlen 293,
+yystrlen 298,
+#   define yystpcpy 316,
+yystpcpy 322,
+#  define YYPARSE_PARAM_ARG 351,
+#  define YYPARSE_PARAM_DECL352,
+#  define YYPARSE_PARAM_ARG 354,
+#  define YYPARSE_PARAM_DECL 355,
+# define YYPARSE_PARAM_ARG358,
+# define YYPARSE_PARAM_DECL359,
+#define YY_DECL_NON_LSP_VARIABLES      374,
+# define YY_DECL_VARIABLES     385,
+# define YY_DECL_VARIABLES     391,
+yyparse 403,
+# define YYPOPSTACK 445,
+# define YYPOPSTACK 447,
+# undef YYSTACK_RELOCATE548,
+  *++yyvsp yyvsp746,
+  *++yylsp yylsp748,
+  yyn 755,
+  yystate 757,
+    yystate 761,
+  goto yynewstate;763,
+  goto yyerrlab1;823,
+  yyerrstatus 846,
+  goto yyerrhandle;848,
+  yyn 861,
+  yystate 875,
+  yyn 895,
+  yyn 903,
+  *++yyvsp yyvsp919,
+  *++yylsp yylsp921,
+  yystate 924,
+  goto yynewstate;925,
+  yyresult 932,
+  goto yyreturn;933,
+  yyresult 939,
+  goto yyreturn;940,
+  yyresult 947,
+
+y-src/atest.y,9
+exp    2,3
+
+y-src/cccp.c,303
+#define YYBISON 4,63
+# define       INT     6,113
+# define       CHAR    7,130
+# define       NAME    8,148
+# define       ERROR   9,166
+# define       OR      10,185
+# define       AND     11,201
+# define       EQUAL   12,218
+# define       NOTEQUAL        13,237
+# define       LEQ     14,259
+# define       GEQ     15,276
+# define       LSH     16,293
+# define       RSH     17,310
+# define       UNARY   18,327
+
+cccp.y,1579
+typedef unsigned char U_CHAR;38,
+struct arglist 41,
+#define NULL 51,
+#define GENERIC_PTR 56,
+#define GENERIC_PTR 58,
+#define NULL_PTR 63,
+int expression_value;68,
+static jmp_buf parse_return_error;70,
+static int keyword_parsing 73,
+#define CHAR_TYPE_SIZE 87,
+#define INT_TYPE_SIZE 91,
+#define LONG_TYPE_SIZE 95,
+#define WCHAR_TYPE_SIZE 99,
+#define possible_sum_sign(104,
+  struct constant 113,
+  struct name 114,
+} yystype;118,
+# define YYSTYPE 119,
+# define YYDEBUG 122,
+#define        YYFINAL 127,
+#define        YYFLAG  128,
+#define        YYNTBASE        129,
+#define YYTRANSLATE(132,
+static const char yytranslate[yytranslate135,
+static const short yyprhs[yyprhs167,
+static const short yyrhs[yyrhs174,
+static const short yyrline[yyrline195,
+static const char *const yytname[yytname208,
+static const short yyr1[yyr1219,
+static const short yyr2[yyr2228,
+static const short yydefact[yydefact239,
+static const short yydefgoto[yydefgoto251,
+static const short yypact[yypact256,
+static const short yypgoto[yypgoto268,
+#define        YYLAST  274,
+static const short yytable[yytable277,
+static const short yycheck[yycheck301,
+static char *lexptr;lexptr332,
+parse_number 341,
+struct token 437,
+static struct token tokentab2[tokentab2442,
+yylex 459,
+parse_escape 740,
+yyerror 836,
+integer_overflow 844,
+left_shift 851,
+right_shift 873,
+parse_c_expression 893,
+main 923,
+unsigned char is_idchar[is_idchar948,
+unsigned char is_idstart[is_idstart950,
+char is_hor_space[is_hor_space953,
+initialize_random_junk 958,
+error 988,
+warning 993,
+lookup 999,
+
+/usr/share/bison/bison.simple,2110
+# define YYSTD(40,
+# define YYSTD(42,
+#  define YYSTACK_ALLOC 50,
+#  define YYSIZE_T 51,
+#    define YYSTACK_ALLOC 55,
+#    define YYSIZE_T 56,
+#     define YYSTACK_ALLOC 59,
+#  define YYSTACK_FREE(67,
+#   define YYSIZE_T 71,
+#    define YYSIZE_T 75,
+#  define YYSTACK_ALLOC 78,
+#  define YYSTACK_FREE 79,
+union yyalloc83,
+# define YYSTACK_GAP_MAX 93,
+#  define YYSTACK_BYTES(98,
+#  define YYSTACK_BYTES(102,
+# define YYSTACK_RELOCATE(112,
+# define YYSIZE_T 128,
+# define YYSIZE_T 131,
+#  define YYSIZE_T 136,
+#   define YYSIZE_T 140,
+# define YYSIZE_T 145,
+#define yyerrok        148,
+#define yyclearin      149,
+#define YYEMPTY        150,
+#define YYEOF  151,
+#define YYACCEPT       152,
+#define YYABORT 153,
+#define YYERROR        154,
+#define YYFAIL 158,
+#define YYRECOVERING(159,
+#define YYBACKUP(160,
+#define YYTERROR       177,
+#define YYERRCODE      178,
+# define YYLLOC_DEFAULT(189,
+#   define YYLEX       200,
+#   define YYLEX       202,
+#   define YYLEX       206,
+#   define YYLEX       208,
+# define YYLEX 212,
+#  define YYFPRINTF 225,
+# define YYDPRINTF(228,
+int yydebug;237,
+# define YYDPRINTF(239,
+# define YYINITDEPTH 244,
+# undef YYMAXDEPTH255,
+# define YYMAXDEPTH 259,
+#  define yymemcpy 264,
+yymemcpy 271,
+#   define yystrlen 293,
+yystrlen 298,
+#   define yystpcpy 316,
+yystpcpy 322,
+#  define YYPARSE_PARAM_ARG 351,
+#  define YYPARSE_PARAM_DECL352,
+#  define YYPARSE_PARAM_ARG 354,
+#  define YYPARSE_PARAM_DECL 355,
+# define YYPARSE_PARAM_ARG358,
+# define YYPARSE_PARAM_DECL359,
+#define YY_DECL_NON_LSP_VARIABLES      374,
+# define YY_DECL_VARIABLES     385,
+# define YY_DECL_VARIABLES     391,
+yyparse 403,
+# define YYPOPSTACK 445,
+# define YYPOPSTACK 447,
+# undef YYSTACK_RELOCATE548,
+  *++yyvsp yyvsp746,
+  *++yylsp yylsp748,
+  yyn 755,
+  yystate 757,
+    yystate 761,
+  goto yynewstate;763,
+  goto yyerrlab1;823,
+  yyerrstatus 846,
+  goto yyerrhandle;848,
+  yyn 861,
+  yystate 875,
+  yyn 895,
+  yyn 903,
+  *++yyvsp yyvsp919,
+  *++yylsp yylsp921,
+  yystate 924,
+  goto yynewstate;925,
+  yyresult 932,
+  goto yyreturn;933,
+  yyresult 939,
+  goto yyreturn;940,
+  yyresult 947,
+
+y-src/cccp.y,1107
+typedef unsigned char U_CHAR;38,1201
+struct arglist 41,1301
+#define NULL 51,1468
+#define GENERIC_PTR 56,1578
+#define GENERIC_PTR 58,1611
+#define NULL_PTR 63,1670
+int expression_value;68,1743
+static jmp_buf parse_return_error;70,1766
+static int keyword_parsing 73,1865
+#define CHAR_TYPE_SIZE 87,2162
+#define INT_TYPE_SIZE 91,2229
+#define LONG_TYPE_SIZE 95,2296
+#define WCHAR_TYPE_SIZE 99,2365
+#define possible_sum_sign(104,2556
+  struct constant 112,2733
+  struct name 113,2789
+start 143,3226
+exp1   148,3330
+exp    156,3505
+exp    185,4295
+keywords 306,7835
+static char *lexptr;lexptr332,8579
+parse_number 341,8842
+struct token 437,11038
+static struct token tokentab2[tokentab2442,11088
+yylex 459,11367
+parse_escape 740,17718
+yyerror 836,19599
+integer_overflow 844,19690
+left_shift 851,19804
+right_shift 873,20194
+parse_c_expression 893,20732
+main 923,21483
+unsigned char is_idchar[is_idchar948,21901
+unsigned char is_idstart[is_idstart950,21996
+char is_hor_space[is_hor_space953,22160
+initialize_random_junk 958,22259
+error 988,22915
+warning 993,22963
+lookup 999,23033
+
+tex-src/nonewline.tex,0
+
+php-src/sendmail.php,0
+
+c-src/fail.c,0
+
+a-src/empty.zz,0
diff --git a/test/etags/ETAGS.good_5 b/test/etags/ETAGS.good_5
new file mode 100644
index 0000000..3291bf3
--- /dev/null
+++ b/test/etags/ETAGS.good_5
@@ -0,0 +1,7508 @@
+
+Makefile,701
+ADASRC=1,0
+ASRC=2,91
+CSRC=3,139
+CPSRC=7,410
+ELSRC=10,624
+ERLSRC=11,694
+FORTHSRC=12,759
+FSRC=13,809
+HTMLSRC=14,881
+JAVASRC=15,974
+LUASRC=16,1062
+MAKESRC=17,1105
+OBJCSRC=18,1147
+OBJCPPSRC=19,1228
+PASSRC=20,1291
+PERLSRC=21,1333
+PHPSRC=22,1413
+PSSRC=23,1485
+PROLSRC=24,1525
+PYTSRC=25,1587
+TEXSRC=26,1628
+YSRC=27,1707
+SRCS=28,1772
+NONSRCS=32,2024
+ETAGS_PROG=34,2098
+CTAGS_PROG=35,2129
+REGEX=37,2161
+xx=38,2207
+RUN=40,2256
+OPTIONS=42,2262
+ARGS=43,2314
+infiles 45,2332
+check:check47,2394
+ediff%:ediff%55,2697
+cdiff:cdiff58,2798
+ETAGS:ETAGS61,2895
+CTAGS:CTAGS64,2965
+srclist:srclist67,3043
+regexfile:regexfile71,3134
+.PRECIOUS:.PRECIOUS77,3311
+FRC:FRC79,3345
+
+ada-src/etags-test-for.ada,1969
+   type LL_Task_Procedure_Access LL_Task_Procedure_Access/t1,0
+   function Body_RequiredBody_Required/f3,78
+   type Type_Specific_Data Type_Specific_Data/t11,280
+   function "abs"abs/f19,504
+   type Barrier_Function_Pointer Barrier_Function_Pointer/t21,577
+   function "="=/f27,722
+   type usfreelock_ptr usfreelock_ptr/t30,803
+   function p p/f33,891
+   procedure LL_Wrapper LL_Wrapper/p37,1054
+function p p/f39,1094
+package Pkg1 Pkg1/s44,1203
+  type Private_T Private_T/t46,1220
+  package Inner1 Inner1/s48,1250
+    procedure Private_T;Private_T/p49,1270
+  package Inner2 Inner2/s52,1310
+    task Private_T;Private_T/k53,1330
+  type Public_T Public_T/t56,1365
+  procedure Pkg1_Proc1;Pkg1_Proc1/p62,1450
+  procedure Pkg1_Proc2 Pkg1_Proc2/p64,1475
+  function Pkg1_Func1 Pkg1_Func1/f66,1514
+  function Pkg1_Func2 Pkg1_Func2/f68,1553
+  package Pkg1_Pkg1 Pkg1_Pkg1/s71,1622
+    procedure Pkg1_Pkg1_Proc1;Pkg1_Pkg1_Proc1/p72,1645
+  task type Task_Type Task_Type/k75,1694
+  type Private_T Private_T/t82,1786
+package body Pkg1 Pkg1/b89,1882
+  procedure Pkg1_Proc1 Pkg1_Proc1/p91,1904
+  package body Inner1 Inner1/b96,1956
+    procedure Private_T Private_T/p97,1981
+  package body Inner2 Inner2/b103,2054
+    task body Private_T Private_T/b104,2079
+  task body Task_Type Task_Type/b112,2181
+  procedure Pkg1_Proc2 Pkg1_Proc2/p126,2367
+  function Pkg1_Func1 Pkg1_Func1/f132,2445
+  function Pkg1_Func2 Pkg1_Func2/f134,2496
+  package body Pkg1_Pkg1 Pkg1_Pkg1/b140,2596
+package body Pkg1_Pkg1 Pkg1_Pkg1/b146,2663
+  procedure Pkg1_Pkg1_Proc1 Pkg1_Pkg1_Proc1/p147,2689
+function  Pkg1_Func1 Pkg1_Func1/f155,2778
+package Truc Truc/s162,2887
+package Truc.Bidule Truc.Bidule/s166,2929
+  protected Bidule Bidule/t168,2953
+  protected type Machin_T Machin_T/t172,3007
+package body Truc.Bidule Truc.Bidule/b178,3087
+  protected body Bidule Bidule/b179,3115
+  protected Machin_T Machin_T/t186,3207
+
+ada-src/2ataspri.adb,2190
+package body System.Task_Primitives System.Task_Primitives/b64,2603
+   package RTE RTE/s69,2712
+   package TSL TSL/s70,2759
+   function To_void_ptr To_void_ptr/f86,3287
+   function To_TCB_Ptr To_TCB_Ptr/f89,3366
+   function 
pthread_mutexattr_setprotocolpthread_mutexattr_setprotocol/f92,3444
+   function 
pthread_mutexattr_setprio_ceilingpthread_mutexattr_setprio_ceiling/f99,3728
+   procedure Abort_WrapperAbort_Wrapper/p115,4302
+   procedure LL_Wrapper LL_Wrapper/p122,4526
+   procedure Initialize_LL_Tasks Initialize_LL_Tasks/p131,4830
+   function Self Self/f160,5586
+   procedure Initialize_LockInitialize_Lock/p174,5958
+   procedure Finalize_Lock Finalize_Lock/p210,6927
+   procedure Write_Lock Write_Lock/p226,7338
+   procedure Read_Lock Read_Lock/p239,7700
+   procedure Unlock Unlock/p246,7850
+   procedure Initialize_Cond Initialize_Cond/p258,8160
+   procedure Finalize_Cond Finalize_Cond/p286,8979
+   procedure Cond_Wait Cond_Wait/p300,9303
+   procedure Cond_Timed_WaitCond_Timed_Wait/p312,9661
+   procedure Cond_Signal Cond_Signal/p343,10510
+   procedure Set_PrioritySet_Priority/p355,10836
+   procedure Set_Own_Priority Set_Own_Priority/p372,11243
+   function Get_Priority Get_Priority/f385,11598
+   function Get_Own_Priority Get_Own_Priority/f398,12023
+   procedure Create_LL_TaskCreate_LL_Task/p412,12438
+      function To_Start_Addr To_Start_Addr/f426,12873
+   procedure Exit_LL_Task Exit_LL_Task/p491,14995
+   procedure Abort_Task Abort_Task/p500,15158
+   procedure Test_Abort Test_Abort/p518,15716
+   procedure Install_Abort_Handler Install_Abort_Handler/p527,15878
+   procedure Abort_WrapperAbort_Wrapper/p557,16939
+      function Address_To_Call_State Address_To_Call_State/f562,17062
+   procedure Install_Error_Handler Install_Error_Handler/p573,17351
+   procedure LL_Assert LL_Assert/p599,18146
+   procedure LL_Wrapper LL_Wrapper/p608,18299
+   procedure Initialize_TAS_Cell Initialize_TAS_Cell/p630,19010
+   procedure Finalize_TAS_Cell Finalize_TAS_Cell/p635,19129
+   procedure Clear Clear/p640,19236
+   procedure Test_And_Set Test_And_Set/p645,19330
+   function  Is_Set Is_Set/f659,19676
+
+ada-src/2ataspri.ads,2313
+package System.Task_Primitives System.Task_Primitives/s58,3169
+   type LL_Task_Procedure_Access LL_Task_Procedure_Access/t62,3253
+   type Pre_Call_State Pre_Call_State/t64,3331
+   type Task_Storage_Size Task_Storage_Size/t66,3378
+   type Machine_Exceptions Machine_Exceptions/t68,3433
+   type Error_Information Error_Information/t70,3499
+   type Lock Lock/t72,3569
+   type Condition_Variable Condition_Variable/t73,3594
+   type Task_Control_Block Task_Control_Block/t81,3955
+   type TCB_Ptr TCB_Ptr/t89,4241
+   function Address_To_TCB_Ptr Address_To_TCB_Ptr/f93,4333
+   procedure Initialize_LL_Tasks Initialize_LL_Tasks/p96,4425
+   function Self Self/f100,4602
+   procedure Initialize_Lock Initialize_Lock/p103,4707
+   procedure Finalize_Lock Finalize_Lock/p107,4879
+   procedure Write_Lock Write_Lock/p111,5034
+   procedure Read_Lock Read_Lock/p118,5428
+   procedure Unlock Unlock/p128,5995
+   procedure Initialize_Cond Initialize_Cond/p135,6300
+   procedure Finalize_Cond Finalize_Cond/p138,6413
+   procedure Cond_Wait Cond_Wait/p142,6591
+   procedure Cond_Timed_WaitCond_Timed_Wait/p155,7396
+   procedure Cond_Signal Cond_Signal/p164,7812
+   procedure Set_Priority Set_Priority/p169,8040
+   procedure Set_Own_Priority Set_Own_Priority/p173,8200
+   function Get_Priority Get_Priority/f177,8348
+   function Get_Own_Priority Get_Own_Priority/f181,8504
+   procedure Create_LL_TaskCreate_LL_Task/p185,8647
+   procedure Exit_LL_Task;Exit_LL_Task/p198,9282
+   procedure Abort_Task Abort_Task/p203,9516
+   procedure Test_Abort;Test_Abort/p210,9878
+   type Abort_Handler_Pointer Abort_Handler_Pointer/t217,10233
+   procedure Install_Abort_Handler Install_Abort_Handler/p219,10312
+   procedure Install_Error_Handler Install_Error_Handler/p226,10741
+   procedure LL_Assert LL_Assert/p231,10983
+   type Proc Proc/t238,11240
+   type TAS_Cell TAS_Cell/t242,11328
+   procedure Initialize_TAS_Cell Initialize_TAS_Cell/p249,11670
+   procedure Finalize_TAS_Cell Finalize_TAS_Cell/p255,11941
+   procedure Clear Clear/p260,12157
+   procedure Test_And_Set Test_And_Set/p267,12462
+   function  Is_Set Is_Set/f275,12877
+   type Lock Lock/t283,13155
+   type Condition_Variable Condition_Variable/t288,13267
+   type TAS_Cell TAS_Cell/t293,13389
+
+ada-src/waroquiers.ada,1503
+package Pkg1 Pkg1/s3,89
+  type Private_T Private_T/t5,106
+  package Inner1 Inner1/s7,136
+    procedure Private_T;Private_T/p8,156
+  package Inner2 Inner2/s11,196
+    task Private_T;Private_T/k12,216
+  type Public_T Public_T/t15,251
+  procedure Pkg1_Proc1;Pkg1_Proc1/p21,336
+  procedure Pkg1_Proc2 Pkg1_Proc2/p23,361
+  function Pkg1_Func1 Pkg1_Func1/f25,400
+  function Pkg1_Func2 Pkg1_Func2/f27,439
+  package Pkg1_Pkg1 Pkg1_Pkg1/s30,508
+    procedure Pkg1_Pkg1_Proc1;Pkg1_Pkg1_Proc1/p31,531
+  task type Task_Type Task_Type/k34,580
+  type Private_T Private_T/t40,671
+package body Pkg1 Pkg1/b46,766
+  procedure Pkg1_Proc1 Pkg1_Proc1/p48,788
+  package body Inner1 Inner1/b53,840
+    procedure Private_T Private_T/p54,865
+  package body Inner2 Inner2/b60,938
+    task body Private_T Private_T/b61,963
+  task body Task_Type Task_Type/b68,1064
+  procedure Pkg1_Proc2 Pkg1_Proc2/p82,1250
+  function Pkg1_Func1 Pkg1_Func1/f88,1328
+  function Pkg1_Func2 Pkg1_Func2/f90,1379
+  package body Pkg1_Pkg1 Pkg1_Pkg1/b96,1479
+package body Pkg1_Pkg1 Pkg1_Pkg1/b100,1544
+  procedure Pkg1_Pkg1_Proc1 Pkg1_Pkg1_Proc1/p101,1570
+function  Pkg1_Func1 Pkg1_Func1/f107,1657
+package Truc Truc/s112,1764
+package Truc.Bidule Truc.Bidule/s116,1816
+  protected Bidule Bidule/t125,1964
+  protected type Machin_T Machin_T/t131,2046
+package body Truc.Bidule Truc.Bidule/b138,2153
+  protected body Bidule Bidule/b139,2181
+  protected body Machin_T Machin_T/b146,2281
+
+c-src/abbrev.c,2634
+Lisp_Object Vabbrev_table_name_list;42,1416
+Lisp_Object Vglobal_abbrev_table;47,1561
+Lisp_Object Vfundamental_mode_abbrev_table;51,1672
+int abbrevs_changed;55,1773
+int abbrev_all_caps;57,1795
+Lisp_Object Vabbrev_start_location;62,1944
+Lisp_Object Vabbrev_start_location_buffer;65,2033
+Lisp_Object Vlast_abbrev;69,2142
+Lisp_Object Vlast_abbrev_text;74,2311
+int last_abbrev_point;78,2401
+Lisp_Object Vpre_abbrev_expand_hook,82,2474
+Lisp_Object Vpre_abbrev_expand_hook, Qpre_abbrev_expand_hook;82,2474
+DEFUN ("make-abbrev-table", Fmake_abbrev_table,make-abbrev-table84,2538
+DEFUN ("clear-abbrev-table", Fclear_abbrev_table,clear-abbrev-table91,2730
+DEFUN ("define-abbrev", Fdefine_abbrev,define-abbrev106,3111
+DEFUN ("define-global-abbrev", 
Fdefine_global_abbrev,define-global-abbrev148,4430
+DEFUN ("define-mode-abbrev", Fdefine_mode_abbrev,define-mode-abbrev159,4801
+DEFUN ("abbrev-symbol", Fabbrev_symbol,abbrev-symbol173,5269
+DEFUN ("abbrev-expansion", Fabbrev_expansion,abbrev-expansion201,6233
+DEFUN ("expand-abbrev", Fexpand_abbrev,expand-abbrev217,6748
+DEFUN ("unexpand-abbrev", Funexpand_abbrev,unexpand-abbrev388,11669
+write_abbrev 425,12876
+describe_abbrev 444,13311
+DEFUN ("insert-abbrev-table-description", 
Finsert_abbrev_table_description,insert-abbrev-table-description465,13826
+DEFUN ("define-abbrev-table", 
Fdefine_abbrev_table,define-abbrev-table505,14982
+syms_of_abbrev 539,16059
+  DEFVAR_LISP ("abbrev-table-name-list"541,16079
+  DEFVAR_LISP ("global-abbrev-table"547,16341
+  DEFVAR_LISP ("fundamental-mode-abbrev-table"554,16663
+  DEFVAR_LISP ("last-abbrev"560,17005
+  DEFVAR_LISP ("last-abbrev-text"563,17128
+  DEFVAR_INT ("last-abbrev-location"567,17286
+  DEFVAR_LISP ("abbrev-start-location"574,17485
+  DEFVAR_LISP ("abbrev-start-location-buffer"580,17762
+  DEFVAR_PER_BUFFER ("local-abbrev-table"585,18026
+  DEFVAR_BOOL ("abbrevs-changed"588,18169
+  DEFVAR_BOOL ("abbrev-all-caps"593,18372
+  DEFVAR_LISP ("pre-abbrev-expand-hook"597,18528
+  DEFVAR_LISP ("abbrev-table-name-list",\1541,16079
+  DEFVAR_LISP ("global-abbrev-table",\1547,16341
+  DEFVAR_LISP ("fundamental-mode-abbrev-table",\1554,16663
+  DEFVAR_LISP ("last-abbrev",\1560,17005
+  DEFVAR_LISP ("last-abbrev-text",\1563,17128
+  DEFVAR_INT ("last-abbrev-location",\1567,17286
+  DEFVAR_LISP ("abbrev-start-location",\1574,17485
+  DEFVAR_LISP ("abbrev-start-location-buffer",\1580,17762
+  DEFVAR_PER_BUFFER ("local-abbrev-table",\1585,18026
+  DEFVAR_BOOL ("abbrevs-changed",\1588,18169
+  DEFVAR_BOOL ("abbrev-all-caps",\1593,18372
+  DEFVAR_LISP ("pre-abbrev-expand-hook",\1597,18528
+
+c-src/torture.c,197
+(*tag1 tag118,452
+#define notag2 26,553
+(*tag2 tag229,630
+(*tag3 tag339,772
+#define notag4 45,861
+(*tag4 tag448,955
+tag5 57,1081
+tag6 66,1208
+int pp1(74,1317
+pp287,1419
+pp3(100,1518
+
+c-src/getopt.h,666
+#define _GETOPT_H 19,801
+extern char *optarg;optarg31,1109
+extern int optind;45,1617
+extern int opterr;50,1743
+struct option73,2797
+  const char *name;name76,2826
+  char *name;name78,2852
+  int has_arg;82,3009
+  int *flag;flag83,3024
+  int val;84,3037
+#define        no_argument     89,3124
+#define required_argument      90,3147
+#define optional_argument      91,3175
+extern int getopt 98,3440
+extern int getopt 100,3544
+extern int getopt_long 102,3599
+extern int getopt_long_only 104,3731
+extern int _getopt_internal 109,3942
+extern int getopt 114,4140
+extern int getopt_long 115,4162
+extern int getopt_long_only 116,4189
+extern int _getopt_internal 118,4222
+
+c-src/etags.c,14175
+char pot_etags_version[pot_etags_version81,3470
+#  undef DEBUG84,3552
+#  define DEBUG 85,3567
+#  define DEBUG 87,3594
+#  define NDEBUG       88,3617
+# define _GNU_SOURCE 94,3705
+# undef MSDOS100,3876
+# undef  WINDOWSNT101,3890
+# define WINDOWSNT102,3909
+# undef MSDOS106,3968
+# define MSDOS 107,3982
+# define MSDOS 110,4032
+# define MAXPATHLEN 115,4111
+# undef HAVE_NTGUI116,4141
+# undef  DOS_NT117,4160
+# define DOS_NT118,4176
+# undef  assert        135,4482
+# define assert(136,4541
+# undef  CTAGS146,4857
+# define CTAGS 147,4872
+# define CTAGS 149,4898
+#define streq(152,4927
+#define strcaseeq(153,4996
+#define strneq(154,5075
+#define strncaseeq(155,5151
+#define CHARS 157,5238
+#define CHAR(158,5278
+#define        iswhite(159,5329
+#define notinname(160,5394
+#define        begtoken(161,5469
+#define        intoken(162,5542
+#define        endtoken(163,5614
+#define ISALNUM(165,5684
+#define ISALPHA(166,5722
+#define ISDIGIT(167,5760
+#define ISLOWER(168,5798
+#define lowcase(170,5837
+#define xnew(179,6015
+#define xrnew(180,6083
+typedef void Lang_function 182,6164
+  const char *suffix;suffix186,6219
+  const char *command;command187,6294
+} compressor;188,6365
+  const char *name;name192,6397
+  const char *help;help193,6449
+  Lang_function *function;function194,6508
+  const char **suffixes;suffixes195,6556
+  const char **filenames;filenames196,6633
+  const char **interpreters;interpreters197,6702
+  bool metasource;198,6771
+} language;199,6835
+typedef struct fdesc201,6848
+  struct fdesc *next;next203,6871
+  char *infname;infname204,6920
+  char *infabsname;infabsname205,6973
+  char *infabsdir;infabsdir206,7038
+  char *taggedfname;taggedfname207,7091
+  language *lang;lang208,7149
+  char *prop;prop209,7191
+  bool usecharno;210,7249
+  bool written;211,7311
+} fdesc;212,7366
+typedef struct node_st214,7376
+  struct node_st *left,left216,7428
+  struct node_st *left, *right;right216,7428
+  fdesc *fdp;fdp217,7486
+  char *name;name218,7548
+  char *regex;regex219,7580
+  bool valid;220,7617
+  bool is_func;221,7670
+  bool been_warned;222,7733
+  int lno;223,7801
+  long cno;224,7842
+} node;225,7894
+  long size;236,8208
+  int len;237,8221
+  char *buffer;buffer238,8232
+} linebuffer;239,8248
+    at_language,245,8344
+    at_regexp,246,8393
+    at_filename,247,8437
+    at_stdin,248,8473
+    at_end     249,8516
+  } arg_type;250,8557
+  language *lang;lang251,8593
+  char *what;what252,8656
+} argument;253,8698
+typedef struct regexp256,8758
+  struct regexp *p_next;p_next258,8782
+  language *lang;lang259,8837
+  char *pattern;pattern260,8897
+  char *name;name261,8940
+  struct re_pattern_buffer *pat;pat262,8971
+  struct re_registers regs;263,9031
+  bool error_signaled;264,9078
+  bool force_explicit_name;265,9141
+  bool ignore_case;266,9206
+  bool multi_line;267,9259
+} regexp;268,9325
+static void Ada_funcs 274,9428
+static void Asm_labels 275,9460
+static void C_entries 276,9493
+static void default_C_entries 277,9536
+static void plain_C_entries 278,9576
+static void Cjava_entries 279,9614
+static void Cobol_paragraphs 280,9650
+static void Cplusplus_entries 281,9689
+static void Cstar_entries 282,9729
+static void Erlang_functions 283,9765
+static void Forth_words 284,9804
+static void Fortran_functions 285,9838
+static void HTML_labels 286,9878
+static void Lisp_functions 287,9912
+static void Lua_functions 288,9949
+static void Makefile_targets 289,9985
+static void Pascal_functions 290,10024
+static void Perl_functions 291,10063
+static void PHP_functions 292,10100
+static void PS_functions 293,10136
+static void Prolog_functions 294,10171
+static void Python_functions 295,10210
+static void Scheme_functions 296,10249
+static void TeX_commands 297,10288
+static void Texinfo_nodes 298,10323
+static void Yacc_entries 299,10359
+static void just_read_file 300,10394
+static language *get_language_from_langname 
get_language_from_langname302,10432
+static void readline 303,10492
+static long readline_internal 304,10537
+static bool nocase_tail 305,10591
+static void get_tag 306,10631
+static void analyze_regex 308,10671
+static void free_regexps 309,10707
+static void regex_tag_multiline 310,10740
+static void error 311,10780
+# undef STDIN408,15073
+#define STDIN 411,15095
+static compressor compressors[compressors457,17664
+static const char *Ada_suffixes Ada_suffixes473,17907
+static const char Ada_help 475,17977
+static const char *Asm_suffixes Asm_suffixes493,18580
+static const char Asm_help 504,18976
+static const char *default_C_suffixes default_C_suffixes512,19312
+static const char default_C_help 515,19413
+static const char default_C_help 523,19850
+static const char *Cplusplus_suffixes Cplusplus_suffixes535,20460
+static const char Cplusplus_help 540,20658
+static const char *Cjava_suffixes Cjava_suffixes549,21113
+static char Cjava_help 551,21172
+static const char *Cobol_suffixes Cobol_suffixes556,21337
+static char Cobol_help 558,21402
+static const char *Cstar_suffixes Cstar_suffixes562,21543
+static const char *Erlang_suffixes Erlang_suffixes565,21607
+static const char Erlang_help 567,21673
+const char *Forth_suffixes Forth_suffixes571,21799
+static const char Forth_help 573,21857
+static const char *Fortran_suffixes Fortran_suffixes577,22008
+static const char Fortran_help 579,22085
+static const char *HTML_suffixes HTML_suffixes582,22190
+static const char HTML_help 584,22264
+static const char *Lisp_suffixes Lisp_suffixes589,22452
+static const char Lisp_help 591,22556
+static const char *Lua_suffixes Lua_suffixes598,22871
+static const char Lua_help 600,22934
+static const char *Makefile_filenames Makefile_filenames603,23010
+static const char Makefile_help 605,23133
+static const char *Objc_suffixes Objc_suffixes609,23277
+static const char Objc_help 613,23399
+static const char *Pascal_suffixes Pascal_suffixes619,23714
+static const char Pascal_help 621,23778
+static const char *Perl_suffixes Perl_suffixes626,23966
+static const char *Perl_interpreters Perl_interpreters628,24028
+static const char Perl_help 630,24100
+static const char *PHP_suffixes PHP_suffixes637,24451
+static const char PHP_help 639,24523
+static const char *plain_C_suffixes plain_C_suffixes643,24678
+static const char *PS_suffixes PS_suffixes647,24762
+static const char PS_help 649,24848
+static const char *Prolog_suffixes Prolog_suffixes652,24931
+static const char Prolog_help 654,24993
+static const char *Python_suffixes Python_suffixes658,25107
+static const char Python_help 660,25165
+static const char *Scheme_suffixes Scheme_suffixes665,25347
+static const char Scheme_help 667,25460
+static const char *TeX_suffixes TeX_suffixes672,25683
+static const char TeX_help 674,25781
+static const char *Texinfo_suffixes Texinfo_suffixes686,26316
+static const char Texinfo_help 688,26395
+static const char *Yacc_suffixes Yacc_suffixes691,26492
+static const char Yacc_help 693,26606
+static const char auto_help 699,26856
+static const char none_help 703,27020
+static const char no_lang_help 707,27143
+static language lang_names 718,27355
+print_language_names 753,29532
+# define EMACS_NAME 786,30755
+# define VERSION 789,30811
+print_version 792,30869
+# define PRINT_UNDOCUMENTED_OPTIONS_HELP 804,31173
+print_help 808,31250
+main 981,37438
+get_compressor_from_suffix 1319,46217
+get_language_from_langname 1355,47158
+get_language_from_interpreter 1377,47545
+get_language_from_filename 1399,47976
+process_file_name 1433,48834
+process_file 1555,51665
+init 1632,54150
+find_entries 1656,54901
+make_tag 1814,59707
+pfnote 1856,60942
+free_tree 1917,62744
+free_fdesc 1935,63029
+add_node 1955,63472
+invalidate_nodes 2035,65537
+static int total_size_of_entries 2067,66150
+static int number_len 2068,66193
+total_size_of_entries 2087,66694
+put_entries 2107,67154
+#define C_EXT  2193,68995
+#define C_PLAIN 2194,69037
+#define C_PLPL 2195,69070
+#define C_STAR 2196,69104
+#define C_JAVA 2197,69137
+#define C_AUTO 2198,69172
+#define YACC   2199,69242
+enum sym_type2204,69312
+  st_none,2206,69328
+  st_C_objprot,2207,69339
+  st_C_objprot, st_C_objimpl,2207,69339
+  st_C_objprot, st_C_objimpl, st_C_objend,2207,69339
+  st_C_gnumacro,2208,69382
+  st_C_ignore,2209,69399
+  st_C_ignore, st_C_attribute,2209,69399
+  st_C_javastruct,2210,69430
+  st_C_operator,2211,69449
+  st_C_class,2212,69466
+  st_C_class, st_C_template,2212,69466
+  st_C_struct,2213,69495
+  st_C_struct, st_C_extern,2213,69495
+  st_C_struct, st_C_extern, st_C_enum,2213,69495
+  st_C_struct, st_C_extern, st_C_enum, st_C_define,2213,69495
+  st_C_struct, st_C_extern, st_C_enum, st_C_define, st_C_typedef2213,69495
+struct C_stab_entry 2271,71278
+struct C_stab_entry { const char *name;name2271,71278
+struct C_stab_entry { const char *name; int c_ext;2271,71278
+struct C_stab_entry { const char *name; int c_ext; enum sym_type 
type;2271,71278
+hash 2275,71409
+in_word_set 2321,72937
+      TOTAL_KEYWORDS 2325,73018
+      MIN_WORD_LENGTH 2326,73045
+      MAX_WORD_LENGTH 2327,73072
+      MIN_HASH_VALUE 2328,73100
+      MAX_HASH_VALUE 2329,73126
+C_symtype 2387,74985
+static bool inattribute;2400,75234
+  fvnone,2408,75435
+  fdefunkey,2409,75466
+  fdefunname,2410,75512
+  foperator,2411,75556
+  fvnameseen,2412,75613
+  fstartlist,2413,75666
+  finlist,2414,75722
+  flistseen,2415,75765
+  fignore,2416,75813
+  vignore      2417,75856
+} fvdef;2418,75901
+static bool fvextern;2420,75911
+  tnone,2428,76089
+  tkeyseen,2429,76119
+  ttypeseen,2430,76160
+  tinbody,2431,76199
+  tend,2432,76238
+  tignore      2433,76279
+} typdef;2434,76320
+  snone,2443,76499
+  skeyseen,2445,76575
+  stagseen,2446,76620
+  scolonseen   2447,76661
+} structdef;2448,76715
+static const char *objtag objtag2453,76809
+  dnone,2460,76942
+  dsharpseen,2461,76972
+  ddefineseen,2462,77025
+  dignorerest  2463,77070
+} definedef;2464,77112
+  onone,2472,77267
+  oprotocol,2473,77297
+  oimplementation,2474,77347
+  otagseen,2475,77395
+  oparenseen,2476,77431
+  ocatseen,2477,77486
+  oinbody,2478,77525
+  omethodsign,2479,77568
+  omethodtag,2480,77626
+  omethodcolon,2481,77666
+  omethodparm,2482,77709
+  oignore      2483,77755
+} objdef;2484,77787
+static struct tok2491,77944
+  char *line;line2493,77964
+  int offset;2494,78014
+  int length;2495,78067
+  bool valid;2502,78352
+  bool named;2505,78487
+  int lineno;2506,78528
+  long linepos;2507,78576
+} token;2508,78626
+static void pushclass_above 2514,78784
+static void popclass_above 2515,78832
+static void write_classname 2516,78866
+  char **cname;cname2519,78950
+  int *bracelev;bracelev2520,78993
+  int nl;2521,79042
+  int size;2522,79096
+} cstack;2523,79136
+#define nestlev        2525,79264
+#define instruct       2527,79369
+pushclass_above 2531,79489
+popclass_above 2550,79948
+write_classname 2564,80162
+static bool consider_token 2592,80761
+static void make_C_tag 2593,80833
+consider_token 2613,81341
+  long linepos;2922,88499
+  linebuffer lb;2923,88515
+} lbs[lbs2924,88532
+#define current_lb_is_new 2926,88543
+#define switch_line_buffers(2927,88588
+#define curlb 2929,88641
+#define newlb 2930,88672
+#define curlinepos 2931,88703
+#define newlinepos 2932,88744
+#define plainc 2934,88786
+#define cplpl 2935,88830
+#define cjava 2936,88861
+#define CNL_SAVE_DEFINEDEF(2938,88905
+#define CNL(2947,89117
+make_C_tag 2960,89375
+C_entries 2986,90194
+default_C_entries 3833,110156
+plain_C_entries 3840,110276
+Cplusplus_entries 3847,110364
+Cjava_entries 3854,110460
+Cstar_entries 3861,110550
+Yacc_entries 3868,110642
+#define LOOP_ON_INPUT_LINES(3875,110720
+#define LOOKING_AT(3884,111056
+#define LOOKING_AT_NOCASE(3891,111461
+just_read_file 3901,111861
+static void F_takeprec 3910,111965
+static void F_getit 3911,111996
+F_takeprec 3914,112039
+F_getit 3937,112366
+Fortran_functions 3961,112840
+Ada_getit 4052,114669
+Ada_funcs 4115,116044
+Asm_labels 4228,118582
+Perl_functions 4261,119549
+Python_functions 4357,122057
+PHP_functions 4387,122684
+Cobol_paragraphs 4466,124471
+Makefile_targets 4494,125029
+Pascal_functions 4529,125950
+static void L_getit 4706,130277
+L_getit 4709,130318
+Lisp_functions 4725,130664
+Lua_functions 4785,131850
+PS_functions 4811,132385
+Forth_words 4841,133053
+Scheme_functions 4877,134092
+static linebuffer *TEX_toktab TEX_toktab4908,134781
+static const char *TEX_defenv TEX_defenv4912,134974
+static void TEX_mode 4917,135172
+static void TEX_decode_env 4918,135203
+static char TEX_esc 4920,135261
+static char TEX_opgrp 4921,135289
+static char TEX_clgrp 4922,135318
+TeX_commands 4928,135395
+#define TEX_LESC 4986,136652
+#define TEX_SESC 4987,136674
+TEX_mode 4992,136804
+TEX_decode_env 5026,137509
+Texinfo_nodes 5071,138554
+HTML_labels 5094,139013
+static size_t prolog_pr 5214,142192
+static void prolog_skip_comment 5215,142234
+static size_t prolog_atom 5216,142290
+Prolog_functions 5219,142347
+prolog_skip_comment 5255,143128
+prolog_pr 5281,143736
+prolog_atom 5319,144628
+static int erlang_func 5374,145540
+static void erlang_attribute 5375,145581
+static int erlang_atom 5376,145620
+Erlang_functions 5379,145666
+erlang_func 5438,146965
+erlang_attribute 5476,147642
+erlang_atom 5496,148061
+static char *scan_separators scan_separators5520,148487
+static void add_regex 5521,148526
+static char *substitute substitute5522,148570
+scan_separators 5534,149080
+analyze_regex 5586,150460
+add_regex 5654,152050
+substitute 5767,154797
+free_regexps 5814,155837
+regex_tag_multiline 5836,156291
+nocase_tail 5913,158263
+get_tag 5928,158519
+readline_internal 5959,159455
+readline 6037,161296
+savestr 6230,167243
+savenstr 6240,167473
+skip_spaces 6249,167679
+skip_non_spaces 6258,167833
+skip_name 6267,167983
+fatal 6277,168156
+pfatal 6284,168253
+suggest_asking_for_help 6291,168332
+error 6300,168554
+concat 6313,168846
+etags_getcwd 6329,169259
+relative_filename 6350,169725
+absolute_filename 6389,170751
+absolute_dirname 6453,172416
+filename_is_absolute 6472,172845
+canonicalize_filename 6484,173096
+# define ISUPPER(6491,173235
+linebuffer_init 6514,173656
+linebuffer_setlen 6524,173887
+xmalloc 6536,174148
+xrealloc 6545,174314
+
+c-src/exit.c,99
+    size_t n;28,961
+    void EXFUN((*fn[fn29,975
+  } __libc_atexit;30,1011
+DEFUN(exit,38,1252
+
+c-src/exit.strange_suffix,99
+    size_t n;28,961
+    void EXFUN((*fn[fn29,975
+  } __libc_atexit;30,1011
+DEFUN(exit,38,1252
+
+c-src/sysdep.h,491
+#define        ENTRY(21,865
+#define        PSEUDO(26,972
+    movl $SYS_##syscall_nam$SYS_##syscall_na31,1132
+    movl $SYS_##syscall_name, %eax;eax31,1132
+    int $0x80;32,1180
+    test %eax,eax33,1210
+    test %eax, %eax;eax33,1210
+    jl syscall_error;34,1245
+#define        XCHG_0  47,1562
+#define        XCHG_1  48,1606
+#define        XCHG_2  49,1648
+#define        XCHG_3  50,1691
+#define        XCHG_4  51,1734
+#define        XCHG_5  52,1777
+#define        r0      54,1821
+#define        r1      55,1875
+#define scratch 56,1932
+#define MOVE(57,2001
+
+c-src/tab.c,196
+static int             count_words(15,263
+static char            *get_word(get_word35,553
+void                   tab_free(59,966
+char                   **tab_fill(tab_fill70,1129
+int                    tab_delete_first(91,1638
+int                    tab_count_words(103,1820
+
+c-src/dostorture.c,197
+(*tag1 tag118,451
+#define notag2 26,552
+(*tag2 tag229,629
+(*tag3 tag339,771
+#define notag4 45,860
+(*tag4 tag448,954
+tag5 57,1080
+tag6 66,1207
+int pp1(74,1316
+pp287,1418
+pp3(100,1517
+
+c-src/emacs/src/gmalloc.c,7311
+#define USE_PTHREAD25,1002
+#undef get_current_dir_name33,1126
+extern void emacs_abort 47,1305
+#undef malloc64,2110
+#undef realloc65,2124
+#undef calloc66,2139
+#undef free67,2153
+#define malloc 68,2165
+#define realloc 69,2188
+#define calloc 70,2213
+#define aligned_alloc 71,2236
+#define free 72,2273
+extern void *bss_sbrk bss_sbrk76,2335
+extern int bss_sbrk_did_unexec;77,2375
+extern char bss_sbrk_buffer[bss_sbrk_buffer78,2407
+extern void *bss_sbrk_buffer_end;bss_sbrk_buffer_end79,2438
+#define DUMPED 80,2472
+#define ALLOCATED_BEFORE_DUMPING(81,2507
+extern void *malloc malloc94,2718
+#define INT_BIT        124,3934
+#define BLOCKLOG       125,3977
+#define BLOCKSIZE      126,4018
+#define BLOCKIFY(127,4052
+#define HEAP   131,4215
+#define FINAL_FREE_BLOCKS      135,4391
+       int type;145,4676
+               size_t nfree;150,4720
+               size_t first;151,4777
+             } frag;152,4834
+           ptrdiff_t size;156,5055
+         } info;157,5076
+      } busy;158,5087
+       size_t size;163,5215
+       size_t next;164,5272
+       size_t prev;165,5321
+      } free;166,5374
+  } malloc_info;167,5388
+extern char *_heapbase;_heapbase170,5449
+extern malloc_info *_heapinfo;_heapinfo173,5541
+#define BLOCK(176,5620
+#define ADDRESS(177,5682
+extern size_t _heapindex;180,5797
+extern size_t _heaplimit;183,5866
+struct list186,5939
+    struct list *next;next188,5955
+    struct list *prev;prev189,5978
+extern struct list _fraghead[_fraghead193,6056
+struct alignlist196,6153
+    struct alignlist *next;next198,6174
+    void *aligned;aligned199,6202
+    void *exact;exact200,6270
+extern struct alignlist *_aligned_blocks;_aligned_blocks202,6334
+extern size_t _chunks_used;205,6401
+extern size_t _bytes_used;206,6429
+extern size_t _chunks_free;207,6456
+extern size_t _bytes_free;208,6484
+extern void *_malloc_internal _malloc_internal213,6673
+extern void *_realloc_internal _realloc_internal214,6713
+extern void _free_internal 215,6762
+extern void *_malloc_internal_nolock _malloc_internal_nolock216,6799
+extern void *_realloc_internal_nolock _realloc_internal_nolock217,6846
+extern void _free_internal_nolock 218,6902
+extern pthread_mutex_t _malloc_mutex,221,6966
+extern pthread_mutex_t _malloc_mutex, _aligned_blocks_mutex;221,6966
+extern int _malloc_thread_enabled_p;222,7027
+#define LOCK(223,7064
+#define UNLOCK(228,7195
+#define LOCK_ALIGNED_BLOCKS(233,7329
+#define UNLOCK_ALIGNED_BLOCKS(238,7484
+#define LOCK(244,7649
+#define UNLOCK(245,7664
+#define LOCK_ALIGNED_BLOCKS(246,7681
+#define UNLOCK_ALIGNED_BLOCKS(247,7711
+extern void *malloc_find_object_address malloc_find_object_address252,7865
+extern void *(*__morecore)__morecore256,8021
+extern void *__default_morecore __default_morecore259,8105
+extern void (*__after_morecore_hook)__after_morecore_hook263,8269
+extern size_t __malloc_extra_blocks;267,8442
+extern int __malloc_initialized;270,8552
+extern int __malloc_initialize 272,8646
+extern void (*__malloc_initialize_hook)__malloc_initialize_hook275,8723
+extern void (*__free_hook)__free_hook276,8771
+extern void *(*__malloc_hook)__malloc_hook277,8811
+extern void *(*__realloc_hook)__realloc_hook278,8856
+extern void *(*__memalign_hook)__memalign_hook279,8913
+enum mcheck_status283,9092
+    MCHECK_DISABLED 285,9115
+    MCHECK_OK,286,9187
+    MCHECK_FREE,287,9226
+    MCHECK_HEAD,288,9270
+    MCHECK_TAIL        289,9334
+extern int mcheck 296,9701
+extern enum mcheck_status mprobe 301,9952
+extern void mtrace 304,10055
+extern void muntrace 305,10082
+struct mstats308,10153
+    size_t bytes_total;310,10171
+    size_t chunks_used;311,10225
+    size_t bytes_used;312,10285
+    size_t chunks_free;313,10351
+    size_t bytes_free;314,10406
+extern struct mstats mstats 318,10518
+extern void memory_warnings 321,10625
+void *(*__malloc_hook)__malloc_hook352,11743
+char *_heapbase;_heapbase355,11829
+malloc_info *_heapinfo;_heapinfo358,11927
+static size_t heapsize;361,11983
+size_t _heapindex;364,12047
+size_t _heaplimit;367,12109
+struct list _fraghead[_fraghead370,12171
+size_t _chunks_used;373,12229
+size_t _bytes_used;374,12250
+size_t _chunks_free;375,12270
+size_t _bytes_free;376,12291
+int __malloc_initialized;379,12340
+size_t __malloc_extra_blocks;381,12367
+void (*__malloc_initialize_hook)__malloc_initialize_hook383,12398
+void (*__after_morecore_hook)__after_morecore_hook384,12439
+static int state_protected_p;400,12912
+static size_t last_state_size;401,12942
+static malloc_info *last_heapinfo;last_heapinfo402,12973
+protect_malloc_state 405,13014
+#define PROTECT_MALLOC_STATE(426,13627
+#define PROTECT_MALLOC_STATE(429,13697
+align 435,13794
+get_contiguous_space 466,14616
+register_heapinfo 497,15325
+pthread_mutex_t _malloc_mutex 517,15879
+pthread_mutex_t _aligned_blocks_mutex 518,15938
+int _malloc_thread_enabled_p;519,16005
+malloc_atfork_handler_prepare 522,16048
+malloc_atfork_handler_parent 529,16139
+malloc_atfork_handler_child 536,16233
+malloc_enable_thread 544,16375
+malloc_initialize_1 563,16961
+__malloc_initialize 594,17793
+static int morecore_recursing;604,17926
+morecore_nolock 609,18066
+_malloc_internal_nolock 722,21584
+_malloc_internal 920,28102
+malloc 932,28247
+extern void *_malloc _malloc956,29033
+extern void _free 957,29064
+extern void *_realloc _realloc958,29092
+_malloc 961,29140
+_free 967,29196
+_realloc 973,29240
+void (*__free_hook)__free_hook1001,30259
+struct alignlist *_aligned_blocks _aligned_blocks1004,30345
+_free_internal_nolock 1009,30474
+_free_internal 1255,38476
+free 1265,38603
+weak_alias 1277,38799
+#define min(1306,39813
+void *(*__realloc_hook)__realloc_hook1310,39898
+_realloc_internal_nolock 1319,40309
+_realloc_internal 1435,43563
+realloc 1447,43726
+calloc 1478,44894
+#define        __sbrk  1513,46042
+extern void *__sbrk __sbrk1518,46247
+__default_morecore 1525,46511
+void *(*__memalign_hook)__memalign_hook1554,47456
+aligned_alloc 1557,47522
+memalign 1647,49704
+posix_memalign 1656,49909
+extern void *valloc valloc1695,51140
+extern int getpagesize 1700,51278
+static size_t pagesize;1703,51317
+valloc 1706,51349
+#undef malloc1715,51490
+#undef realloc1716,51504
+#undef calloc1717,51519
+#undef aligned_alloc1718,51533
+#undef free1719,51554
+extern void *malloc malloc1722,51609
+extern void *realloc realloc1723,51644
+extern void *calloc calloc1724,51691
+extern void free 1725,51740
+extern void *aligned_alloc aligned_alloc1727,51796
+extern int posix_memalign 1729,51890
+hybrid_malloc 1736,52083
+hybrid_calloc 1744,52188
+hybrid_free 1752,52319
+hybrid_aligned_alloc 1765,52626
+hybrid_realloc 1780,52984
+char *gget_current_dir_name gget_current_dir_name1808,53753
+hybrid_get_current_dir_name 1811,53797
+static void (*old_free_hook)old_free_hook1846,54921
+static void *(*old_malloc_hook)old_malloc_hook1847,54963
+static void *(*old_realloc_hook)old_realloc_hook1848,55010
+static void (*abortfunc)abortfunc1851,55124
+#define MAGICWORD      1854,55206
+#define MAGICFREE      1855,55261
+#define MAGICBYTE      1856,55316
+#define MALLOCFLOOD    1857,55348
+#define FREEFLOOD      1858,55382
+struct hdr1860,55415
+    size_t size;1862,55430
+    size_t magic;1863,55484
+checkhdr 1867,55581
+freehook 1891,56022
+mallochook 1927,56804
+reallochook 1944,57143
+mabort 1978,57901
+static int mcheck_used 2012,58586
+mcheck 2015,58619
+mprobe 2035,59138
+
+c-src/emacs/src/regex.h,5300
+#define _REGEX_H 21,836
+typedef unsigned long reg_syntax_t;43,1577
+#define RE_BACKSLASH_ESCAPE_IN_LISTS 47,1749
+#define RE_BK_PLUS_QM 52,1969
+#define RE_CHAR_CLASSES 58,2298
+#define RE_CONTEXT_INDEP_ANCHORS 72,3032
+#define RE_CONTEXT_INDEP_OPS 80,3458
+#define RE_CONTEXT_INVALID_OPS 84,3658
+#define RE_DOT_NEWLINE 88,3801
+#define RE_DOT_NOT_NULL 92,3937
+#define RE_HAT_LISTS_NOT_NEWLINE 96,4082
+#define RE_INTERVALS 101,4292
+#define RE_LIMITED_OPS 105,4441
+#define RE_NEWLINE_ALT 109,4583
+#define RE_NO_BK_BRACES 114,4773
+#define RE_NO_BK_PARENS 118,4964
+#define RE_NO_BK_REFS 122,5120
+#define RE_NO_BK_VBAR 126,5316
+#define RE_NO_EMPTY_RANGES 132,5610
+#define RE_UNMATCHED_RIGHT_PAREN_ORD 136,5766
+#define RE_NO_POSIX_BACKTRACKING 140,5937
+#define RE_NO_GNU_OPS 144,6133
+#define RE_FRUGAL 147,6253
+#define RE_SHY_GROUPS 150,6360
+#define RE_NO_NEWLINE_ANCHOR 153,6468
+#define RE_DEBUG 161,6884
+extern reg_syntax_t re_syntax_options;167,7170
+extern Lisp_Object re_match_object;172,7344
+extern size_t re_max_failures;176,7454
+#define RE_SYNTAX_EMACS        183,7684
+#define RE_SYNTAX_AWK  186,7780
+#define RE_SYNTAX_GNU_AWK      193,8084
+#define RE_SYNTAX_POSIX_AWK 197,8255
+#define RE_SYNTAX_GREP 201,8393
+#define RE_SYNTAX_EGREP        206,8549
+#define RE_SYNTAX_POSIX_EGREP  212,8765
+#define RE_SYNTAX_ED 216,8910
+#define RE_SYNTAX_SED 218,8954
+#define _RE_SYNTAX_POSIX_COMMON        221,9072
+#define RE_SYNTAX_POSIX_BASIC  225,9215
+#define RE_SYNTAX_POSIX_MINIMAL_BASIC  231,9508
+#define RE_SYNTAX_POSIX_EXTENDED       234,9598
+#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED       242,9967
+# undef RE_DUP_MAX253,10454
+#define RE_DUP_MAX 256,10540
+#define REG_EXTENDED 263,10762
+#define REG_ICASE 267,10886
+#define REG_NEWLINE 272,11070
+#define REG_NOSUB 276,11248
+#define REG_NOTBOL 286,11614
+#define REG_NOTEOL 289,11688
+  REG_ENOSYS 297,11859
+  REG_NOERROR 300,11941
+  REG_NOMATCH,301,11976
+  REG_BADPAT,305,12123
+  REG_ECOLLATE,306,12162
+  REG_ECTYPE,307,12203
+  REG_EESCAPE,308,12255
+  REG_ESUBREG,309,12298
+  REG_EBRACK,310,12345
+  REG_EPAREN,311,12391
+  REG_EBRACE,312,12436
+  REG_BADBR,313,12472
+  REG_ERANGE,314,12519
+  REG_ESPACE,315,12560
+  REG_BADRPT,316,12601
+  REG_EEND,319,12693
+  REG_ESIZE,320,12728
+  REG_ERPAREN,321,12790
+  REG_ERANGEX  322,12859
+} reg_errcode_t;323,12911
+# define RE_TRANSLATE_TYPE 332,13273
+struct re_pattern_buffer335,13315
+  unsigned char *buffer;buffer341,13538
+  size_t allocated;344,13614
+  size_t used;347,13686
+  reg_syntax_t syntax;350,13769
+  char *fastmap;fastmap355,13975
+  RE_TRANSLATE_TYPE translate;361,14241
+  size_t re_nsub;364,14329
+  unsigned can_be_null 370,14624
+#define REGS_UNALLOCATED 376,14889
+#define REGS_REALLOCATE 377,14916
+#define REGS_FIXED 378,14942
+  unsigned regs_allocated 379,14963
+  unsigned fastmap_accurate 383,15136
+  unsigned no_sub 387,15267
+  unsigned not_bol 391,15398
+  unsigned not_eol 394,15475
+  unsigned used_syntax 398,15655
+  unsigned multibyte 403,15805
+  unsigned target_multibyte 407,15941
+  int charset_unibyte;410,16032
+typedef struct re_pattern_buffer regex_t;416,16098
+typedef ssize_t regoff_t;423,16492
+struct re_registers428,16652
+  unsigned num_regs;430,16674
+  regoff_t *start;start431,16695
+  regoff_t *end;end432,16714
+# define RE_NREGS 440,16942
+  regoff_t rm_so;449,17159
+  regoff_t rm_eo;450,17239
+} regmatch_t;451,17317
+extern reg_syntax_t re_set_syntax 457,17512
+extern const char *re_compile_pattern re_compile_pattern462,17776
+extern int re_compile_fastmap 469,18058
+extern regoff_t re_search 477,18466
+extern regoff_t re_search_2 485,18781
+extern regoff_t re_match 495,19177
+extern regoff_t re_match_2 501,19407
+extern void re_set_registers 520,20197
+extern char *re_comp re_comp528,20469
+extern int re_exec 529,20506
+#  define _Restrict_ 540,20886
+#  define _Restrict_ 542,20979
+#  define _Restrict_544,21018
+#  define _Restrict_arr_ 555,21418
+#  define _Restrict_arr_557,21461
+extern reg_errcode_t regcomp 562,21530
+extern reg_errcode_t regexec 566,21656
+extern size_t regerror 571,21850
+extern void regfree 574,21956
+#  define CHAR_CLASS_MAX_LENGTH 593,22470
+#  define CHAR_CLASS_MAX_LENGTH 597,22648
+typedef wctype_t re_wctype_t;599,22692
+typedef wchar_t re_wchar_t;600,22722
+# define re_wctype 601,22750
+# define re_iswctype 602,22776
+# define re_wctype_to_bit(603,22806
+# define CHAR_CLASS_MAX_LENGTH 605,22844
+# define btowc(606,22906
+typedef enum { RECC_ERROR 609,22953
+              RECC_ALNUM,610,22984
+              RECC_ALNUM, RECC_ALPHA,610,22984
+              RECC_ALNUM, RECC_ALPHA, RECC_WORD,610,22984
+              RECC_GRAPH,611,23027
+              RECC_GRAPH, RECC_PRINT,611,23027
+              RECC_LOWER,612,23059
+              RECC_LOWER, RECC_UPPER,612,23059
+              RECC_PUNCT,613,23091
+              RECC_PUNCT, RECC_CNTRL,613,23091
+              RECC_DIGIT,614,23123
+              RECC_DIGIT, RECC_XDIGIT,614,23123
+              RECC_BLANK,615,23156
+              RECC_BLANK, RECC_SPACE,615,23156
+              RECC_MULTIBYTE,616,23188
+              RECC_MULTIBYTE, RECC_NONASCII,616,23188
+              RECC_ASCII,617,23227
+              RECC_ASCII, RECC_UNIBYTE617,23227
+} re_wctype_t;618,23260
+extern char re_iswctype 620,23276
+extern re_wctype_t re_wctype 621,23329
+typedef int re_wchar_t;623,23387
+extern void re_set_whitespace_regexp 625,23412
+
+c-src/emacs/src/keyboard.c,23269
+volatile int interrupt_input_blocked;76,1808
+volatile bool pending_signals;80,1944
+#define KBD_BUFFER_SIZE 82,1976
+KBOARD *initial_kboard;initial_kboard84,2006
+KBOARD *current_kboard;current_kboard85,2030
+static KBOARD *all_kboards;all_kboards86,2054
+static bool single_kboard;89,2154
+#define NUM_RECENT_KEYS 91,2182
+static int recent_keys_index;94,2269
+static int total_keys;97,2357
+static Lisp_Object recent_keys;100,2443
+Lisp_Object this_command_keys;107,2777
+ptrdiff_t this_command_key_count;108,2808
+static bool this_command_key_count_reset;112,2922
+static Lisp_Object raw_keybuf;116,3074
+static int raw_keybuf_count;117,3105
+#define GROW_RAW_KEYBUF        119,3135
+static ptrdiff_t this_single_command_key_start;125,3350
+static ptrdiff_t before_command_key_count;129,3498
+static ptrdiff_t before_command_echo_length;130,3541
+sigjmp_buf return_to_command_loop;135,3677
+static Lisp_Object recover_top_level_message;138,3791
+static Lisp_Object regular_top_level_message;143,3930
+static sys_jmp_buf getcjmp;147,4031
+bool waiting_for_input;150,4095
+static bool echoing;154,4186
+static struct kboard 
*ok_to_echo_at_next_pause;ok_to_echo_at_next_pause159,4328
+struct kboard *echo_kboard;echo_kboard166,4632
+Lisp_Object echo_message_buffer;171,4744
+bool immediate_quit;174,4837
+int quit_char;192,5623
+EMACS_INT command_loop_level;195,5680
+Lisp_Object unread_switch_frame;204,6108
+static ptrdiff_t last_non_minibuf_size;207,6216
+uintmax_t num_input_events;210,6334
+static EMACS_INT last_auto_save;214,6428
+static ptrdiff_t last_point_position;217,6523
+Lisp_Object internal_last_event_frame;228,7028
+static Lisp_Object read_key_sequence_cmd;232,7168
+static Lisp_Object read_key_sequence_remapped;233,7210
+static FILE *dribble;dribble236,7310
+bool input_pending;239,7368
+static bool input_was_pending;287,10022
+static struct input_event kbd_buffer[kbd_buffer291,10107
+static struct input_event *kbd_fetch_ptr;kbd_fetch_ptr297,10386
+static struct input_event * volatile kbd_store_ptr;302,10601
+static void recursive_edit_unwind 313,11088
+static Lisp_Object command_loop 314,11144
+static void echo_now 316,11185
+static ptrdiff_t echo_length 317,11214
+unsigned timers_run;320,11296
+struct timespec 
*input_available_clear_time;input_available_clear_time324,11408
+bool interrupt_input;328,11573
+bool interrupts_deferred;331,11671
+static struct timespec timer_idleness_start_time;335,11746
+static struct timespec timer_last_idleness_start_time;340,11916
+#define READABLE_EVENTS_DO_TIMERS_NOW  346,12046
+#define READABLE_EVENTS_FILTER_EVENTS  347,12094
+#define READABLE_EVENTS_IGNORE_SQUEEZABLES     348,12142
+static void (*keyboard_init_hook)keyboard_init_hook351,12264
+static bool get_input_pending 353,12307
+static bool readable_events 354,12344
+static Lisp_Object read_char_x_menu_prompt 355,12379
+static Lisp_Object read_char_minibuf_menu_prompt 357,12502
+static Lisp_Object make_lispy_event 358,12571
+static Lisp_Object make_lispy_movement 359,12631
+static Lisp_Object modify_event_symbol 363,12840
+static Lisp_Object make_lispy_switch_frame 366,13050
+static Lisp_Object make_lispy_focus_in 367,13108
+static Lisp_Object make_lispy_focus_out 369,13188
+static bool help_char_p 371,13275
+static void save_getcjmp 372,13314
+static void restore_getcjmp 373,13354
+static Lisp_Object apply_modifiers 374,13397
+static void clear_event 375,13452
+static void restore_kboard_configuration 376,13500
+static void deliver_input_available_signal 378,13568
+static void handle_interrupt 380,13631
+static _Noreturn void quit_throw_to_read_char 381,13668
+static void process_special_events 382,13722
+static void timer_start_idle 383,13765
+static void timer_stop_idle 384,13802
+static void timer_resume_idle 385,13838
+static void deliver_user_signal 386,13876
+static char *find_user_signal_name find_user_signal_name387,13915
+static void store_user_signal_events 388,13957
+kset_echo_string 392,14088
+kset_kbd_queue 397,14184
+kset_keyboard_translate_table 402,14276
+kset_last_prefix_arg 407,14399
+kset_last_repeatable_command 412,14504
+kset_local_function_key_map 417,14625
+kset_overriding_terminal_local_map 422,14744
+kset_real_last_command 427,14877
+kset_system_key_syms 432,14986
+echo_add_key 443,15249
+echo_char 527,17527
+echo_dash 541,17813
+echo_now 586,19140
+cancel_echoing 635,20614
+echo_length 648,20922
+echo_truncate 660,21253
+add_command_key 672,21582
+recursive_edit_1 697,22406
+record_auto_save 742,23848
+force_auto_save_soon 751,24016
+DEFUN ("recursive-edit", Frecursive_edit,recursive-edit759,24137
+recursive_edit_unwind 804,25747
+any_kboard_state 817,26013
+single_kboard_state 838,26665
+not_single_kboard_state 848,26803
+struct kboard_stack858,27065
+  KBOARD *kboard;kboard860,27087
+  struct kboard_stack *next;next861,27105
+static struct kboard_stack *kboard_stack;kboard_stack864,27138
+push_kboard 867,27186
+pop_kboard 879,27375
+temporarily_switch_to_single_kboard 914,28263
+record_single_kboard_state 943,29437
+restore_kboard_configuration 952,29621
+cmd_error 970,30077
+cmd_error_internal 1024,31510
+DEFUN ("command-error-default-function", 
Fcommand_error_default_function,command-error-default-function1043,32030
+static Lisp_Object command_loop_2 1086,33637
+static Lisp_Object top_level_1 1087,33686
+command_loop 1094,33916
+command_loop_2 1134,35135
+top_level_2 1146,35339
+top_level_1 1152,35417
+DEFUN ("top-level", Ftop_level,top-level1164,35787
+user_error 1183,36288
+DEFUN ("exit-recursive-edit", 
Fexit_recursive_edit,exit-recursive-edit1189,36429
+DEFUN ("abort-recursive-edit", 
Fabort_recursive_edit,abort-recursive-edit1201,36819
+tracking_off 1216,37281
+DEFUN ("internal--track-mouse", Ftrack_mouse,track-mouse1234,37816
+bool ignore_mouse_drag_p;1256,38392
+some_mouse_moved 1259,38441
+static int read_key_sequence 1282,38799
+static void adjust_point_for_property 1284,38917
+Lisp_Object last_undo_boundary;1287,39032
+command_loop_1 1294,39273
+read_menu_command 1649,50889
+adjust_point_for_property 1678,51617
+safe_run_hooks_1 1831,57339
+safe_run_hooks_error 1841,57569
+safe_run_hook_funcall 1878,58576
+safe_run_hooks 1893,59058
+int poll_suppress_count;1908,59397
+static struct atimer *poll_timer;poll_timer1915,59487
+poll_for_input_1 1919,59589
+poll_for_input 1930,59789
+start_polling 1942,60053
+input_polling_used 1979,61091
+stop_polling 1994,61390
+set_poll_suppress_count 2009,61759
+bind_polling_period 2029,62141
+make_ctrl_char 2048,62492
+show_help_echo 2113,64455
+static Lisp_Object kbd_buffer_get_event 2152,65484
+static void record_char 2154,65596
+static Lisp_Object help_form_saved_window_configs;2156,65638
+read_char_help_form_unwind 2158,65701
+#define STOP_POLLING   2166,65959
+#define RESUME_POLLING 2170,66084
+read_event_from_main_queue 2175,66229
+read_decoded_event_from_main_queue 2249,68417
+#define MAX_ENCODED_BYTES 2254,68664
+echo_keystrokes_p 2342,71556
+read_char 2376,72848
+record_menu_key 3225,98949
+help_char_p 3258,99674
+record_char 3273,99953
+save_getcjmp 3412,104235
+restore_getcjmp 3418,104326
+readable_events 3430,104697
+int stop_character EXTERNALLY_VISIBLE;3497,106437
+event_to_kboard 3500,106493
+kbd_buffer_nr_stored 3522,107142
+kbd_buffer_store_event 3534,107483
+kbd_buffer_store_event_hold 3550,108025
+kbd_buffer_unget_event 3684,111617
+#define INPUT_EVENT_POS_MAX 3698,112018
+#define INPUT_EVENT_POS_MIN 3701,112147
+position_to_Time 3706,112287
+Time_to_position 3716,112514
+gen_help_event 3738,113171
+kbd_buffer_store_help_event 3756,113611
+discard_mouse_events 3773,113976
+kbd_buffer_events_waiting 3803,114711
+clear_event 3823,115068
+kbd_buffer_get_event 3836,115408
+process_special_events 4258,127881
+swallow_events 4322,129705
+timer_start_idle 4339,130098
+timer_stop_idle 4355,130576
+timer_resume_idle 4363,130720
+struct input_event last_timer_event EXTERNALLY_VISIBLE;4372,130912
+Lisp_Object pending_funcalls;4377,131172
+decode_timer 4381,131293
+timer_check_2 4414,132246
+timer_check 4572,136817
+DEFUN ("current-idle-time", Fcurrent_idle_time,current-idle-time4607,137662
+static Lisp_Object accent_key_syms;4625,138239
+static Lisp_Object func_key_syms;4626,138275
+static Lisp_Object mouse_syms;4627,138309
+static Lisp_Object wheel_syms;4628,138340
+static Lisp_Object drag_n_drop_syms;4629,138371
+static const int lispy_accent_codes[lispy_accent_codes4634,138516
+static const char *const lispy_accent_keys[lispy_accent_keys4741,139878
+#define FUNCTION_KEY_OFFSET 4766,140314
+const char *const lispy_function_keys[lispy_function_keys4768,140347
+static const char *const 
lispy_multimedia_keys[lispy_multimedia_keys4962,148901
+static const char *const lispy_kana_keys[lispy_kana_keys5026,150135
+#define FUNCTION_KEY_OFFSET 5061,151751
+static const char *const lispy_function_keys[lispy_function_keys5065,151894
+#define ISO_FUNCTION_KEY_OFFSET 5149,154429
+static const char *const 
iso_lispy_function_keys[iso_lispy_function_keys5151,154469
+static Lisp_Object Vlispy_mouse_stem;5172,155328
+static const char *const lispy_wheel_names[lispy_wheel_names5174,155367
+static const char *const 
lispy_drag_n_drop_names[lispy_drag_n_drop_names5181,155619
+static short const scroll_bar_parts[scroll_bar_parts5189,155885
+static Lisp_Object button_down_location;5210,156910
+static int last_mouse_button;5215,157065
+static int last_mouse_x;5216,157095
+static int last_mouse_y;5217,157120
+static Time button_down_time;5218,157145
+static int double_click_count;5222,157229
+make_lispy_position 5228,157390
+toolkit_menubar_in_use 5456,163953
+make_scroll_bar_position 5469,164321
+make_lispy_event 5485,164967
+make_lispy_movement 6104,183531
+make_lispy_switch_frame 6131,184262
+make_lispy_focus_in 6137,184369
+make_lispy_focus_out 6145,184495
+parse_modifiers_uncached 6163,184945
+#define SINGLE_LETTER_MOD(6185,185465
+#undef SINGLE_LETTER_MOD6212,185906
+#define MULTI_LETTER_MOD(6214,185932
+#undef MULTI_LETTER_MOD6231,186400
+apply_modifiers_uncached 6273,187574
+static const char *const modifier_names[modifier_names6319,189193
+#define NUM_MOD_NAMES 6325,189399
+static Lisp_Object modifier_symbols;6327,189449
+lispy_modifier_list 6331,189586
+#define KEY_TO_CHAR(6353,190252
+parse_modifiers 6356,190328
+DEFUN ("internal-event-symbol-parse-modifiers", 
Fevent_symbol_parse_modifiers,event-symbol-parse-modifiers6399,191517
+apply_modifiers 6422,192391
+reorder_modifiers 6491,194720
+modify_event_symbol 6536,196528
+DEFUN ("event-convert-list", 
Fevent_convert_list,event-convert-list6628,199244
+parse_solitary_modifier 6695,201135
+#define SINGLE_LETTER_MOD(6701,201258
+#define MULTI_LETTER_MOD(6705,201343
+#undef SINGLE_LETTER_MOD6763,202641
+#undef MULTI_LETTER_MOD6764,202666
+lucid_event_type_list_p 6775,202889
+get_input_pending 6814,203960
+record_asynch_buffer_change 6834,204579
+gobble_input 6872,205702
+tty_read_avail_input 6967,208310
+handle_async_input 7149,214039
+process_pending_signals 7165,214359
+unblock_input_to 7177,214645
+unblock_input 7200,215277
+totally_unblock_input 7209,215445
+handle_input_available_signal 7217,215529
+deliver_input_available_signal 7226,215700
+struct user_signal_info7235,215865
+  int sig;7238,215915
+  char *name;name7241,215956
+  int npending;7244,216007
+  struct user_signal_info *next;next7246,216024
+static struct user_signal_info *user_signals user_signals7250,216090
+add_user_signal 7253,216149
+handle_user_signal 7275,216598
+deliver_user_signal 7316,217558
+find_user_signal_name 7322,217659
+store_user_signal_events 7334,217841
+static void menu_bar_item 7362,218341
+static Lisp_Object menu_bar_one_keymap_changed_items;7363,218416
+static Lisp_Object menu_bar_items_vector;7368,218630
+static int menu_bar_items_index;7369,218672
+static const char *separator_names[separator_names7372,218707
+menu_separator_name_p 7393,219148
+menu_bar_items 7426,219852
+Lisp_Object item_properties;7568,224603
+menu_bar_item 7571,224645
+menu_item_eval_property_1 7647,227175
+eval_dyn 7658,227465
+menu_item_eval_property 7666,227675
+parse_menu_item 7686,228341
+static Lisp_Object tool_bar_items_vector;7965,236336
+static Lisp_Object tool_bar_item_properties;7970,236510
+static int ntool_bar_items;7974,236606
+static void init_tool_bar_items 7978,236664
+static void process_tool_bar_item 7979,236711
+static bool parse_tool_bar_item 7981,236801
+static void append_tool_bar_item 7982,236861
+tool_bar_items 7990,237083
+process_tool_bar_item 8075,239892
+#define PROP(8112,240969
+set_prop 8114,241038
+parse_tool_bar_item 8167,242453
+#undef PROP8379,248844
+init_tool_bar_items 8387,248969
+append_tool_bar_item 8401,249261
+read_char_x_menu_prompt 8443,250771
+read_char_minibuf_menu_prompt 8503,252445
+#define PUSH_C_STR(8527,253014
+follow_key 8726,258553
+active_maps 8733,258695
+typedef struct keyremap8742,259021
+  Lisp_Object parent;8745,259107
+  Lisp_Object map;8748,259224
+  int start,8753,259446
+  int start, end;8753,259446
+} keyremap;8754,259464
+access_keymap_keyremap 8764,259808
+keyremap_step 8811,261450
+test_undefined 8867,262934
+read_key_sequence 8916,264861
+read_key_sequence_vs 9826,295821
+DEFUN ("read-key-sequence", Fread_key_sequence,read-key-sequence9885,297294
+DEFUN ("read-key-sequence-vector", 
Fread_key_sequence_vector,read-key-sequence-vector9938,299982
+detect_input_pending 9950,300488
+detect_input_pending_ignore_squeezables 9959,300654
+detect_input_pending_run_timers 9967,300870
+clear_input_pending 9985,301362
+requeued_events_pending_p 9997,301732
+DEFUN ("input-pending-p", Finput_pending_p,input-pending-p10002,301813
+DEFUN ("recent-keys", Frecent_keys,recent-keys10024,302596
+DEFUN ("this-command-keys", Fthis_command_keys,this-command-keys10055,303517
+DEFUN ("this-command-keys-vector", 
Fthis_command_keys_vector,this-command-keys-vector10068,303958
+DEFUN ("this-single-command-keys", 
Fthis_single_command_keys,this-single-command-keys10080,304380
+DEFUN ("this-single-command-raw-keys", 
Fthis_single_command_raw_keys,this-single-command-raw-keys10096,304955
+DEFUN ("reset-this-command-lengths", 
Freset_this_command_lengths,reset-this-command-lengths10109,305495
+DEFUN ("clear-this-command-keys", 
Fclear_this_command_keys,clear-this-command-keys10136,306510
+DEFUN ("recursion-depth", Frecursion_depth,recursion-depth10158,307069
+DEFUN ("open-dribble-file", Fopen_dribble_file,open-dribble-file10169,307406
+DEFUN ("discard-input", Fdiscard_input,discard-input10203,308447
+DEFUN ("suspend-emacs", Fsuspend_emacs,suspend-emacs10225,308949
+stuff_buffered_input 10285,311045
+set_waiting_for_input 10323,312016
+clear_waiting_for_input 10337,312390
+handle_interrupt_signal 10351,312754
+deliver_interrupt_signal 10378,313642
+static int volatile force_quit_count;10387,313932
+handle_interrupt 10401,314414
+quit_throw_to_read_char 10541,318711
+DEFUN ("set-input-interrupt-mode", 
Fset_input_interrupt_mode,set-input-interrupt-mode10562,319288
+DEFUN ("set-output-flow-control", 
Fset_output_flow_control,set-output-flow-control10609,320516
+DEFUN ("set-input-meta-mode", 
Fset_input_meta_mode,set-input-meta-mode10643,321432
+DEFUN ("set-quit-char", Fset_quit_char,set-quit-char10694,322706
+DEFUN ("set-input-mode", Fset_input_mode,set-input-mode10729,323570
+DEFUN ("current-input-mode", 
Fcurrent_input_mode,current-input-mode10750,324459
+DEFUN ("posn-at-x-y", Fposn_at_x_y,posn-at-x-y10787,325837
+DEFUN ("posn-at-point", Fposn_at_point,posn-at-point10824,327060
+init_kboard 10861,328214
+allocate_kboard 10893,329284
+wipe_kboard 10909,329637
+delete_kboard 10917,329751
+init_keyboard 10942,330281
+struct event_head11021,332696
+  short var;11023,332716
+  short kind;11024,332729
+static const struct event_head head_table[head_table11027,332747
+syms_of_keyboard 11045,333577
+  DEFVAR_LISP ("internal--top-level-message"11058,333972
+  DEFVAR_LISP ("last-command-event"11312,342173
+  DEFVAR_LISP ("last-nonmenu-event"11315,342297
+  DEFVAR_LISP ("last-input-event"11321,342636
+  DEFVAR_LISP ("unread-command-events"11324,342730
+  DEFVAR_LISP ("unread-post-input-method-events"11332,343190
+  DEFVAR_LISP ("unread-input-method-events"11338,343529
+  DEFVAR_LISP ("meta-prefix-char"11346,343898
+  DEFVAR_KBOARD ("last-command"11351,344106
+  DEFVAR_KBOARD ("real-last-command"11368,344787
+  DEFVAR_KBOARD ("last-repeatable-command"11372,344973
+  DEFVAR_LISP ("this-command"11378,345261
+  DEFVAR_LISP ("real-this-command"11384,345498
+  DEFVAR_LISP ("this-command-keys-shift-translated"11388,345680
+  DEFVAR_LISP ("this-original-command"11396,346123
+  DEFVAR_INT ("auto-save-interval"11403,346520
+  DEFVAR_LISP ("auto-save-timeout"11408,346734
+  DEFVAR_LISP ("echo-keystrokes"11415,347079
+  DEFVAR_INT ("polling-period"11421,347350
+  DEFVAR_LISP ("double-click-time"11428,347693
+  DEFVAR_INT ("double-click-fuzz"11435,348029
+  DEFVAR_INT ("num-input-keys"11446,348519
+  DEFVAR_INT ("num-nonmacro-input-events"11452,348794
+  DEFVAR_LISP ("last-event-frame"11457,349032
+  DEFVAR_LISP ("tty-erase-char"11463,349311
+  DEFVAR_LISP ("help-char"11466,349434
+  DEFVAR_LISP ("help-event-list"11472,349717
+  DEFVAR_LISP ("help-form"11477,349928
+  DEFVAR_LISP ("prefix-help-command"11483,350176
+  DEFVAR_LISP ("top-level"11489,350454
+  DEFVAR_KBOARD ("keyboard-translate-table"11495,350675
+  DEFVAR_BOOL ("cannot-suspend"11511,351488
+  DEFVAR_BOOL ("menu-prompting"11516,351715
+  DEFVAR_LISP ("menu-prompt-more-char"11526,352145
+  DEFVAR_INT ("extra-keyboard-modifiers"11531,352391
+  DEFVAR_LISP ("deactivate-mark"11545,353117
+  DEFVAR_LISP ("pre-command-hook"11553,353486
+  DEFVAR_LISP ("post-command-hook"11560,353841
+  DEFVAR_LISP ("echo-area-clear-hook"11568,354204
+  DEFVAR_LISP ("lucid-menu-bar-dirty-flag"11574,354419
+  DEFVAR_LISP ("menu-bar-final-items"11578,354622
+  DEFVAR_LISP ("tool-bar-separator-image-expression"11583,354872
+  DEFVAR_KBOARD ("overriding-terminal-local-map"11589,355230
+  DEFVAR_LISP ("overriding-local-map"11598,355652
+  DEFVAR_LISP ("overriding-local-map-menu-flag"11607,356103
+  DEFVAR_LISP ("special-event-map"11613,356442
+  DEFVAR_LISP ("track-mouse"11617,356630
+  DEFVAR_KBOARD ("system-key-alist"11620,356757
+  DEFVAR_KBOARD ("local-function-key-map"11629,357138
+  DEFVAR_KBOARD ("input-decode-map"11658,358597
+  DEFVAR_LISP ("function-key-map"11675,359385
+  DEFVAR_LISP ("key-translation-map"11683,359801
+  DEFVAR_LISP ("deferred-action-list"11689,360145
+  DEFVAR_LISP ("deferred-action-function"11694,360393
+  DEFVAR_LISP ("delayed-warnings-list"11700,360692
+  DEFVAR_LISP ("timer-list"11708,361100
+  DEFVAR_LISP ("timer-idle-list"11712,361252
+  DEFVAR_LISP ("input-method-function"11716,361415
+  DEFVAR_LISP ("input-method-previous-message"11737,362384
+  DEFVAR_LISP ("show-help-function"11744,362745
+  DEFVAR_LISP ("disable-point-adjustment"11749,362977
+  DEFVAR_LISP ("global-disable-point-adjustment"11761,363527
+  DEFVAR_LISP ("minibuffer-message-timeout"11770,363893
+  DEFVAR_LISP ("throw-on-input"11775,364171
+  DEFVAR_LISP ("command-error-function"11781,364422
+  DEFVAR_LISP ("enable-disabled-menus-and-buttons"11790,364909
+  DEFVAR_LISP ("select-active-regions"11798,365236
+  DEFVAR_LISP ("saved-region-selection"11807,365628
+  DEFVAR_LISP ("selection-inhibit-update-commands"11815,366013
+  DEFVAR_LISP ("debug-on-event"11825,366554
+keys_of_keyboard 11841,367115
+mark_kboards 11916,370434
+  DEFVAR_LISP ("internal--top-level-message",\111058,333972
+  DEFVAR_LISP ("last-command-event",\111312,342173
+  DEFVAR_LISP ("last-nonmenu-event",\111315,342297
+  DEFVAR_LISP ("last-input-event",\111321,342636
+  DEFVAR_LISP ("unread-command-events",\111324,342730
+  DEFVAR_LISP ("unread-post-input-method-events",\111332,343190
+  DEFVAR_LISP ("unread-input-method-events",\111338,343529
+  DEFVAR_LISP ("meta-prefix-char",\111346,343898
+  DEFVAR_KBOARD ("last-command",\111351,344106
+  DEFVAR_KBOARD ("real-last-command",\111368,344787
+  DEFVAR_KBOARD ("last-repeatable-command",\111372,344973
+  DEFVAR_LISP ("this-command",\111378,345261
+  DEFVAR_LISP ("real-this-command",\111384,345498
+  DEFVAR_LISP ("this-command-keys-shift-translated",\111388,345680
+  DEFVAR_LISP ("this-original-command",\111396,346123
+  DEFVAR_INT ("auto-save-interval",\111403,346520
+  DEFVAR_LISP ("auto-save-timeout",\111408,346734
+  DEFVAR_LISP ("echo-keystrokes",\111415,347079
+  DEFVAR_INT ("polling-period",\111421,347350
+  DEFVAR_LISP ("double-click-time",\111428,347693
+  DEFVAR_INT ("double-click-fuzz",\111435,348029
+  DEFVAR_INT ("num-input-keys",\111446,348519
+  DEFVAR_INT ("num-nonmacro-input-events",\111452,348794
+  DEFVAR_LISP ("last-event-frame",\111457,349032
+  DEFVAR_LISP ("tty-erase-char",\111463,349311
+  DEFVAR_LISP ("help-char",\111466,349434
+  DEFVAR_LISP ("help-event-list",\111472,349717
+  DEFVAR_LISP ("help-form",\111477,349928
+  DEFVAR_LISP ("prefix-help-command",\111483,350176
+  DEFVAR_LISP ("top-level",\111489,350454
+  DEFVAR_KBOARD ("keyboard-translate-table",\111495,350675
+  DEFVAR_BOOL ("cannot-suspend",\111511,351488
+  DEFVAR_BOOL ("menu-prompting",\111516,351715
+  DEFVAR_LISP ("menu-prompt-more-char",\111526,352145
+  DEFVAR_INT ("extra-keyboard-modifiers",\111531,352391
+  DEFVAR_LISP ("deactivate-mark",\111545,353117
+  DEFVAR_LISP ("pre-command-hook",\111553,353486
+  DEFVAR_LISP ("post-command-hook",\111560,353841
+  DEFVAR_LISP ("echo-area-clear-hook",\111568,354204
+  DEFVAR_LISP ("lucid-menu-bar-dirty-flag",\111574,354419
+  DEFVAR_LISP ("menu-bar-final-items",\111578,354622
+  DEFVAR_LISP ("tool-bar-separator-image-expression",\111583,354872
+  DEFVAR_KBOARD ("overriding-terminal-local-map",\111589,355230
+  DEFVAR_LISP ("overriding-local-map",\111598,355652
+  DEFVAR_LISP ("overriding-local-map-menu-flag",\111607,356103
+  DEFVAR_LISP ("special-event-map",\111613,356442
+  DEFVAR_LISP ("track-mouse",\111617,356630
+  DEFVAR_KBOARD ("system-key-alist",\111620,356757
+  DEFVAR_KBOARD ("local-function-key-map",\111629,357138
+  DEFVAR_KBOARD ("input-decode-map",\111658,358597
+  DEFVAR_LISP ("function-key-map",\111675,359385
+  DEFVAR_LISP ("key-translation-map",\111683,359801
+  DEFVAR_LISP ("deferred-action-list",\111689,360145
+  DEFVAR_LISP ("deferred-action-function",\111694,360393
+  DEFVAR_LISP ("delayed-warnings-list",\111700,360692
+  DEFVAR_LISP ("timer-list",\111708,361100
+  DEFVAR_LISP ("timer-idle-list",\111712,361252
+  DEFVAR_LISP ("input-method-function",\111716,361415
+  DEFVAR_LISP ("input-method-previous-message",\111737,362384
+  DEFVAR_LISP ("show-help-function",\111744,362745
+  DEFVAR_LISP ("disable-point-adjustment",\111749,362977
+  DEFVAR_LISP ("global-disable-point-adjustment",\111761,363527
+  DEFVAR_LISP ("minibuffer-message-timeout",\111770,363893
+  DEFVAR_LISP ("throw-on-input",\111775,364171
+  DEFVAR_LISP ("command-error-function",\111781,364422
+  DEFVAR_LISP ("enable-disabled-menus-and-buttons",\111790,364909
+  DEFVAR_LISP ("select-active-regions",\111798,365236
+  DEFVAR_LISP ("saved-region-selection",\111807,365628
+  DEFVAR_LISP ("selection-inhibit-update-commands",\111815,366013
+  DEFVAR_LISP ("debug-on-event",\111825,366554
+
+c-src/emacs/src/lisp.h,39173
+#define EMACS_LISP_H22,800
+#define DECLARE_GDB_SYM(47,1421
+# define DEFINE_GDB_SYMBOL_BEGIN(49,1508
+# define DEFINE_GDB_SYMBOL_END(50,1578
+# define DEFINE_GDB_SYMBOL_BEGIN(52,1625
+# define DEFINE_GDB_SYMBOL_END(53,1702
+#undef min57,1790
+#undef max58,1801
+#define max(59,1812
+#define min(60,1854
+#define ARRAYELTS(63,1936
+#define GCTYPEBITS 67,2079
+DEFINE_GDB_SYMBOL_BEGIN GCTYPEBITS66,2037
+# define NONPOINTER_BITS 78,2567
+# define NONPOINTER_BITS 80,2600
+typedef int EMACS_INT;91,3023
+typedef unsigned int EMACS_UINT;92,3046
+#  define EMACS_INT_MAX 93,3079
+#  define pI 94,3111
+typedef long int EMACS_INT;96,3203
+typedef unsigned long EMACS_UINT;97,3231
+#  define EMACS_INT_MAX 98,3265
+#  define pI 99,3298
+typedef long long int EMACS_INT;103,3477
+typedef unsigned long long int EMACS_UINT;104,3510
+#  define EMACS_INT_MAX 105,3553
+#  define pI 106,3587
+enum {  BOOL_VECTOR_BITS_PER_CHAR 114,3804
+#define BOOL_VECTOR_BITS_PER_CHAR 115,3840
+typedef size_t bits_word;123,4165
+# define BITS_WORD_MAX 124,4191
+enum { BITS_PER_BITS_WORD 125,4223
+typedef unsigned char bits_word;127,4290
+# define BITS_WORD_MAX 128,4323
+enum { BITS_PER_BITS_WORD 129,4386
+verify 131,4450
+    BITS_PER_CHAR 136,4570
+    BITS_PER_SHORT 137,4605
+    BITS_PER_LONG 138,4657
+    BITS_PER_EMACS_INT 139,4712
+typedef intmax_t printmax_t;148,5089
+typedef uintmax_t uprintmax_t;149,5118
+# define pMd 150,5149
+# define pMu 151,5170
+typedef EMACS_INT printmax_t;153,5197
+typedef EMACS_UINT uprintmax_t;154,5227
+# define pMd 155,5259
+# define pMu 156,5278
+# define pD 165,5664
+# define pD 167,5709
+# define pD 169,5756
+# define pD 171,5779
+# define eassert(200,7062
+# define eassume(201,7140
+extern _Noreturn void die 204,7206
+extern bool suppress_checking EXTERNALLY_VISIBLE;206,7268
+# define eassert(208,7319
+# define eassume(212,7450
+enum Lisp_Bits239,8519
+#define GCALIGNMENT 243,8647
+    VALBITS 246,8742
+    INTTYPEBITS 249,8838
+    FIXNUM_BITS 252,8945
+#define VAL_MAX 263,9327
+#define USE_LSB_TAG 271,9777
+DEFINE_GDB_SYMBOL_BEGIN USE_LSB_TAG270,9733
+# define alignas(281,10077
+# define GCALIGNED 288,10227
+# define GCALIGNED 290,10292
+# define lisp_h_XLI(327,11642
+# define lisp_h_XIL(328,11673
+# define lisp_h_XLI(330,11724
+# define lisp_h_XIL(331,11751
+#define lisp_h_CHECK_LIST_CONS(333,11785
+#define lisp_h_CHECK_NUMBER(334,11856
+#define lisp_h_CHECK_SYMBOL(335,11927
+#define lisp_h_CHECK_TYPE(336,11996
+#define lisp_h_CONSP(338,12107
+#define lisp_h_EQ(339,12156
+#define lisp_h_FLOATP(340,12201
+#define lisp_h_INTEGERP(341,12252
+#define lisp_h_MARKERP(342,12333
+#define lisp_h_MISCP(343,12408
+#define lisp_h_NILP(344,12457
+#define lisp_h_SET_SYMBOL_VAL(345,12493
+#define lisp_h_SYMBOL_CONSTANT_P(347,12607
+#define lisp_h_SYMBOL_VAL(348,12671
+#define lisp_h_SYMBOLP(350,12772
+#define lisp_h_VECTORLIKEP(351,12825
+#define lisp_h_XCAR(352,12886
+#define lisp_h_XCDR(353,12924
+#define lisp_h_XCONS(354,12964
+#define lisp_h_XHASH(356,13059
+#define lisp_h_XPNTR(357,13093
+# define lisp_h_check_cons_list(360,13221
+# define lisp_h_make_number(363,13289
+# define lisp_h_XFASTINT(365,13392
+# define lisp_h_XINT(366,13429
+# define lisp_h_XSYMBOL(367,13478
+# define lisp_h_XTYPE(371,13631
+# define lisp_h_XUNTAG(372,13696
+# define XLI(381,14086
+# define XIL(382,14117
+# define CHECK_LIST_CONS(383,14148
+# define CHECK_NUMBER(384,14209
+# define CHECK_SYMBOL(385,14258
+# define CHECK_TYPE(386,14307
+# define CONSP(387,14382
+# define EQ(388,14417
+# define FLOATP(389,14452
+# define INTEGERP(390,14489
+# define MARKERP(391,14530
+# define MISCP(392,14569
+# define NILP(393,14604
+# define SET_SYMBOL_VAL(394,14637
+# define SYMBOL_CONSTANT_P(395,14700
+# define SYMBOL_VAL(396,14763
+# define SYMBOLP(397,14812
+# define VECTORLIKEP(398,14851
+# define XCAR(399,14898
+# define XCDR(400,14931
+# define XCONS(401,14964
+# define XHASH(402,14999
+# define XPNTR(403,15034
+#  define check_cons_list(405,15097
+#  define make_number(408,15176
+#  define XFASTINT(409,15224
+#  define XINT(410,15266
+#  define XSYMBOL(411,15300
+#  define XTYPE(412,15340
+#  define XUNTAG(413,15376
+#define LISP_MACRO_DEFUN(421,15672
+#define LISP_MACRO_DEFUN_VOID(425,15845
+#define INTMASK 437,16289
+#define case_Lisp_Int 438,16342
+#define ENUM_BF(445,16681
+#define ENUM_BF(447,16722
+enum Lisp_Type451,16763
+    Lisp_Symbol 454,16851
+    Lisp_Misc 458,16993
+    Lisp_Int0 461,17067
+    Lisp_Int1 462,17086
+    Lisp_String 466,17264
+    Lisp_Vectorlike 472,17543
+    Lisp_Cons 475,17632
+    Lisp_Float 477,17670
+enum Lisp_Misc_Type485,18016
+    Lisp_Misc_Free 487,18040
+    Lisp_Misc_Marker,488,18069
+    Lisp_Misc_Overlay,489,18091
+    Lisp_Misc_Save_Value,490,18114
+    Lisp_Misc_Finalizer,491,18140
+    Lisp_Misc_Float,494,18275
+    Lisp_Misc_Limit496,18359
+enum Lisp_Fwd_Type502,18543
+    Lisp_Fwd_Int,504,18566
+    Lisp_Fwd_Bool,505,18619
+    Lisp_Fwd_Obj,506,18670
+    Lisp_Fwd_Buffer_Obj,507,18729
+    Lisp_Fwd_Kboard_Obj        508,18800
+typedef struct { EMACS_INT i;567,21781
+typedef struct { EMACS_INT i; } Lisp_Object;567,21781
+#define LISP_INITIALLY(569,21827
+#undef CHECK_LISP_OBJECT_TYPE571,21858
+enum CHECK_LISP_OBJECT_TYPE 572,21888
+enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE 572,21888
+typedef EMACS_INT Lisp_Object;577,22064
+#define LISP_INITIALLY(578,22095
+enum CHECK_LISP_OBJECT_TYPE 579,22125
+enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE 579,22125
+#define LISP_INITIALLY_ZERO 582,22226
+INLINE bool BOOL_VECTOR_P 588,22350
+INLINE bool BUFFER_OBJFWDP 589,22391
+INLINE bool BUFFERP 590,22438
+INLINE bool CHAR_TABLE_P 591,22473
+INLINE Lisp_Object CHAR_TABLE_REF_ASCII 592,22513
+INLINE bool 593,22579
+INLINE bool 594,22614
+INLINE bool functionp 595,22650
+INLINE bool 596,22687
+INLINE bool 597,22725
+INLINE bool 598,22762
+INLINE bool 599,22797
+INLINE bool OVERLAYP 600,22831
+INLINE bool PROCESSP 601,22867
+INLINE bool PSEUDOVECTORP 602,22903
+INLINE bool SAVE_VALUEP 603,22949
+INLINE bool FINALIZERP 604,22988
+INLINE void set_sub_char_table_contents 605,23026
+INLINE bool STRINGP 607,23116
+INLINE bool SUB_CHAR_TABLE_P 608,23151
+INLINE bool SUBRP 609,23195
+INLINE bool 610,23228
+INLINE bool 611,23265
+INLINE bool WINDOWP 612,23306
+INLINE bool TERMINALP 613,23341
+INLINE struct Lisp_Save_Value *XSAVE_VALUE XSAVE_VALUE614,23378
+INLINE struct Lisp_Finalizer *XFINALIZER XFINALIZER615,23436
+INLINE struct Lisp_Symbol *(XSYMBOL)616,23492
+INLINE void 617,23544
+extern Lisp_Object char_table_ref 620,23616
+extern void char_table_set 621,23670
+extern _Noreturn Lisp_Object wrong_type_argument 624,23757
+extern _Noreturn void wrong_choice 625,23834
+extern bool might_dump;628,23925
+extern bool initialized;631,24061
+extern double extract_float 634,24117
+enum symbol_interned639,24199
+  SYMBOL_UNINTERNED 641,24222
+  SYMBOL_INTERNED 642,24247
+  SYMBOL_INTERNED_IN_INITIAL_OBARRAY 643,24270
+enum symbol_redirect646,24315
+  SYMBOL_PLAINVAL 648,24338
+  SYMBOL_VARALIAS 649,24362
+  SYMBOL_LOCALIZED 650,24386
+  SYMBOL_FORWARDED 651,24410
+struct Lisp_Symbol654,24437
+  bool_bf gcmarkbit 656,24458
+  ENUM_BF 663,24793
+    Lisp_Object value;687,25631
+    struct Lisp_Symbol *alias;alias688,25654
+    struct Lisp_Buffer_Local_Value *blv;blv689,25685
+    union Lisp_Fwd *fwd;fwd690,25726
+  } val;691,25751
+  Lisp_Object function;694,25823
+  Lisp_Object plist;697,25885
+  struct Lisp_Symbol *next;next700,25974
+#define EXFUN(707,26252
+#define DEFUN_ARGS_MANY        712,26446
+#define DEFUN_ARGS_UNEVALLED   713,26498
+#define DEFUN_ARGS_0   714,26541
+#define DEFUN_ARGS_1   715,26569
+#define DEFUN_ARGS_2   716,26604
+#define DEFUN_ARGS_3   717,26652
+#define DEFUN_ARGS_4   718,26713
+#define DEFUN_ARGS_5   719,26787
+#define DEFUN_ARGS_6   721,26880
+#define DEFUN_ARGS_7   723,26986
+#define DEFUN_ARGS_8   725,27105
+#define TAG_PTR(729,27296
+#define TAG_SYMOFFSET(734,27543
+#define XLI_BUILTIN_LISPSYM(741,27842
+#define DEFINE_LISP_SYMBOL(746,28101
+# define DEFINE_NON_NIL_Q_SYMBOL_MACROS 755,28572
+LISP_MACRO_DEFUN 762,28777
+# define ARRAY_MARK_FLAG 768,29024
+# define PSEUDOVECTOR_FLAG 774,29267
+enum pvec_type780,29568
+  PVEC_NORMAL_VECTOR,782,29585
+  PVEC_FREE,783,29607
+  PVEC_PROCESS,784,29620
+  PVEC_FRAME,785,29636
+  PVEC_WINDOW,786,29650
+  PVEC_BOOL_VECTOR,787,29665
+  PVEC_BUFFER,788,29685
+  PVEC_HASH_TABLE,789,29700
+  PVEC_TERMINAL,790,29719
+  PVEC_WINDOW_CONFIGURATION,791,29736
+  PVEC_SUBR,792,29765
+  PVEC_OTHER,793,29778
+  PVEC_COMPILED,795,29856
+  PVEC_CHAR_TABLE,796,29873
+  PVEC_SUB_CHAR_TABLE,797,29892
+  PVEC_FONT 798,29915
+enum More_Lisp_Bits801,29991
+    PSEUDOVECTOR_SIZE_BITS 808,30382
+    PSEUDOVECTOR_SIZE_MASK 809,30415
+    PSEUDOVECTOR_REST_BITS 813,30625
+    PSEUDOVECTOR_REST_MASK 814,30658
+    PSEUDOVECTOR_AREA_BITS 818,30823
+    PVEC_TYPE_MASK 819,30901
+# define VALMASK 829,31302
+DEFINE_GDB_SYMBOL_BEGIN VALMASK828,31257
+#define MOST_POSITIVE_FIXNUM 834,31532
+#define MOST_NEGATIVE_FIXNUM 835,31592
+XINT 874,32684
+XFASTINT 889,33035
+XSYMBOL 899,33263
+XTYPE 910,33481
+XUNTAG 918,33661
+LISP_MACRO_DEFUN 927,33857
+LISP_MACRO_DEFUN 940,34242
+#define FIXNUM_OVERFLOW_P(958,34855
+LISP_MACRO_DEFUN FIXNUM_OVERFLOW_P952,34632
+LISP_MACRO_DEFUN 970,35171
+XSTRING 980,35391
+#define SYMBOL_INDEX(988,35575
+XFLOAT 991,35636
+XPROCESS 1000,35778
+XWINDOW 1007,35895
+XTERMINAL 1014,36012
+XSUBR 1021,36134
+XBUFFER 1028,36245
+XCHAR_TABLE 1035,36369
+XSUB_CHAR_TABLE 1042,36506
+XBOOL_VECTOR 1049,36648
+make_lisp_ptr 1058,36827
+make_lisp_symbol 1066,37013
+builtin_lisp_symbol 1074,37197
+#define XSETINT(1079,37279
+#define XSETFASTINT(1080,37325
+#define XSETCONS(1081,37375
+#define XSETVECTOR(1082,37435
+#define XSETSTRING(1083,37503
+#define XSETSYMBOL(1084,37567
+#define XSETFLOAT(1085,37621
+#define XSETMISC(1086,37683
+#define XSETPVECTYPE(1090,37772
+#define XSETPVECTYPESIZE(1092,37888
+#define XSETPSEUDOVECTOR(1099,38185
+#define XSETTYPED_PSEUDOVECTOR(1105,38369
+#define XSETWINDOW_CONFIGURATION(1110,38579
+#define XSETPROCESS(1112,38675
+#define XSETWINDOW(1113,38741
+#define XSETTERMINAL(1114,38805
+#define XSETSUBR(1115,38873
+#define XSETCOMPILED(1116,38933
+#define XSETBUFFER(1117,39001
+#define XSETCHAR_TABLE(1118,39065
+#define XSETBOOL_VECTOR(1119,39137
+#define XSETSUB_CHAR_TABLE(1120,39211
+XINTPTR 1128,39581
+make_pointer_integer 1134,39661
+LISP_MACRO_DEFUN_VOID 1143,39826
+typedef struct interval *INTERVAL;INTERVAL1149,39987
+      Lisp_Object cdr;1159,40162
+      struct Lisp_Cons *chain;chain1162,40236
+xcar_addr 1174,40760
+xcdr_addr 1179,40837
+LISP_MACRO_DEFUN 1185,40931
+XSETCDR 1198,41307
+CAR 1205,41457
+CDR 1212,41591
+CAR_SAFE 1221,41791
+CDR_SAFE 1226,41877
+STRING_MULTIBYTE 1243,42250
+#define STRING_BYTES_BOUND 1261,43057
+#define STRING_SET_UNIBYTE(1265,43201
+#define STRING_SET_MULTIBYTE(1275,43516
+SDATA 1286,43830
+SSDATA 1291,43908
+SREF 1297,44037
+SSET 1302,44128
+SCHARS 1307,44242
+extern ptrdiff_t string_bytes 1313,44337
+STRING_BYTES 1316,44415
+SBYTES 1326,44595
+STRING_SET_CHARS 1331,44681
+struct vectorlike_header1343,45232
+    ptrdiff_t size;1364,46383
+struct Lisp_Vector1369,46482
+    struct vectorlike_header header;1371,46505
+    Lisp_Object contents[contents1372,46542
+    ALIGNOF_STRUCT_LISP_VECTOR1378,46681
+struct Lisp_Bool_Vector1384,46864
+    struct vectorlike_header header;1388,47012
+    EMACS_INT size;1390,47086
+    bits_word data[data1395,47319
+bool_vector_size 1399,47385
+bool_vector_data 1407,47523
+bool_vector_uchar_data 1413,47617
+bool_vector_words 1421,47803
+bool_vector_bytes 1428,47998
+bool_vector_bitref 1437,48238
+bool_vector_ref 1445,48478
+bool_vector_set 1453,48618
+    header_size 1471,49047
+    bool_header_size 1472,49106
+    word_size 1473,49171
+AREF 1479,49284
+aref_addr 1485,49391
+ASIZE 1491,49501
+ASET 1497,49583
+gc_aset 1504,49742
+enum { NIL_IS_ZERO 1515,50269
+memclear 1520,50464
+#define VECSIZE(1531,50762
+#define PSEUDOVECSIZE(1538,51047
+#define UNSIGNED_CMP(1546,51480
+#define ASCII_CHAR_P(1552,51734
+enum CHARTAB_SIZE_BITS1565,52489
+    CHARTAB_SIZE_BITS_0 1567,52516
+    CHARTAB_SIZE_BITS_1 1568,52545
+    CHARTAB_SIZE_BITS_2 1569,52574
+    CHARTAB_SIZE_BITS_3 1570,52603
+extern const int chartab_size[chartab_size1573,52637
+struct Lisp_Char_Table1575,52672
+    struct vectorlike_header header;1581,52928
+    Lisp_Object defalt;1585,53078
+    Lisp_Object parent;1590,53280
+    Lisp_Object purpose;1594,53398
+    Lisp_Object ascii;1598,53564
+    Lisp_Object contents[contents1600,53588
+    Lisp_Object extras[extras1603,53699
+struct Lisp_Sub_Char_Table1606,53752
+    struct vectorlike_header header;1610,53918
+    int depth;1618,54341
+    int min_char;1621,54417
+    Lisp_Object contents[contents1624,54492
+CHAR_TABLE_REF_ASCII 1628,54566
+CHAR_TABLE_REF 1648,55113
+CHAR_TABLE_SET 1658,55402
+struct Lisp_Subr1670,55786
+    struct vectorlike_header header;1672,55807
+      Lisp_Object (*a0)a01674,55856
+      Lisp_Object (*a1)a11675,55888
+      Lisp_Object (*a2)a21676,55927
+      Lisp_Object (*a3)a31677,55979
+      Lisp_Object (*a4)a41678,56044
+      Lisp_Object (*a5)a51679,56122
+      Lisp_Object (*a6)a61680,56213
+      Lisp_Object (*a7)a71681,56317
+      Lisp_Object (*a8)a81682,56434
+      Lisp_Object (*aUNEVALLED)aUNEVALLED1683,56564
+      Lisp_Object (*aMANY)aMANY1684,56616
+    } function;1685,56671
+    short min_args,1686,56687
+    short min_args, max_args;1686,56687
+    const char *symbol_name;symbol_name1687,56717
+    const char *intspec;intspec1688,56746
+    const char *doc;doc1689,56771
+enum char_table_specials1692,56798
+    CHAR_TABLE_STANDARD_SLOTS 1697,56993
+    SUB_CHAR_TABLE_OFFSET 1701,57214
+CHAR_TABLE_EXTRA_SLOTS 1707,57377
+verify 1714,57596
+LISP_MACRO_DEFUN 1723,57921
+SYMBOL_BLV 1732,58181
+SYMBOL_FWD 1738,58316
+LISP_MACRO_DEFUN_VOID 1744,58428
+SET_SYMBOL_BLV 1754,58691
+SET_SYMBOL_FWD 1760,58850
+SYMBOL_NAME 1767,59001
+SYMBOL_INTERNED_P 1775,59130
+SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P 1783,59299
+#define DEFSYM(1796,59809
+LISP_MACRO_DEFUN DEFSYM1792,59630
+struct hash_table_test1805,60062
+  Lisp_Object name;1808,60139
+  Lisp_Object user_hash_function;1811,60206
+  Lisp_Object user_cmp_function;1814,60297
+  bool (*cmpfn)cmpfn1817,60372
+  EMACS_UINT (*hashfn)hashfn1820,60486
+struct Lisp_Hash_Table1823,60555
+  struct vectorlike_header header;1826,60649
+  Lisp_Object weak;1830,60783
+  Lisp_Object rehash_size;1835,61007
+  Lisp_Object rehash_threshold;1839,61129
+  Lisp_Object hash;1843,61260
+  Lisp_Object next;1848,61490
+  Lisp_Object next_free;1851,61560
+  Lisp_Object index;1856,61771
+  ptrdiff_t count;1863,62041
+  Lisp_Object key_and_value;1868,62240
+  struct hash_table_test test;1871,62314
+  struct Lisp_Hash_Table *next_weak;next_weak1875,62457
+XHASH_TABLE 1880,62531
+#define XSET_HASH_TABLE(1885,62602
+HASH_TABLE_P 1889,62703
+HASH_KEY 1896,62860
+HASH_VALUE 1903,63040
+HASH_NEXT 1911,63254
+HASH_HASH 1918,63431
+HASH_INDEX 1926,63677
+HASH_TABLE_SIZE 1933,63826
+enum DEFAULT_HASH_SIZE 1940,63956
+enum DEFAULT_HASH_SIZE { DEFAULT_HASH_SIZE 1940,63956
+static double const DEFAULT_REHASH_THRESHOLD 1946,64176
+static double const DEFAULT_REHASH_SIZE 1950,64299
+sxhash_combine 1956,64465
+SXHASH_REDUCE 1964,64648
+struct Lisp_Misc_Any   1971,64806
+  ENUM_BF 1973,64866
+struct Lisp_Marker1978,64980
+  ENUM_BF 1980,65001
+struct Lisp_Overlay2021,66838
+    ENUM_BF 2034,67346
+    SAVE_UNUSED,2047,67641
+    SAVE_INTEGER,2048,67658
+    SAVE_FUNCPOINTER,2049,67676
+    SAVE_POINTER,2050,67698
+    SAVE_OBJECT2051,67716
+enum { SAVE_SLOT_BITS 2055,67801
+enum { SAVE_VALUE_SLOTS 2058,67898
+enum { SAVE_TYPE_BITS 2062,68006
+enum Lisp_Save_Type2064,68072
+    SAVE_TYPE_INT_INT 2066,68096
+    SAVE_TYPE_INT_INT_INT2067,68169
+    SAVE_TYPE_OBJ_OBJ 2069,68259
+    SAVE_TYPE_OBJ_OBJ_OBJ 2070,68330
+    SAVE_TYPE_OBJ_OBJ_OBJ_OBJ2071,68411
+    SAVE_TYPE_PTR_INT 2073,68506
+    SAVE_TYPE_PTR_OBJ 2074,68579
+    SAVE_TYPE_PTR_PTR 2075,68651
+    SAVE_TYPE_FUNCPTR_PTR_OBJ2076,68724
+    SAVE_TYPE_MEMORY 2080,68882
+typedef void (*voidfuncptr)voidfuncptr2108,69836
+struct Lisp_Save_Value2110,69873
+    ENUM_BF 2112,69900
+      void *pointer;pointer2125,70555
+      voidfuncptr funcpointer;2126,70576
+      ptrdiff_t integer;2127,70607
+      Lisp_Object object;2128,70632
+    } data[data2129,70658
+save_type 2134,70752
+XSAVE_POINTER 2143,70982
+set_save_pointer 2149,71144
+XSAVE_FUNCPOINTER 2155,71326
+XSAVE_INTEGER 2164,71546
+set_save_integer 2170,71708
+XSAVE_OBJECT 2179,71929
+struct Lisp_Finalizer2186,72106
+    struct Lisp_Misc_Any base;2188,72132
+    struct Lisp_Finalizer *prev;prev2191,72220
+    struct Lisp_Finalizer *next;next2192,72253
+    Lisp_Object function;2197,72490
+struct Lisp_Free2201,72581
+    ENUM_BF 2203,72602
+union Lisp_Misc2212,72882
+    struct Lisp_Misc_Any u_any;2214,72902
+    struct Lisp_Free u_free;2215,72973
+    struct Lisp_Marker u_marker;2216,73002
+    struct Lisp_Overlay u_overlay;2217,73035
+    struct Lisp_Save_Value u_save_value;2218,73070
+    struct Lisp_Finalizer u_finalizer;2219,73111
+XMISC 2223,73181
+XMISCANY 2229,73270
+XMISCTYPE 2236,73379
+XMARKER 2242,73467
+XOVERLAY 2249,73582
+XSAVE_VALUE 2256,73703
+XFINALIZER 2263,73832
+struct Lisp_Intfwd2274,74117
+    enum Lisp_Fwd_Type type;2276,74140
+    EMACS_INT *intvar;intvar2277,74190
+struct Lisp_Boolfwd2284,74411
+    enum Lisp_Fwd_Type type;2286,74435
+    bool *boolvar;boolvar2287,74486
+struct Lisp_Objfwd2294,74702
+    enum Lisp_Fwd_Type type;2296,74725
+    Lisp_Object *objvar;objvar2297,74775
+struct Lisp_Buffer_Objfwd2302,74934
+    enum Lisp_Fwd_Type type;2304,74964
+    int offset;2305,75021
+    Lisp_Object predicate;2307,75113
+struct Lisp_Buffer_Local_Value2334,76470
+    bool_bf local_if_set 2338,76615
+    bool_bf frame_local 2341,76797
+    bool_bf found 2344,76939
+    union Lisp_Fwd *fwd;fwd2346,77041
+    Lisp_Object where;2348,77184
+    Lisp_Object defcell;2351,77310
+    Lisp_Object valcell;2357,77614
+struct Lisp_Kboard_Objfwd2362,77729
+    enum Lisp_Fwd_Type type;2364,77759
+    int offset;2365,77816
+union Lisp_Fwd2368,77838
+    struct Lisp_Intfwd u_intfwd;2370,77857
+    struct Lisp_Boolfwd u_boolfwd;2371,77890
+    struct Lisp_Objfwd u_objfwd;2372,77925
+    struct Lisp_Buffer_Objfwd u_buffer_objfwd;2373,77958
+    struct Lisp_Kboard_Objfwd u_kboard_objfwd;2374,78005
+XFWDTYPE 2378,78084
+XBUFFER_OBJFWD 2384,78180
+struct Lisp_Float2391,78316
+      double data;2395,78354
+      struct Lisp_Float *chain;chain2396,78373
+    } u;2397,78405
+XFLOAT_DATA 2401,78434
+    IEEE_FLOATING_POINT2415,78943
+#define _UCHAR_T2423,79266
+typedef unsigned char UCHAR;2424,79283
+enum Lisp_Compiled2429,79366
+    COMPILED_ARGLIST 2431,79389
+    COMPILED_BYTECODE 2432,79415
+    COMPILED_CONSTANTS 2433,79442
+    COMPILED_STACK_DEPTH 2434,79470
+    COMPILED_DOC_STRING 2435,79500
+    COMPILED_INTERACTIVE 2436,79529
+enum char_bits2443,79831
+    CHAR_ALT 2445,79850
+    CHAR_SUPER 2446,79876
+    CHAR_HYPER 2447,79904
+    CHAR_SHIFT 2448,79932
+    CHAR_CTL 2449,79960
+    CHAR_META 2450,79986
+    CHAR_MODIFIER_MASK 2452,80014
+    CHARACTERBITS 2457,80209
+LISP_MACRO_DEFUN 2462,80267
+NATNUMP 2470,80409
+RANGED_INTEGERP 2476,80490
+#define TYPE_RANGED_INTEGERP(2481,80612
+LISP_MACRO_DEFUN 2486,80797
+VECTORP 2500,81270
+OVERLAYP 2505,81373
+SAVE_VALUEP 2510,81472
+FINALIZERP 2516,81578
+AUTOLOADP 2522,81682
+BUFFER_OBJFWDP 2528,81773
+PSEUDOVECTOR_TYPEP 2534,81871
+PSEUDOVECTORP 2542,82124
+WINDOW_CONFIGURATIONP 2558,82476
+PROCESSP 2564,82586
+WINDOWP 2570,82670
+TERMINALP 2576,82752
+SUBRP 2582,82838
+COMPILEDP 2588,82916
+BUFFERP 2594,83002
+CHAR_TABLE_P 2600,83084
+SUB_CHAR_TABLE_P 2606,83175
+BOOL_VECTOR_P 2612,83274
+FRAMEP 2618,83367
+IMAGEP 2625,83484
+ARRAYP 2632,83589
+CHECK_LIST 2638,83708
+LISP_MACRO_DEFUN_VOID 2643,83789
+CHECK_STRING_CAR 2653,84086
+CHECK_CONS 2658,84190
+CHECK_VECTOR 2663,84270
+CHECK_BOOL_VECTOR 2668,84356
+CHECK_VECTOR_OR_STRING 2674,84533
+CHECK_ARRAY 2683,84707
+CHECK_BUFFER 2688,84815
+CHECK_WINDOW 2693,84901
+CHECK_PROCESS 2699,85007
+CHECK_NATNUM 2705,85103
+#define CHECK_RANGED_INTEGER(2710,85180
+#define CHECK_TYPE_RANGED_INTEGER(2721,85563
+#define CHECK_NUMBER_COERCE_MARKER(2729,85833
+XFLOATINT 2738,86086
+CHECK_NUMBER_OR_FLOAT 2744,86157
+#define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(2749,86256
+CHECK_NUMBER_CAR 2760,86666
+CHECK_NUMBER_CDR 2768,86788
+#define DEFUN(2803,88383
+#define DEFUN(2812,88851
+FUNCTIONP 2822,89206
+extern void defsubr 2829,89358
+enum maxargs2831,89401
+    MANY 2833,89418
+    UNEVALLED 2834,89433
+#define CALLMANY(2838,89536
+#define CALLN(2844,89889
+extern void defvar_lisp 2846,89959
+extern void defvar_lisp_nopro 2847,90036
+extern void defvar_bool 2848,90119
+extern void defvar_int 2849,90190
+extern void defvar_kboard 2850,90264
+#define DEFVAR_LISP(2869,91094
+#define DEFVAR_LISP_NOPRO(2874,91266
+#define DEFVAR_BOOL(2879,91448
+#define DEFVAR_INT(2884,91621
+#define DEFVAR_BUFFER_DEFAULTS(2890,91792
+#define DEFVAR_KBOARD(2896,91996
+typedef jmp_buf sys_jmp_buf;2906,92320
+# define sys_setjmp(2907,92349
+# define sys_longjmp(2908,92384
+typedef sigjmp_buf sys_jmp_buf;2910,92456
+# define sys_setjmp(2911,92488
+# define sys_longjmp(2912,92528
+typedef jmp_buf sys_jmp_buf;2916,92687
+# define sys_setjmp(2917,92716
+# define sys_longjmp(2918,92750
+enum specbind_tag 2943,93802
+  SPECPDL_UNWIND,2944,93822
+  SPECPDL_UNWIND_PTR,2945,93891
+  SPECPDL_UNWIND_INT,2946,93942
+  SPECPDL_UNWIND_VOID,2947,93990
+  SPECPDL_BACKTRACE,2948,94044
+  SPECPDL_LET,2949,94102
+  SPECPDL_LET_LOCAL,2951,94232
+  SPECPDL_LET_DEFAULT  2952,94289
+union specbinding2955,94361
+    ENUM_BF 2957,94383
+      ENUM_BF 2959,94440
+      ENUM_BF 2964,94570
+      ENUM_BF 2969,94693
+      ENUM_BF 2974,94811
+      ENUM_BF 2978,94916
+      ENUM_BF 2983,95091
+enum handlertype 3021,96407
+enum handlertype { CATCHER,3021,96407
+enum handlertype { CATCHER, CONDITION_CASE 3021,96407
+struct handler3023,96454
+  enum handlertype type;3025,96471
+  Lisp_Object tag_or_ch;3026,96496
+  Lisp_Object val;3027,96521
+  struct handler *next;next3028,96540
+  struct handler *nextfree;nextfree3029,96564
+  Lisp_Object *bytecode_top;bytecode_top3036,96922
+  int bytecode_dest;3037,96951
+  struct gcpro *gcpro;gcpro3042,97188
+  sys_jmp_buf jmp;3044,97218
+  EMACS_INT lisp_eval_depth;3045,97237
+  ptrdiff_t pdlcount;3046,97266
+  int poll_suppress_count;3047,97288
+  int interrupt_input_blocked;3048,97315
+  struct byte_stack *byte_stack;byte_stack3049,97346
+#define PUSH_HANDLER(3053,97443
+extern Lisp_Object memory_signal_data;3075,98149
+extern char *stack_bottom;stack_bottom3079,98282
+extern void process_pending_signals 3097,99099
+extern bool volatile pending_signals;3098,99143
+extern void process_quit_flag 3100,99182
+#define QUIT   3101,99220
+#define QUITP 3112,99470
+extern Lisp_Object Vascii_downcase_table;3114,99531
+extern Lisp_Object Vascii_canon_table;3115,99573
+extern struct gcpro *gcprolist;gcprolist3130,100280
+struct gcpro3132,100313
+  struct gcpro *next;next3134,100328
+  volatile Lisp_Object *var;var3137,100397
+  ptrdiff_t nvars;3140,100479
+  const char *name;name3144,100564
+  int lineno;3147,100620
+  int idx;3150,100681
+  int level;3153,100717
+#define GC_USE_GCPROS_AS_BEFORE        3171,101294
+#define GC_MAKE_GCPROS_NOOPS   3172,101329
+#define GC_MARK_STACK_CHECK_GCPROS     3173,101361
+#define GC_USE_GCPROS_CHECK_ZOMBIES    3174,101398
+#define GC_MARK_STACK 3177,101459
+#define BYTE_MARK_STACK 3181,101559
+#define GCPRO1(3190,101830
+#define GCPRO2(3191,101870
+#define GCPRO3(3192,101936
+#define GCPRO4(3194,102031
+#define GCPRO5(3196,102151
+#define GCPRO6(3198,102296
+#define GCPRO7(3201,102471
+#define UNGCPRO 3202,102550
+#define GCPRO1(3208,102650
+#define GCPRO2(3212,102772
+#define GCPRO3(3217,102964
+#define GCPRO4(3223,103226
+#define GCPRO5(3230,103557
+#define GCPRO6(3238,103958
+#define GCPRO7(3247,104428
+#define UNGCPRO 3257,104968
+extern int gcpro_level;3261,105037
+#define GCPRO1(3263,105062
+#define GCPRO2(3269,105296
+#define GCPRO3(3278,105714
+#define GCPRO4(3289,106271
+#define GCPRO5(3302,106969
+#define GCPRO6(3317,107809
+#define GCPRO7(3334,108790
+#define UNGCPRO        3353,109913
+#define RETURN_UNGCPRO(3363,110180
+void staticpro 3375,110453
+vcopy 3384,110654
+set_hash_key_slot 3393,110929
+set_hash_value_slot 3399,111068
+set_symbol_function 3408,111303
+set_symbol_plist 3414,111418
+set_symbol_next 3420,111521
+blv_found 3428,111694
+set_overlay_plist 3437,111877
+string_intervals 3445,112028
+set_string_intervals 3453,112150
+set_char_table_defalt 3462,112352
+set_char_table_purpose 3467,112464
+set_char_table_extras 3475,112633
+set_char_table_contents 3482,112842
+set_sub_char_table_contents 3489,113037
+extern Lisp_Object indirect_function 3495,113196
+extern Lisp_Object find_symbol_value 3496,113248
+enum Arith_Comparison 3497,113300
+  ARITH_EQUAL,3498,113324
+  ARITH_NOTEQUAL,3499,113339
+  ARITH_LESS,3500,113357
+  ARITH_GRTR,3501,113371
+  ARITH_LESS_OR_EQUAL,3502,113385
+  ARITH_GRTR_OR_EQUAL3503,113408
+extern Lisp_Object arithcompare 3505,113433
+#define INTEGER_TO_CONS(3511,113759
+#define CONS_TO_INTEGER(3529,114622
+extern intmax_t cons_to_signed 3533,114837
+extern uintmax_t cons_to_unsigned 3534,114903
+extern struct Lisp_Symbol *indirect_variable indirect_variable3536,114964
+extern _Noreturn void args_out_of_range 3537,115033
+extern _Noreturn void args_out_of_range_3 3538,115101
+extern Lisp_Object do_symval_forwarding 3540,115192
+extern void set_internal 3541,115252
+extern void syms_of_data 3542,115324
+extern void swap_in_global_binding 3543,115357
+extern void syms_of_cmds 3546,115441
+extern void keys_of_cmds 3547,115474
+extern Lisp_Object detect_coding_system 3550,115536
+extern void init_coding 3552,115689
+extern void init_coding_once 3553,115721
+extern void syms_of_coding 3554,115758
+extern ptrdiff_t chars_in_text 3557,115825
+extern ptrdiff_t multibyte_chars_in_text 3558,115892
+extern void syms_of_character 3559,115969
+extern void init_charset 3562,116037
+extern void init_charset_once 3563,116070
+extern void syms_of_charset 3564,116108
+extern void init_syntax_once 3569,116228
+extern void syms_of_syntax 3570,116265
+enum { NEXT_ALMOST_PRIME_LIMIT 3573,116326
+extern EMACS_INT next_almost_prime 3574,116365
+enum constype 3739,123817
+enum constype {CONSTYPE_HEAP,CONSTYPE_HEAP3739,123817
+enum constype {CONSTYPE_HEAP, CONSTYPE_PURE}CONSTYPE_PURE3739,123817
+extern Lisp_Object listn 3740,123863
+list2i 3745,124007
+list3i 3751,124116
+list4i 3757,124255
+extern Lisp_Object make_uninit_bool_vector 3763,124407
+extern Lisp_Object bool_vector_fill 3764,124463
+extern _Noreturn void string_overflow 3765,124527
+extern Lisp_Object make_string 3766,124573
+extern Lisp_Object make_formatted_string 3767,124631
+extern Lisp_Object make_multibyte_string 3779,124985
+extern Lisp_Object make_event_array 3780,125064
+extern Lisp_Object make_uninit_string 3781,125128
+extern Lisp_Object make_uninit_multibyte_string 3782,125179
+extern Lisp_Object make_string_from_bytes 3783,125251
+extern Lisp_Object make_specified_string 3784,125331
+extern Lisp_Object make_pure_string 3786,125423
+extern Lisp_Object make_pure_c_string 3787,125503
+build_pure_c_string 3792,125659
+build_string 3801,125864
+extern Lisp_Object pure_cons 3806,125942
+extern void make_byte_code 3807,125999
+extern struct Lisp_Vector *allocate_vector allocate_vector3808,126050
+make_uninit_vector 3820,126435
+make_uninit_sub_char_table 3833,126654
+extern struct Lisp_Vector *allocate_pseudovector 
allocate_pseudovector3844,126963
+#define ALLOCATE_PSEUDOVECTOR(3850,127198
+#define ALLOCATE_ZEROED_PSEUDOVECTOR(3858,127534
+extern bool gc_in_progress;3863,127735
+extern bool abort_on_gc;3864,127763
+extern Lisp_Object make_float 3865,127788
+extern void display_malloc_warning 3866,127828
+extern ptrdiff_t inhibit_garbage_collection 3867,127871
+extern Lisp_Object make_save_int_int_int 3868,127923
+extern Lisp_Object make_save_obj_obj_obj_obj 3869,127999
+extern Lisp_Object make_save_ptr 3871,128109
+extern Lisp_Object make_save_ptr_int 3872,128152
+extern Lisp_Object make_save_ptr_ptr 3873,128210
+extern Lisp_Object make_save_funcptr_ptr_obj 3874,128265
+extern Lisp_Object make_save_memory 3876,128361
+extern void free_save_value 3877,128425
+extern Lisp_Object build_overlay 3878,128468
+extern void free_marker 3879,128542
+extern void free_cons 3880,128581
+extern void init_alloc_once 3881,128625
+extern void init_alloc 3882,128661
+extern void syms_of_alloc 3883,128692
+extern struct buffer * allocate_buffer 3884,128726
+extern int valid_lisp_object_p 3885,128773
+extern int relocatable_string_data_p 3886,128819
+extern void check_cons_list 3888,128898
+INLINE void 3890,128940
+extern void *r_alloc r_alloc3895,129061
+#define FLOAT_TO_STRING_BUFSIZE 3927,130524
+extern int openp 3957,131673
+extern Lisp_Object string_to_number 3959,131783
+extern void map_obarray 3960,131846
+extern void dir_warning 3962,131960
+extern void init_obarray 3963,132013
+extern void init_lread 3964,132046
+extern void syms_of_lread 3965,132077
+intern 3968,132131
+intern_c_string 3974,132219
+extern EMACS_INT lisp_eval_depth;3980,132332
+extern Lisp_Object Vautoload_queue;3981,132366
+extern Lisp_Object Vrun_hooks;3982,132402
+extern Lisp_Object Vsignaling_function;3983,132433
+extern Lisp_Object inhibit_lisp_code;3984,132473
+extern struct handler *handlerlist;handlerlist3985,132511
+extern void run_hook 3994,132753
+extern void run_hook_with_args_2 3995,132789
+extern Lisp_Object run_hook_with_args 3996,132863
+extern _Noreturn void xsignal 3999,133022
+extern _Noreturn void xsignal0 4000,133080
+extern _Noreturn void xsignal1 4001,133126
+extern _Noreturn void xsignal2 4002,133185
+extern _Noreturn void xsignal3 4003,133257
+extern _Noreturn void signal_error 4005,133346
+extern Lisp_Object eval_sub 4006,133410
+extern Lisp_Object apply1 4007,133458
+extern Lisp_Object call0 4008,133512
+extern Lisp_Object call1 4009,133552
+extern Lisp_Object call2 4010,133605
+extern Lisp_Object call3 4011,133671
+extern Lisp_Object call4 4012,133750
+extern Lisp_Object call5 4013,133842
+extern Lisp_Object call6 4014,133947
+extern Lisp_Object call7 4015,134065
+extern Lisp_Object internal_catch 4016,134196
+extern Lisp_Object internal_lisp_condition_case 4017,134289
+extern Lisp_Object internal_condition_case 4018,134378
+extern Lisp_Object internal_condition_case_1 4019,134491
+extern Lisp_Object internal_condition_case_2 4020,134626
+extern Lisp_Object internal_condition_case_n4021,134787
+extern void specbind 4024,134983
+extern void record_unwind_protect 4025,135032
+extern void record_unwind_protect_ptr 4026,135105
+extern void record_unwind_protect_int 4027,135172
+extern void record_unwind_protect_void 4028,135233
+extern void record_unwind_protect_nothing 4029,135291
+extern void clear_unwind_protect 4030,135341
+extern void set_unwind_protect 4031,135387
+extern void set_unwind_protect_ptr 4032,135468
+extern Lisp_Object unbind_to 4033,135543
+extern _Noreturn void error 4034,135598
+fast_string_match_ignore_case 4136,140086
+extern ptrdiff_t fast_c_string_match_ignore_case 4141,140236
+extern ptrdiff_t fast_looking_at 4143,140333
+extern ptrdiff_t find_newline 4145,140472
+extern ptrdiff_t scan_newline 4147,140601
+extern ptrdiff_t scan_newline_from_point 4149,140704
+extern ptrdiff_t find_newline_no_quit 4150,140784
+extern ptrdiff_t find_before_next_newline 4152,140881
+extern void syms_of_search 4154,140979
+extern void clear_regexp_cache 4155,141014
+extern Lisp_Object Vminibuffer_list;4159,141084
+extern Lisp_Object last_minibuf_string;4160,141121
+extern Lisp_Object get_minibuffer 4161,141161
+extern void init_minibuf_once 4162,141208
+extern void syms_of_minibuf 4163,141246
+extern void syms_of_callint 4167,141313
+extern void syms_of_casefiddle 4171,141383
+extern void keys_of_casefiddle 4172,141422
+extern void init_casetab_once 4176,141492
+extern void syms_of_casetab 4177,141530
+extern Lisp_Object echo_message_buffer;4181,141598
+extern struct kboard *echo_kboard;echo_kboard4182,141638
+extern void cancel_echoing 4183,141673
+extern Lisp_Object last_undo_boundary;4184,141708
+extern bool input_pending;4185,141747
+extern sigjmp_buf return_to_command_loop;4187,141810
+extern Lisp_Object menu_bar_items 4189,141859
+extern Lisp_Object tool_bar_items 4190,141908
+extern void discard_mouse_events 4191,141964
+void handle_input_available_signal 4193,142025
+extern Lisp_Object pending_funcalls;4195,142074
+extern bool detect_input_pending 4196,142111
+extern bool detect_input_pending_ignore_squeezables 4197,142152
+extern bool detect_input_pending_run_timers 4198,142212
+extern void safe_run_hooks 4199,142264
+extern void cmd_error_internal 4200,142306
+extern Lisp_Object command_loop_1 4201,142366
+extern Lisp_Object read_menu_command 4202,142408
+extern Lisp_Object recursive_edit_1 4203,142453
+extern void record_auto_save 4204,142497
+extern void force_auto_save_soon 4205,142534
+extern void init_keyboard 4206,142575
+extern void syms_of_keyboard 4207,142609
+extern void keys_of_keyboard 4208,142646
+extern ptrdiff_t current_column 4211,142712
+extern void invalidate_current_column 4212,142752
+extern bool indented_beyond_p 4213,142798
+extern void syms_of_indent 4214,142863
+extern void store_frame_param 4217,142926
+extern void store_in_alist 4218,143000
+extern Lisp_Object do_switch_frame 4219,143070
+extern Lisp_Object get_frame_param 4220,143143
+extern void frames_discard_buffer 4221,143209
+extern void syms_of_frame 4222,143258
+extern char **initial_argv;initial_argv4225,143320
+extern int initial_argc;4226,143348
+extern bool display_arg;4228,143423
+extern Lisp_Object decode_env_path 4230,143455
+extern Lisp_Object empty_unibyte_string,4231,143526
+extern Lisp_Object empty_unibyte_string, empty_multibyte_string;4231,143526
+extern _Noreturn void terminate_due_to_signal 4232,143591
+extern Lisp_Object Vlibrary_cache;4234,143666
+void fixup_locale 4237,143727
+void synchronize_system_messages_locale 4238,143753
+void synchronize_system_time_locale 4239,143801
+INLINE void fixup_locale 4241,143851
+INLINE void synchronize_system_messages_locale 4242,143886
+INLINE void synchronize_system_time_locale 4243,143943
+extern void shut_down_emacs 4245,144003
+extern bool noninteractive;4248,144129
+extern bool no_site_lisp;4251,144221
+extern int daemon_pipe[daemon_pipe4256,144389
+#define IS_DAEMON 4257,144416
+#define DAEMON_RUNNING 4258,144456
+extern void *w32_daemon_event;w32_daemon_event4260,144524
+#define IS_DAEMON 4261,144555
+#define DAEMON_RUNNING 4262,144600
+extern bool fatal_error_in_progress;4266,144721
+extern bool inhibit_window_system;4269,144827
+extern bool running_asynch_code;4271,144920
+extern void kill_buffer_processes 4274,144983
+extern int wait_reading_process_output 4275,145032
+# define WAIT_READING_MAX 4281,145419
+# define WAIT_READING_MAX 4283,145491
+extern void add_timer_wait_descriptor 4286,145555
+extern void add_keyboard_wait_descriptor 4288,145607
+extern void delete_keyboard_wait_descriptor 4289,145655
+extern void add_gpm_wait_descriptor 4291,145722
+extern void delete_gpm_wait_descriptor 4292,145765
+extern void init_process_emacs 4294,145818
+extern void syms_of_process 4295,145857
+extern void setup_process_coding_systems 4296,145893
+extern int child_setup 4302,146013
+extern void init_callproc_1 4303,146081
+extern void init_callproc 4304,146117
+extern void set_initial_environment 4305,146151
+extern void syms_of_callproc 4306,146195
+extern Lisp_Object read_doc_string 4309,146258
+extern Lisp_Object get_doc_string 4310,146308
+extern void syms_of_doc 4311,146369
+extern int read_bytecode_char 4312,146401
+extern void syms_of_bytecode 4315,146470
+extern struct byte_stack *byte_stack_list;byte_stack_list4316,146507
+extern void mark_byte_stack 4318,146570
+extern void unmark_byte_stack 4320,146613
+extern Lisp_Object exec_byte_code 4321,146651
+extern void init_macros 4325,146801
+extern void syms_of_macros 4326,146833
+extern void truncate_undo_list 4329,146895
+extern void record_insert 4330,146945
+extern void record_delete 4331,146995
+extern void record_first_change 4332,147053
+extern void record_change 4333,147093
+extern void record_property_change 4334,147143
+extern void syms_of_undo 4337,147285
+extern void report_interval_modification 4340,147349
+extern void syms_of_menu 4343,147445
+extern void syms_of_xmenu 4346,147506
+extern char *get_current_dir_name get_current_dir_name4356,147708
+extern void stuff_char 4358,147757
+extern void init_foreground_group 4359,147790
+extern void sys_subshell 4360,147832
+extern void sys_suspend 4361,147865
+extern void discard_tty_input 4362,147897
+extern void init_sys_modes 4363,147935
+extern void reset_sys_modes 4364,147991
+extern void init_all_sys_modes 4365,148048
+extern void reset_all_sys_modes 4366,148087
+extern void child_setup_tty 4367,148127
+extern void setup_pty 4368,148162
+extern int set_window_size 4369,148191
+extern EMACS_INT get_random 4370,148235
+extern void seed_random 4371,148271
+extern void init_random 4372,148316
+extern void emacs_backtrace 4373,148348
+extern _Noreturn void emacs_abort 4374,148383
+extern void xputenv 4527,152697
+extern char *egetenv_internal egetenv_internal4529,152734
+egetenv 4532,152806
+extern void init_system_name 4539,153009
+#define eabs(4545,153302
+#define make_fixnum_or_float(4550,153435
+enum MAX_ALLOCA 4556,153686
+enum MAX_ALLOCA { MAX_ALLOCA 4556,153686
+extern void *record_xmalloc record_xmalloc4558,153731
+#define USE_SAFE_ALLOCA        4560,153797
+#define AVAIL_ALLOCA(4564,153930
+#define SAFE_ALLOCA(4568,154041
+#define SAFE_NALLOCA(4576,154382
+#define SAFE_ALLOCA_STRING(4590,154858
+#define SAFE_FREE(4598,155110
+#define SAFE_ALLOCA_LISP(4625,155688
+# define USE_STACK_LISP_OBJECTS 4652,156810
+# undef USE_STACK_LISP_OBJECTS4658,156976
+# define USE_STACK_LISP_OBJECTS 4659,157007
+enum { defined_GC_CHECK_STRING_BYTES 4663,157082
+enum { defined_GC_CHECK_STRING_BYTES 4665,157135
+union Aligned_Cons4670,157269
+  struct Lisp_Cons s;4672,157290
+  double d;4673,157312
+  double d; intmax_t i;4673,157312
+  double d; intmax_t i; void *p;p4673,157312
+union Aligned_String4676,157349
+  struct Lisp_String s;4678,157372
+  double d;4679,157396
+  double d; intmax_t i;4679,157396
+  double d; intmax_t i; void *p;p4679,157396
+    USE_STACK_CONS 4689,157704
+    USE_STACK_STRING 4691,157810
+#define STACK_CONS(4699,158147
+#define AUTO_CONS_EXPR(4701,158244
+#define AUTO_CONS(4709,158607
+#define AUTO_LIST1(4710,158678
+#define AUTO_LIST2(4712,158786
+#define AUTO_LIST3(4716,158941
+#define AUTO_LIST4(4720,159116
+extern const char *verify_ascii verify_ascii4730,159453
+# define verify_ascii(4732,159507
+#define AUTO_STRING(4740,159815
+#define FOR_EACH_TAIL(4752,160279
+#define FOR_EACH_ALIST_VALUE(4766,160770
+maybe_gc 4774,161057
+functionp 4784,161296
+
+c-src/machsyscalls.c,23
+#define        SYSCALL(6,113
+
+c-src/machsyscalls.h,159
+SYSCALL (mach_msg_trap,1,0
+SYSCALL (mach_reply_port,13,314
+SYSCALL (mach_thread_self,18,377
+SYSCALL (mach_task_self,23,441
+SYSCALL (mach_host_self,28,503
+
+c-src/fail.c,30
+void (*prt_call(prt_call1,0
+
+c-src/h.h,2506
+   ELEM_I/ELEM_I3,15
+} Fails_t;5,85
+typedef void Lang_function 6,96
+void Asm_labels 7,127
+typedef struct tpcmd8,147
+#define ggg 10,170
+  } arg;13,198
+tpcmd;15,209
+typedef struct foobar2_ 16,216
+    fu   int (*funcptr)funcptr17,242
+    long foo;18,279
+    char bar;19,293
+} foobar2;20,307
+    DEVICE_SWP,23,333
+    DEVICE_LAST24,349
+} bsp_DevId;25,365
+  struct constant_args 27,394
+    unsigned int burst;28,419
+  } constant;29,443
+} args;30,457
+typedef int *regset;regset31,465
+typedef int INT;32,486
+typedef union abc33,503
+  int def;35,523
+} ghi1;36,534
+typedef union abc 37,542
+  int def;38,562
+} ghi2;39,573
+typedef struct a 40,581
+} b;41,600
+#define c(42,605
+typedef struct an_extern_linkage 
*an_extern_linkage_ptr;an_extern_linkage_ptr43,619
+typedef struct an_extern_linkage 44,676
+               kind;46,733
+               is_explicit;49,812
+  a_byte_boolean is_curly_brace_form;54,1009
+} an_extern_linkage;56,1054
+typedef struct pollfd   pfdset[pfdset57,1075
+typedef union rtunion_def58,1119
+    int rtint;60,1149
+    char *rtstr;rtstr61,1164
+    struct rtx_def *rtx;rtx62,1181
+  } womboid 63,1206
+typedef union rtunion_def64,1220
+  int rtint;68,1250
+  char *rtstr;rtstr69,1263
+  struct rtx_def *rtxp;rtxp70,1278
+  struct rtx_def rtxnp;71,1302
+womboid75,1330
+enum {dog,dog81,1416
+enum {dog, cat}cat81,1416
+enum {dog, cat} animals;81,1416
+typedef void (_CALLBACK_ *signal_handler)signal_handler82,1441
+typedef void (_CALLBACK_ *signal_handler1)signal_handler183,1489
+/* comment */ #define ANSIC84,1538
+ #define ANSIC85,1566
+typedef void (proc)87,1588
+typedef void OperatorFun(88,1612
+typedef int f(89,1648
+struct my_struct 91,1691
+typedef struct my_struct my_typedef;93,1713
+typedef RETSIGTYPE (*signal_handler_t)signal_handler_t94,1750
+  Date 04 May 87 235311 PDT 96,1802
+typedef unsigned char unchar;99,1880
+typedef int X,100,1910
+typedef int X, Y,100,1910
+typedef int X, Y, Z;100,1910
+typedef mio mao;101,1931
+extern void ab(102,1948
+typedef struct a 103,1966
+typedef struct a { } b;103,1966
+typedef struct b104,1990
+} c;106,2009
+int    (*oldhup)oldhup107,2014
+request (*oldhup)oldhup108,2031
+int extvar;109,2053
+#define tag1110,2065
+#define aaaaaa 111,2078
+#define bbbbbb\bbbbbb113,2102
+#define cccccccccc115,2125
+#define enter_critical_section 116,2144
+#define exit_critical_to_previous      117,2199
+#define UNDEFINED118,2259
+struct re_pattern_buffer 119,2277
+struct re_pattern_buffer { unsigned char *buffer;buffer119,2277
+
+cp-src/c.C,3629
+template <typename ipc3dIslandHierarchy,1,0
+template <typename ipc3dIslandHierarchy, typename ipc3dChannelType,1,0
+template <typename ipc3dIslandHierarchy, typename ipc3dChannelType, unsigned 
numOfChannels,1,0
+template <typename ipc3dIslandHierarchy, typename ipc3dChannelType, unsigned 
numOfChannels, typename ipc3dLinkControl,1,0
+class CMultiChannelCSC19_3D2,151
+        ipc3dLinkControlSetup setup;CMultiChannelCSC19_3D::setup5,190
+        ipc3dCSC19<CMultiChannelCSC19_3D::ipc3dCSC196,227
+        
ipc3dCSC19<ipc3dIslandHierarchy,ipcMultiChannel<ipc3dChannelType,numOfChannels>,ipcMultiChannel<ipc3dChannelType,numOfChannels>,ipc3dLinkControl>
 mcCSC;CMultiChannelCSC19_3D::mcCSC6,227
+        advTimer cscInitTime;CMultiChannelCSC19_3D::cscInitTime7,388
+        advTimer 
cscSegmentationTime;CMultiChannelCSC19_3D::cscSegmentationTime8,418
+        advTimer outputTime;CMultiChannelCSC19_3D::outputTime9,456
+        void execute(CMultiChannelCSC19_3D::execute11,493
+static void my_function1(24,984
+int main 25,1026
+double base 26,1088
+operator += operator +=29,1174
+class TestRecord;31,1233
+typedef struct s1 32,1251
+   int counter;s1::counter33,1271
+} t1;34,1287
+struct s2 35,1293
+   int counter;s2::counter36,1305
+typedef struct s2 t2;38,1324
+class A 39,1346
+  enum { rosso,A::rosso40,1356
+  enum { rosso, giallo,A::giallo40,1356
+  enum { rosso, giallo, verde A::verde40,1356
+  enum { rosso, giallo, verde } colori;A::colori40,1356
+  const A& operator+(A::operator+41,1396
+const A& A::operator+(43,1431
+void operator+(44,1467
+void operator -(operator -45,1495
+void operator int(operator int46,1524
+A<int>* f(48,1556
+int f(49,1571
+int A<int>::f(f50,1590
+A<float,B<int> > A<B<float>,int>::f(f51,1618
+template <class C, int n> class AT 52,1668
+template <class C, int n> class AT { C t[AT::t52,1668
+class AU 53,1716
+class AU { T x;AU::x53,1716
+class B<B54,1735
+class B<int> { void f(B::f54,1735
+const A::B::T& abt 55,1765
+class A 56,1791
+class A { class B A::B56,1791
+class A { class B { int f(A::B::f56,1791
+class A 57,1826
+  int get_data(A::get_data58,1836
+  A operator+(A::operator+59,1860
+is_muldiv_operation(61,1887
+domain foo 68,1955
+     void f(foo::f69,1968
+void A::A(72,1989
+struct A 73,2004
+struct A { A(A::A73,2004
+struct B 74,2022
+struct B { B(B::B74,2022
+void B::B(75,2041
+void BE_Node::BE_Node(76,2056
+class BE_Node 77,2083
+struct foo 79,2102
+  int x;foo::x80,2115
+class test 86,2156
+  int f(test::f87,2169
+  int ff(test::ff89,2231
+  int g(test::g90,2254
+class  AST_Root 92,2278
+class  AST_Root;96,2327
+AST_ConcreteType::AST_ConcreteType(99,2393
+AST_Array::AST_Array(107,2532
+     void f(::f115,2733
+struct A 117,2753
+    ~A(A::~A118,2764
+A::~A(120,2777
+struct B 122,2789
+    ~B(B::~B123,2800
+enum {dog,::dog126,2817
+enum {dog, cat}::cat126,2817
+enum {dog, cat} animals;126,2817
+struct {int teats;::teats127,2842
+struct {int teats;} cow;127,2842
+class Boo 129,2868
+    enum {dog,Boo::dog130,2880
+    enum {dog, cat}Boo::cat130,2880
+    enum {dog, cat} animals;Boo::animals130,2880
+    struct {int treats;Boo::treats131,2909
+    struct {int treats;} cow;Boo::cow131,2909
+    int i,Boo::i132,2939
+    int i,a,Boo::a132,2939
+    int i,a,b;Boo::b132,2939
+    foo(Boo::foo133,2954
+    Boo(Boo::Boo137,2995
+    Boo(Boo::Boo138,3052
+Boo::Boo(141,3070
+typedef int should_see_this_one_enclosed_in_extern_C;149,3155
+typedef int 
(*should_see_this_function_pointer)should_see_this_function_pointer153,3228
+typedef int should_see_this_array_type[should_see_this_array_type156,3310
+
+cp-src/abstract.C,11317
+Half_Container::Half_Container(34,703
+void Half_Container::SetPosition(45,941
+void Half_Container::SetDimensions(58,1259
+void Half_Container::SetFather(81,1697
+void Half_Container::SetCollapsed(87,1787
+Specification::Specification(98,1958
+void Specification::SetPosition(119,2453
+void Specification::SetDimensions(164,3742
+void Specification::SetFather(188,4616
+void Specification::SetPath(202,4908
+Coord Specification::GetMaxX(212,5125
+Coord Specification::GetMaxY(215,5174
+Process::Process(222,5298
+void Process::SetPosition(242,5697
+void Process::SetDimensions(291,6959
+void Process::SetFather(315,7913
+void Process::SetPath(326,8123
+Coord Process::GetMaxX(335,8323
+Coord Process::GetMaxY(338,8365
+Choice::Choice(346,8482
+void Choice::SetPosition(357,8698
+void Choice::SetDimensions(405,10053
+void Choice::ChangeH(466,12014
+void Choice::ChangeW(495,12947
+void Choice::SetFather(522,13700
+void Choice::SetTextual(532,13918
+void Choice::SetCollapsed(540,14041
+int Choice::Get_Textual_H(549,14168
+int Choice::Get_Textual_W(557,14408
+void Choice::SetTerminalPos(566,14615
+Stop::Stop(588,15087
+void Stop::SetPosition(595,15207
+void Stop::SetDimensions(605,15373
+void Stop::SetFather(644,16369
+void Stop::SetTextual(652,16537
+void Stop::SetCollapsed(655,16616
+Exit::Exit(667,16768
+void Exit::SetPosition(676,16935
+void Exit::SetDimensions(687,17164
+void Exit::SetFather(695,17350
+Exit_Bex::Exit_Bex(703,17476
+void Exit_Bex::SetPosition(713,17678
+void Exit_Bex::SetDimensions(740,18430
+void Exit_Bex::SetFather(798,20444
+void Exit_Bex::SetTextual(807,20646
+void Exit_Bex::SetCollapsed(814,20757
+NoExit::NoExit(826,20943
+void NoExit::SetPosition(835,21092
+void NoExit::SetDimensions(845,21266
+void NoExit::SetFather(852,21359
+ID_Place::ID_Place(861,21488
+void ID_Place::SetIdent(875,21745
+void ID_Place::SetPosition(886,21936
+void ID_Place::SetDimensions(897,22173
+void ID_Place::SetFather(928,23017
+ID_Place::~ID_Place(932,23073
+void ID_Place::SetVisible(935,23112
+void ID_Place::ClearID(941,23193
+ID_List::ID_List(953,23379
+void ID_List::SetPosition(967,23644
+void ID_List::SetDimensions(999,24385
+void ID_List::SetFather(1038,25456
+void ID_List::SetCollapsed(1047,25595
+void ID_List::HideMe(1056,25734
+void ID_List::SetRBubble(1065,25862
+void ID_List::SetAlignement(1073,25980
+int ID_List::GetCardinality(1082,26123
+void ID_List::SetVisible(1093,26291
+void ID_List::BuildSigSorts(1103,26518
+void ID_List::ClearIDs(1126,27081
+Id_Decl::Id_Decl(1139,27280
+void Id_Decl::SetPosition(1156,27659
+void Id_Decl::SetDimensions(1174,28016
+void Id_Decl::SetFather(1191,28417
+void Id_Decl::SetCollapsed(1200,28568
+Id_Decl_List::Id_Decl_List(1214,28799
+void Id_Decl_List::SetPosition(1227,29069
+void Id_Decl_List::SetDimensions(1245,29424
+void Id_Decl_List::SetFather(1262,29844
+void Id_Decl_List::SetCollapsed(1271,29988
+Comment::Comment(1286,30209
+void Comment::SetComment(1299,30446
+void Comment::SetFather(1317,30800
+void Comment::SetPosition(1321,30854
+void Comment::SetDimensions(1331,31031
+Comment::~Comment(1345,31265
+Comment_List::Comment_List(1352,31382
+void Comment_List::SetPosition(1362,31541
+void Comment_List::SetDimensions(1380,31860
+void Comment_List::SetFather(1392,32139
+Parallel::Parallel(1406,32360
+void Parallel::SetPosition(1417,32573
+void Parallel::SetDimensions(1473,34272
+void Parallel::SetTextual(1534,36167
+int Parallel::Get_Textual_W(1543,36313
+int Parallel::Get_Textual_H(1559,36722
+void Parallel::SetTerminalPos(1570,37191
+void Parallel::SetFather(1590,37698
+void Parallel::SetCollapsed(1601,37950
+Ident_Eq::Ident_Eq(1615,38177
+void Ident_Eq::SetPosition(1632,38546
+void Ident_Eq::SetDimensions(1647,38851
+void Ident_Eq::SetFather(1662,39191
+void Ident_Eq::SetCollapsed(1669,39295
+Ident_Eq_List::Ident_Eq_List(1681,39480
+void Ident_Eq_List::SetPosition(1694,39753
+void Ident_Eq_List::SetDimensions(1712,40111
+void Ident_Eq_List::SetCollapsed(1729,40538
+void Ident_Eq_List::SetFather(1738,40683
+Local_Def::Local_Def(1751,40904
+void Local_Def::SetPosition(1761,41102
+void Local_Def::SetDimensions(1791,41833
+void Local_Def::SetFather(1832,43262
+void Local_Def::SetCollapsed(1839,43370
+void Local_Def::SetTextual(1848,43504
+Hide::Hide(1860,43681
+void Hide::SetPosition(1871,43872
+void Hide::SetDimensions(1901,44569
+void Hide::SetFather(1944,45771
+void Hide::SetCollapsed(1951,45873
+void Hide::SetTextual(1961,46003
+Interl::Interl(1972,46175
+void Interl::SetPosition(1982,46361
+void Interl::SetDimensions(1993,46593
+void Interl::SetFather(2021,47103
+Syncr::Syncr(2031,47257
+void Syncr::SetPosition(2041,47438
+void Syncr::SetDimensions(2051,47609
+void Syncr::SetFather(2079,48153
+Enable::Enable(2090,48436
+void Enable::SetPosition(2102,48690
+void Enable::SetDimensions(2169,50473
+void Enable::SetTextual(2243,53017
+void Enable::SetTerminalPos(2251,53140
+int Enable::Get_Textual_W(2271,53720
+int Enable::Get_Textual_H(2282,53985
+void Enable::SetFather(2285,54104
+void Enable::SetCollapsed(2298,54418
+Disable::Disable(2314,54780
+void Disable::SetPosition(2325,55001
+void Disable::SetDimensions(2376,56251
+void Disable::SetFather(2436,58064
+void Disable::SetCollapsed(2446,58284
+void Disable::SetTextual(2455,58412
+void Disable::SetTerminalPos(2463,58536
+int Disable::Get_Textual_W(2479,58987
+int Disable::Get_Textual_H(2488,59190
+Gen_Paral::Gen_Paral(2500,59630
+void Gen_Paral::SetPosition(2513,59899
+void Gen_Paral::SetDimensions(2540,60659
+void Gen_Paral::SetFather(2590,62171
+void Gen_Paral::SetCollapsed(2597,62290
+Action_Pref::Action_Pref(2609,62583
+void Action_Pref::SetPosition(2620,62829
+void Action_Pref::SetDimensions(2669,63937
+void Action_Pref::SetFather(2724,65777
+void Action_Pref::SetCollapsed(2734,66010
+void Action_Pref::SetTextual(2743,66147
+Internal::Internal(2757,66484
+void Internal::SetPosition(2768,66658
+void Internal::SetDimensions(2778,66838
+void Internal::SetFather(2806,67442
+Communication::Communication(2816,67702
+void Communication::SetPosition(2827,67956
+void Communication::SetDimensions(2897,70390
+void Communication::SetFather(2935,71706
+void Communication::SetCollapsed(2942,71837
+void Communication::SetTextual(2949,71968
+NoGuard::NoGuard(2961,72262
+void NoGuard::SetPosition(2974,72462
+void NoGuard::SetDimensions(2984,72639
+void NoGuard::SetFather(2987,72678
+Guard::Guard(2996,72929
+void Guard::SetPosition(3008,73118
+void Guard::SetDimensions(3022,73428
+void Guard::SetFather(3044,73894
+void Guard::SetCollapsed(3050,73974
+NoExperiment::NoExperiment(3062,74258
+void NoExperiment::SetPosition(3075,74478
+void NoExperiment::SetDimensions(3085,74670
+void NoExperiment::SetFather(3088,74714
+Experiment::Experiment(3097,74978
+void Experiment::SetPosition(3110,75245
+void Experiment::SetDimensions(3128,75611
+void Experiment::SetFather(3150,76066
+void Experiment::SetCollapsed(3157,76188
+void Experiment::SetTextual(3165,76311
+Proc_Inst::Proc_Inst(3175,76476
+void Proc_Inst::SetPosition(3191,76777
+void Proc_Inst::SetDimensions(3236,77965
+void Proc_Inst::SetFather(3286,79596
+void Proc_Inst::SetCollapsed(3294,79739
+void Proc_Inst::SetTextual(3304,79909
+Value_Expr::Value_Expr(3316,80100
+void Value_Expr::SetPosition(3329,80327
+void Value_Expr::SetDimensions(3340,80572
+void Value_Expr::SetFather(3343,80614
+Value_Expr_List::Value_Expr_List(3351,80755
+void Value_Expr_List::SetPosition(3364,81042
+void Value_Expr_List::SetDimensions(3382,81406
+void Value_Expr_List::SetFather(3399,81830
+void Value_Expr_List::SetCollapsed(3408,81977
+Sum_Ident::Sum_Ident(3423,82203
+void Sum_Ident::SetPosition(3435,82445
+void Sum_Ident::SetDimensions(3466,83196
+void Sum_Ident::SetFather(3509,84540
+void Sum_Ident::SetCollapsed(3516,84653
+void Sum_Ident::SetTextual(3525,84793
+void Sum_Ident::SetTerminalPos(3532,84897
+Value::Value(3552,85432
+void Value::SetPosition(3569,85792
+void Value::SetDimensions(3583,86091
+void Value::SetFather(3606,86628
+void Value::SetCollapsed(3613,86731
+Term::Term(3626,86908
+void Term::SetPosition(3646,87323
+void Term::SetDimensions(3671,87942
+void Term::SetFather(3697,88599
+void Term::SetCollapsed(3705,88732
+Exit_Entry::Exit_Entry(3719,88947
+void Exit_Entry::SetPosition(3732,89176
+void Exit_Entry::SetDimensions(3743,89421
+void Exit_Entry::SetFather(3746,89463
+Exit_Entry_List::Exit_Entry_List(3754,89604
+void Exit_Entry_List::SetPosition(3766,89875
+void Exit_Entry_List::SetDimensions(3785,90304
+void Exit_Entry_List::SetFather(3802,90753
+void Exit_Entry_List::SetCollapsed(3811,90900
+Sum_Gate::Sum_Gate(3826,91125
+void Sum_Gate::SetPosition(3837,91363
+void Sum_Gate::SetDimensions(3873,92120
+void Sum_Gate::SetFather(3915,93438
+void Sum_Gate::SetCollapsed(3922,93549
+void Sum_Gate::SetTextual(3931,93687
+void Sum_Gate::SetTerminalPos(3938,93790
+Gate_Decl::Gate_Decl(3959,94421
+void Gate_Decl::SetPosition(3977,94900
+void Gate_Decl::SetDimensions(3995,95298
+void Gate_Decl::SetFather(4011,95694
+void Gate_Decl::SetCollapsed(4020,95871
+Gate_Decl_List::Gate_Decl_List(4034,96130
+void Gate_Decl_List::SetPosition(4047,96414
+void Gate_Decl_List::SetDimensions(4065,96779
+void Gate_Decl_List::SetFather(4082,97207
+void Gate_Decl_List::SetCollapsed(4091,97353
+Par::Par(4106,97572
+void Par::SetPosition(4126,97957
+void Par::SetDimensions(4174,99236
+void Par::SetFather(4226,100814
+void Par::SetCollapsed(4234,100943
+void Par::SetTextual(4245,101100
+Sort_Id_Exit::Sort_Id_Exit(4258,101329
+void Sort_Id_Exit::SetPosition(4270,101556
+void Sort_Id_Exit::SetDimensions(4283,101834
+void Sort_Id_Exit::SetFather(4297,102142
+void Sort_Id_Exit::SetCollapsed(4303,102228
+Equality::Equality(4314,102512
+Equality::Equality(4327,102736
+void Equality::SetPosition(4340,102987
+void Equality::SetDimensions(4357,103329
+void Equality::SetFather(4377,103720
+void Equality::SetCollapsed(4387,103858
+Guarded::Guarded(4401,104167
+void Guarded::SetPosition(4413,104384
+void Guarded::SetDimensions(4441,105084
+void Guarded::SetFather(4482,106273
+void Guarded::SetCollapsed(4489,106377
+void Guarded::SetTextual(4499,106509
+Exper_Off::Exper_Off(4510,106813
+void Exper_Off::SetPosition(4523,107035
+void Exper_Off::SetDimensions(4533,107220
+void Exper_Off::SetFather(4536,107261
+Exper_Off_List::Exper_Off_List(4544,107521
+void Exper_Off_List::SetPosition(4557,107802
+void Exper_Off_List::SetDimensions(4575,108167
+void Exper_Off_List::SetFather(4592,108594
+void Exper_Off_List::SetCollapsed(4601,108740
+Exclam::Exclam(4616,109087
+void Exclam::SetPosition(4629,109300
+void Exclam::SetDimensions(4641,109541
+void Exclam::SetFather(4655,109830
+void Exclam::SetCollapsed(4661,109912
+Query::Query(4673,110194
+void Query::SetPosition(4686,110399
+void Query::SetDimensions(4698,110636
+void Query::SetFather(4712,110918
+void Query::SetCollapsed(4718,110997
+Definition::Definition(4729,111279
+void Definition::SetPosition(4741,111448
+void Definition::SetDimensions(4752,111658
+void Definition::SetFather(4766,111896
+void Definition::SetPath(4777,112089
+Proc_List::Proc_List(4790,112374
+void Proc_List::SetPosition(4799,112505
+void Proc_List::SetDimensions(4809,112686
+void Proc_List::SetFather(4815,112767
+void Proc_List::SetPath(4824,112908
+char *Proc_List::GetPath(Proc_List::GetPath4832,113068
+
+cp-src/abstract.H,25321
+#define abstract_hh16,453
+class SignatureSorts;21,513
+class ID_Place:ID_Place23,536
+       char *str;ID_Place::str25,571
+       char RBubble;ID_Place::RBubble26,583
+ ID_Place(ID_Place::ID_Place31,637
+ void  SetIdent(ID_Place::SetIdent32,650
+ void SetPosition(ID_Place::SetPosition33,675
+ void SetDimensions(ID_Place::SetDimensions34,708
+ void SetVisible(ID_Place::SetVisible35,735
+ void SetFather(ID_Place::SetFather36,759
+ void ClearID(ID_Place::ClearID37,789
+ virtual ~ID_Place(ID_Place::~ID_Place38,810
+ char *GetIdent(ID_Place::GetIdent41,857
+ void SetRBubble(ID_Place::SetRBubble42,891
+ char GetRBubble(ID_Place::GetRBubble43,934
+class ID_List:ID_List47,1012
+       ID_Place *elem;ID_List::elem49,1046
+       ID_List *next;ID_List::next50,1063
+ ID_List(ID_List::ID_List57,1134
+ void SetPosition(ID_List::SetPosition58,1167
+ void SetDimensions(ID_List::SetDimensions59,1200
+ void SetFather(ID_List::SetFather60,1227
+ ID_Place *GetElem(ID_List::GetElem61,1257
+ void HideMe(ID_List::HideMe62,1279
+ void SetCollapsed(ID_List::SetCollapsed63,1299
+ void SetRBubble(ID_List::SetRBubble64,1325
+ void BuildSigSorts(ID_List::BuildSigSorts65,1349
+ void SetVisible(ID_List::SetVisible66,1409
+ void SetAlignement(ID_List::SetAlignement67,1433
+ void ClearIDs(ID_List::ClearIDs68,1460
+ int GetCardinality(ID_List::GetCardinality69,1482
+class Id_Decl:Id_Decl73,1540
+       ID_List *id_list;Id_Decl::id_list75,1574
+       ID_Place *sort_id;Id_Decl::sort_id76,1593
+ Id_Decl(Id_Decl::Id_Decl81,1648
+ void SetPosition(Id_Decl::SetPosition82,1681
+ void SetDimensions(Id_Decl::SetDimensions83,1714
+ void SetFather(Id_Decl::SetFather84,1741
+ void SetCollapsed(Id_Decl::SetCollapsed85,1771
+class Id_Decl_List:Id_Decl_List89,1829
+       Id_Decl *elem;Id_Decl_List::elem91,1868
+       Id_Decl_List *next;Id_Decl_List::next92,1884
+ Id_Decl_List(Id_Decl_List::Id_Decl_List97,1945
+ void SetPosition(Id_Decl_List::SetPosition98,1987
+ void SetDimensions(Id_Decl_List::SetDimensions99,2020
+ void SetFather(Id_Decl_List::SetFather100,2047
+ void SetCollapsed(Id_Decl_List::SetCollapsed101,2077
+class Comment:Comment105,2140
+       char *comm;Comment::comm107,2174
+ Comment(Comment::Comment112,2222
+ Comment(Comment::Comment113,2234
+ void SetComment(Comment::SetComment114,2271
+ void SetPosition(Comment::SetPosition115,2297
+ void SetDimensions(Comment::SetDimensions116,2330
+ void SetFather(Comment::SetFather117,2357
+ virtual ~Comment(Comment::~Comment118,2387
+class Comment_List:Comment_List122,2440
+       Comment *elem;Comment_List::elem124,2479
+       Comment_List *next;Comment_List::next125,2495
+ Comment_List(Comment_List::Comment_List128,2525
+ void SetPosition(Comment_List::SetPosition129,2567
+ void SetDimensions(Comment_List::SetDimensions130,2600
+ void SetFather(Comment_List::SetFather131,2627
+class Value_Expr:Value_Expr135,2694
+ Value_Expr(Value_Expr::Value_Expr141,2769
+ void SetPosition(Value_Expr::SetPosition142,2784
+ void SetDimensions(Value_Expr::SetDimensions143,2817
+ void SetFather(Value_Expr::SetFather144,2844
+class Value_Expr_List:Value_Expr_List149,2911
+       Tree_Node *elem;Value_Expr_List::elem151,2953
+       Value_Expr_List *next;Value_Expr_List::next152,2971
+ Value_Expr_List(Value_Expr_List::Value_Expr_List157,3038
+ void SetPosition(Value_Expr_List::SetPosition158,3088
+ void SetDimensions(Value_Expr_List::SetDimensions159,3121
+ void SetFather(Value_Expr_List::SetFather160,3148
+ void SetCollapsed(Value_Expr_List::SetCollapsed161,3178
+class Exit_Entry:Exit_Entry165,3244
+ Exit_Entry(Exit_Entry::Exit_Entry171,3319
+ void SetPosition(Exit_Entry::SetPosition172,3334
+ void SetDimensions(Exit_Entry::SetDimensions173,3367
+ void SetFather(Exit_Entry::SetFather174,3394
+class Exit_Entry_List:Exit_Entry_List179,3460
+       Tree_Node *elem;Exit_Entry_List::elem181,3502
+       Exit_Entry_List *next;Exit_Entry_List::next182,3520
+ Exit_Entry_List(Exit_Entry_List::Exit_Entry_List187,3587
+ void SetPosition(Exit_Entry_List::SetPosition188,3637
+ void SetDimensions(Exit_Entry_List::SetDimensions189,3670
+ void SetFather(Exit_Entry_List::SetFather190,3697
+ void SetCollapsed(Exit_Entry_List::SetCollapsed191,3727
+class Exper_Off:Exper_Off195,3793
+ Exper_Off(Exper_Off::Exper_Off199,3838
+ void SetPosition(Exper_Off::SetPosition200,3852
+ void SetDimensions(Exper_Off::SetDimensions201,3885
+ void SetFather(Exper_Off::SetFather202,3912
+class Exper_Off_List:Exper_Off_List207,3977
+        Exper_Off *elem;Exper_Off_List::elem209,4018
+        Exper_Off_List *next;Exper_Off_List::next210,4043
+ Exper_Off_List(Exper_Off_List::Exper_Off_List215,4115
+ void SetPosition(Exper_Off_List::SetPosition216,4163
+ void SetDimensions(Exper_Off_List::SetDimensions217,4196
+ void SetFather(Exper_Off_List::SetFather218,4223
+ void SetCollapsed(Exper_Off_List::SetCollapsed219,4253
+class Gate_Decl:Gate_Decl223,4323
+       ID_List *gate_id_list1;Gate_Decl::gate_id_list1225,4359
+       ID_List *gate_id_list2;Gate_Decl::gate_id_list2226,4384
+ Gate_Decl(Gate_Decl::Gate_Decl231,4446
+ void SetPosition(Gate_Decl::SetPosition232,4480
+ void SetDimensions(Gate_Decl::SetDimensions233,4513
+ void SetFather(Gate_Decl::SetFather234,4540
+ void SetCollapsed(Gate_Decl::SetCollapsed235,4570
+class Gate_Decl_List:Gate_Decl_List239,4630
+       Gate_Decl *elem;Gate_Decl_List::elem241,4671
+       Gate_Decl_List *next;Gate_Decl_List::next242,4689
+ Gate_Decl_List(Gate_Decl_List::Gate_Decl_List247,4754
+ void SetPosition(Gate_Decl_List::SetPosition248,4802
+ void SetDimensions(Gate_Decl_List::SetDimensions249,4835
+ void SetFather(Gate_Decl_List::SetFather250,4862
+ void SetCollapsed(Gate_Decl_List::SetCollapsed251,4892
+class Ident_Eq:Ident_Eq255,4957
+        Id_Decl *iddecl;Ident_Eq::iddecl257,4992
+        Value_Expr *expr;Ident_Eq::expr258,5017
+ Ident_Eq(Ident_Eq::Ident_Eq263,5079
+ void SetPosition(Ident_Eq::SetPosition264,5116
+ void SetDimensions(Ident_Eq::SetDimensions265,5149
+ void SetFather(Ident_Eq::SetFather266,5176
+ void SetCollapsed(Ident_Eq::SetCollapsed267,5206
+class Ident_Eq_List:Ident_Eq_List271,5270
+        Ident_Eq *elem;Ident_Eq_List::elem273,5310
+        Ident_Eq_List *next;Ident_Eq_List::next274,5334
+ Ident_Eq_List(Ident_Eq_List::Ident_Eq_List279,5404
+ void SetPosition(Ident_Eq_List::SetPosition280,5449
+ void SetDimensions(Ident_Eq_List::SetDimensions281,5482
+ void SetFather(Ident_Eq_List::SetFather282,5509
+ void SetCollapsed(Ident_Eq_List::SetCollapsed283,5539
+class Half_Container:Half_Container287,5608
+       ID_List *gate_list;Half_Container::gate_list289,5649
+ Half_Container(Half_Container::Half_Container294,5712
+ void SetPosition(Half_Container::SetPosition295,5740
+ void SetDimensions(Half_Container::SetDimensions296,5773
+ void SetFather(Half_Container::SetFather297,5800
+ void SetCollapsed(Half_Container::SetCollapsed298,5830
+class Specification:Specification308,5954
+class Definition;Specification::Definition310,5994
+        Comment_List *com_list;Specification::com_list312,6013
+       ID_Place *ident;Specification::ident313,6045
+       ID_List *gate_list;Specification::gate_list314,6063
+       Id_Decl_List *id_decl_list;Specification::id_decl_list315,6084
+        Comment_List *com_list1;Specification::com_list1316,6113
+       Tree_Node *func;Specification::func317,6146
+       Data_List *dt_list;Specification::dt_list318,6164
+       Definition *def;Specification::def319,6185
+       Coord yl1,Specification::yl1320,6203
+       Coord yl1,yl2,Specification::yl2320,6203
+       Coord yl1,yl2,yl3;Specification::yl3320,6203
+       Coord MaxX,Specification::MaxX321,6223
+       Coord MaxX, MaxY;Specification::MaxY321,6223
+ Specification(Specification::Specification326,6283
+ void SetPosition(Specification::SetPosition328,6418
+ void SetDimensions(Specification::SetDimensions329,6451
+ void SetFather(Specification::SetFather330,6478
+ void SetPath(Specification::SetPath331,6508
+ Coord GetMaxX(Specification::GetMaxX332,6535
+ Coord GetMaxY(Specification::GetMaxY333,6553
+class Process:Process337,6609
+        Comment_List *com_list;Process::com_list339,6643
+       ID_Place *ident;Process::ident340,6675
+       ID_List *gate_list;Process::gate_list341,6693
+       Id_Decl_List *id_decl_list;Process::id_decl_list342,6714
+       Definition *def;Process::def343,6743
+       Tree_Node *func;Process::func344,6761
+       char nesting;Process::nesting345,6779
+       Coord yl1,Process::yl1346,6794
+       Coord yl1,yl2,Process::yl2346,6794
+       Coord yl1,yl2,yl3,Process::yl3346,6794
+       Coord yl1,yl2,yl3,ypath;Process::ypath346,6794
+       Coord MaxX,Process::MaxX347,6820
+       Coord MaxX, MaxY;Process::MaxY347,6820
+ Process(Process::Process352,6874
+ void SetPosition(Process::SetPosition353,6966
+ void SetDimensions(Process::SetDimensions354,6999
+ void SetFather(Process::SetFather355,7026
+ void SetPath(Process::SetPath356,7056
+ void NewBex(Process::NewBex357,7097
+ Coord GetMaxY(Process::GetMaxY359,7125
+ Coord GetMaxX(Process::GetMaxX360,7143
+ char GetNesting(Process::GetNesting363,7186
+class Proc_List:Proc_List367,7257
+        Process *elem;Proc_List::elem369,7293
+        Proc_List *next;Proc_List::next370,7316
+ Proc_List(Proc_List::Proc_List373,7350
+ void SetPosition(Proc_List::SetPosition374,7386
+ void SetDimensions(Proc_List::SetDimensions375,7419
+ void SetFather(Proc_List::SetFather376,7446
+ void SetPath(Proc_List::SetPath377,7476
+ char *GetPath(Proc_List::GetPath378,7517
+class Definition:Definition382,7574
+        Tree_Node *bex;Definition::bex384,7611
+        Proc_List *process_list;Definition::process_list385,7635
+        Data_List *data_list;Definition::data_list386,7668
+       char path[Definition::path387,7698
+ Definition(Definition::Definition390,7732
+ void SetPosition(Definition::SetPosition391,7784
+ void SetDimensions(Definition::SetDimensions392,7817
+ void SetFather(Definition::SetFather393,7844
+ void SetPath(Definition::SetPath394,7874
+ char *GetPath(Definition::GetPath397,7940
+class Exit:Exit407,8071
+       ID_List *sort_list;Exit::sort_list409,8102
+ Exit(Exit::Exit414,8155
+ void SetPosition(Exit::SetPosition415,8173
+ void SetDimensions(Exit::SetDimensions416,8220
+ void SetFather(Exit::SetFather417,8247
+class NoExit:NoExit421,8305
+ NoExit(NoExit::NoExit427,8372
+ void SetPosition(NoExit::SetPosition428,8383
+ void SetDimensions(NoExit::SetDimensions429,8416
+ void SetFather(NoExit::SetFather430,8443
+class Value:Value440,8560
+       ID_Place *ident;Value::ident442,8592
+       ID_Place *sort_id;Value::sort_id443,8610
+ Value(Value::Value448,8663
+ void SetPosition(Value::SetPosition449,8695
+ void SetDimensions(Value::SetDimensions450,8728
+ void SetFather(Value::SetFather451,8755
+ void SetCollapsed(Value::SetCollapsed452,8785
+class Term:Term456,8841
+       ID_Place *op_ident;Term::op_ident458,8872
+       Value_Expr_List *expr_list;Term::expr_list459,8893
+       ID_Place *sort_id;Term::sort_id460,8922
+ Term(Term::Term465,8974
+ void SetPosition(Term::SetPosition466,9024
+ void SetDimensions(Term::SetDimensions467,9057
+ void SetFather(Term::SetFather468,9084
+ void SetCollapsed(Term::SetCollapsed469,9114
+class Equality:Equality473,9169
+        Tree_Node *express1;Equality::express1475,9204
+        Tree_Node *express2;Equality::express2476,9233
+ Equality(Equality::Equality481,9298
+ Equality(Equality::Equality482,9311
+ void SetPosition(Equality::SetPosition483,9348
+ void SetDimensions(Equality::SetDimensions484,9381
+ void SetFather(Equality::SetFather485,9408
+ void SetCollapsed(Equality::SetCollapsed486,9438
+class Sort_Id_Exit:Sort_Id_Exit490,9504
+       ID_Place *sort_id;Sort_Id_Exit::sort_id492,9543
+ Sort_Id_Exit(Sort_Id_Exit::Sort_Id_Exit497,9603
+ void SetPosition(Sort_Id_Exit::SetPosition498,9630
+ void SetDimensions(Sort_Id_Exit::SetDimensions499,9663
+ void SetFather(Sort_Id_Exit::SetFather500,9690
+ void SetCollapsed(Sort_Id_Exit::SetCollapsed501,9720
+class NoGuard:NoGuard511,9837
+ NoGuard(NoGuard::NoGuard517,9906
+ void SetPosition(NoGuard::SetPosition518,9918
+ void SetDimensions(NoGuard::SetDimensions519,9951
+ void SetFather(NoGuard::SetFather520,9978
+class Guard:Guard524,10045
+        Equality *equality;Guard::equality526,10077
+ Guard(Guard::Guard531,10138
+ void SetPosition(Guard::SetPosition532,10158
+ void SetDimensions(Guard::SetDimensions533,10191
+ void SetFather(Guard::SetFather534,10218
+ void SetCollapsed(Guard::SetCollapsed535,10248
+class NoExperiment:NoExperiment545,10368
+ NoExperiment(NoExperiment::NoExperiment551,10447
+ void SetPosition(NoExperiment::SetPosition552,10464
+ void SetDimensions(NoExperiment::SetDimensions553,10497
+ void SetFather(NoExperiment::SetFather554,10524
+class Experiment:Experiment558,10591
+        Exper_Off_List *exp_offer_list;Experiment::exp_offer_list560,10628
+        Tree_Node *guard_option;Experiment::guard_option561,10668
+ Experiment(Experiment::Experiment566,10739
+ void SetPosition(Experiment::SetPosition567,10783
+ void SetDimensions(Experiment::SetDimensions568,10816
+ void SetFather(Experiment::SetFather569,10843
+ void SetTextual(Experiment::SetTextual570,10873
+ void SetCollapsed(Experiment::SetCollapsed571,10911
+ Tree_Node *GetGuard(Experiment::GetGuard574,10962
+class Exclam:Exclam578,11053
+        Tree_Node *value_exp;Exclam::value_exp580,11086
+ Exclam(Exclam::Exclam585,11150
+ void SetPosition(Exclam::SetPosition586,11172
+ void SetDimensions(Exclam::SetDimensions587,11205
+ void SetFather(Exclam::SetFather588,11232
+ void SetCollapsed(Exclam::SetCollapsed589,11262
+class Query:Query593,11324
+        Id_Decl *id_decl;Query::id_decl595,11356
+ Query(Query::Query600,11415
+ void SetPosition(Query::SetPosition601,11434
+ void SetDimensions(Query::SetDimensions602,11467
+ void SetFather(Query::SetFather603,11494
+ void SetCollapsed(Query::SetCollapsed604,11524
+class Internal:Internal614,11643
+ Internal(Internal::Internal620,11714
+ void SetPosition(Internal::SetPosition621,11727
+ void SetDimensions(Internal::SetDimensions622,11760
+ void SetFather(Internal::SetFather623,11787
+class Communication:Communication627,11854
+       ID_Place *gate_identifier;Communication::gate_identifier629,11894
+        Tree_Node 
*experiment_option;Communication::experiment_option630,11922
+        Coord xl,Communication::xl631,11960
+        Coord xl, yl;Communication::yl631,11960
+        int hr;Communication::hr632,11982
+ Communication(Communication::Communication637,12039
+ void SetPosition(Communication::SetPosition638,12080
+ void SetDimensions(Communication::SetDimensions639,12113
+ void SetFather(Communication::SetFather640,12140
+ void SetTextual(Communication::SetTextual641,12170
+ void SetCollapsed(Communication::SetCollapsed642,12208
+class Gen_Paral:Gen_Paral652,12337
+        ID_List *gate_id_list;Gen_Paral::gate_id_list654,12373
+       Coord Xclose;Gen_Paral::Xclose655,12404
+       char border;Gen_Paral::border656,12419
+ Gen_Paral(Gen_Paral::Gen_Paral661,12470
+ void SetPosition(Gen_Paral::SetPosition662,12493
+ void SetDimensions(Gen_Paral::SetDimensions663,12526
+ void SetFather(Gen_Paral::SetFather664,12553
+ void SetCollapsed(Gen_Paral::SetCollapsed665,12583
+ void HideGate(Gen_Paral::HideGate668,12634
+class Interl:Interl672,12730
+ Interl(Interl::Interl678,12797
+ void SetPosition(Interl::SetPosition679,12808
+ void SetDimensions(Interl::SetDimensions680,12841
+ void SetFather(Interl::SetFather681,12868
+class Syncr:Syncr685,12929
+ Syncr(Syncr::Syncr691,12994
+ void SetPosition(Syncr::SetPosition692,13004
+ void SetDimensions(Syncr::SetDimensions693,13037
+ void SetFather(Syncr::SetFather694,13064
+class Action_Pref:Action_Pref704,13185
+        Tree_Node *action_den;Action_Pref::action_den706,13223
+        Tree_Node *bex;Action_Pref::bex707,13254
+       char havebox;Action_Pref::havebox708,13278
+       char border;Action_Pref::border709,13293
+ Action_Pref(Action_Pref::Action_Pref714,13346
+ void SetPosition(Action_Pref::SetPosition715,13386
+ void SetDimensions(Action_Pref::SetDimensions716,13419
+ void SetFather(Action_Pref::SetFather717,13446
+ void SetTextual(Action_Pref::SetTextual718,13476
+ void SetCollapsed(Action_Pref::SetCollapsed719,13514
+class Enable:Enable723,13577
+        Tree_Node *bex1,Enable::bex1725,13610
+        Tree_Node *bex1, *bex2;Enable::bex2725,13610
+       ID_List *gate_id_list;Enable::gate_id_list726,13642
+        Coord xl,Enable::xl727,13666
+        Coord xl, yl1,Enable::yl1727,13666
+        Coord xl, yl1, xl2,Enable::xl2727,13666
+        Coord xl, yl1, xl2, yl2,Enable::yl2727,13666
+        Coord xl, yl1, xl2, yl2, xid,Enable::xid727,13666
+        Coord xl, yl1, xl2, yl2, xid, yid,Enable::yid727,13666
+        Coord xl, yl1, xl2, yl2, xid, yid, Yclose;Enable::Yclose727,13666
+       char havebox;Enable::havebox728,13717
+       char border;Enable::border729,13732
+ Enable(Enable::Enable734,13780
+ void SetPosition(Enable::SetPosition735,13826
+ void SetDimensions(Enable::SetDimensions736,13859
+ void SetFather(Enable::SetFather737,13886
+ void SetTextual(Enable::SetTextual738,13916
+ int Get_Textual_H(Enable::Get_Textual_H739,13954
+ int Get_Textual_W(Enable::Get_Textual_W740,13980
+ void SetTerminalPos(Enable::SetTerminalPos741,14006
+ void SetCollapsed(Enable::SetCollapsed742,14034
+class Disable:Disable746,14097
+        Tree_Node *bex1,Disable::bex1748,14131
+        Tree_Node *bex1, *bex2;Disable::bex2748,14131
+        Coord xl,Disable::xl749,14163
+        Coord xl, yl,Disable::yl749,14163
+        Coord xl, yl, yl2;Disable::yl2749,14163
+       char havebox;Disable::havebox750,14190
+       char border;Disable::border751,14205
+ Disable(Disable::Disable756,14254
+ void SetPosition(Disable::SetPosition757,14290
+ void SetDimensions(Disable::SetDimensions758,14323
+ void SetFather(Disable::SetFather759,14350
+ void SetTextual(Disable::SetTextual760,14380
+ int Get_Textual_H(Disable::Get_Textual_H761,14418
+ int Get_Textual_W(Disable::Get_Textual_W762,14444
+ void SetTerminalPos(Disable::SetTerminalPos763,14470
+ void SetCollapsed(Disable::SetCollapsed764,14498
+class Choice:Choice768,14561
+       Tree_Node *bex1,Choice::bex1770,14594
+       Tree_Node *bex1, *bex2;Choice::bex2770,14594
+       Coord xl,Choice::xl771,14619
+       Coord xl, yl,Choice::yl771,14619
+       Coord xl, yl, yl1;Choice::yl1771,14619
+       char havebox;Choice::havebox772,14639
+       int delta;Choice::delta773,14654
+       char border;Choice::border774,14666
+ Choice(Choice::Choice779,14714
+ void SetPosition(Choice::SetPosition780,14749
+ void SetDimensions(Choice::SetDimensions781,14782
+ void SetFather(Choice::SetFather782,14809
+ void SetTextual(Choice::SetTextual783,14839
+ void SetCollapsed(Choice::SetCollapsed784,14877
+ int Get_Textual_H(Choice::Get_Textual_H785,14903
+ int Get_Textual_W(Choice::Get_Textual_W786,14929
+ void SetTerminalPos(Choice::SetTerminalPos787,14955
+ void ChangeH(Choice::ChangeH788,14983
+ void ChangeW(Choice::ChangeW789,15003
+class Stop:Stop793,15054
+       char havebox;Stop::havebox795,15085
+       char border;Stop::border796,15100
+ Stop(Stop::Stop801,15146
+ void SetPosition(Stop::SetPosition802,15155
+ void SetDimensions(Stop::SetDimensions803,15188
+ void SetFather(Stop::SetFather804,15215
+ void SetTextual(Stop::SetTextual805,15245
+ void SetCollapsed(Stop::SetCollapsed806,15283
+class Exit_Bex:Exit_Bex810,15338
+       Exit_Entry_List *entry_list;Exit_Bex::entry_list812,15373
+       Coord Xopen,Exit_Bex::Xopen813,15404
+       Coord Xopen, Xclose;Exit_Bex::Xclose813,15404
+       char havebox;Exit_Bex::havebox814,15426
+       char border;Exit_Bex::border815,15441
+ Exit_Bex(Exit_Bex::Exit_Bex820,15491
+ void SetPosition(Exit_Bex::SetPosition821,15521
+ void SetDimensions(Exit_Bex::SetDimensions822,15554
+ void SetFather(Exit_Bex::SetFather823,15581
+ void SetTextual(Exit_Bex::SetTextual824,15611
+ void SetCollapsed(Exit_Bex::SetCollapsed825,15649
+class Hide:Hide829,15707
+       ID_List *gate_list;Hide::gate_list831,15738
+       Tree_Node *bex;Hide::bex832,15759
+       char border;Hide::border833,15776
+       Coord yl;Hide::yl834,15790
+ Hide(Hide::Hide839,15833
+ void SetPosition(Hide::SetPosition840,15864
+ void SetDimensions(Hide::SetDimensions841,15897
+ void SetFather(Hide::SetFather842,15924
+ void SetTextual(Hide::SetTextual843,15954
+ void SetCollapsed(Hide::SetCollapsed844,15992
+class Guarded:Guarded848,16047
+        Equality *equality;Guarded::equality850,16081
+        Tree_Node *bex;Guarded::bex851,16109
+       Coord Xclose;Guarded::Xclose852,16133
+       char border;Guarded::border853,16148
+ Guarded(Guarded::Guarded858,16197
+ void SetPosition(Guarded::SetPosition859,16232
+ void SetDimensions(Guarded::SetDimensions860,16265
+ void SetFather(Guarded::SetFather861,16292
+ void SetTextual(Guarded::SetTextual862,16322
+ void SetCollapsed(Guarded::SetCollapsed863,16360
+class Proc_Inst:Proc_Inst867,16425
+       ID_List *gate_list;Proc_Inst::gate_list869,16461
+       ID_Place *ident;Proc_Inst::ident870,16482
+       Value_Expr_List *value_expr_list;Proc_Inst::value_expr_list871,16500
+       Coord yp,Proc_Inst::yp872,16535
+       Coord yp, yl1,Proc_Inst::yl1872,16535
+       Coord yp, yl1, Xopen,Proc_Inst::Xopen872,16535
+       Coord yp, yl1, Xopen, Xclose;Proc_Inst::Xclose872,16535
+       int hp;Proc_Inst::hp873,16566
+       char border;Proc_Inst::border874,16575
+  Proc_Inst(Proc_Inst::Proc_Inst879,16626
+ void SetPosition(Proc_Inst::SetPosition880,16681
+ void SetDimensions(Proc_Inst::SetDimensions881,16714
+ void SetFather(Proc_Inst::SetFather882,16741
+ void SetTextual(Proc_Inst::SetTextual883,16771
+ void SetCollapsed(Proc_Inst::SetCollapsed884,16809
+class Parallel:Parallel888,16870
+       Tree_Node *bex1,Parallel::bex1890,16905
+       Tree_Node *bex1, *bex2,Parallel::bex2890,16905
+       Tree_Node *bex1, *bex2, *oper;Parallel::oper890,16905
+       Coord xl,Parallel::xl891,16937
+       Coord xl, yl,Parallel::yl891,16937
+       Coord xl, yl, yl1;Parallel::yl1891,16937
+       char havebox;Parallel::havebox892,16957
+       int delta;Parallel::delta893,16972
+       char border;Parallel::border894,16984
+ Parallel(Parallel::Parallel899,17034
+ void SetPosition(Parallel::SetPosition900,17084
+ void SetDimensions(Parallel::SetDimensions901,17117
+ void SetFather(Parallel::SetFather902,17144
+ void SetTextual(Parallel::SetTextual903,17174
+ int Get_Textual_W(Parallel::Get_Textual_W904,17212
+ int Get_Textual_H(Parallel::Get_Textual_H905,17238
+ void SetTerminalPos(Parallel::SetTerminalPos906,17264
+ void SetCollapsed(Parallel::SetCollapsed907,17292
+ char GetOperType(Parallel::GetOperType910,17343
+class Local_Def:Local_Def914,17429
+       Ident_Eq_List *equa_list;Local_Def::equa_list916,17465
+       Tree_Node *bex;Local_Def::bex917,17492
+       Coord yl;Local_Def::yl918,17509
+       char border;Local_Def::border919,17520
+ Local_Def(Local_Def::Local_Def924,17571
+ void SetPosition(Local_Def::SetPosition925,17613
+ void SetDimensions(Local_Def::SetDimensions926,17646
+ void SetFather(Local_Def::SetFather927,17673
+ void SetTextual(Local_Def::SetTextual928,17703
+ void SetCollapsed(Local_Def::SetCollapsed929,17741
+class Par:Par933,17801
+       Gate_Decl_List *gate_decl_list;Par::gate_decl_list935,17831
+       Tree_Node *oper,Par::oper936,17864
+       Tree_Node *oper, *bex;Par::bex936,17864
+       Coord xl,Par::xl937,17888
+       Coord xl, yl;Par::yl937,17888
+       char border;Par::border938,17903
+ Par(Par::Par943,17948
+ void SetPosition(Par::SetPosition944,17998
+ void SetDimensions(Par::SetDimensions945,18031
+ void SetFather(Par::SetFather946,18058
+ void SetTextual(Par::SetTextual947,18088
+ void SetCollapsed(Par::SetCollapsed948,18126
+class Sum_Gate:Sum_Gate952,18180
+       Gate_Decl_List *gate_decl_list;Sum_Gate::gate_decl_list954,18215
+       Tree_Node *bex;Sum_Gate::bex955,18248
+       Coord xl,Sum_Gate::xl956,18265
+       Coord xl, yl,Sum_Gate::yl956,18265
+       Coord xl, yl, Xch,Sum_Gate::Xch956,18265
+       Coord xl, yl, Xch, Ych,Sum_Gate::Ych956,18265
+       Coord xl, yl, Xch, Ych, Xclose,Sum_Gate::Xclose956,18265
+       Coord xl, yl, Xch, Ych, Xclose, Yclose;Sum_Gate::Yclose956,18265
+       char border;Sum_Gate::border957,18306
+ Sum_Gate(Sum_Gate::Sum_Gate962,18356
+ void SetPosition(Sum_Gate::SetPosition963,18398
+ void SetDimensions(Sum_Gate::SetDimensions964,18431
+ void SetFather(Sum_Gate::SetFather965,18458
+ void SetTextual(Sum_Gate::SetTextual966,18488
+ void SetTerminalPos(Sum_Gate::SetTerminalPos967,18526
+ void SetCollapsed(Sum_Gate::SetCollapsed968,18554
+class Sum_Ident:Sum_Ident972,18613
+       Id_Decl_List *ident_decl_list;Sum_Ident::ident_decl_list974,18649
+       Tree_Node *bex;Sum_Ident::bex975,18681
+       Coord xl,Sum_Ident::xl976,18698
+       Coord xl, yl,Sum_Ident::yl976,18698
+       Coord xl, yl, Xch,Sum_Ident::Xch976,18698
+       Coord xl, yl, Xch, Ych,Sum_Ident::Ych976,18698
+       Coord xl, yl, Xch, Ych, Xclose,Sum_Ident::Xclose976,18698
+       Coord xl, yl, Xch, Ych, Xclose, Yclose;Sum_Ident::Yclose976,18698
+       char border;Sum_Ident::border977,18739
+ Sum_Ident(Sum_Ident::Sum_Ident982,18790
+ void SetPosition(Sum_Ident::SetPosition983,18831
+ void SetDimensions(Sum_Ident::SetDimensions984,18864
+ void SetFather(Sum_Ident::SetFather985,18891
+ void SetTextual(Sum_Ident::SetTextual986,18921
+ void SetTerminalPos(Sum_Ident::SetTerminalPos987,18959
+ void SetCollapsed(Sum_Ident::SetCollapsed988,18987
+
+cp-src/cfront.H,18434
+extern bit old_fct_accepted;28,897
+extern bit fct_void;32,1028
+extern char* prog_name;42,1297
+extern int inline_restr;43,1351
+extern bit emode;44,1410
+extern Pname name_free;47,1457
+extern Pexpr expr_free;48,1496
+extern Pstmt stmt_free;49,1520
+extern int Nspy;52,1569
+extern int Nfile,53,1586
+extern int Nfile, Nline,53,1586
+extern int Nfile, Nline, Ntoken,53,1586
+extern int Nfile, Nline, Ntoken, Nname,53,1586
+extern int Nfile, Nline, Ntoken, Nname, Nfree_store,53,1586
+extern int Nfile, Nline, Ntoken, Nname, Nfree_store, Nalloc,53,1586
+extern int Nfile, Nline, Ntoken, Nname, Nfree_store, Nalloc, Nfree;53,1586
+extern int Nn,54,1654
+extern int Nn, Nbt,54,1654
+extern int Nn, Nbt, Nt,54,1654
+extern int Nn, Nbt, Nt, Ne,54,1654
+extern int Nn, Nbt, Nt, Ne, Ns,54,1654
+extern int Nn, Nbt, Nt, Ne, Ns, Nstr,54,1654
+extern int Nn, Nbt, Nt, Ne, Ns, Nstr, Nc,54,1654
+extern int Nn, Nbt, Nt, Ne, Ns, Nstr, Nc, Nl;54,1654
+extern int NFn,55,1700
+extern int NFn, NFtn,55,1700
+extern int NFn, NFtn, NFpv,55,1700
+extern int NFn, NFtn, NFpv, NFbt,55,1700
+extern int NFn, NFtn, NFpv, NFbt, NFf,55,1700
+extern int NFn, NFtn, NFpv, NFbt, NFf, NFs,55,1700
+extern int NFn, NFtn, NFpv, NFbt, NFf, NFs, NFc,55,1700
+extern int NFn, NFtn, NFpv, NFbt, NFf, NFs, NFc, NFe,55,1700
+extern int NFn, NFtn, NFpv, NFbt, NFf, NFs, NFc, NFe, NFl;55,1700
+extern TOK     lex(57,1760
+extern Pname   syn(58,1778
+extern void    init_print(60,1799
+extern void    init_lex(61,1847
+extern void    int_syn(62,1871
+extern void    ext(63,1894
+extern char*   make_name(65,1917
+struct loc     67,1948
+       short   file;loc::file69,1988
+       short   line;loc::line70,2036
+       void    put(loc::put72,2062
+       void    putline(loc::putline73,2080
+extern Loc curloc;77,2108
+extern int curr_file;78,2127
+struct ea 80,2150
+               void* p;ea::p82,2224
+               int i;ea::i83,2235
+       ea(ea::ea86,2249
+       ea(ea::ea87,2275
+       ea(ea::ea88,2301
+       ea(ea::ea89,2310
+extern ea* ea0;92,2332
+overload error;94,2349
+int error(95,2365
+int error(96,2437
+int error(97,2515
+int error(98,2592
+extern int error_count;101,2689
+extern bit debug;102,2713
+extern int vtbl_opt;103,2731
+extern FILE* out_file;104,2752
+extern FILE* in_file;105,2775
+extern char scan_started;106,2797
+extern bit warn;107,2823
+extern int br_level;110,2848
+extern int bl_level;111,2869
+extern Ptable ktbl;112,2890
+extern Ptable gtbl;113,2941
+extern char* oper_name(114,2978
+extern Pclass ccl;115,3007
+extern Pbase defa_type;116,3026
+extern Pbase moe_type;117,3050
+extern Pstmt Cstmt;120,3087
+extern Pname Cdcl;121,3135
+extern void put_dcl_context(122,3194
+extern Ptable any_tbl;124,3226
+extern Pbase any_type;125,3287
+extern Pbase int_type;128,3318
+extern Pbase char_type;129,3341
+extern Pbase short_type;130,3365
+extern Pbase long_type;131,3390
+extern Pbase uint_type;132,3414
+extern Pbase float_type;133,3438
+extern Pbase double_type;134,3463
+extern Pbase void_type;135,3489
+extern Pbase uchar_type;138,3527
+extern Pbase ushort_type;139,3552
+extern Pbase ulong_type;140,3578
+extern Ptype Pchar_type;141,3603
+extern Ptype Pint_type;142,3628
+extern Ptype Pfctvec_type;143,3652
+extern Ptype Pfctchar_type;144,3679
+extern Ptype Pvoid_type;145,3707
+extern Pbase zero_type;146,3732
+extern int byte_offset;148,3757
+extern int bit_offset;149,3781
+extern int max_align;150,3804
+extern int stack_size;151,3826
+extern int enum_count;152,3849
+extern int const_save;153,3872
+extern Pexpr dummy;156,3903
+extern Pexpr zero;157,3950
+extern Pexpr one;158,3969
+extern Pname sta_name;159,3987
+#define DEL(161,4040
+#define PERM(162,4092
+#define UNPERM(163,4123
+struct node 165,4157
+       TOK     base;node::base166,4171
+       TOK     n_key;node::n_key167,4182
+       bit     permanent;node::permanent168,4226
+extern Pclass Ebase,172,4259
+extern Pclass Ebase, Epriv;172,4259
+struct table 175,4321
+       char    init_stat;table::init_stat177,4406
+       short   size;table::size181,4571
+       short   hashsize;table::hashsize182,4584
+       short   free_slot;table::free_slot183,4601
+       Pname*  entries;table::entries184,4651
+       short*  hashtbl;table::hashtbl185,4668
+       Pstmt   real_block;table::real_block186,4685
+       Ptable  next;table::next189,4787
+       Pname   t_name;table::t_name190,4834
+       table(table::table192,4875
+       Pname   look(table::look194,4906
+       Pname   insert(table::insert195,4931
+       void    grow(table::grow197,4971
+       void    set_scope(table::set_scope198,4988
+       void    set_name(table::set_name199,5029
+       Pname   get_mem(table::get_mem200,5070
+       int     max(table::max201,5091
+       void    dcl_print(table::dcl_print202,5129
+       Pname   lookc(table::lookc203,5155
+       Pexpr   find_name(table::find_name204,5181
+       void    del(table::del205,5218
+extern bit Nold;210,5255
+extern bit vec_const,211,5272
+extern bit vec_const, fct_const;211,5272
+extern void restore(214,5313
+extern void set_scope(215,5336
+extern Plist modified_tn;216,5366
+extern Pbase start_cl(217,5392
+extern void end_cl(218,5434
+extern Pbase end_enum(219,5456
+extern bit new_type;224,5581
+extern Pname cl_obj_vec;225,5602
+extern Pname eobj;226,5627
+#define DEFINED 230,5655
+#define SIMPLIFIED 231,5712
+#define DEF_SEEN 232,5754
+#define IN_ERROR 234,5859
+struct type 236,5881
+       bit     defined;type::defined237,5902
+       char*   signature(type::signature240,6005
+       void    print(type::print242,6043
+       void    dcl_print(type::dcl_print243,6058
+       void    base_print(type::base_print244,6082
+       void    del(type::del245,6102
+       Pname   is_cl_obj(type::is_cl_obj247,6116
+       int     is_ref(type::is_ref248,6158
+       void    dcl(type::dcl249,6173
+       int     tsizeof(type::tsizeof250,6192
+       bit     tconst(type::tconst251,6208
+       TOK     set_const(type::set_const252,6223
+       int     align(type::align253,6244
+       TOK     kind(type::kind254,6258
+       TOK     integral(type::integral255,6278
+       TOK     numeric(type::numeric256,6324
+       TOK     num_ptr(type::num_ptr257,6370
+       bit     vec_type(type::vec_type258,6416
+       bit     check(type::check259,6433
+       Ptype   deref(type::deref260,6457
+       Pptr    addrof(type::addrof261,6473
+struct enumdef 265,6500
+       bit     e_body;enumdef::e_body266,6535
+       short   no_of_enumerators;enumdef::no_of_enumerators267,6548
+       Pname   mem;enumdef::mem268,6574
+               enumdef(enumdef::enumdef269,6586
+       void    print(enumdef::print271,6641
+       void    dcl_print(enumdef::dcl_print272,6656
+       void    dcl(enumdef::dcl273,6680
+       void    simpl(enumdef::simpl274,6706
+struct classdef 278,6732
+       bit     pubbase;classdef::pubbase279,6769
+       bit     c_body;classdef::c_body280,6783
+       TOK     csu;classdef::csu281,6830
+       char    obj_align;classdef::obj_align282,6877
+       char    bit_ass;classdef::bit_ass283,6894
+       char    virt_count;classdef::virt_count284,6943
+       Pname   clbase;classdef::clbase286,7033
+       char*   string;classdef::string287,7063
+       Pname   mem_list;classdef::mem_list288,7099
+       Ptable  memtbl;classdef::memtbl289,7116
+       int     obj_size;classdef::obj_size290,7132
+       int     real_size;classdef::real_size291,7147
+       Plist   friend_list;classdef::friend_list292,7196
+       Pname   pubdef;classdef::pubdef293,7216
+       Plist   tn_list;classdef::tn_list294,7231
+       Pclass  in_class;classdef::in_class295,7289
+       Ptype   this_type;classdef::this_type296,7335
+       Pname*  virt_init;classdef::virt_init297,7353
+       Pname   itor;classdef::itor298,7412
+       Pname   conv;classdef::conv299,7450
+       classdef(classdef::classdef301,7490
+       TOK     is_simple(classdef::is_simple302,7506
+       void    print(classdef::print304,7568
+       void    dcl_print(classdef::dcl_print305,7583
+       void    simpl(classdef::simpl306,7607
+       void    print_members(classdef::print_members308,7623
+       void    dcl(classdef::dcl309,7646
+       bit     has_friend(classdef::has_friend310,7672
+       bit     baseof(classdef::baseof311,7696
+       bit     baseof(classdef::baseof312,7716
+       Pname   has_oper(classdef::has_oper313,7737
+       Pname   has_ctor(classdef::has_ctor314,7759
+       Pname   has_dtor(classdef::has_dtor315,7813
+       Pname   has_itor(classdef::has_itor316,7867
+       Pname   has_ictor(classdef::has_ictor317,7902
+struct basetype 323,7935
+       bit     b_unsigned;basetype::b_unsigned334,8195
+       bit     b_const;basetype::b_const335,8212
+       bit     b_typedef;basetype::b_typedef336,8226
+       bit     b_inline;basetype::b_inline337,8242
+       bit     b_virtual;basetype::b_virtual338,8257
+       bit     b_short;basetype::b_short339,8273
+       bit     b_long;basetype::b_long340,8287
+       char    b_bits;basetype::b_bits341,8300
+       char    b_offset;basetype::b_offset342,8345
+       TOK     b_sto;basetype::b_sto343,8384
+       Pname   b_name;basetype::b_name344,8433
+       Ptable  b_table;basetype::b_table345,8478
+       Pexpr   b_field;basetype::b_field346,8525
+       Pname   b_xname;basetype::b_xname347,8582
+       Ptype   b_fieldtype;basetype::b_fieldtype348,8615
+       basetype(basetype::basetype350,8636
+       Pbase   type_adj(basetype::type_adj352,8660
+       Pbase   base_adj(basetype::base_adj353,8682
+       Pbase   name_adj(basetype::name_adj354,8706
+       Pname   aggr(basetype::aggr355,8730
+       void    normalize(basetype::normalize356,8747
+       Pbase   check(basetype::check358,8779
+       void    dcl_print(basetype::dcl_print359,8800
+       Pbase   arit_conv(basetype::arit_conv360,8819
+struct fct 365,8857
+       TOK     nargs;fct::nargs367,8885
+       TOK     nargs_known;fct::nargs_known368,8897
+       char    f_virtual;fct::f_virtual369,8940
+       char    f_inline;fct::f_inline370,8991
+       Ptype   returns;fct::returns371,9052
+       Pname   argtype;fct::argtype372,9068
+       Ptype   s_returns;fct::s_returns373,9084
+       Pname   f_this;fct::f_this374,9102
+       Pclass  memof;fct::memof375,9117
+       Pblock  body;fct::body376,9158
+       Pname   f_init;fct::f_init377,9172
+       Pexpr   b_init;fct::b_init380,9295
+       Pexpr   f_expr;fct::f_expr383,9389
+       Pexpr   last_expanded;fct::last_expanded384,9441
+       Pname   f_result;fct::f_result385,9463
+       fct(fct::fct387,9517
+       void    argdcl(fct::argdcl389,9543
+       Ptype   normalize(fct::normalize391,9583
+       void    dcl_print(fct::dcl_print392,9608
+       void    dcl(fct::dcl393,9627
+       Pexpr   base_init(fct::base_init394,9645
+       Pexpr   mem_init(fct::mem_init395,9685
+       bit     declared(fct::declared396,9724
+       void    simpl(fct::simpl397,9765
+       Pexpr   expand(fct::expand398,9780
+struct name_list 403,9827
+       Pname   f;name_list::f404,9846
+       Plist   l;name_list::l405,9856
+       name_list(name_list::name_list406,9866
+struct gen 410,9931
+       Plist   fct_list;gen::fct_list411,9964
+       char*   string;gen::string412,9981
+               gen(gen::gen413,9996
+       Pname   add(gen::add414,10010
+       Pname   find(gen::find415,10034
+struct pvtyp 419,10071
+       Ptype typ;pvtyp::typ420,10093
+struct vec 423,10109
+       Pexpr   dim;vec::dim426,10157
+       int     size;vec::size427,10169
+       vec(vec::vec429,10182
+       Ptype   normalize(vec::normalize431,10253
+struct ptr 435,10289
+       Pclass  memof;ptr::memof437,10339
+       bit     rdo;ptr::rdo438,10395
+       ptr(ptr::ptr440,10419
+       Ptype   normalize(ptr::normalize442,10497
+inline Pptr type::addrof(447,10546
+extern bit vrp_equiv;449,10606
+extern Pexpr next_elem(461,10867
+extern void new_list(462,10893
+extern void list_check(463,10922
+extern Pexpr ref_init(464,10967
+extern Pexpr class_init(465,11009
+extern Pexpr check_cond(466,11060
+struct expr 469,11113
+               Ptype   tp;expr::tp481,11414
+               int     syn_class;expr::syn_class482,11426
+               Pexpr   e1;expr::e1485,11456
+               char*   string;expr::string486,11468
+               int     i1;expr::i1487,11484
+               Pexpr   e2;expr::e2490,11507
+               Pexpr   n_initializer;expr::n_initializer491,11519
+               char*   string2;expr::string2492,11542
+               Ptype   tp2;expr::tp2495,11608
+               Pname   fct_name;expr::fct_name496,11621
+               Pexpr   cond;expr::cond497,11639
+               Pname   mem;expr::mem498,11653
+               Ptype   as_type;expr::as_type499,11666
+               Ptable  n_table;expr::n_table500,11683
+               Pin     il;expr::il501,11701
+       expr(expr::expr504,11716
+       ~expr(expr::~expr505,11742
+       void    del(expr::del507,11765
+       void    print(expr::print508,11778
+       Pexpr   typ(expr::typ509,11793
+       int     eval(expr::eval510,11813
+       int     lval(expr::lval511,11826
+       Ptype   fct_call(expr::fct_call512,11842
+       Pexpr   address(expr::address513,11867
+       Pexpr   contents(expr::contents514,11885
+       void    simpl(expr::simpl515,11904
+       Pexpr   expand(expr::expand516,11919
+       bit     not_simple(expr::not_simple517,11936
+       Pexpr   try_to_overload(expr::try_to_overload518,11955
+       Pexpr   docast(expr::docast519,11987
+       Pexpr   dovalue(expr::dovalue520,12010
+       Pexpr   donew(expr::donew521,12034
+       void    simpl_new(expr::simpl_new522,12056
+       void    simpl_delete(expr::simpl_delete523,12075
+struct texpr 527,12108
+       texpr(texpr::texpr528,12149
+struct ival 531,12218
+       ival(ival::ival532,12258
+struct call 535,12308
+       call(call::call536,12338
+       void    simpl(call::simpl538,12404
+       Pexpr   expand(call::expand539,12419
+struct qexpr 543,12453
+       qexpr(qexpr::qexpr544,12500
+struct ref 547,12582
+       ref(ref::ref548,12632
+struct text_expr 551,12697
+       text_expr(text_expr::text_expr552,12731
+struct name 557,12884
+       TOK     n_oper;name::n_oper558,12948
+       TOK     n_sto;name::n_sto559,12987
+       TOK     n_stclass;name::n_stclass560,13038
+       TOK     n_scope;name::n_scope561,13080
+       unsigned char   n_union;name::n_union562,13129
+       bit     n_evaluated;name::n_evaluated563,13173
+       bit     n_xref;name::n_xref564,13221
+       unsigned char   lex_level;name::lex_level565,13261
+       TOK     n_protect;name::n_protect566,13287
+       short   n_addr_taken;name::n_addr_taken567,13337
+       short   n_used;name::n_used568,13358
+       short   n_assigned_to;name::n_assigned_to569,13373
+       Loc     where;name::where570,13395
+       int     n_val;name::n_val571,13407
+       int     n_offset;name::n_offset574,13518
+       Pname   n_list;name::n_list575,13567
+       Pname   n_tbl_list;name::n_tbl_list576,13582
+               Pname   n_qualifier;name::n_qualifier578,13610
+               Ptable  n_realscope;name::n_realscope579,13659
+       name(name::name585,13815
+       ~name(name::~name586,13832
+       Pname   normalize(name::normalize588,13843
+       Pname   tdef(name::tdef589,13881
+       Pname   tname(name::tname590,13896
+       void    hide(name::hide591,13915
+       void    unhide(name::unhide592,13929
+       Pname   dcl(name::dcl594,13981
+       int     no_of_names(name::no_of_names595,14005
+       void    use(name::use596,14025
+       void    assign(name::assign597,14053
+       void    take_addr(name::take_addr598,14069
+       void    check_oper(name::check_oper599,14108
+       void    simpl(name::simpl600,14133
+       void    del(name::del601,14148
+       void    print(name::print602,14161
+       void    dcl_print(name::dcl_print603,14176
+       void    field_align(name::field_align604,14198
+       Pname   dofct(name::dofct605,14219
+extern int friend_in_class;610,14269
+struct stmt 615,14374
+       Pstmt   s;stmt::s617,14479
+       Pstmt   s_list;stmt::s_list618,14489
+       Loc     where;stmt::where619,14504
+               Pname   d;stmt::d621,14525
+               Pexpr   e2;stmt::e2622,14536
+               Pstmt   has_default;stmt::has_default623,14548
+               int     case_value;stmt::case_value624,14569
+               Ptype   ret_tp;stmt::ret_tp625,14587
+               Pexpr   e;stmt::e628,14616
+               bit     own_tbl;stmt::own_tbl629,14627
+               Pstmt   s2;stmt::s2630,14642
+       Ptable  memtbl;stmt::memtbl632,14658
+               Pstmt   for_init;stmt::for_init634,14683
+               Pstmt   else_stmt;stmt::else_stmt635,14701
+               Pstmt   case_list;stmt::case_list636,14720
+               bit     empty;stmt::empty637,14739
+       stmt(stmt::stmt640,14757
+       ~stmt(stmt::~stmt641,14781
+       void    del(stmt::del643,14804
+       void    print(stmt::print644,14817
+       void    dcl(stmt::dcl645,14832
+       void    reached(stmt::reached646,14845
+       Pstmt   simpl(stmt::simpl647,14862
+       Pstmt   expand(stmt::expand648,14878
+       Pstmt   copy(stmt::copy649,14895
+extern char* Neval;654,14934
+extern Pname dcl_temp(655,14954
+extern char* temp(656,14992
+extern Ptable scope;657,15032
+extern Ptable expand_tbl;658,15053
+extern Pname expand_fn;659,15079
+struct estmt 662,15111
+       estmt(estmt::estmt669,15303
+struct ifstmt 672,15379
+       ifstmt(ifstmt::ifstmt676,15484
+struct lstmt 680,15586
+       lstmt(lstmt::lstmt686,15650
+struct forstmt 689,15728
+       forstmt(forstmt::forstmt690,15759
+struct block 694,15880
+       block(block::block695,15919
+       void    dcl(block::dcl697,16001
+       Pstmt   simpl(block::simpl698,16020
+struct pair 703,16060
+       pair(pair::pair704,16096
+struct nlist 708,16173
+       Pname   head;nlist::head709,16188
+       Pname   tail;nlist::tail710,16201
+               nlist(nlist::nlist711,16214
+       void    add(nlist::add712,16230
+       void    add_list(nlist::add_list713,16282
+extern Pname name_unlist(716,16309
+struct slist 718,16344
+       Pstmt   head;slist::head719,16359
+       Pstmt   tail;slist::tail720,16372
+               slist(slist::slist721,16385
+       void    add(slist::add722,16430
+extern Pstmt stmt_unlist(725,16486
+struct elist 727,16521
+       Pexpr   head;elist::head728,16536
+       Pexpr   tail;elist::tail729,16549
+               elist(elist::elist730,16562
+       void    add(elist::add731,16607
+extern Pexpr expr_unlist(734,16659
+extern class dcl_context * cc;737,16707
+struct dcl_context 739,16739
+       Pname   c_this;dcl_context::c_this740,16760
+       Ptype   tot;dcl_context::tot741,16802
+       Pname   not;dcl_context::not742,16840
+       Pclass  cot;dcl_context::cot743,16886
+       Ptable  ftbl;dcl_context::ftbl744,16938
+       Pname   nof;dcl_context::nof745,16985
+       void    stack(dcl_context::stack747,17023
+       void    unstack(dcl_context::unstack748,17064
+#define MAXCONT        751,17095
+extern dcl_context ccvec[ccvec752,17114
+extern void yyerror(755,17157
+extern TOK back;756,17185
+extern char* line_format;760,17217
+extern Plist isf_list;762,17244
+extern Pstmt st_ilist;763,17267
+extern Pstmt st_dlist;764,17290
+extern Ptable sti_tbl;765,17313
+extern Ptable std_tbl;766,17336
+Pexpr try_to_coerce(767,17359
+extern bit can_coerce(768,17409
+extern Ptype np_promote(769,17446
+extern void new_key(770,17505
+extern Pname dcl_list;772,17544
+extern int over_call(773,17567
+extern Pname Nover;774,17603
+extern Pname Ntncheck;775,17623
+extern Pname Ncoerce;776,17646
+extern Nover_coerce;777,17668
+const MIA 779,17690
+struct iline 780,17705
+       Pname   fct_name;iline::fct_name781,17720
+       Pin     i_next;iline::i_next782,17754
+       Ptable  i_table;iline::i_table783,17767
+       Pname   local[iline::local784,17784
+       Pexpr   arg[iline::arg785,17838
+       Ptype   tp[iline::tp786,17887
+extern Pexpr curr_expr;789,17938
+extern Pin curr_icall;790,17962
+#define FUDGE111 791,17985
+extern Pstmt curr_loop;793,18007
+extern Pblock curr_block;794,18031
+extern Pstmt curr_switch;795,18057
+extern bit arg_err_suppress;796,18083
+extern loc last_line;797,18112
+extern no_of_undcl;799,18135
+extern no_of_badcall;800,18155
+extern Pname undcl,801,18177
+extern Pname undcl, badcall;801,18177
+extern int strlen(803,18207
+extern char* strcpy(804,18239
+extern int str_to_int(805,18280
+extern int c_strlen(806,18316
+extern int strcmp(809,18360
+extern Pname vec_new_fct;812,18419
+extern Pname vec_del_fct;813,18445
+extern int Nstd;815,18472
+extern int stcount;817,18555
+extern Pname find_hidden(819,18623
+Pexpr replace_temp(820,18656
+void make_res(821,18689
+Pexpr ptr_init(822,18710
+extern bit fake_sizeof;826,18755
+extern TOK lalex(828,18823
+extern fprintf(830,18856
+#define DB(831,18890
+#define DB(833,18920
+
+cp-src/burton.cpp,103
+::dummy::dummy test::dummy1(1,0
+::dummy::dummy test::dummy2(6,64
+::dummy::dummy test::dummy3(11,143
+
+cp-src/functions.cpp,807
+void Date::setDate 5,148
+void Date::plus 32,939
+void Date::minus 42,1229
+void Date::shift 52,1407
+Date & Date::operator = Date::operator =62,1628
+Date & Date::operator += Date::operator +=69,1789
+Date & Date::operator -= Date::operator -=78,1939
+Date & Date::operator ++ Date::operator ++87,2080
+Date & Date::operator -- Date::operator --96,2216
+int Date::operator - Date::operator -104,2331
+int Date::operator < Date::operator <112,2483
+int Date::operator > Date::operator >116,2557
+int Date::operator == Date::operator ==120,2631
+ostream& operator << operator <<124,2707
+istream& operator >> operator >>133,2943
+bool isLeap 159,3543
+bool isHoliday 163,3629
+void asort(173,3865
+void ReadVacation 186,4064
+void Debug 201,4523
+int WorkingDays(211,4867
+Date StartDay(226,5129
+
+cp-src/MDiagArray2.h,1538
+#define octave_MDiagArray2_h 29,870
+#undef LTGT35,967
+#define LTGT39,1031
+#define LTGT 42,1051
+class MDiagArray2;45,1087
+operator += operator +=48,1145
+operator -= operator -=51,1242
+operator * operator *54,1339
+operator / operator /57,1428
+operator * operator *60,1517
+operator + operator +63,1605
+operator - operator -66,1707
+product 69,1808
+operator - operator -72,1907
+class MDiagArray2 78,2022
+  MDiagArray2 MDiagArray2::MDiagArray282,2077
+  MDiagArray2 MDiagArray2::MDiagArray286,2154
+  MDiagArray2 MDiagArray2::MDiagArray287,2198
+  MDiagArray2 MDiagArray2::MDiagArray288,2254
+  MDiagArray2 MDiagArray2::MDiagArray289,2329
+  MDiagArray2 MDiagArray2::MDiagArray290,2387
+  MDiagArray2 MDiagArray2::MDiagArray291,2450
+  ~MDiagArray2 MDiagArray2::~MDiagArray293,2515
+  MDiagArray2<T>& operator = MDiagArray2::operator =95,2542
+      DiagArray2<T>::operator = MDiagArray2::operator =97,2603
+  operator MArray2<T> MDiagArray2::operator MArray2<T>101,2667
+  operator += MDiagArray2::operator +=116,2966
+  operator -= MDiagArray2::operator -=119,3057
+  friend MDiagArray2<T> operator * MDiagArray2::operator *123,3174
+  friend MDiagArray2<T> operator / MDiagArray2::operator /124,3253
+  friend MDiagArray2<T> operator * MDiagArray2::operator *128,3384
+  operator + MDiagArray2::operator +133,3544
+  operator - MDiagArray2::operator -136,3640
+  friend MDiagArray2<T> operator - MDiagArray2::operator -141,3803
+#undef LTGT144,3874
+#define INSTANTIATE_MDIAGARRAY_FRIENDS(146,3887
+
+cp-src/Pctest.h,816
+#define PCTEST_H24,837
+class TestRecord;42,1118
+    PctestActionValid,::PctestActionValid47,1286
+    PctestActionValidLasthop,::PctestActionValidLasthop49,1370
+    PctestActionFiltered,::PctestActionFiltered51,1481
+    PctestActionAbort  ::PctestActionAbort53,1566
+} PctestActionType;54,1616
+class Pctest 56,1637
+    Pctest(Pctest::Pctest59,1663
+    virtual ~Pctest(Pctest::~Pctest65,1813
+    virtual void TimeSyscall(Pctest::TimeSyscall68,1889
+    virtual char *GeneratePayload(Pctest::GeneratePayload71,1975
+    virtual char *GetTargetName(Pctest::GetTargetName77,2171
+    virtual PctestActionType GetAction(Pctest::GetAction86,2555
+    int initialized;Pctest::initialized93,2698
+    char *targetName;Pctest::targetName94,2743
+    struct timeval syscallTime;Pctest::syscallTime95,2785
+
+cp-src/Range.h,1136
+#define octave_Range_h 24,765
+class istream;30,840
+class ostream;31,855
+class Matrix;32,870
+Range35,891
+  Range Range::Range39,909
+  Range Range::Range42,995
+  Range Range::Range46,1130
+  Range Range::Range50,1248
+  double base Range::base54,1376
+  double limit Range::limit55,1425
+  double inc Range::inc56,1475
+  int nelem Range::nelem57,1523
+  bool all_elements_are_ints Range::all_elements_are_ints59,1571
+  Matrix matrix_value Range::matrix_value61,1615
+  double min Range::min63,1652
+  double max Range::max64,1679
+  void sort Range::sort66,1707
+  void set_base Range::set_base68,1728
+  void set_limit Range::set_limit69,1774
+  void set_inc Range::set_inc70,1821
+  friend ostream& operator << Range::operator <<72,1867
+  friend istream& operator >> Range::operator >>73,1928
+  void print_range Range::print_range75,1984
+  double rng_base;Range::rng_base79,2023
+  double rng_limit;Range::rng_limit80,2042
+  double rng_inc;Range::rng_inc81,2062
+  int rng_nelem;Range::rng_nelem83,2081
+  int nelem_internal Range::nelem_internal85,2099
+extern Range operator - operator -88,2138
+
+cp-src/screen.cpp,228
+unsigned char cursor_x,15,548
+unsigned char cursor_x, cursor_y;15,548
+static union REGS regs;16,582
+void goto_xy(18,607
+void hide_cursor(27,774
+void cursor_position(32,836
+void clear_screen(41,997
+void write_xyc(55,1247
+
+cp-src/screen.hpp,791
+#define __COLORS9,401
+enum COLORS 11,419
+    BLACK,COLORS::BLACK12,433
+    BLUE,COLORS::BLUE13,471
+    GREEN,COLORS::GREEN14,481
+    CYAN,COLORS::CYAN15,492
+    RED,COLORS::RED16,502
+    MAGENTA,COLORS::MAGENTA17,511
+    BROWN,COLORS::BROWN18,524
+    LIGHTGRAY,COLORS::LIGHTGRAY19,535
+    DARKGRAY,COLORS::DARKGRAY20,550
+    LIGHTBLUE,COLORS::LIGHTBLUE21,589
+    LIGHTGREEN,COLORS::LIGHTGREEN22,604
+    LIGHTCYAN,COLORS::LIGHTCYAN23,620
+    LIGHTRED,COLORS::LIGHTRED24,635
+    LIGHTMAGENTA,COLORS::LIGHTMAGENTA25,649
+    YELLOW,COLORS::YELLOW26,667
+    WHITECOLORS::WHITE27,679
+#define SCREEN_FP(31,700
+#define SCREEN_START 33,795
+void goto_xy(35,835
+void hide_cursor(36,883
+void cursor_position(37,907
+void clear_screen(38,935
+void write_xyc(39,960
+
+cp-src/conway.cpp,270
+#define max(12,357
+#define min(13,393
+const int num_rows 15,430
+const int num_columns 16,470
+class site *field_of_play[field_of_play18,499
+int site::total_surrounding(20,550
+void display(37,958
+void glider(50,1239
+void traffic_light(59,1478
+void main(67,1633
+
+cp-src/conway.hpp,483
+class site:site5,235
+    char x,site::x7,269
+    char x, y,site::y7,269
+    char x, y, alive,site::alive7,269
+    char x, y, alive, next_alive;site::next_alive7,269
+    int total_surrounding(site::total_surrounding8,303
+    site(site::site10,344
+    ~site(site::~site11,397
+    char read(site::read12,410
+    void set(site::set13,444
+    void clear(site::clear14,478
+    void compute_next_state(site::compute_next_state15,514
+    void step(site::step22,717
+
+cp-src/clheir.cpp,307
+const int max_num_generic_objects 9,298
+generic_object * object_registry[object_registry10,340
+void init_registry(12,400
+void step_everybody(19,527
+void discrete_location::clear_neighbors(31,852
+generic_object::generic_object(36,981
+generic_object::~generic_object(48,1255
+void agent::move(53,1353
+
+cp-src/clheir.hpp,1600
+extern void init_registry(10,452
+extern void step_everybody(11,485
+class generic_object13,520
+    int where_in_registry;generic_object::where_in_registry15,547
+    generic_object(generic_object::generic_object17,582
+    ~generic_object(generic_object::~generic_object19,724
+    virtual void compute_next_state(generic_object::compute_next_state21,842
+    virtual void step(generic_object::step22,888
+const int max_num_directions 31,1219
+class location:location33,1289
+    location(location::location43,1642
+    ~location(location::~location44,1661
+class irregular_location:irregular_location47,1686
+    double x,irregular_location::x49,1734
+    double x, y,irregular_location::y49,1734
+    double x, y, z;irregular_location::z49,1734
+    irregular_location(irregular_location::irregular_location51,1762
+    ~irregular_location(irregular_location::~irregular_location53,1854
+class discrete_location:discrete_location56,1889
+    int x,discrete_location::x58,1936
+    int x, y,discrete_location::y58,1936
+    int x, y, z;discrete_location::z58,1936
+    class location *neighbors[discrete_location::neighbors59,1953
+    void clear_neighbors(discrete_location::clear_neighbors60,2004
+    discrete_location(discrete_location::discrete_location62,2044
+    ~discrete_location(discrete_location::~discrete_location65,2154
+    void assign_neighbor(discrete_location::assign_neighbor66,2184
+class agent:agent75,2508
+    location *where;agent::where77,2549
+    agent(agent::agent79,2578
+    ~agent(agent::~agent80,2591
+    void move(agent::move81,2605
+
+cp-src/fail.C,438
+struct A 7,263
+          struct B A::B8,274
+                  struct C A::B::C9,289
+                          int x;A::B::C::x10,305
+                          C(A::B::C::C11,318
+                          operator int(A::B::C::operator int12,342
+                  typedef C T;A::B::T14,389
+          typedef B T2;A::T216,414
+class String;20,437
+class A 23,453
+       class B A::B24,463
+               class C A::B::C25,474
+               int f(A::B::f26,488
+int A::B::f(31,521
+main(37,571
+       class D 41,622
+               D(D::D43,659
+               int x;D::x44,694
+
+el-src/TAGTEST.EL,148
+(foo::defmumble bletch 1,0
+(defalias 'pending-delete-mode pending-delete-mode5,102
+(defalias (quote explicitly-quoted-pending-delete-mode)8,175
+
+el-src/emacs/lisp/progmodes/etags.el,5188
+(defvar tags-file-name 34,1034
+(defgroup etags 43,1498
+(defcustom tags-case-fold-search 47,1566
+(defcustom tags-table-list 59,2051
+(defcustom tags-compression-info-list69,2449
+(defcustom tags-add-tables 88,3231
+(defcustom tags-revert-without-query 98,3627
+(defvar tags-table-computed-list 103,3778
+(defvar tags-table-computed-list-for 112,4262
+(defvar tags-table-list-pointer 117,4510
+(defvar tags-table-list-started-at 121,4701
+(defvar tags-table-set-list 124,4821
+(defcustom find-tag-hook 129,5000
+(defcustom find-tag-default-function 137,5263
+(define-obsolete-variable-alias 
'find-tag-marker-ring-lengthfind-tag-marker-ring-length145,5602
+(defcustom tags-tag-face 148,5699
+(defcustom tags-apropos-verbose 154,5834
+(defcustom tags-apropos-additional-actions 160,5998
+(defvaralias 'find-tag-marker-ring find-tag-marker-ring183,6917
+(defvar default-tags-table-function 189,7097
+(defvar tags-location-ring 194,7323
+(defvar tags-table-files 201,7599
+(defvar tags-completion-table 206,7766
+(defvar tags-included-tables 209,7858
+(defvar next-file-list 212,7953
+(defvar tags-table-format-functions 217,8059
+(defvar file-of-tag-function 224,8440
+(defvar tags-table-files-function 228,8634
+(defvar tags-completion-table-function 230,8745
+(defvar snarf-tag-function 232,8840
+(defvar goto-tag-location-function 236,9049
+(defvar find-tag-regexp-search-function 239,9222
+(defvar find-tag-regexp-tag-order 241,9343
+(defvar find-tag-regexp-next-line-after-failure-p 243,9452
+(defvar find-tag-search-function 245,9572
+(defvar find-tag-tag-order 247,9679
+(defvar find-tag-next-line-after-failure-p 249,9774
+(defvar list-tags-function 251,9880
+(defvar tags-apropos-function 253,9968
+(defvar tags-included-tables-function 255,10062
+(defvar verify-tags-table-function 257,10181
+(defun initialize-new-tags-table 260,10292
+(defun tags-table-mode 276,10980
+(defun visit-tags-table 285,11245
+(defun tags-table-check-computed-list 321,12783
+(defun tags-table-extend-computed-list 360,14654
+(defun tags-expand-table-name 400,16367
+(defun tags-table-list-member 409,16710
+(defun tags-verify-table 421,17182
+(defun tags-table-including 470,19302
+(defun tags-next-table 522,21346
+(defun visit-tags-table-buffer 543,22203
+(defun tags-reset-tags-tables 712,28513
+(defun file-of-tag 731,29170
+(defun tags-table-files 740,29519
+(defun tags-included-tables 749,29869
+(defun tags-completion-table 755,30115
+(defun tags-lazy-completion-table 783,31309
+(defun tags-completion-at-point-function 799,31944
+(defun find-tag-tag 818,32694
+(defvar last-tag 837,33367
+(defun find-tag-interactive 840,33426
+(defvar find-tag-history 852,33841
+(defvar etags-case-fold-search)855,33906
+(defvar etags-syntax-table)856,33938
+(defvar local-find-tag-hook)857,33966
+(defun find-tag-noselect 860,34011
+(defun find-tag 932,37125
+(defun find-tag-other-window 959,38341
+(defun find-tag-other-frame 1000,40269
+(defun find-tag-regexp 1025,41443
+(defalias 'pop-tag-mark pop-tag-mark1049,42605
+(defvar tag-lines-already-matched 1052,42656
+(defun find-tag-in-order 1055,42763
+(defun tag-find-file-of-tag-noselect 1167,47109
+(defun tag-find-file-of-tag 1200,48955
+(defun etags-recognize-tags-table 1208,49181
+(defun etags-verify-tags-table 1241,50812
+(defun etags-file-of-tag 1246,51010
+(defun etags-tags-completion-table 1256,51345
+(defun etags-snarf-tag 1286,52551
+(defun etags-goto-tag-location 1324,54120
+(defun etags-list-tags 1388,56563
+(defmacro tags-with-face 1423,57838
+(defun etags-tags-apropos-additional 1431,58171
+(defun etags-tags-apropos 1465,59408
+(defun etags-tags-table-files 1527,61617
+(defun etags-tags-included-tables 1542,62053
+(defun tags-recognize-empty-tags-table 1559,62593
+(defun tag-exact-file-name-match-p 1587,63739
+(defun tag-file-name-match-p 1596,64132
+(defun tag-exact-match-p 1609,64688
+(defun tag-implicit-name-match-p 1620,65256
+(defun tag-symbol-match-p 1633,65856
+(defun tag-word-match-p 1643,66292
+(defun tag-partial-file-name-match-p 1652,66690
+(defun tag-any-match-p 1662,67134
+(defun tag-re-match-p 1667,67318
+(defcustom tags-loop-revert-buffers 1675,67567
+(defun next-file 1685,67976
+(defvar tags-loop-operate 1760,70890
+(defvar tags-loop-scan1763,70984
+(defun tags-loop-eval 1771,71314
+(defun tags-loop-continue 1782,71643
+(defun tags-search 1850,73949
+(defun tags-query-replace 1871,74775
+(defun tags-complete-tags-table-file 1896,75999
+(defun list-tags 1906,76378
+(defun tags-apropos 1934,77331
+(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78157
+(defun select-tags-table 1964,78396
+(defvar select-tags-table-mode-map 2019,80523
+(define-derived-mode select-tags-table-mode 2030,80906
+(defun select-tags-table-select 2034,81090
+(defun select-tags-table-quit 2043,81456
+(defun complete-tag 2049,81611
+(defconst etags--xref-limit 2074,82552
+(defvar etags-xref-find-definitions-tag-order 2076,82587
+(defun etags-xref-find 2082,82877
+(defun etags--xref-find-definitions 2096,83406
+(defclass xref-etags-location 2129,85121
+(defun xref-make-etags-location 2135,85344
+(cl-defmethod xref-location-marker 2139,85499
+(cl-defmethod xref-location-line 2146,85743
+
+erl-src/gs_dialog.erl,98
+-define(VERSION2,32
+behaviour_info(51,2177
+show(124,5458
+dialog_loop(219,9529
+test(252,10806
+
+erl-src/lines.erl,386
+-define(BREAK66,2377
+-define(dbg68,2437
+new(73,2565
+count(80,2686
+nth(87,2815
+append(104,3301
+replace(119,3816
+insert(138,4559
+insert_after(165,5501
+delete(192,6456
+convert_to_list(215,7110
+convert_from_list(220,7259
+replace_nth(229,7518
+insert_nth(234,7618
+insert_after_nth(239,7711
+delete_nth(244,7828
+split_at(252,8027
+balance_left(267,8451
+balance_right(282,8865
+
+erl-src/lists.erl,593
+member(21,663
+append(30,790
+reverse(48,1099
+nth(59,1310
+nthtail(64,1382
+prefix(73,1546
+suffix(83,1707
+last(92,1882
+seq(101,2058
+sum(109,2265
+duplicate(116,2432
+min(124,2628
+max(132,2837
+sublist(141,3083
+delete(152,3329
+sort(161,3483
+split_and_sort(165,3559
+merge(175,3811
+concat(190,4219
+thing_to_list(195,4300
+flatten(204,4606
+flat_length(222,5003
+keymember(239,5451
+keysearch(246,5609
+keydelete(253,5770
+keyreplace(260,5923
+keysort(266,6113
+split_and_keysort(270,6229
+keymerge(277,6504
+keymap(288,6851
+map(311,7829
+foldl(315,7919
+foldr(320,8037
+zf(325,8155
+
+f-src/entry.for,172
+      LOGICAL FUNCTION PRTPKG 3,75
+       ENTRY  SETPRT 194,3866
+       ENTRY  MSGSEL 395,8478
+     & intensity1(577,12231
+       character*(*) function foo(579,12307
+
+f-src/entry.strange_suffix,172
+      LOGICAL FUNCTION PRTPKG 3,75
+       ENTRY  SETPRT 194,3866
+       ENTRY  MSGSEL 395,8478
+     & intensity1(577,12231
+       character*(*) function foo(579,12307
+
+f-src/entry.strange,103
+       ENTRY  MSGSEL 193,4382
+     & intensity1(375,8135
+       character*(*) function foo(377,8211
+
+forth-src/test-forth.fth,408
+: a-forth-word 20,301
+99 constant a-forth-constant!22,343
+55 value a-forth-value?23,373
+create :a-forth-dictionary-entry24,397
+defer #a-defer-word27,460
+: (another-forth-word)(another-forth-word29,481
+   9   field   >field136,582
+   5   field   >field237,605
+constant (a-forth-constant(a-forth-constant38,628
+2000 buffer: #some-storage41,657
+code assemby-code-word 43,685
+: a-forth-word 50,870
+
+html-src/softwarelibero.html,198
+Cos'� il software libero?4,38
+Licenze d'uso di un programmalicenze65,2474
+Sfatiamo alcuni miti138,6064
+Il movimento open sourceoss191,7968
+Impatto pratico del software liberoimpatto231,9986
+
+html-src/index.shtml,104
+&nbsp;8,281
+In evidenza15,446
+Comunicati e iniziative32,974
+Ultime notizie dall'associazione63,2027
+
+html-src/algrthms.html,467
+Tutorial on Convolutional Coding with Viterbi Decoding--Description of the 
Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and 
Quantizing Algorithms7,276
+Descriptionalgorithms10,477
+Generating the Datagenalgorithm48,1953
+Convolutionallyconalgorithm55,2463
+Nextstatetable262,11331
+Outputoutputtable350,13571
+Mapping the Channel Symbolsmapping433,15786
+Adding Noise to theaddnoise439,16174
+Quantizing the Receivedquantizing469,18637
+
+html-src/software.html,438
+Francesco Potort� Software Page9,280
+Software that I wrote for supporting my research activitysimulation36,1400
+MTGmtg41,1484
+Fracasfracas65,2626
+GaliLEOgalileo101,4234
+Leasqrleasqr114,4679
+Free software that I wrote for the GNU project or for my personal or 
workgnu142,6067
+Etagsetags148,6182
+checkiso161,6731
+cgrep178,7549
+debian-bug.eldebian-bug190,7981
+tcpdump205,8566
+Links to interesting softwarelinks216,8893
+
+java-src/AWTEMul.java,4481
+public class AWTEventMulticaster 63,2111
+    protected EventListener a,AWTEventMulticaster.a69,2356
+    protected EventListener a, b;AWTEventMulticaster.b69,2356
+    protected 
AWTEventMulticaster(AWTEventMulticaster.AWTEventMulticaster77,2555
+    protected EventListener remove(AWTEventMulticaster.remove86,2820
+    public void componentResized(AWTEventMulticaster.componentResized102,3294
+    public void componentMoved(AWTEventMulticaster.componentMoved112,3626
+    public void componentShown(AWTEventMulticaster.componentShown122,3952
+    public void componentHidden(AWTEventMulticaster.componentHidden132,4280
+    public void componentAdded(AWTEventMulticaster.componentAdded142,4619
+    public void componentRemoved(AWTEventMulticaster.componentRemoved152,4959
+    public void focusGained(AWTEventMulticaster.focusGained162,5281
+    public void focusLost(AWTEventMulticaster.focusLost172,5572
+    public void keyTyped(AWTEventMulticaster.keyTyped182,5853
+    public void keyPressed(AWTEventMulticaster.keyPressed192,6129
+    public void keyReleased(AWTEventMulticaster.keyReleased202,6413
+    public void mouseClicked(AWTEventMulticaster.mouseClicked212,6704
+    public void mousePressed(AWTEventMulticaster.mousePressed222,7004
+    public void mouseReleased(AWTEventMulticaster.mouseReleased232,7306
+    public void mouseEntered(AWTEventMulticaster.mouseEntered242,7609
+    public void mouseExited(AWTEventMulticaster.mouseExited252,7907
+    public void mouseDragged(AWTEventMulticaster.mouseDragged262,8204
+    public void mouseMoved(AWTEventMulticaster.mouseMoved272,8512
+    public void windowOpened(AWTEventMulticaster.windowOpened282,8819
+    public void windowClosing(AWTEventMulticaster.windowClosing292,9125
+    public void windowClosed(AWTEventMulticaster.windowClosed302,9432
+    public void windowIconified(AWTEventMulticaster.windowIconified312,9742
+    public void 
windowDeiconified(AWTEventMulticaster.windowDeiconified322,10064
+    public void windowActivated(AWTEventMulticaster.windowActivated332,10389
+    public void 
windowDeactivated(AWTEventMulticaster.windowDeactivated342,10712
+    public void actionPerformed(AWTEventMulticaster.actionPerformed352,11037
+    public void 
itemStateChanged(AWTEventMulticaster.itemStateChanged362,11356
+    public void 
adjustmentValueChanged(AWTEventMulticaster.adjustmentValueChanged372,11690
+    public void 
textValueChanged(AWTEventMulticaster.textValueChanged376,11874
+    public static ComponentListener add(AWTEventMulticaster.add387,12225
+    public static ContainerListener add(AWTEventMulticaster.add397,12571
+    public static FocusListener add(AWTEventMulticaster.add407,12901
+    public static KeyListener add(AWTEventMulticaster.add417,13207
+    public static MouseListener add(AWTEventMulticaster.add427,13513
+    public static MouseMotionListener add(AWTEventMulticaster.add437,13855
+    public static WindowListener add(AWTEventMulticaster.add447,14197
+    public static ActionListener add(AWTEventMulticaster.add457,14519
+    public static ItemListener add(AWTEventMulticaster.add467,14833
+    public static AdjustmentListener add(AWTEventMulticaster.add477,15163
+    public static TextListener add(AWTEventMulticaster.add480,15310
+    public static ComponentListener 
remove(AWTEventMulticaster.remove490,15664
+    public static ContainerListener 
remove(AWTEventMulticaster.remove500,16044
+    public static FocusListener remove(AWTEventMulticaster.remove510,16408
+    public static KeyListener remove(AWTEventMulticaster.remove520,16748
+    public static MouseListener remove(AWTEventMulticaster.remove530,17088
+    public static MouseMotionListener 
remove(AWTEventMulticaster.remove540,17465
+    public static WindowListener remove(AWTEventMulticaster.remove550,17841
+    public static ActionListener remove(AWTEventMulticaster.remove560,18197
+    public static ItemListener remove(AWTEventMulticaster.remove570,18545
+    public static AdjustmentListener 
remove(AWTEventMulticaster.remove580,18909
+    public static TextListener remove(AWTEventMulticaster.remove583,19062
+    protected static EventListener 
addInternal(AWTEventMulticaster.addInternal597,19608
+    protected static EventListener 
removeInternal(AWTEventMulticaster.removeInternal614,20244
+    protected void saveInternal(AWTEventMulticaster.saveInternal628,20582
+    static void save(AWTEventMulticaster.save646,21131
+
+java-src/KeyEve.java,8202
+public class KeyEvent 36,1075
+    public static final int KEY_FIRST KeyEvent.KEY_FIRST41,1201
+    public static final int KEY_LAST KeyEvent.KEY_LAST46,1328
+    public static final int KEY_TYPED KeyEvent.KEY_TYPED52,1513
+    public static final int KEY_PRESSED KeyEvent.KEY_PRESSED57,1616
+    public static final int KEY_RELEASED KeyEvent.KEY_RELEASED62,1744
+    public static final int VK_ENTER KeyEvent.VK_ENTER85,2950
+    public static final int VK_BACK_SPACE KeyEvent.VK_BACK_SPACE86,3004
+    public static final int VK_TAB KeyEvent.VK_TAB87,3058
+    public static final int VK_CANCEL KeyEvent.VK_CANCEL88,3112
+    public static final int VK_CLEAR KeyEvent.VK_CLEAR89,3166
+    public static final int VK_SHIFT KeyEvent.VK_SHIFT90,3220
+    public static final int VK_CONTROL KeyEvent.VK_CONTROL91,3274
+    public static final int VK_ALT KeyEvent.VK_ALT92,3328
+    public static final int VK_PAUSE KeyEvent.VK_PAUSE93,3382
+    public static final int VK_CAPS_LOCK KeyEvent.VK_CAPS_LOCK94,3436
+    public static final int VK_ESCAPE KeyEvent.VK_ESCAPE95,3490
+    public static final int VK_SPACE KeyEvent.VK_SPACE96,3544
+    public static final int VK_PAGE_UP KeyEvent.VK_PAGE_UP97,3598
+    public static final int VK_PAGE_DOWN KeyEvent.VK_PAGE_DOWN98,3652
+    public static final int VK_END KeyEvent.VK_END99,3706
+    public static final int VK_HOME KeyEvent.VK_HOME100,3760
+    public static final int VK_LEFT KeyEvent.VK_LEFT101,3814
+    public static final int VK_UP KeyEvent.VK_UP102,3868
+    public static final int VK_RIGHT KeyEvent.VK_RIGHT103,3922
+    public static final int VK_DOWN KeyEvent.VK_DOWN104,3976
+    public static final int VK_COMMA KeyEvent.VK_COMMA105,4030
+    public static final int VK_PERIOD KeyEvent.VK_PERIOD106,4084
+    public static final int VK_SLASH KeyEvent.VK_SLASH107,4138
+    public static final int VK_0 KeyEvent.VK_0110,4268
+    public static final int VK_1 KeyEvent.VK_1111,4322
+    public static final int VK_2 KeyEvent.VK_2112,4376
+    public static final int VK_3 KeyEvent.VK_3113,4430
+    public static final int VK_4 KeyEvent.VK_4114,4484
+    public static final int VK_5 KeyEvent.VK_5115,4538
+    public static final int VK_6 KeyEvent.VK_6116,4592
+    public static final int VK_7 KeyEvent.VK_7117,4646
+    public static final int VK_8 KeyEvent.VK_8118,4700
+    public static final int VK_9 KeyEvent.VK_9119,4754
+    public static final int VK_SEMICOLON KeyEvent.VK_SEMICOLON121,4809
+    public static final int VK_EQUALS KeyEvent.VK_EQUALS122,4863
+    public static final int VK_A KeyEvent.VK_A125,4993
+    public static final int VK_B KeyEvent.VK_B126,5047
+    public static final int VK_C KeyEvent.VK_C127,5101
+    public static final int VK_D KeyEvent.VK_D128,5155
+    public static final int VK_E KeyEvent.VK_E129,5209
+    public static final int VK_F KeyEvent.VK_F130,5263
+    public static final int VK_G KeyEvent.VK_G131,5317
+    public static final int VK_H KeyEvent.VK_H132,5371
+    public static final int VK_I KeyEvent.VK_I133,5425
+    public static final int VK_J KeyEvent.VK_J134,5479
+    public static final int VK_K KeyEvent.VK_K135,5533
+    public static final int VK_L KeyEvent.VK_L136,5587
+    public static final int VK_M KeyEvent.VK_M137,5641
+    public static final int VK_N KeyEvent.VK_N138,5695
+    public static final int VK_O KeyEvent.VK_O139,5749
+    public static final int VK_P KeyEvent.VK_P140,5803
+    public static final int VK_Q KeyEvent.VK_Q141,5857
+    public static final int VK_R KeyEvent.VK_R142,5911
+    public static final int VK_S KeyEvent.VK_S143,5965
+    public static final int VK_T KeyEvent.VK_T144,6019
+    public static final int VK_U KeyEvent.VK_U145,6073
+    public static final int VK_V KeyEvent.VK_V146,6127
+    public static final int VK_W KeyEvent.VK_W147,6181
+    public static final int VK_X KeyEvent.VK_X148,6235
+    public static final int VK_Y KeyEvent.VK_Y149,6289
+    public static final int VK_Z KeyEvent.VK_Z150,6343
+    public static final int VK_OPEN_BRACKET KeyEvent.VK_OPEN_BRACKET152,6398
+    public static final int VK_BACK_SLASH KeyEvent.VK_BACK_SLASH153,6452
+    public static final int VK_CLOSE_BRACKET 
KeyEvent.VK_CLOSE_BRACKET154,6506
+    public static final int VK_NUMPAD0 KeyEvent.VK_NUMPAD0156,6561
+    public static final int VK_NUMPAD1 KeyEvent.VK_NUMPAD1157,6615
+    public static final int VK_NUMPAD2 KeyEvent.VK_NUMPAD2158,6669
+    public static final int VK_NUMPAD3 KeyEvent.VK_NUMPAD3159,6723
+    public static final int VK_NUMPAD4 KeyEvent.VK_NUMPAD4160,6777
+    public static final int VK_NUMPAD5 KeyEvent.VK_NUMPAD5161,6831
+    public static final int VK_NUMPAD6 KeyEvent.VK_NUMPAD6162,6885
+    public static final int VK_NUMPAD7 KeyEvent.VK_NUMPAD7163,6939
+    public static final int VK_NUMPAD8 KeyEvent.VK_NUMPAD8164,6993
+    public static final int VK_NUMPAD9 KeyEvent.VK_NUMPAD9165,7047
+    public static final int VK_MULTIPLY KeyEvent.VK_MULTIPLY166,7101
+    public static final int VK_ADD KeyEvent.VK_ADD167,7155
+    public static final int VK_SEPARATER KeyEvent.VK_SEPARATER168,7209
+    public static final int VK_SUBTRACT KeyEvent.VK_SUBTRACT169,7263
+    public static final int VK_DECIMAL KeyEvent.VK_DECIMAL170,7317
+    public static final int VK_DIVIDE KeyEvent.VK_DIVIDE171,7371
+    public static final int VK_F1 KeyEvent.VK_F1172,7425
+    public static final int VK_F2 KeyEvent.VK_F2173,7479
+    public static final int VK_F3 KeyEvent.VK_F3174,7533
+    public static final int VK_F4 KeyEvent.VK_F4175,7587
+    public static final int VK_F5 KeyEvent.VK_F5176,7641
+    public static final int VK_F6 KeyEvent.VK_F6177,7695
+    public static final int VK_F7 KeyEvent.VK_F7178,7749
+    public static final int VK_F8 KeyEvent.VK_F8179,7803
+    public static final int VK_F9 KeyEvent.VK_F9180,7857
+    public static final int VK_F10 KeyEvent.VK_F10181,7911
+    public static final int VK_F11 KeyEvent.VK_F11182,7965
+    public static final int VK_F12 KeyEvent.VK_F12183,8019
+    public static final int VK_DELETE KeyEvent.VK_DELETE184,8073
+    public static final int VK_NUM_LOCK KeyEvent.VK_NUM_LOCK185,8143
+    public static final int VK_SCROLL_LOCK KeyEvent.VK_SCROLL_LOCK186,8197
+    public static final int VK_PRINTSCREEN KeyEvent.VK_PRINTSCREEN188,8252
+    public static final int VK_INSERT KeyEvent.VK_INSERT189,8306
+    public static final int VK_HELP KeyEvent.VK_HELP190,8360
+    public static final int VK_META KeyEvent.VK_META191,8414
+    public static final int VK_BACK_QUOTE KeyEvent.VK_BACK_QUOTE193,8469
+    public static final int VK_QUOTE KeyEvent.VK_QUOTE194,8523
+    public static final int VK_FINAL KeyEvent.VK_FINAL197,8608
+    public static final int VK_CONVERT KeyEvent.VK_CONVERT198,8662
+    public static final int VK_NONCONVERT KeyEvent.VK_NONCONVERT199,8716
+    public static final int VK_ACCEPT KeyEvent.VK_ACCEPT200,8770
+    public static final int VK_MODECHANGE KeyEvent.VK_MODECHANGE201,8824
+    public static final int VK_KANA KeyEvent.VK_KANA202,8878
+    public static final int VK_KANJI KeyEvent.VK_KANJI203,8932
+    public static final int VK_UNDEFINED KeyEvent.VK_UNDEFINED208,9062
+    public static final char CHAR_UNDEFINED KeyEvent.CHAR_UNDEFINED214,9259
+    int  keyCode;KeyEvent.keyCode216,9313
+    char keyChar;KeyEvent.keyChar217,9331
+     private static final long serialVersionUID 
KeyEvent.serialVersionUID222,9398
+    public KeyEvent(KeyEvent.KeyEvent234,9912
+    public KeyEvent(KeyEvent.KeyEvent252,10510
+    public int getKeyCode(KeyEvent.getKeyCode261,10836
+    public void setKeyCode(KeyEvent.setKeyCode265,10897
+    public void setKeyChar(KeyEvent.setKeyChar269,10978
+    public void setModifiers(KeyEvent.setModifiers273,11060
+    public char getKeyChar(KeyEvent.getKeyChar282,11331
+    public static String getKeyText(KeyEvent.getKeyText290,11561
+    public static String 
getKeyModifiersText(KeyEvent.getKeyModifiersText377,16662
+    public boolean isActionKey(KeyEvent.isActionKey403,17618
+    public String paramString(KeyEvent.paramString407,17704
+
+java-src/SMan.java,5665
+class SecurityManager 80,3387
+    protected boolean inCheck;SecurityManager.inCheck87,3576
+    private boolean initialized SecurityManager.initialized90,3678
+    public boolean getInCheck(SecurityManager.getInCheck101,4075
+    protected SecurityManager(SecurityManager.SecurityManager114,4497
+    protected native Class[] 
getClassContext(SecurityManager.getClassContext130,5038
+    protected native ClassLoader 
currentClassLoader(SecurityManager.currentClassLoader142,5529
+    protected Class 
currentLoadedClass(SecurityManager.currentLoadedClass149,5707
+    protected native int classDepth(SecurityManager.classDepth162,6167
+    protected native int 
classLoaderDepth(SecurityManager.classLoaderDepth174,6668
+    protected boolean inClass(SecurityManager.inClass184,7034
+    protected boolean inClassLoader(SecurityManager.inClassLoader196,7372
+    public Object 
getSecurityContext(SecurityManager.getSecurityContext221,8485
+    public void 
checkCreateClassLoader(SecurityManager.checkCreateClassLoader238,9069
+    public void checkAccess(SecurityManager.checkAccess268,10298
+    public void checkAccess(SecurityManager.checkAccess298,11632
+    public void checkExit(SecurityManager.checkExit323,12649
+    public void checkExec(SecurityManager.checkExec349,13734
+    public void checkLink(SecurityManager.checkLink375,14813
+    public void checkRead(SecurityManager.checkRead394,15485
+    public void checkRead(SecurityManager.checkRead412,16111
+    public void checkRead(SecurityManager.checkRead434,17017
+    public void checkWrite(SecurityManager.checkWrite453,17706
+    public void checkWrite(SecurityManager.checkWrite471,18337
+    public void checkDelete(SecurityManager.checkDelete493,19165
+    public void checkConnect(SecurityManager.checkConnect517,20119
+    public void checkConnect(SecurityManager.checkConnect543,21254
+    public void checkListen(SecurityManager.checkListen561,21910
+    public void checkAccept(SecurityManager.checkAccept585,22887
+    public void checkMulticast(SecurityManager.checkMulticast597,23272
+    public void checkMulticast(SecurityManager.checkMulticast610,23732
+    public void 
checkPropertiesAccess(SecurityManager.checkPropertiesAccess632,24609
+    public void 
checkPropertyAccess(SecurityManager.checkPropertyAccess654,25449
+    public boolean 
checkTopLevelWindow(SecurityManager.checkTopLevelWindow680,26580
+    public void 
checkPrintJobAccess(SecurityManager.checkPrintJobAccess689,26763
+    public void 
checkSystemClipboardAccess(SecurityManager.checkSystemClipboardAccess698,26958
+    public void 
checkAwtEventQueueAccess(SecurityManager.checkAwtEventQueueAccess707,27159
+    public void 
checkPackageAccess(SecurityManager.checkPackageAccess729,27966
+    public void 
checkPackageDefinition(SecurityManager.checkPackageDefinition751,28803
+    public void checkSetFactory(SecurityManager.checkSetFactory775,29929
+    public void checkMemberAccess(SecurityManager.checkMemberAccess786,30209
+    public void 
checkSecurityAccess(SecurityManager.checkSecurityAccess796,30430
+    private native Class 
currentLoadedClass0(SecurityManager.currentLoadedClass0800,30522
+    public ThreadGroup getThreadGroup(SecurityManager.getThreadGroup811,30923
+class NullSecurityManager 817,31025
+    public void 
checkCreateClassLoader(NullSecurityManager.checkCreateClassLoader818,31077
+    public void checkAccess(NullSecurityManager.checkAccess819,31123
+    public void checkAccess(NullSecurityManager.checkAccess820,31165
+    public void checkExit(NullSecurityManager.checkExit821,31212
+    public void checkExec(NullSecurityManager.checkExec822,31254
+    public void checkLink(NullSecurityManager.checkLink823,31296
+    public void checkRead(NullSecurityManager.checkRead824,31338
+    public void checkRead(NullSecurityManager.checkRead825,31387
+    public void checkRead(NullSecurityManager.checkRead826,31430
+    public void checkWrite(NullSecurityManager.checkWrite827,31489
+    public void checkWrite(NullSecurityManager.checkWrite828,31539
+    public void checkDelete(NullSecurityManager.checkDelete829,31583
+    public void checkConnect(NullSecurityManager.checkConnect830,31628
+    public void checkConnect(NullSecurityManager.checkConnect831,31684
+    public void checkListen(NullSecurityManager.checkListen832,31756
+    public void checkAccept(NullSecurityManager.checkAccept833,31798
+    public void checkMulticast(NullSecurityManager.checkMulticast834,31853
+    public void checkMulticast(NullSecurityManager.checkMulticast835,31907
+    public void 
checkPropertiesAccess(NullSecurityManager.checkPropertiesAccess836,31971
+    public void 
checkPropertyAccess(NullSecurityManager.checkPropertyAccess837,32015
+    public void 
checkPropertyAccess(NullSecurityManager.checkPropertyAccess838,32067
+    public boolean 
checkTopLevelWindow(NullSecurityManager.checkTopLevelWindow839,32131
+    public void 
checkPrintJobAccess(NullSecurityManager.checkPrintJobAccess840,32202
+    public void 
checkSystemClipboardAccess(NullSecurityManager.checkSystemClipboardAccess841,32244
+    public void 
checkAwtEventQueueAccess(NullSecurityManager.checkAwtEventQueueAccess842,32293
+    public void 
checkPackageAccess(NullSecurityManager.checkPackageAccess843,32340
+    public void 
checkPackageDefinition(NullSecurityManager.checkPackageDefinition844,32391
+    public void checkSetFactory(NullSecurityManager.checkSetFactory845,32446
+    public void 
checkMemberAccess(NullSecurityManager.checkMemberAccess846,32484
+    public void 
checkSecurityAccess(NullSecurityManager.checkSecurityAccess847,32546
+
+java-src/SysCol.java,4762
+public final class SystemColor 37,1402
+    public final static int DESKTOP SystemColor.DESKTOP42,1555
+    public final static int ACTIVE_CAPTION SystemColor.ACTIVE_CAPTION47,1677
+    public final static int ACTIVE_CAPTION_TEXT 
SystemColor.ACTIVE_CAPTION_TEXT52,1800
+    public final static int ACTIVE_CAPTION_BORDER 
SystemColor.ACTIVE_CAPTION_BORDER57,1930
+    public final static int INACTIVE_CAPTION 
SystemColor.INACTIVE_CAPTION62,2068
+    public final static int INACTIVE_CAPTION_TEXT 
SystemColor.INACTIVE_CAPTION_TEXT67,2195
+    public final static int INACTIVE_CAPTION_BORDER 
SystemColor.INACTIVE_CAPTION_BORDER72,2329
+    public final static int WINDOW SystemColor.WINDOW77,2459
+    public final static int WINDOW_BORDER SystemColor.WINDOW_BORDER82,2568
+    public final static int WINDOW_TEXT SystemColor.WINDOW_TEXT87,2682
+    public final static int MENU SystemColor.MENU92,2798
+    public final static int MENU_TEXT SystemColor.MENU_TEXT97,2902
+    public final static int TEXT SystemColor.TEXT102,3017
+    public final static int TEXT_TEXT SystemColor.TEXT_TEXT107,3121
+    public final static int TEXT_HIGHLIGHT SystemColor.TEXT_HIGHLIGHT112,3235
+    public final static int TEXT_HIGHLIGHT_TEXT 
SystemColor.TEXT_HIGHLIGHT_TEXT117,3359
+    public final static int TEXT_INACTIVE_TEXT 
SystemColor.TEXT_INACTIVE_TEXT122,3487
+    public final static int CONTROL SystemColor.CONTROL127,3614
+    public final static int CONTROL_TEXT SystemColor.CONTROL_TEXT132,3724
+    public final static int CONTROL_HIGHLIGHT 
SystemColor.CONTROL_HIGHLIGHT137,3844
+    public final static int CONTROL_LT_HIGHLIGHT 
SystemColor.CONTROL_LT_HIGHLIGHT142,3975
+    public final static int CONTROL_SHADOW SystemColor.CONTROL_SHADOW147,4100
+    public final static int CONTROL_DK_SHADOW 
SystemColor.CONTROL_DK_SHADOW152,4224
+    public final static int SCROLLBAR SystemColor.SCROLLBAR157,4352
+    public final static int INFO SystemColor.INFO162,4467
+    public final static int INFO_TEXT SystemColor.INFO_TEXT167,4571
+    public final static int NUM_COLORS SystemColor.NUM_COLORS172,4681
+    public final static SystemColor desktop SystemColor.desktop177,4790
+    public final static SystemColor activeCaption 
SystemColor.activeCaption182,4945
+    public final static SystemColor activeCaptionText 
SystemColor.activeCaptionText187,5107
+    public final static SystemColor activeCaptionBorder 
SystemColor.activeCaptionBorder192,5280
+    public final static SystemColor inactiveCaption 
SystemColor.inactiveCaption197,5470
+    public final static SystemColor inactiveCaptionText 
SystemColor.inactiveCaptionText202,5645
+    public final static SystemColor inactiveCaptionBorder 
SystemColor.inactiveCaptionBorder207,5830
+    public final static SystemColor window SystemColor.window212,5996
+    public final static SystemColor windowBorder 
SystemColor.windowBorder217,6126
+    public final static SystemColor windowText SystemColor.windowText222,6267
+    public final static SystemColor menu SystemColor.menu227,6408
+    public final static SystemColor menuText SystemColor.menuText232,6530
+    public final static SystemColor text SystemColor.text237,6677
+    public final static SystemColor textText SystemColor.textText242,6809
+    public final static SystemColor textHighlight 
SystemColor.textHighlight247,6957
+    public final static SystemColor textHighlightText 
SystemColor.textHighlightText252,7109
+    public final static SystemColor textInactiveText 
SystemColor.textInactiveText257,7267
+    public final static SystemColor control SystemColor.control262,7431
+    public final static SystemColor controlText 
SystemColor.controlText267,7569
+    public final static SystemColor controlHighlight 
SystemColor.controlHighlight272,7727
+    public final static SystemColor controlLtHighlight 
SystemColor.controlLtHighlight277,7897
+    public final static SystemColor controlShadow 
SystemColor.controlShadow282,8069
+    public final static SystemColor controlDkShadow 
SystemColor.controlDkShadow287,8227
+    public final static SystemColor scrollbar SystemColor.scrollbar292,8384
+    public final static SystemColor info SystemColor.info297,8532
+    public final static SystemColor infoText SystemColor.infoText302,8664
+    private static int[] systemColors SystemColor.systemColors308,8885
+    private static final long serialVersionUID 
SystemColor.serialVersionUID340,10406
+    static SystemColor.static342,10478
+    private static void 
updateSystemColors(SystemColor.updateSystemColors349,10617
+    private SystemColor(SystemColor.SystemColor357,10885
+    public int getRGB(SystemColor.getRGB370,11245
+    public String toString(SystemColor.toString377,11388
+
+java-src/TG.java,2547
+class ThreadGroup 54,2104
+    ThreadGroup parent;ThreadGroup.parent55,2124
+    String name;ThreadGroup.name56,2148
+    int maxPriority;ThreadGroup.maxPriority57,2165
+    boolean destroyed;ThreadGroup.destroyed58,2186
+    boolean daemon;ThreadGroup.daemon59,2209
+    boolean vmAllowSuspension;ThreadGroup.vmAllowSuspension60,2229
+    int nthreads;ThreadGroup.nthreads62,2261
+    Thread threads[ThreadGroup.threads63,2279
+    int ngroups;ThreadGroup.ngroups65,2302
+    ThreadGroup groups[ThreadGroup.groups66,2319
+    private ThreadGroup(ThreadGroup.ThreadGroup72,2495
+    public ThreadGroup(ThreadGroup.ThreadGroup84,2848
+    public ThreadGroup(ThreadGroup.ThreadGroup105,3714
+    public final String getName(ThreadGroup.getName124,4189
+    public final ThreadGroup getParent(ThreadGroup.getParent135,4492
+    public final int getMaxPriority(ThreadGroup.getMaxPriority148,4867
+    public final boolean isDaemon(ThreadGroup.isDaemon161,5305
+    public synchronized boolean isDestroyed(ThreadGroup.isDestroyed170,5470
+    public final void setDaemon(ThreadGroup.setDaemon192,6368
+    public final void setMaxPriority(ThreadGroup.setMaxPriority213,7110
+    public final boolean parentOf(ThreadGroup.parentOf246,8106
+    public final void checkAccess(ThreadGroup.checkAccess268,8834
+    public int activeCount(ThreadGroup.activeCount283,9286
+    public int enumerate(ThreadGroup.enumerate322,10497
+    public int enumerate(ThreadGroup.enumerate344,11481
+    private int enumerate(ThreadGroup.enumerate348,11584
+    public int activeGroupCount(ThreadGroup.activeGroupCount389,12588
+    public int enumerate(ThreadGroup.enumerate425,13727
+    public int enumerate(ThreadGroup.enumerate445,14595
+    private int enumerate(ThreadGroup.enumerate449,14703
+    public final void stop(ThreadGroup.stop499,16212
+    public final void suspend(ThreadGroup.suspend537,17477
+    public final void resume(ThreadGroup.resume575,18749
+    public final void destroy(ThreadGroup.destroy607,19779
+    private final void add(ThreadGroup.add643,20704
+    private void remove(ThreadGroup.remove668,21402
+    void add(ThreadGroup.add697,22142
+    void remove(ThreadGroup.remove722,22808
+    public void list(ThreadGroup.list751,23503
+    void list(ThreadGroup.list754,23556
+    public void uncaughtException(ThreadGroup.uncaughtException810,25512
+    public boolean 
allowThreadSuspension(ThreadGroup.allowThreadSuspension823,25823
+    public String toString(ThreadGroup.toString837,26142
+
+lua-src/allegro.lua,400
+local function get_layer_by_name 7,175
+local function count_layers 33,621
+function GetLayerByName 54,980
+function GetUniqueLayerName 65,1204
+function SelectLayer 76,1415
+function NewLayer 86,1773
+function NewLayerSet 144,3226
+function RemoveLayer 170,3750
+function MoveLayerTop 211,4767
+function MoveLayerBottom 223,5079
+function MoveLayerBefore 236,5457
+function MoveLayerAfter 258,6090
+
+make-src/Makefile,1156
+LATEST=1,0
+NONSRCS=35,1578
+CPPFLAGS=49,2191
+LDFLAGS=50,2260
+FASTCFLAGS=55,2531
+FILTER=58,2642
+       @-$($72,3064
+       @-$($73,3113
+       @-$($74,3177
+       @-$($75,3223
+       @-$($76,3291
+       @-$($77,3383
+       @$(81,3466
+       @$(82,3514
+       @$(83,3577
+       @$(84,3622
+       @$(85,3689
+       @$(86,3780
+${CHECKOBJS}: CFLAGS=88,3806
+       @env CHECKEROPTS=92,3922
+       @$(98,4094
+       @$(106,4250
+       @$(110,4374
+       @$(114,4500
+       @for i in $(140,5315
+       @for i in $(SRCS); do echo $$i;140,5315
+       $(160,6053
+       $(163,6114
+       $(166,6177
+       $(169,6228
+       $(172,6317
+       sdiff --suppress-common-lines --width=width186,6614
+       sdiff --suppress-common-lines --width=width189,6703
+       sdiff --suppress-common-lines --width=width192,6791
+       sdiff --suppress-common-lines --width=width195,6880
+       TEXTAGS=204,7122
+       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* 
--regex=regex204,7122
+       ${RUN} etags12 --members -o $@ --regex=regex207,7239
+       ${RUN} ./ctags -o $@ --regex=regex213,7388
+       ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=regex216,7464
+       TEXTAGS=219,7583
+       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ 
--regex=regex219,7583
+       ${RUN} ./extags -e --regex-c=c222,7710
+
+objc-src/Subprocess.h,98
+#define Subprocess 41,1217
+#define BUFFERSIZE 43,1267
address@hidden Subprocess:Subprocess45,1292
+
+objc-src/Subprocess.m,505
+#define        PTY_TEMPLATE 20,494
+#define        PTY_LENGTH 21,528
+static void showError(23,551
address@hidden Subprocess(Private)Subprocess(Private)32,737
+- childDidExit39,851
+- fdHandler:67,1589
+showError 98,2360
+fdHandler 112,2785
+getptys 119,2907
+- init:183,4815
+    andStdErr:init:withDelegate:andPtySupport:andStdErr:197,5147
+- send:(const char *)string withNewline:send:withNewline:300,7436
+- send:308,7599
+- terminateInput314,7689
+- terminate:321,7810
+- setDelegate:332,7961
+- delegate338,8031
+
+objc-src/PackInsp.h,109
+#define NUMSTATS       36,1101
+#define TYPESTOSTAT    37,1120
address@hidden PackageInspector:PackageInspector39,1172
+
+objc-src/PackInsp.m,1360
+static const char RCSid[RCSid30,1032
+#define VERSION        34,1116
+#   define DEBUG 37,1155
+#define LISTCONTENTS   39,1181
+#define OPENBUTTON     47,1352
+#define LISTCONTENTSBUTTON     48,1449
+#define LISTDESCRIPTIONBUTTON  49,1562
+#define STATE_UNINSTALLED      52,1687
+#define STATE_INSTALLED        53,1807
+#define STATE_COMPRESSD        54,1948
+#define SIZEFORMAT     57,2152
+#define KBYTES 58,2362
+#define MBYTES 59,2473
+#define LOCALIZE(61,2585
+#define LOCALIZE_ARCH(62,2668
++newnew67,2802
+-showInfo:showInfo:93,3417
+-revert:revert:107,3737
+-ok:ok:136,4297
+-loadload143,4424
+#define LOOKUP(156,4826
+#undef LOOKUP176,5694
+-loadKeyValuesFrom:(const char *)type 
inTable:loadKeyValuesFrom:inTable:186,5852
+-loadContentsOf:(const char *)type inTable:loadContentsOf:inTable:238,7079
+-loadImageloadImage257,7552
+#define STAT_EQ(275,7940
+-(BOOL)shouldLoad280,8116
+-toggleDescriptiontoggleDescription301,8626
+-(const char *)getPath:(char *)buf forType:getPath:forType:317,8899
+-setRevertButtonTitlesetRevertButtonTitle333,9320
+-(const char *)formatSize:(const char *)size inBuf:formatSize:inBuf:344,9525
+#define WORKING        368,10045
+-(void)getArchs370,10100
+-(void)addArchs:385,10520
+-subprocess:(Subprocess *)sender output:subprocess:output:428,11351
+-subprocessDone:subprocessDone:436,11484
+static void openInWorkspace(446,11634
+-open:open:464,12063
+
+objcpp-src/SimpleCalc.H,41
address@hidden SimpleCalc:SimpleCalc14,400
+
+objcpp-src/SimpleCalc.M,300
+- init52,1747
+- appendToDisplay:60,1933
+- registerAction:70,2210
+- decimalKey:77,2348
+- numberKeys:91,2661
+- equalsKey:112,3192
+- operationKeys:131,3680
+- clearKey:153,4301
+- clearAllKey:160,4410
+- appDidInit:168,4591
+- windowWillClose:178,4882
+- infoPanel:186,5132
+- helpPanel:198,5482
+
+pas-src/common.pas,1875
+procedure InitializeStringPackage;26,527
+function newtextstring;34,874
+procedure disposetextstring;52,1404
+function ConcatT;78,2066
+function AppendTextString;112,3238
+function CopyTextString;132,3947
+procedure CONVERT_CHARSTRING_TO_VALUE;151,4505
+procedure append_string;172,5166
+function To_Upper;186,5462
+function To_Lower;194,5617
+function EmptyNmStr(209,6213
+function chartonmstr;219,6436
+function LowerCaseNmStr;230,6682
+function concatenatenamestrings;242,7007
+procedure writenamestring;263,7517
+function IsControlChar;277,7928
+function namestringequal;283,8079
+function NameStringLess;302,8539
+function IsControlCharName(343,9710
+function SubString;358,10208
+function SkipChars;379,10791
+function RemoveUnderlineControl;397,11311
+procedure First100Chars;427,12162
+procedure SkipSpaces;462,13298
+function SkipBlanks;477,13782
+function stripname;505,14595
+function Locate;522,15039
+function NameHasChar;543,15581
+function integertonmstr;561,16134
+function NmStrToInteger;585,16901
+function AddNullToNmStr;600,17317
+function ValToNmStr;611,17585
+function ChangeFileType;625,18037
+function StripPath;647,18734
+function ReprOfChar;675,19343
+procedure ExtractCommentInfo;702,20749
+procedure INSERT_TREE_NODE;784,24053
+function GetNameList;920,27926
+procedure DisposeANameList(925,28010
+procedure DisposeNameList;938,28340
+function GetNewNameListNode;943,28409
+function insertname;972,29051
+procedure InitNameList;988,29471
+procedure InitNameStringPool;998,29767
+procedure NewNameString;1004,29867
+procedure ReleaseNameString;1022,30232
+procedure SDTrefStringToRec 1045,30741
+procedure SDTrefSkipSpaces;1059,31092
+function SDTrefIsEnd 1070,31323
+function SDTrefGetInteger 1082,31529
+procedure SDTrefRecToString 1303,37546
+function NmStrToErrStr;1497,42305
+function ErrStrToNmStr;1509,42557
+function GetTextRef;1529,43112
+
+php-src/lce_functions.php,2864
+  define("LCE_FUNCTIONS"LCE_FUNCTIONS4,38
+  define("LCE_UNKNOWN"LCE_UNKNOWN9,145
+  define("LCE_WS"LCE_WS11,194
+  define("LCE_COMMENT"LCE_COMMENT13,244
+  define("LCE_COMMENT_USER"LCE_COMMENT_USER15,303
+  define("LCE_COMMENT_TOOL"LCE_COMMENT_TOOL17,366
+  define("LCE_MSGID"LCE_MSGID19,430
+  define("LCE_MSGSTR"LCE_MSGSTR21,488
+  define("LCE_TEXT"LCE_TEXT23,541
+  define("STATE_ABORT"STATE_ABORT25,567
+  define("STATE_OK"STATE_OK26,595
+  define("STATE_LOOP"STATE_LOOP27,620
+  class POEntryAD 29,648
+      function validate(31,683
+      function checkQuotation(59,1384
+  class CommentAD 70,1639
+      var $prefix;72,1674
+      function CommentAD(73,1693
+      function validate(83,1944
+  class POEntry 105,2410
+      var $msgid;107,2454
+      var $msgstr;108,2472
+      var $user_comment;109,2491
+      var $sys_comment;110,2516
+      var $unk_comment;111,2540
+      var $msgid_lc 113,2565
+      var $msgstr_lc 114,2590
+      var $user_comment_lc 115,2616
+      var $sys_comment_lc 116,2648
+      var $unk_comment_lc 117,2679
+      function POEntry(119,2711
+      function lineCount(135,3255
+      function serializeToVars(141,3365
+      function write(151,3800
+  class POReader 163,4178
+      var $msgid;165,4223
+      var $msgstr;166,4241
+      var $user_comment;167,4260
+      var $sys_comment;168,4285
+      var $unk_comment;169,4309
+      var $state;170,4333
+      var $ignore_ws;171,4351
+      var $po_entries;172,4373
+      var $poe_num;173,4396
+      var $filename;174,4416
+      var $domain;175,4437
+      function gettext(177,4457
+      function parseFromVars(189,4705
+      function serializeToVars(215,5331
+      function POReader(229,5613
+      function read(243,5983
+      function write(259,6307
+      function isComment(277,6645
+      function comment(284,6822
+      function msgid(304,7247
+      function msgstr(320,7574
+      function start(340,8232
+      function createPOEntries(360,8644
+      function stripLine(394,9472
+      function printClassification(421,10056
+      function classifyLine(432,10301
+  function getTextDomains(471,11094
+  class PORManager 498,11756
+      var      $por_a;500,11803
+      function PORManager(502,11822
+      function addPOReader(507,11896
+      function &getPOReader(getPOReader512,11992
+      function getDomainNames(517,12081
+  function &loadPORManager(loadPORManager523,12174
+  function fileJoin(536,12436
+      function lce_bindtextdomain(557,12839
+      function lce_textdomain(614,14530
+      function lce_gettext(620,14641
+      function lce_dgettext(626,14767
+      function lce(634,14966
+      function lce_bindtextdomain(651,15488
+      function lce_textdomain(656,15592
+      function lce_gettext(661,15674
+      function lce_dgettext(666,15755
+      function lce(670,15855
+  function lce_geteditcode(676,15898
+
+php-src/ptest.php,135
+define("TEST"TEST1,0
+test 4,26
+       var $member;8,71
+       var $memassign=9,85
+       var $memassign_space 10,110
+       var $test12,176
+foo(16,200
+
+perl-src/htlmify-cystic,1443
+my @section_name;section_name12,236
+my @appendix_name;appendix_name13,254
+my @section_toc;section_toc15,274
+my @appendix_toc;appendix_toc16,291
+my $new_tag new_tag18,310
+my $appendix;appendix24,409
+my $section;section25,423
+my $subsection;subsection26,436
+my $subsubsection;subsubsection27,452
+my $this_file_toc this_file_toc29,472
+my %file_tocs;file_tocs30,496
+my @output_files output_files32,512
+my $file_index file_index33,535
+my $output_file;output_file35,556
+my $line;line37,574
+my $subsection_marker;subsection_marker161,3883
+my $new;new163,3907
+sub read_toc main::read_toc165,3917
+         my $entry entry218,5621
+         my $entry entry234,6077
+             my $entry entry245,6351
+         my $entry entry252,6536
+         my $entry entry268,7010
+             my $entry entry276,7204
+         my $entry entry281,7328
+      my $entry entry296,7698
+sub finish_subsubsections main::finish_subsubsections302,7805
+sub finish_subsections main::finish_subsections309,7987
+sub finish_sections main::finish_sections320,8310
+sub finish_appendices main::finish_appendices331,8599
+sub section_url_base main::section_url_base337,8724
+sub section_url_name main::section_url_name342,8922
+sub section_url main::section_url355,9284
+  my $name name357,9336
+sub section_href main::section_href364,9452
+sub section_name main::section_name368,9551
+sub toc_line main::toc_line372,9655
+sub file_end main::file_end375,9750
+
+perl-src/yagrip.pl,258
+sub getopt main::getopt7,156
+       local($_,$flag,$opt,$f,$r,@temp)($_,$flag,$opt,$f,$r,@temp8,169
+sub usage main::usage38,856
+       local($prog,$_,@list)($prog,$_,@list39,868
+       
local($string,$flag,@string,@temp,@last)($string,$flag,@string,@temp,@last40,897
+
+perl-src/kai-test.pl,244
+sub f1 main::f12,16
+sub main::f2 6,50
+package Foo;10,90
+sub f3 Foo::f312,104
+sub Bar::f4 16,138
+package Bar;20,177
+sub f5 Bar::f522,191
+package Foo::Bar;26,225
+sub f6 Foo::Bar::f628,244
+package main;32,278
+sub f7 main::f734,293
+
+perl-src/mirror.pl,13410
+sub msg_versionmain::msg_version459,18271
+       local( $arg )( $arg 468,18582
+               local( $flag, $p )( $flag, $p 480,18757
+               local( $site_path )( $site_path 525,19687
+                       local( $site, $path )( $site, $path 539,19958
+               local( $key_val )( $key_val 578,20743
+               local( $user )( $user 595,21097
+               local( $c )( $c 634,21853
+                       local( $sec,$min,$hour,$mday,$mon,$year,( 
$sec,$min,$hour,$mday,$mon,$year,678,22807
+       local( $c )( $c 706,23393
+       local( $dir, $mp )( $dir, $mp 723,23695
+               local( $f )( $f 725,23740
+sub interpret_config_filesmain::interpret_config_files756,24304
+       local( $fname )( $fname 758,24333
+sub interpret_configmain::interpret_config785,24927
+sub parse_linemain::parse_line827,25710
+       local( $eqpl )( $eqpl 829,25727
+       local( $cont )( $cont 830,25744
+                       local( $v )( $v 839,26029
+sub set_defaultsmain::set_defaults860,26448
+sub command_line_overridemain::command_line_override868,26579
+       local( $key, $val, $overrides )( $key, $val, $overrides 870,26607
+sub set_variablesmain::set_variables894,27072
+       local( $key, $val )( $key, $val 896,27092
+                       local( $val_name )( $val_name 902,27259
+               local( $val )( $val 953,28825
+sub upd_valmain::upd_val962,28974
+       local( $key )( $key 964,28988
+sub pr_variablesmain::pr_variables970,29083
+       local( $msg )( $msg 972,29102
+       local( $nle )( $nle 973,29123
+       local( $out )( $out 974,29144
+       local( $key, $val, $str )( $key, $val, $str 975,29164
+sub do_mirrormain::do_mirror1007,29923
+       local( $get_one_package )( $get_one_package 1009,29939
+       local( $exit_status )( $exit_status 1030,30384
+                       local( @t )( @t 1154,33165
+       local( $con )( $con 1241,35499
+               local( @rhelp )( @rhelp 1289,36702
+       local( @sub_dirs )( @sub_dirs 1329,37778
+       local( $now )( $now 1493,41348
+               local( $arg )( $arg 1506,41774
+sub disconnectmain::disconnect1528,42250
+sub connectmain::connect1546,42576
+       local( $attempts )( $attempts 1548,42590
+       local( $res )( $res 1549,42642
+sub prodmain::prod1573,43156
+sub checkout_regexpsmain::checkout_regexps1585,43327
+       local( $ret )( $ret 1587,43350
+       local( $t )( $t 1589,43395
+               local( $val )( $val 1597,43701
+                       local( $err )( $err 1601,43786
+sub clear_localmain::clear_local1610,43909
+sub clear_remotemain::clear_remote1625,44172
+sub get_local_directory_detailsmain::get_local_directory_details1640,44445
+       local( @dirs, $dir )( @dirs, $dir 1642,44479
+       local( $last_prodded )( $last_prodded 1643,44502
+       local( $dir_level )( $dir_level 1691,45615
+       local( $i )( $i 1692,45641
+       local( $path, $time, $size, $type, $mode, $name, $isdir, $value, 
$follow )( $path, $time, $size, $type, $mode, $name, $isdir, $value, $follow 
1693,45659
+       local( $dev,$ino,$fmode,$nlink,$uid,$gid,$rdev,$ssize,( 
$dev,$ino,$fmode,$nlink,$uid,$gid,$rdev,$ssize,1694,45736
+                       local( $mapi )( $mapi 1763,47586
+sub get_remote_directory_detailsmain::get_remote_directory_details1789,48122
+       local( $type_changed )( $type_changed 1791,48157
+       local( $udirtmp )( $udirtmp 1792,48186
+       local( $storename )( $storename 1793,48206
+       local( $rls )( $rls 1825,48944
+               local( $dirtmp )( $dirtmp 1830,49002
+               local( $unsquish )( $unsquish 1832,49130
+                       local( $f )( $f 1840,49360
+               local( $dirtmp )( $dirtmp 1859,49866
+               local( $unsquish )( $unsquish 1870,50215
+                       local( $f, $uf )( $f, $uf 1878,50445
+               local( $flags )( $flags 1912,51259
+       local( $parse_state )( $parse_state 1946,52111
+                       local( $msg )( $msg 1963,52486
+sub patch_ls_lR_filemain::patch_ls_lR_file1984,52955
+       local( $f, $fr, $flb, $flt, $flp, $flz, $frb, $frt )( $f, $fr, $flb, 
$flt, $flp, $flz, $frb, $frt 1990,53055
+       local( $to , $tn )( $to , $tn 1991,53110
+       local( $tlb )( $tlb 1995,53225
+               local( $p, $s, $trz, $t, $m )( $p, $s, $trz, $t, $m 2030,54182
+               local( $tlz )( $tlz 2037,54467
+sub parse_timeoutmain::parse_timeout2089,55670
+sub parse_remote_detailsmain::parse_remote_details2095,55754
+       local( $ret )( $ret 2097,55781
+       local( $old_sig )( $old_sig 2098,55797
+sub parse_remote_details_realmain::parse_remote_details_real2125,56234
+       local( $path, $size, $time, $type, $mode, $rdir, $rcwd )( $path, 
$size, $time, $type, $mode, $rdir, $rcwd 2127,56266
+       local( @dir_list )( @dir_list 2128,56325
+       local( $i )( $i 2129,56346
+       local( $old_path )( $old_path 2130,56364
+                               local( $old_path )( $old_path 2143,56630
+                               local( $ri )( $ri 2203,58078
+                       local( $mapi )( $mapi 2214,58335
+                       local( $done )( $done 2239,58911
+sub compare_dirsmain::compare_dirs2283,59825
+       local( *src_paths,( *src_paths,2286,59915
+       local( $src_path, $dest_path, $i )( $src_path, $dest_path, $i 
2293,60099
+       local( $last_prodded )( $last_prodded 2294,60136
+       local( $desti, $srci, $compress, $srciZ, $srcigz, $split, 
$dest_path_real )( $desti, $srci, $compress, $srciZ, $srcigz, $split, 
$dest_path_real 2299,60350
+       local( $old_dest_path, $existing_path, $tmp, $restart )( 
$old_dest_path, $existing_path, $tmp, $restart 2300,60428
+       local( $sp, $dp )( $sp, $dp 2301,60486
+                  local( $real, $reali, $reali1 )( $real, $reali, $reali1 
2352,62034
+                  local( $count )( $count 2353,62072
+                       local( $value )( $value 2408,63996
+                       local( $real )( $real 2409,64028
+                       local( $reali )( $reali 2410,64086
+                               local( $old )( $old 2421,64571
+                       local( $old_dest_path )( $old_dest_path 2432,64842
+                               local( $dpp, $dps )( $dpp, $dps 2509,67031
+               local( $update )( $update 2534,67671
+sub map_namemain::map_name2651,71028
+       local( $name )( $name 2653,71043
+               local( $old_name )( $old_name 2656,71089
+               local( $tmp )( $tmp 2666,71252
+sub set_timestampsmain::set_timestamps2675,71362
+       local( $src_path )( $src_path 2677,71383
+       local( $dest_path, $dest_loc_mapi, $src_rem_mapi,  $rtime )( 
$dest_path, $dest_loc_mapi, $src_rem_mapi,  $rtime 2685,71517
+sub set_timestampmain::set_timestamp2699,71901
+       local( $path, $time )( $path, $time 2701,71921
+       local( $pr_time )( $pr_time 2703,71953
+sub make_dirsmain::make_dirs2719,72284
+       local( $thing )( $thing 2721,72300
+sub make_symlinksmain::make_symlinks2736,72489
+       local( $thing )( $thing 2738,72509
+               local( $dest, $existing )( $dest, $existing 2745,72623
+               local( $dirpart )( $dirpart 2746,72663
+               local( $ft )( $ft 2747,72704
+               local( $p )( $p 2762,73261
+                       local( $f )( $f 2770,73467
+                       local( $dl )( $dl 2788,74038
+sub do_all_transfersmain::do_all_transfers2806,74439
+       local( $src_path )( $src_path 2808,74462
+       local( $dest_path, $attribs )( $dest_path, $attribs 2809,74483
+       local( $srci )( $srci 2810,74515
+               local( $newpath )( $newpath 2838,75124
+sub transfer_filemain::transfer_file2869,75847
+       local( $src_path, $dest_path, $attribs, $timestamp )( $src_path, 
$dest_path, $attribs, $timestamp 2871,75867
+       local( $dir, $file, $temp, $compress, $split, $restart, $mesg, 
$got_mesg )( $dir, $file, $temp, $compress, $split, $restart, $mesg, $got_mesg 
2872,75927
+               local( $src_file )( $src_file 2915,76782
+               local( $comptemp )( $comptemp 2916,76816
+                       local( $f )( $f 2921,76964
+               local($filesize)($filesize2944,77569
+                       local( $ti )( $ti 2975,78401
+               local( $f )( $f 2997,78887
+               local( $comp )( $comp 2998,78912
+       local( $filesize )( $filesize 3015,79427
+       local( $sizemsg )( $sizemsg 3016,79469
+       local( $srcsize )( $srcsize 3017,79501
+               local( $time )( $time 3029,79865
+       local( $as )( $as 3046,80223
+       local( $locali )( $locali 3054,80499
+sub filename_to_tempnamemain::filename_to_tempname3062,80713
+       local( $dir, $file )( $dir, $file 3064,80740
+       local ( $dest_path )( $dest_path 3066,80769
+sub log_uploadmain::log_upload3090,81228
+       local( $src_path, $dest_path, $got_mesg, $size )( $src_path, 
$dest_path, $got_mesg, $size 3092,81245
+sub do_deletesmain::do_deletes3118,81773
+       local( *src_paths,( *src_paths,3121,81861
+       local( $files_to_go, $dirs_to_go )( $files_to_go, $dirs_to_go 
3125,81960
+       local( $src_path, $i )( $src_path, $i 3131,82055
+       local( $orig_do_deletes )( $orig_do_deletes 3132,82080
+       local( $orig_save_deletes )( $orig_save_deletes 3133,82122
+       local( $del_patt )( $del_patt 3135,82169
+               local( $per )( $per 3162,82843
+               local( $per )( $per 3184,83513
+                       local( $save_dir_tail )( $save_dir_tail 3226,84617
+sub save_deletemain::save_delete3245,85019
+       local( $save, $kind )( $save, $kind 3247,85037
+       local( $real_save_dir, $save_dest )( $real_save_dir, $save_dest 
3249,85067
+       local( $dirname )( $dirname 3284,85704
+sub save_mkdirmain::save_mkdir3304,86155
+       local( $dir )( $dir 3306,86172
+sub do_deletemain::do_delete3320,86459
+       local( $del, $kind )( $del, $kind 3322,86475
+sub filesizemain::filesize3377,87532
+       local( $fname )( $fname 3379,87547
+sub istruemain::istrue3390,87654
+       local( $val )( $val 3392,87667
+sub mksymlinkmain::mksymlink3398,87773
+       local( $dest_path, $existing_path )( $dest_path, $existing_path 
3400,87789
+               local( $msg )( $msg 3417,88246
+               local( $msg )( $msg 3431,88590
+               local( $status )( $status 3442,88816
+sub mkdirsmain::mkdirs3457,89196
+       local( $dir )( $dir 3459,89209
+       local( @dir, $d, $path )( @dir, $d, $path 3460,89230
+sub make_dirmain::make_dir3497,90042
+       local( $dir, $mode )( $dir, $mode 3499,90057
+       local( $val )( $val 3500,90085
+sub dir_existsmain::dir_exists3528,90573
+       local( $dir )( $dir 3530,90590
+       local( $val )( $val 3531,90611
+               local($old_dir)($old_dir3539,90750
+sub set_attribsmain::set_attribs3553,91053
+       local( $path, $src_path, $type )( $path, $src_path, $type 3555,91071
+       local( $mode )( $mode 3556,91111
+               local( $pathi )( $pathi 3564,91229
+               local( $pathi )( $pathi 3568,91320
+sub get_passwdmain::get_passwd3606,91977
+       local( $user )( $user 3608,91994
+       local( $pass )( $pass 3609,92016
+       local( $| )( $| 3610,92033
+sub compare_timesmain::compare_times3631,92384
+       local( $t1, $t2 )( $t1, $t2 3637,92564
+       local( $diff )( $diff 3638,92589
+sub create_assocsmain::create_assocs3643,92688
+       local( $map )( $map 3645,92708
+sub delete_assocsmain::delete_assocs3657,92957
+       local( $map )( $map 3659,92977
+sub unlink_dbmmain::unlink_dbm3671,93247
+       local( $file )( $file 3673,93264
+sub bsplitmain::bsplit3681,93462
+       local( $temp, $dest_path, $time )( $temp, $dest_path, $time 3683,93475
+       local( $dest_dir )( $dest_dir 3684,93516
+       local( $bufsiz )( $bufsiz 3685,93558
+       local( $buffer, $in, $sofar )( $buffer, $in, $sofar 3686,93583
+       local( $d )( $d 3691,93721
+       local( $index )( $index 3697,93840
+       local( $part )( $part 3698,93865
+                       local( $locali )( $locali 3714,94336
+       local( $readme )( $readme 3730,94740
+sub sysmain::sys3739,95116
+       local( $com )( $com 3741,95126
+sub set_assoc_from_arraymain::set_assoc_from_array3751,95355
+       local( *things )( *things 3754,95453
+sub find_progmain::find_prog3760,95537
+       local( $prog )( $prog 3762,95553
+       local( $path )( $path 3763,95575
+               local( $path )( $path 3766,95657
+sub real_dir_from_pathmain::real_dir_from_path3780,95842
+       local( $program )( $program 3782,95867
+       local( @prog_path )( @prog_path 3783,95892
+       local( $dir )( $dir 3784,95970
+sub msgmain::msg3807,96489
+       local( $todo, $msg )( $todo, $msg 3809,96499
+sub to_bytesmain::to_bytes3838,96979
+       local( $size )( $size 3840,96994
+sub unix2vmsmain::unix2vms3858,97332
+       local( $v, $kind )( $v, $kind 3860,97347
+                       local( $dir, $rest )( $dir, $rest 3873,97559
+sub dirpartmain::dirpart3886,97730
+       local( $path )( $path 3888,97744
+sub expand_symlinkmain::expand_symlink3902,98076
+       local( $orig_path, $points_to )( $orig_path, $points_to 3904,98097
+       local( $dirpart )( $dirpart 3905,98136
+sub flatten_pathmain::flatten_path3913,98365
+       local( $path )( $path 3915,98384
+       local( $changed )( $changed 3916,98406
+       local( $i )( $i 3917,98430
+       local( $rooted )( $rooted 3919,98446
+       local( $count )( $count 3920,98482
+       local( $orig_path )( $orig_path 3921,98504
+               local( $in )( $in 3932,98741
+               local( @parts )( @parts 3933,98765
+sub fix_packagemain::fix_package3963,99438
+       local( $package )( $package 3965,99456
+sub will_compressmain::will_compress3970,99529
+sub will_splitmain::will_split3981,99859
+sub myflockmain::myflock3989,100001
+       local( $file, $kind )( $file, $kind 3991,100015
+sub t2strmain::t2str4004,100221
+       local( @t )( @t 4006,100233
+       
local($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst4013,100335
+sub handlermain::handler4022,100583
+        local( $sig )( $sig 4029,100651
+        local( $msg )( $msg 4030,100679
+        local( $package, $filename, $line )( $package, $filename, $line 
4031,100737
+sub trap_signalsmain::trap_signals4036,100859
+       local( $sig )( $sig 4038,100878
+sub map_user_groupmain::map_user_group4047,101158
+sub keepmain::keep4069,101537
+       local( $pathi, $path, *keep, *keep_totals, *keep_map, $kind )( $pathi, 
$path, *keep, *keep_totals, *keep_map, $kind 4071,101548
+sub alarmmain::alarm4104,102330
+       local( $time_to_sig )( $time_to_sig 4106,102342
+sub chownmain::chown4110,102405
+       local( $uid, $gid, $path )( $uid, $gid, $path 4112,102417
+sub utimemain::utime4116,102494
+       local( $atime, $mtime, $path )( $atime, $mtime, $path 4118,102506
+       local( $old_mode )( $old_mode 4124,102685
+       local( $tmp_mode )( $tmp_mode 4125,102730
+       local( $ret )( $ret 4126,102763
+sub cwdmain::cwd4135,102913
+       local( $lcwd )( $lcwd 4137,102923
+
+ps-src/rfc1245.ps,2478
+/FMversion 12,311
+/FrameDict 17,500
+/FMVERSION 47,1307
+/FMLOCAL 56,1494
+/FMDOCUMENT 73,1766
+/FMBEGINPAGE 95,2279
+/FMENDPAGE 109,2516
+/FMDEFINEFONT 115,2582
+/FMNORMALIZEGRAPHICS 126,2725
+/FMBEGINEPSF 142,2955
+/FMENDEPSF 153,3207
+/setmanualfeed 158,3283
+/max 163,3386
+/min 164,3426
+/inch 165,3466
+/pagedimen 166,3485
+/setpapername 172,3629
+/papersize 190,4214
+/manualpapersize 211,4789
+/desperatepapersize 230,5211
+/savematrix 239,5370
+/restorematrix 242,5425
+/dmatrix 245,5475
+/dpi 246,5495
+/freq 248,5583
+/sangle 249,5658
+/DiacriticEncoding 250,5717
+/.notdef 251,5738
+/.notdef 252,5801
+/.notdef 253,5864
+/.notdef 254,5927
+/.notdef 255,5990
+/numbersign 256,6051
+/parenright 257,6115
+/two 258,6184
+/less 259,6251
+/L 260,6320
+/bracketright 261,6389
+/i 262,6459
+/braceright 263,6529
+/Ntilde 264,6598
+/atilde 265,6668
+/iacute 266,6733
+/ocircumflex 267,6797
+/udieresis 268,6858
+/paragraph 269,6919
+/dieresis 270,6983
+/yen 271,7050
+/ordfeminine 272,7109
+/exclamdown 273,7171
+/guillemotleft 274,7230
+/Otilde 275,7296
+/quoteleft 276,7357
+/fraction 277,7420
+/periodcentered 278,7490
+/Acircumflex 279,7549
+/Icircumflex 280,7610
+/Uacute 281,7680
+/breve 282,7746
+/ReEncode 284,7814
+/graymode 300,8020
+/setpattern 310,8184
+/grayness 331,8725
+/normalize 394,9873
+/dnormalize 397,9942
+/lnormalize 400,10014
+/H 403,10104
+/Z 406,10147
+/X 409,10176
+/V 412,10219
+/N 415,10260
+/M 418,10286
+/E 419,10315
+/D 420,10336
+/O 421,10358
+/L 423,10394
+/Y 430,10489
+/R 439,10588
+/RR 450,10696
+/C 467,10959
+/U 473,11004
+/F 477,11039
+/T 481,11084
+/RF 484,11115
+/TF 488,11164
+/P 495,11219
+/PF 499,11270
+/S 506,11344
+/SF 510,11384
+/B 517,11446
+/BF 521,11505
+/W 538,11714
+/G 573,12382
+/A 582,12525
+/BEGINPRINTCODE 606,12918
+/ENDPRINTCODE 615,13131
+/gn 620,13259
+/cfs 631,13384
+/ic 636,13473
+/ms 658,14285
+/ip 668,14395
+/wh 678,14492
+/bl 684,14607
+/s1 690,14722
+/fl 691,14739
+/hx 698,14887
+/wbytes 709,15055
+/BEGINBITMAPBWc 713,15147
+/BEGINBITMAPGRAYc 716,15198
+/BEGINBITMAP2BITc 719,15251
+/COMMONBITMAPc 722,15304
+/BEGINBITMAPBW 739,15660
+/BEGINBITMAPGRAY 742,15709
+/BEGINBITMAP2BIT 745,15760
+/COMMONBITMAP 748,15811
+/Fmcc 765,16156
+/ngrayt 773,16371
+/nredt 774,16393
+/nbluet 775,16414
+/ngreent 776,16436
+/colorsetup 787,16603
+/fakecolorsetup 814,17370
+/BITMAPCOLOR 826,17636
+/BITMAPCOLORc 839,17926
+/BITMAPGRAY 855,18275
+/BITMAPGRAYc 858,18335
+/ENDBITMAP 861,18397
+/fillprocs 868,18497
+
+prol-src/ordsets.prolog,525
+is_ordset(47,1310
+list_to_ord_set(63,1688
+ord_add_element(71,1867
+ord_del_element(85,2344
+ord_disjoint(100,2783
+ord_intersect(108,2953
+ord_intersection(126,3552
+ord_intersection3(130,3691
+ord_intersection(150,4531
+ord_intersection4(154,4703
+ord_intersection(176,5664
+ord_intersection2(181,5812
+ord_member(200,6318
+ord_seteq(216,6683
+ord_setproduct(225,6971
+ord_subset(240,7377
+ord_subtract(257,7861
+ord_symdiff(265,8054
+ord_union(288,8887
+ord_union4(303,9352
+ord_union(324,10171
+ord_union_all(329,10313
+
+prol-src/natded.prolog,2319
+expandmng(100,2879
+normalize(116,3359
+fresh_vars(125,3716
+subst(138,4134
+normalize_fresh(159,4660
+reduce_subterm(171,5112
+reduce(185,5559
+free_var(196,5903
+free_for(209,6246
+compile_lex(231,6875
+consult_lex:-consult_lex248,7384
+lex(259,7754
+expandsyn(267,8068
+bas_syn(292,8897
+compile_empty:-compile_empty310,9376
+complete(328,10055
+add_active(340,10527
+parse(353,10949
+derived_analyses(364,11341
+build(378,11965
+buildact(392,12521
+mapsyn(412,13542
+add_edge(434,14278
+findcats(447,14758
+normalize_tree(465,15478
+normalize_trees(475,15856
+expandmng_tree(486,16248
+expandmng_trees(496,16614
+cat(511,17013
+subtree(644,21266
+hypothetical_mem(653,21565
+make_coor(667,22130
+start_up:-start_up688,23013
+tokenizeatom(710,23921
+tokenize(720,24348
+isoperator(752,25377
+isoptab(756,25431
+specialsymbol(765,25756
+sstab(771,25861
+parse_cgi(787,26347
+keyvalseq(792,26510
+andkeyvalseq(796,26609
+keyval(799,26688
+valseq(807,26920
+plusvalseq(810,27007
+val(816,27109
+argvals(824,27426
+commaargvals(828,27503
+atomval(833,27578
+atom(836,27640
+action(846,28004
+keyvalcgi(864,28649
+keyvalscgi(865,28670
+outsyn(868,28726
+act(876,29060
+actout(901,29906
+texttreelist(912,30089
+htmltreelist(918,30190
+fitchtreelist(924,30304
+pp_html_table_tree(938,30759
+pp_html_tree(949,31113
+pp_html_trees(988,32381
+pp_html_table_fitch_tree(999,32769
+pp_html_fitch_tree(1017,33672
+removeexp(1129,39002
+splitexp(1142,39490
+pp_exp(1155,39990
+map_word(1168,40249
+pp_exps(1180,40474
+pp_tree(1188,40777
+pp_trees(1216,41807
+pp_word_list(1225,42128
+pp_word(1231,42262
+pp_word_list_rest(1238,42569
+pp_cat(1248,42929
+pp_syn(1255,43196
+pp_syn_paren(1276,43899
+pp_paren(1293,44377
+pp_syn_back(1300,44661
+pp_bas_cat(1311,45001
+writecat(1322,45409
+writesubs(1351,46455
+writesups(1361,46757
+writelistsubs(1371,47090
+pp_lam(1380,47408
+pp_lam_bracket(1398,48022
+pp_lam_paren(1407,48338
+pp_rule(1429,49238
+member(1447,49866
+append_list(1451,49919
+append(1456,50010
+at_least_one_member(1460,50076
+numbervars(1464,50171
+reverse(1467,50209
+select(1471,50290
+select_last(1475,50357
+cat_atoms(1479,50436
+writelist(1485,50524
+write_lex_cat(1492,50676
+writebreaklex(1500,50988
+write_lex(1513,51265
+writebreak(1521,51541
+tt:-tt1531,51713
+mt:-mt1534,51784
+cmt:-cmt1537,51878
+
+pyt-src/server.py,1438
+class Controls:Controls17,358
+    def __init__(18,374
+    def __repr__(24,590
+    def __str__(34,871
+class Server:Server37,934
+    def __init__(38,948
+    def dump(73,2198
+    def __repr__(125,3896
+    def __str__(128,3945
+class User:User131,4014
+    def __init__(132,4026
+    def __repr__(172,5445
+    def __str__(206,6883
+def flag2str(223,7212
+class LabeledEntry(232,7442
+    def bind(234,7525
+    def focus_set(236,7584
+    def __init__(238,7629
+def ButtonBar(245,7909
+def helpwin(255,8280
+class ListEdit(267,8707
+    def __init__(269,8808
+    def handleList(303,10042
+    def handleNew(306,10094
+    def editItem(314,10426
+    def deleteItem(320,10596
+def ConfirmQuit(326,10760
+class ControlEdit(375,12377
+    def PostControls(376,12403
+    def GatherControls(421,13530
+class ServerEdit(512,16264
+    def __init__(513,16289
+    def post(525,16629
+    def gather(543,17191
+    def nosave(547,17304
+    def save(551,17408
+    def refreshPort(556,17509
+    def createWidgets(561,17663
+    def edituser(631,20708
+class UserEdit(645,20921
+    def __init__(646,20944
+    def post(658,21283
+    def gather(676,21841
+    def nosave(680,21950
+    def save(684,22052
+    def createWidgets(689,22151
+class Configure(760,24879
+    def __init__(761,24916
+    def MakeDispose(772,25211
+    def MakeSitelist(786,25706
+    def editsite(794,25949
+    def save(797,26022
+    def nosave(807,26310
+
+tex-src/testenv.tex,52
+\newcommand{\nm}\nm4,77
+\section{blah}blah8,139
+
+tex-src/gzip.texi,303
address@hidden Top,62,2139
address@hidden Copying,80,2652
address@hidden Overview,83,2705
address@hidden Sample,166,7272
address@hidden Invoking gzip,Invoking gzip210,8828
address@hidden Advanced usage,Advanced usage357,13495
address@hidden Environment,420,15207
address@hidden Tapes,437,15768
address@hidden Problems,460,16767
address@hidden Concept Index,Concept Index473,17287
+
+tex-src/texinfo.tex,30626
+\def\texinfoversion{\texinfoversion25,1019
+\def\tie{\tie48,1510
+\def\gloggingall{\gloggingall71,2260
+\def\loggingall{\loggingall72,2329
+\def\onepageout#1{\onepageout98,3266
+\def\croppageout#1{\croppageout114,4016
+\def\cropmarks{\cropmarks141,5076
+\def\pagebody#1{\pagebody143,5123
+\def\ewtop{\ewtop156,5578
+\def\nstop{\nstop157,5642
+\def\ewbot{\ewbot159,5725
+\def\nsbot{\nsbot160,5789
+\def\parsearg #1{\parsearg169,6088
+\def\parseargx{\parseargx171,6166
+\def\parseargline{\parseargline181,6406
+\def\flushcr{\flushcr185,6527
+\newif\ifENV \ENVfalse \def\inENV{\inENV189,6726
+\def\ENVcheck{\ENVcheck190,6790
+\outer\def\begin{\begin197,7037
+\def\beginxxx #1{\beginxxx199,7075
+\def\end{\end207,7330
+\def\endxxx #1{\endxxx209,7358
+\def\errorE#1{\errorE215,7547
+\def\singlespace{\singlespace221,7741
address@hidden@231,7964
+\def\`{\`235,8064
+\def\'{\'236,8076
+\def\mylbrace {\mylbrace240,8124
+\def\myrbrace {\myrbrace241,8157
+\def\:{\:246,8271
+\def\*{\*249,8325
+\def\.{\.252,8401
+\def\w#1{\w257,8632
+\def\group{\group267,9115
+  \def\Egroup{\Egroup272,9279
+\def\need{\need288,9721
+\def\needx#1{\needx299,9998
+\def\dots{\dots338,11384
+\def\page{\page342,11448
+\def\exdent{\exdent352,11775
+\def\exdentyyy #1{\exdentyyy353,11808
+\def\nofillexdent{\nofillexdent356,11952
+\def\nofillexdentyyy #1{\nofillexdentyyy357,11997
+\def\include{\include364,12181
+\def\includezzz #1{\includezzz365,12216
+\def\thisfile{\thisfile368,12267
+\def\center{\center372,12330
+\def\centerzzz #1{\centerzzz373,12363
+\def\sp{\sp379,12505
+\def\spxxx #1{\spxxx380,12530
+\def\comment{\comment386,12704
+\def\commentxxx #1{\commentxxx389,12801
+\def\ignoresections{\ignoresections395,12970
+\let\chapter=\relax=\relax396,12992
+\let\section=\relax=\relax405,13237
+\let\subsection=\relax=\relax408,13298
+\let\subsubsection=\relax=\relax409,13321
+\let\appendix=\relax=\relax410,13347
+\let\appendixsec=\relaxsec=\relax411,13368
+\let\appendixsection=\relaxsection=\relax412,13392
+\let\appendixsubsec=\relaxsubsec=\relax413,13420
+\let\appendixsubsection=\relaxsubsection=\relax414,13447
+\let\appendixsubsubsec=\relaxsubsubsec=\relax415,13478
+\let\appendixsubsubsection=\relaxsubsubsection=\relax416,13508
+\def\ignore{\ignore422,13610
+\long\def\ignorexxx #1\end ignore{\ignorexxx426,13750
+\def\direntry{\direntry428,13809
+\long\def\direntryxxx #1\end direntry{\direntryxxx429,13848
+\def\ifset{\ifset433,13958
+\def\ifsetxxx #1{\ifsetxxx435,14016
+\def\Eifset{\Eifset439,14143
+\def\ifsetfail{\ifsetfail440,14157
+\long\def\ifsetfailxxx #1\end ifset{\ifsetfailxxx441,14213
+\def\ifclear{\ifclear443,14274
+\def\ifclearxxx #1{\ifclearxxx445,14336
+\def\Eifclear{\Eifclear449,14467
+\def\ifclearfail{\ifclearfail450,14483
+\long\def\ifclearfailxxx #1\end ifclear{\ifclearfailxxx451,14543
+\def\set{\set455,14694
+\def\setxxx #1{\setxxx456,14721
+\def\clear{\clear459,14783
+\def\clearxxx #1{\clearxxx460,14814
+\def\iftex{\iftex465,14931
+\def\Eiftex{\Eiftex466,14944
+\def\ifinfo{\ifinfo467,14958
+\long\def\ifinfoxxx #1\end ifinfo{\ifinfoxxx468,15008
+\long\def\menu #1\end menu{\menu470,15067
+\def\asis#1{\asis471,15096
+\def\math#1{\math484,15639
+\def\node{\node486,15683
+\def\nodezzz#1{\nodezzz487,15721
+\def\nodexxx[#1,#2]{\nodexxx[488,15752
+\def\donoderef{\donoderef491,15814
+\def\unnumbnoderef{\unnumbnoderef495,15935
+\def\appendixnoderef{\appendixnoderef499,16066
+\expandafter\expandafter\expandafter\appendixsetref{setref500,16112
+\let\refill=\relaxill=\relax503,16201
+\def\setfilename{\setfilename508,16415
+\outer\def\bye{\bye517,16661
+\def\inforef #1{\inforef519,16717
+\def\inforefzzz #1,#2,#3,#4**{\inforefzzz520,16755
+\def\losespace #1{\losespace522,16852
+\def\sf{\sf531,17056
+\font\defbf=cmbx10 scaled \magstep1 %was 1314bf=cmbx10557,17851
+\font\deftt=cmtt10 scaled \magstep1tt=cmtt10558,17897
+\def\df{\df559,17933
+\def\resetmathfonts{\resetmathfonts634,20527
+\def\textfonts{\textfonts647,21116
+\def\chapfonts{\chapfonts652,21331
+\def\secfonts{\secfonts657,21547
+\def\subsecfonts{\subsecfonts662,21752
+\def\indexfonts{\indexfonts667,21969
+\def\smartitalicx{\smartitalicx690,22701
+\def\smartitalic#1{\smartitalic691,22777
+\let\cite=\smartitalic=\smartitalic697,22922
+\def\b#1{\b699,22946
+\def\t#1{\t702,22981
+\def\samp #1{\samp705,23133
+\def\key #1{\key706,23166
+\def\ctrl #1{\ctrl707,23227
+\def\tclose#1{\tclose715,23429
+\def\ {\719,23595
+\def\xkey{\xkey727,23864
+\def\kbdfoo#1#2#3\par{\kbdfoo728,23880
+\def\dmn#1{\dmn737,24181
+\def\kbd#1{\kbd739,24208
+\def\l#1{\l741,24265
+\def\r#1{\r743,24294
+\def\sc#1{\sc745,24362
+\def\ii#1{\ii746,24405
+\def\titlefont#1{\titlefont754,24638
+\def\titlepage{\titlepage760,24741
+   \def\subtitlefont{\subtitlefont765,24968
+   \def\authorfont{\authorfont767,25052
+   \def\title{\title773,25262
+   \def\titlezzz##1{\titlezzz774,25297
+   \def\subtitle{\subtitle782,25612
+   \def\subtitlezzz##1{\subtitlezzz783,25653
+   \def\author{\author786,25771
+   \def\authorzzz##1{\authorzzz787,25808
+   \def\page{\page793,26099
+\def\Etitlepage{\Etitlepage803,26268
+\def\finishtitlepage{\finishtitlepage816,26656
+\def\evenheading{\evenheading845,27664
+\def\oddheading{\oddheading846,27707
+\def\everyheading{\everyheading847,27748
+\def\evenfooting{\evenfooting849,27794
+\def\oddfooting{\oddfooting850,27837
+\def\everyfooting{\everyfooting851,27878
+\def\headings #1 {\headings892,29570
+\def\HEADINGSoff{\HEADINGSoff894,29619
+\def\HEADINGSdouble{\HEADINGSdouble903,30046
+\def\HEADINGSsingle{\HEADINGSsingle913,30366
+\def\HEADINGSon{\HEADINGSon921,30587
+\def\HEADINGSafter{\HEADINGSafter923,30621
+\def\HEADINGSdoublex{\HEADINGSdoublex925,30716
+\def\HEADINGSsingleafter{\HEADINGSsingleafter932,30904
+\def\HEADINGSsinglex{\HEADINGSsinglex933,30965
+\def\today{\today942,31240
+\def\thistitle{\thistitle957,31785
+\def\settitle{\settitle958,31810
+\def\settitlezzz #1{\settitlezzz959,31847
+\def\internalBitem{\internalBitem991,32777
+\def\internalBitemx{\internalBitemx992,32827
+\def\internalBxitem "#1"{\internalBxitem994,32872
+\def\internalBxitemx "#1"{\internalBxitemx995,32952
+\def\internalBkitem{\internalBkitem997,33027
+\def\internalBkitemx{\internalBkitemx998,33079
+\def\kitemzzz #1{\kitemzzz1000,33126
+\def\xitemzzz #1{\xitemzzz1003,33228
+\def\itemzzz #1{\itemzzz1006,33331
+\def\item{\item1036,34402
+\def\itemx{\itemx1037,34453
+\def\kitem{\kitem1038,34506
+\def\kitemx{\kitemx1039,34559
+\def\xitem{\xitem1040,34614
+\def\xitemx{\xitemx1041,34667
+\def\description{\description1044,34777
+\def\table{\table1046,34827
+\def\ftable{\ftable1051,34971
+\def\Eftable{\Eftable1055,35117
+\def\vtable{\vtable1058,35186
+\def\Evtable{\Evtable1062,35332
+\def\dontindex #1{\dontindex1065,35401
+\def\fnitemindex #1{\fnitemindex1066,35421
+\def\vritemindex #1{\vritemindex1067,35466
+\def\tablez #1#2#3#4#5#6{\tablez1073,35615
+\def\Edescription{\Edescription1076,35673
+\def\itemfont{\itemfont1081,35875
+\def\Etable{\Etable1089,36101
+\def\itemize{\itemize1102,36425
+\def\itemizezzz #1{\itemizezzz1104,36461
+\def\itemizey #1#2{\itemizey1109,36556
+\def#2{1118,36802
+\def\itemcontents{\itemcontents1119,36843
+\def\bullet{\bullet1122,36891
+\def\minus{\minus1123,36918
+\def\frenchspacing{\frenchspacing1127,37026
+\def\splitoff#1#2\endmark{\splitoff1133,37251
+\def\enumerate{\enumerate1139,37481
+\def\enumeratezzz #1{\enumeratezzz1140,37520
+\def\enumeratey #1 #2\endenumeratey{\enumeratey1141,37573
+  \def\thearg{\thearg1145,37720
+  \ifx\thearg\empty \def\thearg{\thearg1146,37739
+\def\numericenumerate{\numericenumerate1183,39073
+\def\lowercaseenumerate{\lowercaseenumerate1189,39203
+\def\uppercaseenumerate{\uppercaseenumerate1202,39550
+\def\startenumeration#1{\startenumeration1218,40040
+\def\alphaenumerate{\alphaenumerate1226,40222
+\def\capsenumerate{\capsenumerate1227,40257
+\def\Ealphaenumerate{\Ealphaenumerate1228,40291
+\def\Ecapsenumerate{\Ecapsenumerate1229,40325
+\def\itemizeitem{\itemizeitem1233,40405
+\def\newindex #1{\newindex1258,41262
+\def\defindex{\defindex1267,41551
+\def\newcodeindex #1{\newcodeindex1271,41659
+\def\defcodeindex{\defcodeindex1278,41919
+\def\synindex #1 #2 {\synindex1282,42099
+\def\syncodeindex #1 #2 {\syncodeindex1291,42439
+\def\doindex#1{\doindex1308,43118
+\def\singleindexer #1{\singleindexer1309,43177
+\def\docodeindex#1{\docodeindex1312,43289
+\def\singlecodeindexer #1{\singlecodeindexer1313,43356
+\def\indexdummies{\indexdummies1315,43414
+\def\_{\_1316,43434
+\def\w{\w1317,43462
+\def\bf{\bf1318,43489
+\def\rm{\rm1319,43518
+\def\sl{\sl1320,43547
+\def\sf{\sf1321,43576
+\def\tt{\tt1322,43604
+\def\gtr{\gtr1323,43632
+\def\less{\less1324,43662
+\def\hat{\hat1325,43694
+\def\char{\char1326,43724
+\def\TeX{\TeX1327,43756
+\def\dots{\dots1328,43786
+\def\copyright{\copyright1329,43819
+\def\tclose##1{\tclose1330,43862
+\def\code##1{\code1331,43907
+\def\samp##1{\samp1332,43948
+\def\t##1{\t1333,43989
+\def\r##1{\r1334,44024
+\def\i##1{\i1335,44059
+\def\b##1{\b1336,44094
+\def\cite##1{\cite1337,44129
+\def\key##1{\key1338,44170
+\def\file##1{\file1339,44209
+\def\var##1{\var1340,44250
+\def\kbd##1{\kbd1341,44289
+\def\indexdummyfont#1{\indexdummyfont1346,44445
+\def\indexdummytex{\indexdummytex1347,44471
+\def\indexdummydots{\indexdummydots1348,44495
+\def\indexnofonts{\indexnofonts1350,44521
+\let\w=\indexdummyfontdummyfont1351,44541
+\let\t=\indexdummyfontdummyfont1352,44564
+\let\r=\indexdummyfontdummyfont1353,44587
+\let\i=\indexdummyfontdummyfont1354,44610
+\let\b=\indexdummyfontdummyfont1355,44633
+\let\emph=\indexdummyfontdummyfont1356,44656
+\let\strong=\indexdummyfontdummyfont1357,44682
+\let\cite=\indexdummyfont=\indexdummyfont1358,44710
+\let\sc=\indexdummyfontdummyfont1359,44736
+\let\tclose=\indexdummyfontdummyfont1363,44908
+\let\code=\indexdummyfontdummyfont1364,44936
+\let\file=\indexdummyfontdummyfont1365,44962
+\let\samp=\indexdummyfontdummyfont1366,44988
+\let\kbd=\indexdummyfontdummyfont1367,45014
+\let\key=\indexdummyfontdummyfont1368,45039
+\let\var=\indexdummyfontdummyfont1369,45064
+\let\TeX=\indexdummytexdummytex1370,45089
+\let\dots=\indexdummydotsdummydots1371,45113
+\let\indexbackslash=0  %overridden during \printindex.backslash=01381,45365
+\def\doind #1#2{\doind1383,45421
+{\indexdummies % Must do this here, since \bf, etc expand at this 
stagedummies1385,45464
+\def\rawbackslashxx{\rawbackslashxx1388,45604
+{\indexnofontsnofonts1393,45866
+\def\dosubind #1#2#3{\dosubind1404,46177
+{\indexdummies % Must do this here, since \bf, etc expand at this 
stagedummies1406,46225
+\def\rawbackslashxx{\rawbackslashxx1409,46329
+{\indexnofontsnofonts1413,46483
+\def\findex {\findex1442,47414
+\def\kindex {\kindex1443,47437
+\def\cindex {\cindex1444,47460
+\def\vindex {\vindex1445,47483
+\def\tindex {\tindex1446,47506
+\def\pindex {\pindex1447,47529
+\def\cindexsub {\cindexsub1449,47553
+\def\printindex{\printindex1461,47880
+\def\doprintindex#1{\doprintindex1463,47921
+  \def\indexbackslash{\indexbackslash1480,48406
+  \indexfonts\rm \tolerance=9500 \advance\baselineskip -1ptfonts\rm1481,48445
+\def\initial #1{\initial1516,49517
+\def\entry #1#2{\entry1522,49724
+  \null\nobreak\indexdotfill % Have leaders before the page 
number.dotfill1539,50371
+\def\indexdotfill{\indexdotfill1548,50699
+\def\primary #1{\primary1551,50805
+\def\secondary #1#2{\secondary1555,50887
+\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\pardotfill1558,50969
+\newbox\partialpageialpage1565,51142
+\def\begindoublecolumns{\begindoublecolumns1571,51300
+  \output={\global\setbox\partialpage=ialpage=1572,51336
+\def\enddoublecolumns{\enddoublecolumns1576,51524
+\def\doublecolumnout{\doublecolumnout1579,51609
+  address@hidden \advance\dimen@ by-\ht\partialpageialpage1580,51678
+\def\pagesofar{\pagesofar1583,51856
+\def\balancecolumns{\balancecolumns1587,52093
+  address@hidden \advance\availdimen@ by-\ht\partialpageialpage1593,52264
+     address@hidden \advance\dimen@ by-\ht\partialpageialpage1599,52525
+\newcount \appendixno  \appendixno = address@hidden,53430
+\def\appendixletter{\appendixletter1627,53471
+\def\opencontents{\opencontents1631,53574
+\def\thischapter{\thischapter1636,53755
+\def\seccheck#1{\seccheck1637,53793
+\def\chapternofonts{\chapternofonts1642,53897
+\def\result{\result1645,53972
+\def\equiv{\equiv1646,54007
+\def\expansion{\expansion1647,54040
+\def\print{\print1648,54081
+\def\TeX{\TeX1649,54114
+\def\dots{\dots1650,54143
+\def\copyright{\copyright1651,54174
+\def\tt{\tt1652,54215
+\def\bf{\bf1653,54242
+\def\w{\w1654,54270
+\def\less{\less1655,54295
+\def\gtr{\gtr1656,54326
+\def\hat{\hat1657,54355
+\def\char{\char1658,54384
+\def\tclose##1{\tclose1659,54415
+\def\code##1{\code1660,54459
+\def\samp##1{\samp1661,54499
+\def\r##1{\r1662,54539
+\def\b##1{\b1663,54573
+\def\key##1{\key1664,54607
+\def\file##1{\file1665,54645
+\def\kbd##1{\kbd1666,54685
+\def\i##1{\i1668,54793
+\def\cite##1{\cite1669,54827
+\def\var##1{\var1670,54867
+\def\emph##1{\emph1671,54905
+\def\dfn##1{\dfn1672,54945
+\def\thischaptername{\thischaptername1675,54986
+\outer\def\chapter{\chapter1676,55025
+\def\chapterzzz #1{\chapterzzz1677,55066
+{\chapternofonts%nofonts%1686,55462
+\global\let\section = \numberedsec=1691,55615
+\global\let\subsection = \numberedsubsec=1692,55650
+\global\let\subsubsection = \numberedsubsubsec=1693,55691
+\outer\def\appendix{\appendix1696,55742
+\def\appendixzzz #1{\appendixzzz1697,55785
+\global\advance \appendixno by 1 \message{no1699,55862
+\chapmacro {#1}{Appendix \appendixletter}letter1700,55931
+\xdef\thischapter{Appendix \appendixletter: 
\noexpand\thischaptername}letter:1703,56024
+{\chapternofonts%nofonts%1704,56096
+  {#1}{Appendix \appendixletter}letter1706,56152
+\appendixnoderef %noderef1709,56252
+\global\let\section = \appendixsec=1710,56271
+\global\let\subsection = \appendixsubsec=1711,56306
+\global\let\subsubsection = \appendixsubsubsec=1712,56347
+\outer\def\top{\top1715,56398
+\outer\def\unnumbered{\unnumbered1716,56438
+\def\unnumberedzzz #1{\unnumberedzzz1717,56485
+{\chapternofonts%nofonts%1721,56648
+\global\let\section = \unnumberedsec=1726,56798
+\global\let\subsection = \unnumberedsubsec=1727,56835
+\global\let\subsubsection = \unnumberedsubsubsec=1728,56878
+\outer\def\numberedsec{\numberedsec1731,56931
+\def\seczzz #1{\seczzz1732,56972
+{\chapternofonts%nofonts%1735,57128
+\outer\def\appendixsection{\appendixsection1744,57314
+\outer\def\appendixsec{\appendixsec1745,57371
+\def\appendixsectionzzz #1{\appendixsectionzzz1746,57424
+\gdef\thissection{#1}\secheading {#1}{\appendixletter}letter1748,57536
+{\chapternofonts%nofonts%1749,57604
+{#1}{\appendixletter}letter1751,57660
+\appendixnoderef %noderef1754,57760
+\outer\def\unnumberedsec{\unnumberedsec1758,57800
+\def\unnumberedseczzz #1{\unnumberedseczzz1759,57853
+{\chapternofonts%nofonts%1761,57948
+\outer\def\numberedsubsec{\numberedsubsec1769,58116
+\def\numberedsubseczzz #1{\numberedsubseczzz1770,58171
+{\chapternofonts%nofonts%1773,58350
+\outer\def\appendixsubsec{\appendixsubsec1782,58554
+\def\appendixsubseczzz #1{\appendixsubseczzz1783,58609
+\subsecheading {#1}{\appendixletter}letter1785,58731
+{\chapternofonts%nofonts%1786,58796
+{#1}{\appendixletter}letter1788,58855
+\appendixnoderef %noderef1791,58970
+\outer\def\unnumberedsubsec{\unnumberedsubsec1795,59010
+\def\unnumberedsubseczzz #1{\unnumberedsubseczzz1796,59069
+{\chapternofonts%nofonts%1798,59170
+\outer\def\numberedsubsubsec{\numberedsubsubsec1806,59341
+\def\numberedsubsubseczzz #1{\numberedsubsubseczzz1807,59402
+{\chapternofonts%nofonts%1811,59599
+\outer\def\appendixsubsubsec{\appendixsubsubsec1822,59832
+\def\appendixsubsubseczzz #1{\appendixsubsubseczzz1823,59893
+  {\appendixletter}letter1826,60032
+{\chapternofonts%nofonts%1827,60098
+  {\appendixletter}letter1829,60163
+\appendixnoderef %noderef1833,60297
+\outer\def\unnumberedsubsubsec{\unnumberedsubsubsec1837,60337
+\def\unnumberedsubsubseczzz #1{\unnumberedsubsubseczzz1838,60402
+{\chapternofonts%nofonts%1840,60509
+\def\infotop{\infotop1850,60838
+\def\infounnumbered{\infounnumbered1851,60876
+\def\infounnumberedsec{\infounnumberedsec1852,60921
+\def\infounnumberedsubsec{\infounnumberedsubsec1853,60972
+\def\infounnumberedsubsubsec{\infounnumberedsubsubsec1854,61029
+\def\infoappendix{\infoappendix1856,61093
+\def\infoappendixsec{\infoappendixsec1857,61134
+\def\infoappendixsubsec{\infoappendixsubsec1858,61181
+\def\infoappendixsubsubsec{\infoappendixsubsubsec1859,61234
+\def\infochapter{\infochapter1861,61294
+\def\infosection{\infosection1862,61333
+\def\infosubsection{\infosubsection1863,61372
+\def\infosubsubsection{\infosubsubsection1864,61417
+\global\let\section = \numberedsec=1869,61654
+\global\let\subsection = \numberedsubsec=1870,61689
+\global\let\subsubsection = \numberedsubsubsec=1871,61730
+\def\majorheading{\majorheading1885,62237
+\def\majorheadingzzz #1{\majorheadingzzz1886,62282
+\def\chapheading{\chapheading1892,62515
+\def\chapheadingzzz #1{\chapheadingzzz1893,62558
+\def\heading{\heading1898,62753
+\def\subheading{\subheading1900,62790
+\def\subsubheading{\subsubheading1902,62833
+\def\dobreak#1#2{\dobreak1909,63110
+\def\setchapterstyle #1 {\setchapterstyle1911,63188
+\def\chapbreak{\chapbreak1918,63443
+\def\chappager{\chappager1919,63493
+\def\chapoddpage{\chapoddpage1920,63531
+\def\setchapternewpage #1 {\setchapternewpage1922,63610
+\def\CHAPPAGoff{\CHAPPAGoff1924,63667
+\def\CHAPPAGon{\CHAPPAGon1928,63761
+\global\def\HEADINGSon{\HEADINGSon1931,63852
+\def\CHAPPAGodd{\CHAPPAGodd1933,63894
+\global\def\HEADINGSon{\HEADINGSon1936,63990
+\def\CHAPFplain{\CHAPFplain1940,64044
+\def\chfplain #1#2{\chfplain1944,64136
+\def\unnchfplain #1{\unnchfplain1955,64359
+\def\unnchfopen #1{\unnchfopen1963,64588
+\def\chfopen #1#2{\chfopen1969,64796
+\def\CHAPFopen{\CHAPFopen1974,64940
+\def\subsecheadingbreak{\subsecheadingbreak1981,65158
+\def\secheadingbreak{\secheadingbreak1984,65287
+\def\secheading #1#2#3{\secheading1992,65569
+\def\plainsecheading #1{\plainsecheading1993,65625
+\def\secheadingi #1{\secheadingi1994,65668
+\def\subsecheading #1#2#3#4{\subsecheading2005,66036
+\def\subsecheadingi #1{\subsecheadingi2006,66103
+\def\subsubsecfonts{\subsubsecfonts2013,66400
+\def\subsubsecheading #1#2#3#4#5{\subsubsecheading2016,66523
+\def\subsubsecheadingi #1{\subsubsecheadingi2017,66601
+\def\startcontents#1{\startcontents2031,67073
+   \unnumbchapmacro{#1}\def\thischapter{\thischapter2039,67346
+\outer\def\contents{\contents2048,67705
+\outer\def\summarycontents{\summarycontents2056,67849
+      \def\secentry ##1##2##3##4{\secentry2066,68220
+      \def\unnumbsecentry ##1##2{\unnumbsecentry2067,68255
+      \def\subsecentry ##1##2##3##4##5{\subsecentry2068,68290
+      \def\unnumbsubsecentry ##1##2{\unnumbsubsecentry2069,68331
+      \def\subsubsecentry ##1##2##3##4##5##6{\subsubsecentry2070,68369
+      \def\unnumbsubsubsecentry ##1##2{\unnumbsubsubsecentry2071,68416
+\def\chapentry#1#2#3{\chapentry2084,68850
+\def\shortchapentry#1#2#3{\shortchapentry2087,68967
+    {#2\labelspace #1}space2090,69077
+\def\unnumbchapentry#1#2{\unnumbchapentry2093,69131
+\def\shortunnumberedentry#1#2{\shortunnumberedentry2094,69178
+\def\secentry#1#2#3#4{\secentry2101,69342
+\def\unnumbsecentry#1#2{\unnumbsecentry2102,69401
+\def\subsecentry#1#2#3#4#5{\subsecentry2105,69462
+\def\unnumbsubsecentry#1#2{\unnumbsubsecentry2106,69532
+\def\subsubsecentry#1#2#3#4#5#6{\subsubsecentry2109,69606
+  \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}space2110,69640
+\def\unnumbsubsubsecentry#1#2{\unnumbsubsubsecentry2111,69691
+\def\dochapentry#1#2{\dochapentry2122,70065
+\def\dosecentry#1#2{\dosecentry2137,70670
+\def\dosubsecentry#1#2{\dosubsecentry2144,70848
+\def\dosubsubsecentry#1#2{\dosubsubsecentry2151,71033
+\def\labelspace{\labelspace2159,71284
+\def\dopageno#1{\dopageno2161,71319
+\def\doshortpageno#1{\doshortpageno2162,71345
+\def\chapentryfonts{\chapentryfonts2164,71377
+\def\secentryfonts{\secentryfonts2165,71412
+\def\point{\point2191,72371
+\def\result{\result2193,72392
+\def\expansion{\expansion2194,72465
+\def\print{\print2195,72536
+\def\equiv{\equiv2197,72603
+\def\error{\error2217,73376
+\def\tex{\tex2223,73605
address@hidden@2241,73988
+\gdef\sepspaces{\def {\ }}}\2264,74720
+\def\aboveenvbreak{\aboveenvbreak2267,74802
+\def\afterenvbreak{\afterenvbreak2271,74968
+\def\ctl{\ctl2285,75479
+\def\ctr{\ctr2286,75551
+\def\cbl{\cbl2287,75590
+\def\cbr{\cbr2288,75630
+\def\carttop{\carttop2289,75669
+\def\cartbot{\cartbot2292,75777
+\long\def\cartouche{\cartouche2298,75917
+\def\Ecartouche{\Ecartouche2325,76705
+\def\lisp{\lisp2337,76840
+\def\Elisp{\Elisp2347,77187
+\def\next##1{\next2359,77513
+\def\Eexample{\Eexample2363,77555
+\def\Esmallexample{\Esmallexample2366,77602
+\def\smalllispx{\smalllispx2372,77780
+\def\Esmalllisp{\Esmalllisp2382,78134
+\obeyspaces \obeylines \ninett \indexfonts \rawbackslashfonts2395,78490
+\def\next##1{\next2396,78547
+\def\display{\display2400,78627
+\def\Edisplay{\Edisplay2409,78946
+\def\next##1{\next2421,79257
+\def\format{\format2425,79360
+\def\Eformat{\Eformat2433,79656
+\def\next##1{\next2436,79745
+\def\flushleft{\flushleft2440,79797
+\def\Eflushleft{\Eflushleft2450,80168
+\def\next##1{\next2453,80261
+\def\flushright{\flushright2455,80283
+\def\Eflushright{\Eflushright2465,80655
+\def\next##1{\next2469,80786
+\def\quotation{\quotation2473,80844
+\def\Equotation{\Equotation2479,81036
+\def\setdeffont #1 {\setdeffont2492,81434
+\newskip\defbodyindent \defbodyindent=.4inbodyindent2494,81480
+\newskip\defargsindent \defargsindent=50ptargsindent2495,81523
+\newskip\deftypemargin \deftypemargin=12pttypemargin2496,81566
+\newskip\deflastargmargin \deflastargmargin=18ptlastargmargin2497,81609
+\def\activeparens{\activeparens2502,81807
+\def\opnr{\opnr2528,83019
+\def\lbrb{\lbrb2529,83084
+\def\defname #1#2{\defname2535,83285
+\advance\dimen2 by -\defbodyindentbodyindent2539,83403
+\advance\dimen3 by -\defbodyindentbodyindent2541,83457
+\setbox0=\hbox{\hskip \deflastargmargin{lastargmargin2543,83511
+\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for 
continuationsargsindent2545,83653
+\parshape 2 0in \dimen0 \defargsindent \dimen1     %argsindent2546,83728
+\rlap{\rightline{{\rm #2}\hskip \deftypemargin}typemargin2553,84097
+\advance\leftskip by -\defbodyindentbodyindent2556,84231
+\exdentamount=\defbodyindentbodyindent2557,84268
+\def\defparsebody #1#2#3{\defparsebody2567,84627
+\def#1{2571,84811
+\def#2{2572,84847
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2574,84919
+\exdentamount=\defbodyindentbodyindent2575,84993
+\def\defmethparsebody #1#2#3#4 {\defmethparsebody2580,85097
+\def#1{2584,85258
+\def#2##1 {2585,85294
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2587,85377
+\exdentamount=\defbodyindentbodyindent2588,85451
+\def\defopparsebody #1#2#3#4#5 {\defopparsebody2591,85536
+\def#1{2595,85697
+\def#2##1 ##2 {2596,85733
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2599,85833
+\exdentamount=\defbodyindentbodyindent2600,85907
+\def\defvarparsebody #1#2#3{\defvarparsebody2607,86178
+\def#1{2611,86365
+\def#2{2612,86401
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2614,86460
+\exdentamount=\defbodyindentbodyindent2615,86534
+\def\defvrparsebody #1#2#3#4 {\defvrparsebody2620,86625
+\def#1{2624,86784
+\def#2##1 {2625,86820
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2627,86890
+\exdentamount=\defbodyindentbodyindent2628,86964
+\def\defopvarparsebody #1#2#3#4#5 {\defopvarparsebody2631,87036
+\def#1{2635,87200
+\def#2##1 ##2 {2636,87236
+\advance\leftskip by \defbodyindent \advance \rightskip by 
\defbodyindentbodyindent2639,87323
+\exdentamount=\defbodyindentbodyindent2640,87397
+\def\defunargs #1{\defunargs2663,88157
+\def\deftypefunargs #1{\deftypefunargs2675,88539
+\def\deffn{\deffn2689,88921
+\def\deffnheader #1#2#3{\deffnheader2691,88978
+\begingroup\defname {name2692,89026
+\def\defun{\defun2698,89171
+\def\defunheader #1#2{\defunheader2700,89224
+\begingroup\defname {name2701,89299
+\defunargs {unargs2702,89335
+\def\deftypefun{\deftypefun2708,89483
+\def\deftypefunheader #1#2{\deftypefunheader2711,89605
+\def\deftypefunheaderx #1#2 #3\relax{\deftypefunheaderx2713,89714
+\begingroup\defname {name2715,89806
+\deftypefunargs {typefunargs2716,89852
+\def\deftypefn{\deftypefn2722,90023
+\def\deftypefnheader #1#2#3{\deftypefnheader2725,90172
+\def\deftypefnheaderx #1#2#3 #4\relax{\deftypefnheaderx2727,90308
+\begingroup\defname {name2729,90401
+\deftypefunargs {typefunargs2730,90441
+\def\defmac{\defmac2736,90562
+\def\defmacheader #1#2{\defmacheader2738,90619
+\begingroup\defname {name2739,90695
+\defunargs {unargs2740,90728
+\def\defspec{\defspec2746,90852
+\def\defspecheader #1#2{\defspecheader2748,90913
+\begingroup\defname {name2749,90990
+\defunargs {unargs2750,91030
+\def\deffnx #1 {\deffnx2757,91225
+\def\defunx #1 {\defunx2758,91282
+\def\defmacx #1 {\defmacx2759,91339
+\def\defspecx #1 {\defspecx2760,91398
+\def\deftypefnx #1 {\deftypefnx2761,91459
+\def\deftypeunx #1 {\deftypeunx2762,91524
+\def\defop #1 {\defop2768,91670
+\defopparsebody\Edefop\defopx\defopheader\defoptype}opparsebody\Edefop\defopx\defopheader\defoptype2769,91705
+\def\defopheader #1#2#3{\defopheader2771,91759
+\begingroup\defname {name2773,91848
+\defunargs {unargs2774,91894
+\def\defmethod{\defmethod2779,91955
+\def\defmethodheader #1#2#3{\defmethodheader2781,92028
+\begingroup\defname {name2783,92116
+\defunargs {unargs2784,92156
+\def\defcv #1 {\defcv2789,92230
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}opvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype2790,92265
+\def\defcvarheader #1#2#3{\defcvarheader2792,92324
+\begingroup\defname {name2794,92410
+\defvarargs {varargs2795,92456
+\def\defivar{\defivar2800,92529
+\def\defivarheader #1#2#3{\defivarheader2802,92592
+\begingroup\defname {name2804,92678
+\defvarargs {varargs2805,92729
+\def\defopx #1 {\defopx2811,92878
+\def\defmethodx #1 {\defmethodx2812,92935
+\def\defcvx #1 {\defcvx2813,93000
+\def\defivarx #1 {\defivarx2814,93057
+\def\defvarargs #1{\defvarargs2821,93328
+\def\defvr{\defvr2827,93472
+\def\defvrheader #1#2#3{\defvrheader2829,93527
+\begingroup\defname {name2830,93575
+\def\defvar{\defvar2834,93660
+\def\defvarheader #1#2{\defvarheader2836,93720
+\begingroup\defname {name2837,93791
+\defvarargs {varargs2838,93827
+\def\defopt{\defopt2843,93893
+\def\defoptheader #1#2{\defoptheader2845,93953
+\begingroup\defname {name2846,94024
+\defvarargs {varargs2847,94063
+\def\deftypevar{\deftypevar2852,94120
+\def\deftypevarheader #1#2{\deftypevarheader2855,94236
+\begingroup\defname {name2857,94319
+\def\deftypevr{\deftypevr2864,94493
+\def\deftypevrheader #1#2#3{\deftypevrheader2866,94564
+\begingroup\defname {name2867,94616
+\def\defvrx #1 {\defvrx2875,94853
+\def\defvarx #1 {\defvarx2876,94910
+\def\defoptx #1 {\defoptx2877,94969
+\def\deftypevarx #1 {\deftypevarx2878,95028
+\def\deftypevrx #1 {\deftypevrx2879,95095
+\def\deftpargs #1{\deftpargs2884,95244
+\def\deftp{\deftp2888,95324
+\def\deftpheader #1#2#3{\deftpheader2890,95379
+\begingroup\defname {name2891,95427
+\def\deftpx #1 {\deftpx2896,95586
+\def\setref#1{\setref2907,95907
+\def\unnumbsetref#1{\unnumbsetref2912,96021
+\def\appendixsetref#1{\appendixsetref2917,96128
+\def\pxref#1{\pxref2928,96539
+\def\xref#1{\xref2929,96575
+\def\ref#1{\ref2930,96610
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\xrefX[2931,96640
+\def\printedmanual{\printedmanual2932,96683
+\def\printednodename{\printednodename2933,96721
+\def\printednodename{\printednodename2938,96846
+section ``\printednodename'' in \cite{\printedmanual}\printedmanual2953,97479
+\refx{x2956,97557
+\def\dosetq #1#2{\dosetq2964,97777
+\def\internalsetq #1#2{\internalsetq2972,98035
+\def\Ypagenumber{\Ypagenumber2976,98136
+\def\Ytitle{\Ytitle2978,98162
+\def\Ynothing{\Ynothing2980,98189
+\def\Ysectionnumberandtype{\Ysectionnumberandtype2982,98206
+\def\Yappendixletterandtype{\Yappendixletterandtype2991,98522
+\ifnum\secno=0 Appendix\xreftie'char\the\appendixno{no2992,98552
+\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno 
%no.\the\secno2993,98607
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno 
%no.\the\secno.\the\subsecno2995,98711
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno 
%no.\the\secno.\the\subsecno.\the\subsubsecno2997,98782
+  \def\linenumber{\linenumber3008,99121
+\def\refx#1#2{\refx3014,99305
+\def\xrdef #1#2{\xrdef3036,99931
+\def\readauxfile{\readauxfile3039,100016
+\def\supereject{\supereject3109,101797
+\footstrut\parindent=\defaultparindent\hang\textindent{aultparindent\hang\textindent3130,102482
+\def\openindices{\openindices3138,102668
+\newdimen\defaultparindent \defaultparindent = 15ptaultparindent3150,102893
+\parindent = \defaultparindentaultparindent3151,102945
+\def\smallbook{\smallbook3174,103669
+\global\def\Esmallexample{\Esmallexample3191,104096
+\def\afourpaper{\afourpaper3195,104187
+\def\finalout{\finalout3223,104995
+\def\normaldoublequote{\normaldoublequote3234,105256
+\def\normaltilde{\normaltilde3235,105282
+\def\normalcaret{\normalcaret3236,105302
+\def\normalunderscore{\normalunderscore3237,105322
+\def\normalverticalbar{\normalverticalbar3238,105347
+\def\normalless{\normalless3239,105373
+\def\normalgreater{\normalgreater3240,105392
+\def\normalplus{\normalplus3241,105414
+\def\ifusingtt#1#2{\ifusingtt3252,105906
+\def\activedoublequote{\activedoublequote3260,106234
+\def~{~3263,106320
+\def^{^3266,106381
+\def_{_3269,106420
+\def\_{\_3271,106494
+\def\lvvmode{\lvvmode3278,106831
+\def|{|3281,106881
+\def<{<3284,106944
+\def>{>3287,107001
+\def+{+3289,107039
+\def\turnoffactive{\turnoffactive3295,107200
+\global\def={=3306,107486
+\def\normalbackslash{\normalbackslash3320,107868
+
+c-src//c.c,76
+T f(1,0
+}T i;2,14
+void bar(5,69
+int foobar(6,94
+interface_locate(9,131
+
+c.c,2136
+void (*fa)fa131,
+void 132,
+my_printf 135,
+void fatala 138,
+void fatalb 139,
+max 141,
+struct bar 143,
+  char z;144,
+  struct foo f;145,
+__attribute__ ((always_inline)) max 147,
+extern int old_var 149,
+struct foo150,
+  char a;152,
+  int x[x153,
+char stack[stack155,
+struct S 156,
+struct S { short f[f156,
+  int *__ip;__ip159,
+  union wait *__up;__up160,
+} wait_status_ptr_t 161,
+Some_Class  A 162,
+typedef T1 T3 163,
+T3 z 164,
+typedef int more_aligned_int 165,
+struct S  __attribute__ ((vector_size (16))) foo;166,
+int foo 167,
+char *__attribute__((aligned(8))) *f;f168,
+int i 169,
+extern void foobar 170,
+typedef struct cacheLRUEntry_s172,
+  U16 next;174,
+  U16 prev;175,
+__attribute__ ((packed)) cacheLRUEntry_t;177,
+struct foo 178,
+  int x;179,
+  char a,180,
+  char a, b,180,
+  char a, b, c,180,
+  char a, b, c, d;180,
+     f1 183,
+void f2 184,
+__attribute__((noreturn)) void d0 185,
+  __attribute__((format(printf, 1, 2))) d1 186,
+  d2 187,
+int x 188,
+struct foo 189,
+struct foo { int x[x189,
+short array[array190,
+int f193,
+DEAFUN 196,
+XDEFUN 203,
+DEFUN ("x-get-selection-internal", 
Fx_get_selection_internal,x-get-selection-internal206,
+       Fx_get_selection_internal,x-get-selection-internal212,
+      Fy_get_selection_internal,y-get-selection-internal216,
+defun_func1(218,
+DEFUN_func2(220,
+typedef int bool;222,
+bool funcboo 223,
+struct my_struct 226,
+typedef struct my_struct my_typedef;228,
+int bla 229,
+a(234,
+int func1237,
+static struct cca_control init_control 239,
+static tpcmd rbtp 240,
+static byte ring1 241,
+static byte ring2 242,
+request request 243,
+int func2 246,
+  aaa;249,
+  bbb;251,
+struct sss1 252,
+struct sss2253,
+  struct ss3255,
+struct a b;259,
+struct aa *b;b260,
+  **b;b262,
+caccacacca 263,
+a 267,
+  typedef struct aa 269,
+  typedef struct aa {} aaa;269,
+static void inita 271,
+node *lasta lasta272,
+b 273,
+  typedef  int bb;275,
+static void initb 277,
+node *lastb lastb278,
+typedef enum { REG_ENOSYS 279,
+typedef enum { REG_ENOSYS = -1, aa 279,
+typedef enum { REG_ENOSYS = -1, aa } reg_errcode_t;279,
+
+c-src/a/b/b.c,18
+#define this 1,0
+
+../c/c.web,20
+#define questo 34,
+
+y-src/parse.y,1061
+#define obstack_chunk_alloc 46,1111
+#define obstack_chunk_free 47,1149
+int yylex 57,1317
+void yyerror 59,1347
+void yyerror 61,1376
+VOIDSTAR parse_hash;63,1400
+extern VOIDSTAR hash_find(64,1421
+unsigned char fnin[fnin67,1519
+#define YYSTYPE 71,1617
+typedef struct node *YYSTYPE;YYSTYPE72,1648
+YYSTYPE parse_return;73,1678
+YYSTYPE make_list 75,1716
+YYSTYPE make_list 77,1760
+char *instr;instr80,1790
+int parse_error 81,1803
+extern struct obstack tmp_mem;82,1824
+line:line86,1862
+exp:exp94,1975
+exp_list:exp_list262,5642
+range_exp:range_exp268,5740
+range_exp_list:range_exp_list272,5770
+cell:cell278,5888
+yyerror FUN1(285,5935
+make_list FUN2(292,6015
+#define ERROR 303,6215
+extern struct node *yylval;yylval305,6233
+unsigned char parse_cell_or_range 308,6278
+unsigned char parse_cell_or_range 310,6342
+yylex FUN0(314,6392
+parse_cell_or_range FUN2(586,11758
+#define CK_ABS_R(670,13200
+#define CK_REL_R(674,13279
+#define CK_ABS_C(679,13408
+#define CK_REL_C(683,13487
+#define MAYBEREL(688,13616
+str_to_col FUN1(846,16817
+
+y-src/parse.c,520
+#define YYBISON 4,64
+# define       NE      6,114
+# define       LE      7,130
+# define       GE      8,146
+# define       NEG     9,162
+# define       L_CELL  10,179
+# define       L_RANGE 11,199
+# define       L_VAR   12,220
+# define       L_CONST 13,239
+# define       L_FN0   14,260
+# define       L_FN1   15,279
+# define       L_FN2   16,298
+# define       L_FN3   17,317
+# define       L_FN4   18,336
+# define       L_FNN   19,355
+# define       L_FN1R  20,374
+# define       L_FN2R  21,394
+# define       L_FN3R  22,414
+# define       L_FN4R  23,434
+# define       L_FNNR  24,454
+# define       L_LE    25,474
+# define       L_NE    26,492
+# define       L_GE    27,510
+
+parse.y,1464
+#define obstack_chunk_alloc 46,
+#define obstack_chunk_free 47,
+int yylex 57,
+void yyerror 59,
+void yyerror 61,
+VOIDSTAR parse_hash;63,
+extern VOIDSTAR hash_find(64,
+unsigned char fnin[fnin67,
+#define YYSTYPE 71,
+typedef struct node *YYSTYPE;YYSTYPE72,
+YYSTYPE parse_return;73,
+YYSTYPE make_list 75,
+YYSTYPE make_list 77,
+char *instr;instr80,
+int parse_error 81,
+extern struct obstack tmp_mem;82,
+#define YYSTYPE 85,
+# define YYDEBUG 88,
+#define        YYFINAL 93,
+#define        YYFLAG  94,
+#define        YYNTBASE        95,
+#define YYTRANSLATE(98,
+static const char yytranslate[yytranslate101,
+static const short yyprhs[yyprhs134,
+static const short yyrhs[yyrhs142,
+static const short yyrline[yyrline171,
+static const char *const yytname[yytname185,
+static const short yyr1[yyr1197,
+static const short yyr2[yyr2207,
+static const short yydefact[yydefact219,
+static const short yydefgoto[yydefgoto237,
+static const short yypact[yypact242,
+static const short yypgoto[yypgoto260,
+#define        YYLAST  266,
+static const short yytable[yytable269,
+static const short yycheck[yycheck330,
+yyerror FUN1(285,
+make_list FUN2(292,
+#define ERROR 303,
+extern struct node *yylval;yylval305,
+unsigned char parse_cell_or_range 308,
+unsigned char parse_cell_or_range 310,
+yylex FUN0(314,
+parse_cell_or_range FUN2(586,
+#define CK_ABS_R(670,
+#define CK_REL_R(674,
+#define CK_ABS_C(679,
+#define CK_REL_C(683,
+#define MAYBEREL(688,
+str_to_col FUN1(846,
+
+/usr/share/bison/bison.simple,2238
+# define YYSTD(40,
+# define YYSTD(42,
+#  define YYSTACK_ALLOC 50,
+#  define YYSIZE_T 51,
+#    define YYSTACK_ALLOC 55,
+#    define YYSIZE_T 56,
+#     define YYSTACK_ALLOC 59,
+#  define YYSTACK_FREE(67,
+#   define YYSIZE_T 71,
+#    define YYSIZE_T 75,
+#  define YYSTACK_ALLOC 78,
+#  define YYSTACK_FREE 79,
+union yyalloc83,
+  short yyss;85,
+  YYSTYPE yyvs;86,
+  YYLTYPE yyls;88,
+# define YYSTACK_GAP_MAX 93,
+#  define YYSTACK_BYTES(98,
+#  define YYSTACK_BYTES(102,
+# define YYSTACK_RELOCATE(112,
+# define YYSIZE_T 128,
+# define YYSIZE_T 131,
+#  define YYSIZE_T 136,
+#   define YYSIZE_T 140,
+# define YYSIZE_T 145,
+#define yyerrok        148,
+#define yyclearin      149,
+#define YYEMPTY        150,
+#define YYEOF  151,
+#define YYACCEPT       152,
+#define YYABORT 153,
+#define YYERROR        154,
+#define YYFAIL 158,
+#define YYRECOVERING(159,
+#define YYBACKUP(160,
+#define YYTERROR       177,
+#define YYERRCODE      178,
+# define YYLLOC_DEFAULT(189,
+#   define YYLEX       200,
+#   define YYLEX       202,
+#   define YYLEX       206,
+#   define YYLEX       208,
+# define YYLEX 212,
+#  define YYFPRINTF 225,
+# define YYDPRINTF(228,
+int yydebug;237,
+# define YYDPRINTF(239,
+# define YYINITDEPTH 244,
+# undef YYMAXDEPTH255,
+# define YYMAXDEPTH 259,
+#  define yymemcpy 264,
+yymemcpy 271,
+#   define yystrlen 293,
+yystrlen 298,
+#   define yystpcpy 316,
+yystpcpy 322,
+#  define YYPARSE_PARAM_ARG 351,
+#  define YYPARSE_PARAM_DECL352,
+#  define YYPARSE_PARAM_ARG 354,
+#  define YYPARSE_PARAM_DECL 355,
+# define YYPARSE_PARAM_ARG358,
+# define YYPARSE_PARAM_DECL359,
+int yyparse 365,
+int yyparse 367,
+#define YY_DECL_NON_LSP_VARIABLES      374,
+# define YY_DECL_VARIABLES     385,
+# define YY_DECL_VARIABLES     391,
+yyparse 403,
+# define YYPOPSTACK 445,
+# define YYPOPSTACK 447,
+# undef YYSTACK_RELOCATE548,
+  *++yyvsp yyvsp746,
+  *++yylsp yylsp748,
+  yyn 755,
+  yystate 757,
+    yystate 761,
+  goto yynewstate;763,
+  goto yyerrlab1;823,
+  yyerrstatus 846,
+  goto yyerrhandle;848,
+  yyn 861,
+  yystate 875,
+  yyn 895,
+  yyn 903,
+  YYDPRINTF 917,
+  *++yyvsp yyvsp919,
+  *++yylsp yylsp921,
+  yystate 924,
+  goto yynewstate;925,
+  yyresult 932,
+  goto yyreturn;933,
+  yyresult 939,
+  goto yyreturn;940,
+  yyerror 946,
+  yyresult 947,
+
+y-src/atest.y,9
+exp    2,3
+
+y-src/cccp.c,303
+#define YYBISON 4,63
+# define       INT     6,113
+# define       CHAR    7,130
+# define       NAME    8,148
+# define       ERROR   9,166
+# define       OR      10,185
+# define       AND     11,201
+# define       EQUAL   12,218
+# define       NOTEQUAL        13,237
+# define       LEQ     14,259
+# define       GEQ     15,276
+# define       LSH     16,293
+# define       RSH     17,310
+# define       UNARY   18,327
+
+cccp.y,2532
+typedef unsigned char U_CHAR;38,
+struct arglist 41,
+  struct arglist *next;next42,
+  U_CHAR *name;name43,
+  int length;44,
+  int argno;45,
+#define NULL 51,
+#define GENERIC_PTR 56,
+#define GENERIC_PTR 58,
+#define NULL_PTR 63,
+int yylex 66,
+void yyerror 67,
+int expression_value;68,
+static jmp_buf parse_return_error;70,
+static int keyword_parsing 73,
+extern unsigned char is_idstart[is_idstart76,
+extern unsigned char is_idstart[], is_idchar[is_idchar76,
+extern unsigned char is_idstart[], is_idchar[], is_hor_space[is_hor_space76,
+extern char *xmalloc xmalloc78,
+extern int pedantic;81,
+extern int traditional;84,
+#define CHAR_TYPE_SIZE 87,
+#define INT_TYPE_SIZE 91,
+#define LONG_TYPE_SIZE 95,
+#define WCHAR_TYPE_SIZE 99,
+#define possible_sum_sign(104,
+static void integer_overflow 106,
+static long left_shift 107,
+static long right_shift 108,
+  struct constant 113,
+  struct constant {long value;113,
+  struct constant {long value; int unsignedp;113,
+  struct constant {long value; int unsignedp;} integer;113,
+  struct name 114,
+  struct name {U_CHAR *address;address114,
+  struct name {U_CHAR *address; int length;114,
+  struct name {U_CHAR *address; int length;} name;114,
+  struct arglist *keywords;keywords115,
+  int voidval;116,
+  char *sval;sval117,
+} yystype;118,
+# define YYSTYPE 119,
+# define YYDEBUG 122,
+#define        YYFINAL 127,
+#define        YYFLAG  128,
+#define        YYNTBASE        129,
+#define YYTRANSLATE(132,
+static const char yytranslate[yytranslate135,
+static const short yyprhs[yyprhs167,
+static const short yyrhs[yyrhs174,
+static const short yyrline[yyrline195,
+static const char *const yytname[yytname208,
+static const short yyr1[yyr1219,
+static const short yyr2[yyr2228,
+static const short yydefact[yydefact239,
+static const short yydefgoto[yydefgoto251,
+static const short yypact[yypact256,
+static const short yypgoto[yypgoto268,
+#define        YYLAST  274,
+static const short yytable[yytable277,
+static const short yycheck[yycheck301,
+static char *lexptr;lexptr332,
+parse_number 341,
+struct token 437,
+  char *operator;operator438,
+  int token;439,
+static struct token tokentab2[tokentab2442,
+yylex 459,
+parse_escape 740,
+yyerror 836,
+integer_overflow 844,
+left_shift 851,
+right_shift 873,
+parse_c_expression 893,
+extern int yydebug;919,
+main 923,
+unsigned char is_idchar[is_idchar948,
+unsigned char is_idstart[is_idstart950,
+char is_hor_space[is_hor_space953,
+initialize_random_junk 958,
+error 988,
+warning 993,
+lookup 999,
+
+/usr/share/bison/bison.simple,2238
+# define YYSTD(40,
+# define YYSTD(42,
+#  define YYSTACK_ALLOC 50,
+#  define YYSIZE_T 51,
+#    define YYSTACK_ALLOC 55,
+#    define YYSIZE_T 56,
+#     define YYSTACK_ALLOC 59,
+#  define YYSTACK_FREE(67,
+#   define YYSIZE_T 71,
+#    define YYSIZE_T 75,
+#  define YYSTACK_ALLOC 78,
+#  define YYSTACK_FREE 79,
+union yyalloc83,
+  short yyss;85,
+  YYSTYPE yyvs;86,
+  YYLTYPE yyls;88,
+# define YYSTACK_GAP_MAX 93,
+#  define YYSTACK_BYTES(98,
+#  define YYSTACK_BYTES(102,
+# define YYSTACK_RELOCATE(112,
+# define YYSIZE_T 128,
+# define YYSIZE_T 131,
+#  define YYSIZE_T 136,
+#   define YYSIZE_T 140,
+# define YYSIZE_T 145,
+#define yyerrok        148,
+#define yyclearin      149,
+#define YYEMPTY        150,
+#define YYEOF  151,
+#define YYACCEPT       152,
+#define YYABORT 153,
+#define YYERROR        154,
+#define YYFAIL 158,
+#define YYRECOVERING(159,
+#define YYBACKUP(160,
+#define YYTERROR       177,
+#define YYERRCODE      178,
+# define YYLLOC_DEFAULT(189,
+#   define YYLEX       200,
+#   define YYLEX       202,
+#   define YYLEX       206,
+#   define YYLEX       208,
+# define YYLEX 212,
+#  define YYFPRINTF 225,
+# define YYDPRINTF(228,
+int yydebug;237,
+# define YYDPRINTF(239,
+# define YYINITDEPTH 244,
+# undef YYMAXDEPTH255,
+# define YYMAXDEPTH 259,
+#  define yymemcpy 264,
+yymemcpy 271,
+#   define yystrlen 293,
+yystrlen 298,
+#   define yystpcpy 316,
+yystpcpy 322,
+#  define YYPARSE_PARAM_ARG 351,
+#  define YYPARSE_PARAM_DECL352,
+#  define YYPARSE_PARAM_ARG 354,
+#  define YYPARSE_PARAM_DECL 355,
+# define YYPARSE_PARAM_ARG358,
+# define YYPARSE_PARAM_DECL359,
+int yyparse 365,
+int yyparse 367,
+#define YY_DECL_NON_LSP_VARIABLES      374,
+# define YY_DECL_VARIABLES     385,
+# define YY_DECL_VARIABLES     391,
+yyparse 403,
+# define YYPOPSTACK 445,
+# define YYPOPSTACK 447,
+# undef YYSTACK_RELOCATE548,
+  *++yyvsp yyvsp746,
+  *++yylsp yylsp748,
+  yyn 755,
+  yystate 757,
+    yystate 761,
+  goto yynewstate;763,
+  goto yyerrlab1;823,
+  yyerrstatus 846,
+  goto yyerrhandle;848,
+  yyn 861,
+  yystate 875,
+  yyn 895,
+  yyn 903,
+  YYDPRINTF 917,
+  *++yyvsp yyvsp919,
+  *++yylsp yylsp921,
+  yystate 924,
+  goto yynewstate;925,
+  yyresult 932,
+  goto yyreturn;933,
+  yyresult 939,
+  goto yyreturn;940,
+  yyerror 946,
+  yyresult 947,
+
+y-src/cccp.y,2171
+typedef unsigned char U_CHAR;38,1201
+struct arglist 41,1301
+  struct arglist *next;next42,1318
+  U_CHAR *name;name43,1342
+  int length;44,1358
+  int argno;45,1372
+#define NULL 51,1468
+#define GENERIC_PTR 56,1578
+#define GENERIC_PTR 58,1611
+#define NULL_PTR 63,1670
+int yylex 66,1712
+void yyerror 67,1726
+int expression_value;68,1743
+static jmp_buf parse_return_error;70,1766
+static int keyword_parsing 73,1865
+extern unsigned char is_idstart[is_idstart76,1944
+extern unsigned char is_idstart[], is_idchar[is_idchar76,1944
+extern unsigned char is_idstart[], is_idchar[], 
is_hor_space[is_hor_space76,1944
+extern char *xmalloc xmalloc78,2009
+extern int pedantic;81,2062
+extern int traditional;84,2114
+#define CHAR_TYPE_SIZE 87,2162
+#define INT_TYPE_SIZE 91,2229
+#define LONG_TYPE_SIZE 95,2296
+#define WCHAR_TYPE_SIZE 99,2365
+#define possible_sum_sign(104,2556
+static void integer_overflow 106,2632
+static long left_shift 107,2665
+static long right_shift 108,2692
+  struct constant 112,2733
+  struct constant {long value;112,2733
+  struct constant {long value; int unsignedp;112,2733
+  struct constant {long value; int unsignedp;} integer;112,2733
+  struct name 113,2789
+  struct name {U_CHAR *address;address113,2789
+  struct name {U_CHAR *address; int length;113,2789
+  struct name {U_CHAR *address; int length;} name;113,2789
+  struct arglist *keywords;keywords114,2840
+  int voidval;115,2868
+  char *sval;sval116,2883
+start 143,3226
+exp1   148,3330
+exp    156,3505
+exp    185,4295
+keywords 306,7835
+static char *lexptr;lexptr332,8579
+parse_number 341,8842
+struct token 437,11038
+  char *operator;operator438,11053
+  int token;439,11071
+static struct token tokentab2[tokentab2442,11088
+yylex 459,11367
+parse_escape 740,17718
+yyerror 836,19599
+integer_overflow 844,19690
+left_shift 851,19804
+right_shift 873,20194
+parse_c_expression 893,20732
+extern int yydebug;919,21416
+main 923,21483
+unsigned char is_idchar[is_idchar948,21901
+unsigned char is_idstart[is_idstart950,21996
+char is_hor_space[is_hor_space953,22160
+initialize_random_junk 958,22259
+error 988,22915
+warning 993,22963
+lookup 999,23033
+
+tex-src/nonewline.tex,0
+
+php-src/sendmail.php,0
+
+a-src/empty.zz,0
diff --git a/test/etags/Makefile b/test/etags/Makefile
new file mode 100644
index 0000000..635d129
--- /dev/null
+++ b/test/etags/Makefile
@@ -0,0 +1,79 @@
+ADASRC=$(addprefix ./ada-src/,etags-test-for.ada 2ataspri.adb 2ataspri.ads 
waroquiers.ada)
+ASRC=$(addprefix ./a-src/,empty.zz empty.zz.gz)
+CSRC=$(addprefix ./c-src/,abbrev.c .//c.c torture.c getopt.h etags.c\
+ exit.c exit.strange_suffix sysdep.h tab.c dostorture.c\
+ emacs/src/gmalloc.c emacs/src/regex.h emacs/src/keyboard.c emacs/src/lisp.h\
+ machsyscalls.c machsyscalls.h fail.c a/b/b.c) ../etags/c-src/h.h
+CPSRC=$(addprefix ./cp-src/,c.C abstract.C abstract.H cfront.H burton.cpp 
burton.cpp\
+ functions.cpp MDiagArray2.h Pctest.h Range.h\
+ screen.cpp screen.hpp conway.cpp conway.hpp clheir.cpp.gz clheir.hpp.gz 
fail.C)
+ELSRC=$(addprefix ./el-src/,TAGTEST.EL emacs/lisp/progmodes/etags.el)
+ERLSRC=$(addprefix ./erl-src/,gs_dialog.erl lines.erl lists.erl)
+FORTHSRC=$(addprefix ./forth-src/,test-forth.fth)
+FSRC=$(addprefix ./f-src/,entry.for entry.strange_suffix entry.strange)
+HTMLSRC=$(addprefix ./html-src/,softwarelibero.html index.shtml algrthms.html 
software.html)
+JAVASRC=$(addprefix ./java-src/,AWTEMul.java KeyEve.java SMan.java SysCol.java 
TG.java)
+LUASRC=$(addprefix ./lua-src/,allegro.lua)
+MAKESRC=$(addprefix ./make-src/,Makefile)
+OBJCSRC=$(addprefix ./objc-src/,Subprocess.h Subprocess.m PackInsp.h 
PackInsp.m)
+OBJCPPSRC=$(addprefix ./objcpp-src/,SimpleCalc.H SimpleCalc.M)
+PASSRC=$(addprefix ./pas-src/,common.pas)
+PERLSRC=$(addprefix ./perl-src/,htlmify-cystic yagrip.pl kai-test.pl mirror.pl)
+PHPSRC=$(addprefix ./php-src/,lce_functions.php ptest.php sendmail.php)
+PSSRC=$(addprefix ./ps-src/,rfc1245.ps)
+PROLSRC=$(addprefix ./prol-src/,ordsets.prolog natded.prolog)
+PYTSRC=$(addprefix ./pyt-src/,server.py)
+TEXSRC=$(addprefix ./tex-src/,testenv.tex gzip.texi texinfo.tex nonewline.tex)
+YSRC=$(addprefix ./y-src/,parse.y parse.c atest.y cccp.c cccp.y)
+SRCS=Makefile ${ADASRC} ${ASRC} ${CSRC} ${CPSRC} ${ELSRC} ${ERLSRC} ${FSRC}\
+     ${FORTHSRC} ${HTMLSRC} ${JAVASRC} ${LUASRC} ${MAKESRC} ${OBJCSRC}\
+     ${OBJCPPSRC} ${PASSRC} ${PHPSRC} ${PERLSRC} ${PSSRC} ${PROLSRC} ${PYTSRC}\
+     ${TEXSRC} ${YSRC}
+NONSRCS=./f-src/entry.strange ./erl-src/lists.erl ./cp-src/clheir.hpp.gz
+
+ETAGS_PROG=../../lib-src/etags
+CTAGS_PROG=../../lib-src/ctags
+
+REGEX=/[ \t]*DEFVAR_[A-Z_ \t\n(]+"\([^"]+\)"/
+xx="this line is here because of a fontlock bug
+
+RUN=
+
+OPTIONS=--members --declarations address@hidden
+ARGS=- < srclist
+
+infiles = $(filter-out ${NONSRCS},${SRCS}) srclist regexfile
+
+check:
+       @$(MAKE) OPTIONS='--no-members' ediff_1
+       @$(MAKE) OPTIONS='--declarations --no-members' ediff_2
+       @$(MAKE) OPTIONS='--members' ediff_3
+       @$(MAKE) OPTIONS='address@hidden --no-members' ediff_4
+       @$(MAKE) OPTIONS='nonexistent --members --declarations address@hidden' 
ediff_5
+       @$(MAKE) cdiff
+
+ediff%: ETAGS.good% ETAGS ${infiles}
+       diff -u --suppress-common-lines --width=80 ETAGS.good$* ETAGS
+
+cdiff: CTAGS.good CTAGS ${infiles}
+       diff -u --suppress-common-lines --width=80 CTAGS.good CTAGS
+
+ETAGS: FRC ${infiles}
+       ${RUN} ${ETAGS_PROG} ${OPTIONS} -o $@ ${ARGS}
+
+CTAGS: FRC ${infiles}
+       ${RUN} ${CTAGS_PROG} -o $@ address@hidden ${ARGS}
+
+srclist: Makefile
+       @for i in $(SRCS); do echo $$i; done > srclist
+       @echo "srclist remade"
+
+regexfile: Makefile
+       @echo ' -- This is for GNU Emacs source files' > regexfile
+       @echo '${REGEX}' >> regexfile
+       @echo '{c}${REGEX}\\1/m' >> regexfile
+       @echo "regexfile remade"
+
+.PRECIOUS: ETAGS.good CTAGS.good
+
+FRC:;
diff --git a/test/etags/a-src/empty.zz b/test/etags/a-src/empty.zz
new file mode 100644
index 0000000..e69de29
diff --git a/test/etags/a-src/empty.zz.gz b/test/etags/a-src/empty.zz.gz
new file mode 100644
index 0000000..e69de29
diff --git a/test/etags/ada-src/2ataspri.adb b/test/etags/ada-src/2ataspri.adb
new file mode 100644
index 0000000..43ca983
--- /dev/null
+++ b/test/etags/ada-src/2ataspri.adb
@@ -0,0 +1,665 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
+--                                                                          --
+--                S Y S T E M . T A S K _ P R I M I T I V E S               --
+--                                                                          --
+--                                  B o d y                                 --
+--                                                                          --
+--                             $Revision: 1.1 $                             --
+--                                                                          --
+--     Copyright (C) 1991,1992,1993,1994,1996 Florida State University      --
+--                                                                          --
+-- GNARL is free software; you can redistribute it  and/or modify it  under --
+-- terms  of  the  GNU  Library General Public License  as published by the --
+-- Free Software  Foundation;  either version 2, or (at  your  option)  any --
+-- later  version.  GNARL is distributed  in the hope that  it will be use- --
+-- ful, but but WITHOUT ANY WARRANTY;  without even the implied warranty of --
+-- MERCHANTABILITY  or  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Gen- --
+-- eral Library Public License  for more details.  You should have received --
+-- a  copy of the GNU Library General Public License along with GNARL;  see --
+-- file COPYING.LIB.  If not,  write to the  Free Software Foundation,  675 --
+-- Mass Ave, Cambridge, MA 02139, USA.                                      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+with GNAT.IO;
+with Interfaces.C.POSIX_timers;
+
+with Interfaces.C.POSIX_Error;
+use  Interfaces.C.POSIX_Error;
+
+with Interfaces.C.POSIX_RTE;
+use  Interfaces.C.POSIX_RTE;
+
+with Interfaces.C.Pthreads;
+use  Interfaces.C.Pthreads;
+
+with Interfaces.C;
+use  Interfaces.C;
+
+with System.Tasking;
+use  System.Tasking;
+
+with System.Storage_Elements;
+use  System.Storage_Elements;
+
+with System.Compiler_Exceptions;
+use  System.Compiler_Exceptions;
+
+with System.Task_Specific_Data;
+use  System.Task_Specific_Data;
+
+with System.Secondary_Stack;
+use  System.Secondary_Stack;
+
+with System.Tasking_Soft_Links;
+
+with System.Task_Clock;
+use  System.Task_Clock;
+
+with Unchecked_Conversion;
+with Interfaces.C.System_Constants;
+
+package body System.Task_Primitives is
+
+   use Interfaces.C.Pthreads;
+   use Interfaces.C.System_Constants;
+
+   package RTE renames Interfaces.C.POSIX_RTE;
+   package TSL renames System.Tasking_Soft_Links;
+
+   Test_And_Set_Mutex : Lock;
+
+   Abort_Signal : constant := 6;
+
+   Abort_Handler : Abort_Handler_Pointer;
+
+   ATCB_Key : aliased pthread_key_t;
+
+   Unblocked_Signal_Mask : aliased RTE.Signal_Set;
+   --  The set of signals that should be unblocked in a task.
+   --  This is in general the signals that can be generated synchronously,
+   --  and which should therefore be converted into Ada exceptions.
+   --  It also includes the Abort_Signal, to allow asynchronous abortion.
+
+   function To_void_ptr is new
+     Unchecked_Conversion (TCB_Ptr, void_ptr);
+
+   function To_TCB_Ptr is new
+     Unchecked_Conversion (void_ptr, TCB_Ptr);
+
+   function pthread_mutexattr_setprotocol
+     (attr : access pthread_attr_t; priority : integer) return int;
+   pragma Import (C,
+                  pthread_mutexattr_setprotocol,
+                  "pthread_mutexattr_setprotocol",
+                  "pthread_mutexattr_setprotocol");
+
+   function pthread_mutexattr_setprio_ceiling
+     (attr : access pthread_attr_t; priority : int) return int;
+   pragma Import (C,
+                  pthread_mutexattr_setprio_ceiling,
+                  "pthread_mutexattr_setprio_ceiling",
+                  "pthread_mutexattr_setprio_ceiling");
+
+   pthread_mutexattr_default : pthread_mutexattr_t;
+   pragma Import (C, pthread_mutexattr_default,
+                  "pthread_mutexattr_default",
+                  "pthread_mutexattr_default");
+
+   -----------------------
+   -- Local Subprograms --
+   -----------------------
+
+   procedure Abort_Wrapper
+     (signo   : Integer;
+      info    : RTE.siginfo_ptr;
+      context : System.Address);
+   --  This is a signal handler procedure which calls the user-specified
+   --  abort handler procedure.
+
+   procedure LL_Wrapper (T : TCB_Ptr);
+   --  A wrapper procedure that is called from a new low-level task.
+   --  It performs initializations for the new task and calls the
+   --  user-specified startup procedure.
+
+   -------------------------
+   -- Initialize_LL_Tasks --
+   -------------------------
+
+   procedure Initialize_LL_Tasks (T : TCB_Ptr) is
+      Result : int;
+   begin
+      T.LL_Entry_Point := null;
+      T.Thread := pthread_self;
+
+      Result := pthread_key_create (ATCB_Key'Access, null);
+
+      if Result = FUNC_ERR then
+         raise Storage_Error;               --  Insufficient resources.
+      end if;
+
+      T.Thread := pthread_self;
+
+      Result := pthread_setspecific (ATCB_Key, To_void_ptr (T));
+
+      if Result = FUNC_ERR then
+         GNAT.IO.Put_Line ("Get specific failed");
+         raise Storage_Error;               --  Insufficient resources.
+      end if;
+      pragma Assert (Result /= FUNC_ERR,
+         "GNULLI failure---pthread_setspecific");
+
+   end Initialize_LL_Tasks;
+
+   ----------
+   -- Self --
+   ----------
+
+   function Self return TCB_Ptr is
+      Temp   : aliased void_ptr;
+      Result : int;
+   begin
+      Result := pthread_getspecific (ATCB_Key, Temp'Access);
+      pragma Assert (Result /= FUNC_ERR,
+          "GNULLI failure---pthread_getspecific");
+      return To_TCB_Ptr (Temp);
+   end Self;
+
+   ---------------------
+   -- Initialize_Lock --
+   ---------------------
+
+   procedure Initialize_Lock
+     (Prio : System.Any_Priority;
+      L    : in out Lock)
+   is
+
+      Attributes : aliased pthread_mutexattr_t;
+      Result     : int;
+      MUTEX_NONRECURSIVE_NP : constant := 2;
+
+   begin
+      Result := pthread_mutexattr_init (Attributes'Access);
+      if Result = FUNC_ERR then
+         raise STORAGE_ERROR;  --  should be ENOMEM
+      end if;
+
+      Result := pthread_mutexattr_setkind
+        (Attributes'Access, MUTEX_NONRECURSIVE_NP);
+      if Result = FUNC_ERR then
+         raise STORAGE_ERROR;  --  should be ENOMEM
+      end if;
+
+      Result := pthread_mutex_init (L.mutex'Access, Attributes);
+
+      if Result = FUNC_ERR then
+         Result := pthread_mutexattr_destroy (Attributes'Access);
+         raise STORAGE_ERROR;  --  should be ENOMEM ???
+      end if;
+
+      Result := pthread_mutexattr_destroy (Attributes'Access);
+
+   end Initialize_Lock;
+
+   -------------------
+   -- Finalize_Lock --
+   -------------------
+
+   procedure Finalize_Lock (L : in out Lock) is
+      Result : int;
+   begin
+      Result := pthread_mutex_destroy (L.mutex'Access);
+      pragma Assert
+         (Result /= FUNC_ERR, "GNULLI failure---pthread_mutex_destroy");
+   end Finalize_Lock;
+
+   ----------------
+   -- Write_Lock --
+   ----------------
+
+   --
+   --  The current pthreads implementation does not check for Ceiling
+   --  violations.
+   --
+   procedure Write_Lock (L : in out Lock; Ceiling_Violation : out Boolean) is
+      Result : int;
+   begin
+      Ceiling_Violation := False;
+      Result := pthread_mutex_lock (L.mutex'Access);
+      pragma Assert
+        (Result /= FUNC_ERR, "GNULLI FUNC_ERR---pthread_mutex_lock");
+   end Write_Lock;
+
+   ---------------
+   -- Read_Lock --
+   ---------------
+
+   procedure Read_Lock (L : in out Lock; Ceiling_Violation : out Boolean)
+      renames Write_Lock;
+
+   ------------
+   -- Unlock --
+   ------------
+
+   procedure Unlock (L : in out Lock) is
+      Result : int;
+   begin
+      Result := pthread_mutex_unlock (L.mutex'Access);
+      pragma Assert
+         (Result /= FUNC_ERR, "GNULLI FUNC_ERR---pthread_mutex_unlock");
+   end Unlock;
+
+   ---------------------
+   -- Initialize_Cond --
+   ---------------------
+
+   procedure Initialize_Cond (Cond : in out Condition_Variable) is
+      Attributes : aliased Pthreads.pthread_condattr_t;
+      Result     : int;
+   begin
+      Result := pthread_condattr_init (Attributes'Access);
+
+      if Result = FUNC_ERR then
+         raise STORAGE_ERROR;  --  should be ENOMEM ???
+      end if;
+
+      --  Result := pthread_cond_init (Cond.CV'Access, Attributes'Access);
+      Result := pthread_cond_init (Cond.CV'Access, Attributes);
+
+
+      if Result = FUNC_ERR then
+         raise STORAGE_ERROR;  --  should be ENOMEM  ???
+      end if;
+
+      Result := pthread_condattr_destroy (Attributes'Access);
+      pragma Assert
+         (Result /= FUNC_ERR, "GNULLI FUNC_ERR---pthread_condattr_destroy");
+
+   end Initialize_Cond;
+
+   -------------------
+   -- Finalize_Cond --
+   -------------------
+
+   procedure Finalize_Cond (Cond : in out Condition_Variable) is
+      Result : int;
+
+   begin
+      Result := pthread_cond_destroy (Cond.CV'Access);
+      pragma Assert
+         (Result /= FUNC_ERR, "GNULLI failure---pthread_cond_destroy");
+   end Finalize_Cond;
+
+
+   ---------------
+   -- Cond_Wait --
+   ---------------
+
+   procedure Cond_Wait (Cond : in out Condition_Variable; L : in out Lock) is
+      Result : int;
+   begin
+      Result := pthread_cond_wait (Cond.CV'Access, L.mutex'Access);
+      pragma Assert
+        (Result /= FUNC_ERR, "GNULLI failure---pthread_cond_wait");
+   end Cond_Wait;
+
+   ---------------------
+   -- Cond_Timed_Wait --
+   ---------------------
+
+   procedure Cond_Timed_Wait
+     (Cond      : in out Condition_Variable;
+      L         : in out Lock;
+      Abs_Time  : System.Task_Clock.Stimespec;
+      Timed_Out : out Boolean) is
+
+      Result : int;
+      TV     : aliased timespec;
+
+      use POSIX_Error;
+
+   begin
+      Timed_Out := False;  --  Assume success until we know otherwise
+
+      TV.tv_sec := int (Interfaces.C.POSIX_timers.time_t
+        (Task_Clock.Stimespec_Seconds (Abs_Time)));
+
+      TV.tv_nsec := long (Interfaces.C.POSIX_timers.Nanoseconds
+        (Task_Clock.Stimespec_NSeconds (Abs_Time)));
+
+      Result := pthread_cond_timedwait
+        (Cond.CV'Access, L.mutex'Access, TV'Access);
+      pragma Assert
+         (Result /= FUNC_ERR, "GNULLI failure---pthread_cond_timedwait");
+
+   end Cond_Timed_Wait;
+
+   -----------------
+   -- Cond_Signal --
+   -----------------
+
+   procedure Cond_Signal (Cond : in out Condition_Variable) is
+      Result : int;
+   begin
+      Result :=  pthread_cond_signal (Cond.CV'Access);
+      pragma Assert
+         (Result /= FUNC_ERR, "GNULLI failure---pthread_cond_signal");
+   end Cond_Signal;
+
+   ------------------
+   -- Set_Priority --
+   ------------------
+
+   procedure Set_Priority
+     (T : TCB_Ptr;
+      Prio : System.Any_Priority) is
+
+      Result : int;
+      Thread : Pthreads.pthread_t renames T.Thread;
+
+   begin
+      Result := pthread_setprio (Thread, int (Prio));
+      pragma Assert
+         (Result /= FUNC_ERR, "GNULLI failure---pthread_setprio");
+   end Set_Priority;
+
+   ----------------------
+   -- Set_Own_Priority --
+   ----------------------
+
+   procedure Set_Own_Priority (Prio : System.Any_Priority) is
+   begin
+      null;
+      --  ENOSYS Result :=
+      --     pthread_setprio (pthread_self, int (Prio));
+      --  pragma Assert
+      --     (Result /= FUNC_ERR, "GNULLI failure---pthread_setprio");
+   end Set_Own_Priority;
+
+   ------------------
+   -- Get_Priority --
+   ------------------
+
+   function Get_Priority (T : TCB_Ptr) return System.Any_Priority is
+      Priority : aliased int := 0;
+   begin
+      --  ENOSYS Result := pthread_getprio (T.Thread, Priority'Access);
+      --  pragma Assert
+      --     (Result /= FUNC_ERR, "GNULLI failure---pthread_getprio");
+      return System.Priority (Priority);
+   end Get_Priority;
+
+   -----------------------
+   --  Get_Own_Priority --
+   -----------------------
+
+   function Get_Own_Priority return System.Any_Priority is
+      Result : int;
+      Priority : aliased int := 0;
+   begin
+      Result := pthread_getprio (pthread_self, Priority'Access);
+      pragma Assert
+         (Result /= FUNC_ERR, "GNULLI failure---pthread_getprio");
+      return System.Priority (Priority);
+   end Get_Own_Priority;
+
+   --------------------
+   -- Create_LL_Task --
+   --------------------
+
+   procedure Create_LL_Task
+     (Priority       : System.Any_Priority;
+      Stack_Size     : Task_Storage_Size;
+      Task_Info      : System.Task_Info.Task_Info_Type;
+      LL_Entry_Point : LL_Task_Procedure_Access;
+      Arg            : System.Address;
+      T              : TCB_Ptr) is
+
+      use Pthreads;
+
+      Attributes : aliased pthread_attr_t;
+      Result     : int;
+      L_Priority : System.Any_Priority := Priority;
+
+      function To_Start_Addr is new
+        Unchecked_Conversion (System.Address, start_addr);
+
+   begin
+      T.LL_Entry_Point := LL_Entry_Point;
+      T.LL_Arg := Arg;
+      T.Stack_Size := Stack_Size;
+
+      Result := pthread_attr_init (Attributes'Access);
+      pragma Assert (Result /= FUNC_ERR, "GNULLI failure---pthread_attr_init");
+
+--      Result := pthread_attr_setdetachstate (Attributes'Access, 1);
+--      pragma Assert
+--        (Result /= FUNC_ERR, "GNULLI failure---pthread_setdetachstate");
+
+      Result := pthread_attr_setstacksize
+        (Attributes'Access, size_t (Stack_Size));
+      pragma Assert
+        (Result /= FUNC_ERR, "GNULLI failure---pthread_setstacksize");
+
+      Result := pthread_attr_setinheritsched
+        (Attributes'Access, PTHREAD_DEFAULT_SCHED);
+      pragma Assert
+        (Result /= FUNC_ERR, "GNULLI failure---pthread_setinheritsched");
+
+      Result := pthread_attr_setsched
+        (Attributes'Access, SCHED_FIFO);
+      pragma Assert
+        (Result /= FUNC_ERR, "GNULLI failure---pthread_setinheritsched");
+
+      --  The following priority adjustment is a kludge to get around needing
+      --  root privileges to run at higher than 18 for FIFO or 19 for OTHER.
+
+      if (L_Priority > 18) then
+         L_Priority := 18;
+      elsif (L_Priority < 14) then
+         L_Priority := 14;
+      end if;
+
+      Result := pthread_attr_setprio
+        (Attributes'Access, int (L_Priority));
+      pragma Assert
+        (Result /= FUNC_ERR, "GNULLI failure---pthread_attr_setprio");
+
+      Result := pthread_create
+        (T.Thread'Access,
+         Attributes,
+         To_Start_Addr (LL_Wrapper'Address),
+         T.all'Address);
+      if Result = FUNC_ERR then
+         GNAT.IO.Put_Line ("pthread create failed");
+         raise Storage_Error;
+      end if;
+      pragma Assert (Result /= FUNC_ERR, "GNULLI failure---pthread_create");
+
+      Result := pthread_attr_destroy (Attributes'Access);
+      pragma Assert
+        (Result /= FUNC_ERR, "GNULLI failure---pthread_attr_destroy");
+
+   end Create_LL_Task;
+
+   -----------------
+   -- Exit_LL_Task --
+   ------------------
+
+   procedure Exit_LL_Task is
+   begin
+      pthread_exit (System.Null_Address);
+   end Exit_LL_Task;
+
+   ----------------
+   -- Abort_Task --
+   ----------------
+
+   procedure Abort_Task (T : TCB_Ptr) is
+      Result     : int;
+   begin
+--      Result := pthread_kill (T.Thread);
+--      pragma Assert
+--         (Result /= FUNC_ERR, "GNULLI failure---pthread_kill");
+      null;
+   end Abort_Task;
+
+   ----------------
+   -- Test_Abort --
+   ----------------
+
+   --  This procedure does nothing.  It is intended for systems without
+   --  asynchronous abortion, where the runtime system would have to
+   --  synchronously poll for pending abortions.  This should be done
+   --  at least at every synchronization point.
+
+   procedure Test_Abort is
+   begin
+      null;
+   end Test_Abort;
+
+   ---------------------------
+   -- Install_Abort_Handler --
+   ---------------------------
+
+   procedure Install_Abort_Handler (Handler : Abort_Handler_Pointer) is
+      act     : aliased RTE.struct_sigaction;
+      old_act : aliased RTE.struct_sigaction;
+      Result  : POSIX_Error.Return_Code;
+      SA_SIGINFO : constant := 64;
+
+      use type POSIX_Error.Return_Code;
+
+   begin
+      Abort_Handler := Handler;
+
+      act.sa_flags := SA_SIGINFO;
+      act.sa_handler := Abort_Wrapper'Address;
+      RTE.sigemptyset (act.sa_mask'Access, Result);
+      pragma Assert (Result /= FUNC_ERR, "GNULLI failure---sigemptyset");
+
+      RTE.sigaction (Abort_Signal, act'Access, old_act'Access, Result);
+      pragma Assert (Result /= FUNC_ERR, "GNULLI failure---sigaction");
+   end Install_Abort_Handler;
+
+   -------------------
+   -- Abort_Wrapper --
+   -------------------
+
+   --  This is the handler called by the OS when an abort signal is
+   --  received; it in turn calls the handler installed by the client.
+   --  This procedure serves to isolate the client from the
+   --  implementation-specific calling conventions of asynchronous
+   --  handlers.
+
+   procedure Abort_Wrapper
+     (signo   : Integer;
+      info    : RTE.siginfo_ptr;
+      context : System.Address)
+   is
+      function Address_To_Call_State is new
+        Unchecked_Conversion (System.Address, Pre_Call_State);
+
+   begin
+      Abort_Handler (Address_To_Call_State (context));
+   end Abort_Wrapper;
+
+   ---------------------------
+   -- Install_Error_Handler --
+   ---------------------------
+
+   procedure Install_Error_Handler (Handler : System.Address) is
+
+      Temp : Address;
+
+      use Pthreads;
+
+   begin
+      --  Set up the soft links to tasking services used in the absence of
+      --  tasking.  These replace tasking-free defaults.
+
+      Temp := TSL.Get_Jmpbuf_Address.all;
+      --  pthread_set_jumpbuf_address (Temp);
+
+      Temp := TSL.Get_Sec_Stack_Addr.all;
+      --  pthread_set_sec_stack_addr  (Temp);
+
+      --  TSL.Get_Jmpbuf_Address := pthread_get_jumpbuf_address'Access;
+      --  TSL.Set_Jmpbuf_Address := pthread_set_jumpbuf_address'Access;
+      --  TSL.Get_Gnat_Exception := pthread_get_exception'Access;
+      --  TSL.Set_Gnat_Exception := pthread_set_exception'Access;
+   end Install_Error_Handler;
+
+   ---------------
+   -- LL_Assert --
+   ---------------
+
+   procedure LL_Assert (B : Boolean; M : String) is
+   begin
+      null;
+   end LL_Assert;
+
+   ----------------
+   -- LL_Wrapper --
+   ----------------
+
+   procedure LL_Wrapper (T : TCB_Ptr) is
+      Result  : POSIX_Error.Return_Code;
+      Result1 : int;
+      Exc_Stack : String (1 .. 256);
+      Exc_Base  : Address := Exc_Stack (Exc_Stack'Last)'Address + 1;
+      Old_Set : aliased RTE.Signal_Set;
+   begin
+      Result1 := pthread_setspecific (ATCB_Key, T.all'Address);
+
+      RTE.sigprocmask (
+        RTE.SIG_UNBLOCK, Unblocked_Signal_Mask'Access, Old_Set'Access, Result);
+      pragma Assert (
+        Result /= Failure, "GNULLI failure---sigprocmask");
+
+      --  Note that the following call may not return!
+      T.LL_Entry_Point (T.LL_Arg);
+   end LL_Wrapper;
+
+   --------------------------
+   -- Test and Set support --
+   --------------------------
+
+   procedure Initialize_TAS_Cell (Cell : out TAS_Cell) is
+   begin
+      Cell.Value := 0;
+   end Initialize_TAS_Cell;
+
+   procedure Finalize_TAS_Cell (Cell : in out TAS_Cell) is
+   begin
+      null;
+   end Finalize_TAS_Cell;
+
+   procedure Clear (Cell : in out TAS_Cell) is
+   begin
+      Cell.Value := 1;
+   end Clear;
+
+   procedure Test_And_Set (Cell : in out TAS_Cell; Result : out Boolean) is
+      Error   : Boolean;
+   begin
+      Write_Lock (Test_And_Set_Mutex, Error);
+
+      if Cell.Value = 1 then
+         Result := False;
+      else
+         Result :=  True;
+         Cell.Value := 1;
+      end if;
+      Unlock (Test_And_Set_Mutex);
+   end Test_And_Set;
+
+   function  Is_Set (Cell : in TAS_Cell) return Boolean is
+   begin
+      return Cell.Value = 1;
+   end Is_Set;
+begin
+   Initialize_Lock (System.Any_Priority'Last, Test_And_Set_Mutex);
+end System.Task_Primitives;
diff --git a/test/etags/ada-src/2ataspri.ads b/test/etags/ada-src/2ataspri.ads
new file mode 100644
index 0000000..01c7860
--- /dev/null
+++ b/test/etags/ada-src/2ataspri.ads
@@ -0,0 +1,298 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
+--                                                                          --
+--                S Y S T E M . T A S K _ P R I M I T I V E S               --
+--                                                                          --
+--                                  S p e c                                 --
+--                                                                          --
+--                             $Revision: 1.1 $                             --
+--                                                                          --
+--   Copyright (C) 1991,1992,1993,1994,1995,1996 Florida State University   --
+--                                                                          --
+-- GNARL is free software; you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+-- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+-- for  more details.  You should have  received  a copy of the GNU General --
+-- Public License  distributed with GNARL; see file COPYING.  If not, write --
+-- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
+-- MA 02111-1307, USA.                                                      --
+--                                                                          --
+-- As a special exception,  if other files  instantiate  generics from this --
+-- unit, or you link  this unit with other files  to produce an executable, --
+-- this  unit  does not  by itself cause  the resulting  executable  to  be --
+-- covered  by the  GNU  General  Public  License.  This exception does not --
+-- however invalidate  any other reasons why  the executable file  might be --
+-- covered by the  GNU Public License.                                      --
+--                                                                          --
+-- GNARL was developed by the GNARL team at Florida State University. It is --
+-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
+-- State University (http://www.gnat.com).                                  --
+--                                                                          --
+------------------------------------------------------------------------------
+
+with Interfaces.C;
+--  Used for Size_t;
+
+with Interfaces.C.Pthreads;
+--  Used for, size_t,
+--            pthread_mutex_t,
+--            pthread_cond_t,
+--            pthread_t
+
+with Interfaces.C.POSIX_RTE;
+--  Used for, Signal,
+--            siginfo_ptr,
+
+with System.Task_Clock;
+--  Used for, Stimespec
+
+with Unchecked_Conversion;
+
+pragma Elaborate_All (Interfaces.C.Pthreads);
+
+with System.Task_Info;
+package System.Task_Primitives is
+
+   --  Low level Task size and state definition
+
+   type LL_Task_Procedure_Access is access procedure (Arg : System.Address);
+
+   type Pre_Call_State is new System.Address;
+
+   type Task_Storage_Size is new Interfaces.C.size_t;
+
+   type Machine_Exceptions is new Interfaces.C.POSIX_RTE.Signal;
+
+   type Error_Information is new Interfaces.C.POSIX_RTE.siginfo_ptr;
+
+   type Lock is private;
+   type Condition_Variable is private;
+
+   --  The above types should both be limited. They are not due to a hack in
+   --  ATCB allocation which allocates a block of the correct size and then
+   --  assigns an initialized ATCB to it. This won't work with limited types.
+   --  When allocation is done with new, these can become limited once again.
+   --  ???
+
+   type Task_Control_Block is record
+      LL_Entry_Point : LL_Task_Procedure_Access;
+      LL_Arg         : System.Address;
+      Thread         : aliased Interfaces.C.Pthreads.pthread_t;
+      Stack_Size     : Task_Storage_Size;
+      Stack_Limit    : System.Address;
+   end record;
+
+   type TCB_Ptr is access all Task_Control_Block;
+
+   --  Task ATCB related and variables.
+
+   function Address_To_TCB_Ptr is new
+     Unchecked_Conversion (System.Address, TCB_Ptr);
+
+   procedure Initialize_LL_Tasks (T : TCB_Ptr);
+   --  Initialize GNULLI. T points to the Task Control Block that should
+   --  be initialized for use by the environment task.
+
+   function Self return TCB_Ptr;
+   --  Return a pointer to the Task Control Block of the calling task.
+
+   procedure Initialize_Lock (Prio : System.Any_Priority; L : in out Lock);
+   --  Initialize a lock object. Prio is the ceiling priority associated
+   --  with the lock.
+
+   procedure Finalize_Lock (L : in out Lock);
+   --  Finalize a lock object, freeing any resources allocated by the
+   --  corresponding Initialize_Lock.
+
+   procedure Write_Lock (L : in out Lock; Ceiling_Violation : out Boolean);
+   pragma Inline (Write_Lock);
+   --  Lock a lock object for write access to a critical section. After
+   --  this operation returns, the calling task owns the lock, and
+   --  no other Write_Lock or Read_Lock operation on the same object will
+   --  return the owner executes an Unlock operation on the same object.
+
+   procedure Read_Lock (L : in out Lock; Ceiling_Violation : out Boolean);
+   pragma Inline (Read_Lock);
+   --  Lock a lock object for read access to a critical section. After
+   --  this operation returns, the calling task owns the lock, and
+   --  no other Write_Lock operation on the same object will return until
+   --  the owner(s) execute Unlock operation(s) on the same object.
+   --  A Read_Lock to an owned lock object may return while the lock is
+   --  still owned, though an implementation may also implement
+   --  Read_Lock to have the same semantics.
+
+   procedure Unlock (L : in out Lock);
+   pragma Inline (Unlock);
+   --  Unlock a locked lock object. The results are undefined if the
+   --  calling task does not own the lock. Lock/Unlock operations must
+   --  be nested, that is, the argument to Unlock must be the object
+   --  most recently locked.
+
+   procedure Initialize_Cond (Cond : in out Condition_Variable);
+   --  Initialize a condition variable object.
+
+   procedure Finalize_Cond (Cond : in out Condition_Variable);
+   --  Finalize a condition variable object, recovering any resources
+   --  allocated for it by Initialize_Cond.
+
+   procedure Cond_Wait (Cond : in out Condition_Variable; L : in out Lock);
+   pragma Inline (Cond_Wait);
+   --  Wait on a condition variable. The mutex object L is unlocked
+   --  atomically, such that another task that is able to lock the mutex
+   --  can be assured that the wait has actually commenced, and that
+   --  a Cond_Signal operation will cause the waiting task to become
+   --  eligible for execution once again. Before Cond_Wait returns,
+   --  the waiting task will again lock the mutex. The waiting task may become
+   --  eligible for execution at any time, but will become eligible for
+   --  execution when a Cond_Signal operation is performed on the
+   --  same condition variable object. The effect of more than one
+   --  task waiting on the same condition variable is unspecified.
+
+   procedure Cond_Timed_Wait
+     (Cond      : in out Condition_Variable;
+      L         : in out Lock; Abs_Time : System.Task_Clock.Stimespec;
+      Timed_Out : out Boolean);
+   pragma Inline (Cond_Timed_Wait);
+   --  Wait on a condition variable, as for Cond_Wait, above. In addition,
+   --  the waiting task will become eligible for execution again
+   --  when the absolute time specified by Timed_Out arrives.
+
+   procedure Cond_Signal (Cond : in out Condition_Variable);
+   pragma Inline (Cond_Signal);
+   --  Wake up a task waiting on the condition variable object specified
+   --  by Cond, making it eligible for execution once again.
+
+   procedure Set_Priority (T : TCB_Ptr; Prio : System.Any_Priority);
+   pragma Inline (Set_Priority);
+   --  Set the priority of the task specified by T to P.
+
+   procedure Set_Own_Priority (Prio : System.Any_Priority);
+   pragma Inline (Set_Own_Priority);
+   --  Set the priority of the calling task to P.
+
+   function Get_Priority (T : TCB_Ptr) return System.Any_Priority;
+   pragma Inline (Get_Priority);
+   --  Return the priority of the task specified by T.
+
+   function Get_Own_Priority return System.Any_Priority;
+   pragma Inline (Get_Own_Priority);
+   --  Return the priority of the calling task.
+
+   procedure Create_LL_Task
+     (Priority       : System.Any_Priority;
+      Stack_Size     : Task_Storage_Size;
+      Task_Info      : System.Task_Info.Task_Info_Type;
+      LL_Entry_Point : LL_Task_Procedure_Access;
+      Arg            : System.Address;
+      T              : TCB_Ptr);
+   --  Create a new low-level task with priority Priority. A new thread
+   --  of control is created with a stack size of at least Stack_Size,
+   --  and the procedure LL_Entry_Point is called with the argument Arg
+   --  from this new thread of control. The Task Control Block pointed
+   --  to by T is initialized to refer to this new task.
+
+   procedure Exit_LL_Task;
+   --  Exit a low-level task. The resources allocated for the task
+   --  by Create_LL_Task are recovered. The task no longer executes, and
+   --  the effects of further operations on task are unspecified.
+
+   procedure Abort_Task (T : TCB_Ptr);
+   --  Abort the task specified by T (the target task). This causes
+   --  the target task to asynchronously execute the handler procedure
+   --  installed by the target task using Install_Abort_Handler. The
+   --  effect of this operation is unspecified if there is no abort
+   --  handler procedure for the target task.
+
+   procedure Test_Abort;
+   --  ??? Obsolete?  This is intended to allow implementation of
+   --      abortion and ATC in the absence of an asynchronous Abort_Task,
+   --      but I think that we decided that GNARL can handle this on
+   --      its own by making sure that there is an Undefer_Abortion at
+   --      every abortion synchronization point.
+
+   type Abort_Handler_Pointer is access procedure (Context : Pre_Call_State);
+
+   procedure Install_Abort_Handler (Handler : Abort_Handler_Pointer);
+   --  Install an abort handler procedure. This procedure is called
+   --  asynchronously by the calling task whenever a call to Abort_Task
+   --  specifies the calling task as the target. If the abort handler
+   --  procedure is asynchronously executed during a GNULLI operation
+   --  and then calls some other GNULLI operation, the effect is unspecified.
+
+   procedure Install_Error_Handler (Handler : System.Address);
+   --  Install an error handler for the calling task. The handler will
+   --  be called synchronously if an error is encountered during the
+   --  execution of the calling task.
+
+   procedure LL_Assert (B : Boolean; M : String);
+   --  If B is False, print the string M to the console and halt the
+   --  program.
+
+   Task_Wrapper_Frame : constant Integer := 72;
+   --  This is the size of the frame for the Pthread_Wrapper procedure.
+
+   type Proc is access procedure (Addr : System.Address);
+
+
+   --  Test and Set support
+   type TAS_Cell is private;
+   --  On some systems we can not assume that an arbitrary memory location
+   --  can be used in an atomic test and set instruction (e.g. on some
+   --  multiprocessor machines, only memory regions are cache interlocked).
+   --  TAS_Cell is private to facilitate adaption to a variety of
+   --  implementations.
+
+   procedure Initialize_TAS_Cell (Cell :    out TAS_Cell);
+   pragma Inline (Initialize_TAS_Cell);
+   --  Initialize a Test And Set Cell.  On some targets this will allocate
+   --  a system-level lock object from a special pool.  For most systems,
+   --  this is a nop.
+
+   procedure Finalize_TAS_Cell   (Cell : in out TAS_Cell);
+   pragma Inline (Finalize_TAS_Cell);
+   --  Finalize a Test and Set cell, freeing any resources allocated by the
+   --  corresponding Initialize_TAS_Cell.
+
+   procedure Clear        (Cell : in out TAS_Cell);
+   pragma Inline (Clear);
+   --  Set the state of the named TAS_Cell such that a subsequent call to
+   --  Is_Set will return False.  This operation must be atomic with
+   --  respect to the Is_Set and Test_And_Set operations for the same
+   --  cell.
+
+   procedure Test_And_Set (Cell : in out TAS_Cell; Result : out Boolean);
+   pragma Inline (Test_And_Set);
+   --  Modify the state of the named TAS_Cell such that a subsequent call
+   --  to Is_Set will return True.  Result is set to True if Is_Set
+   --  was False prior to the call, False otherwise.  This operation must
+   --  be atomic with respect to the Clear and Is_Set operations for the
+   --  same cell.
+
+   function  Is_Set       (Cell : in     TAS_Cell) return Boolean;
+   pragma Inline (Is_Set);
+   --  Returns the current value of the named TAS_Cell.  This operation
+   --  must be atomic with respect to the Clear and Test_And_Set operations
+   --  for the same cell.
+
+private
+
+   type Lock is
+      record
+         mutex : aliased Interfaces.C.Pthreads.pthread_mutex_t;
+      end record;
+
+   type Condition_Variable is
+      record
+         CV : aliased Interfaces.C.Pthreads.pthread_cond_t;
+      end record;
+
+   type TAS_Cell is
+      record
+         Value : aliased Interfaces.C.unsigned := 0;
+      end record;
+
+end System.Task_Primitives;
diff --git a/test/etags/ada-src/etags-test-for.ada 
b/test/etags/ada-src/etags-test-for.ada
new file mode 100644
index 0000000..09e5a1e
--- /dev/null
+++ b/test/etags/ada-src/etags-test-for.ada
@@ -0,0 +1,193 @@
+   type LL_Task_Procedure_Access is access procedure (Arg : System.Address);
+
+   function Body_Required
+      (N : Node_Id) return Boolean is
+   begin
+      pragma Assert (False
+          or else NT (N).Nkind = N_Compilation_Unit);
+      return Flag13 (N);
+   end Body_Required;
+
+   type Type_Specific_Data is record
+      Idepth        : Natural;
+      Expanded_Name : Cstring_Ptr;
+      External_Tag  : Cstring_Ptr;
+      HT_Link       : Tag;
+      Ancestor_Tags : Tag_Table (Natural);
+   end record;
+
+   function "abs"   (Right : Complex) return Real'Base renames Modulus;
+
+   type Barrier_Function_Pointer is access
+     function
+       (O : System.Address;
+        E : Protected_Entry_Index)
+        return Boolean;
+
+   function "=" (L, R : System.Address) return Boolean
+     renames System."=";
+
+   type usfreelock_ptr is access
+     procedure (lock : ulock_t; arena : usptr_t_ptr);
+
+   function p pragma Import (C,
+                  "pthread_mutexattr_setprio_ceiling",
+                  "pthread_mutexattr_setprio_ceiling");
+   pragma Import ()
+   procedure LL_Wrapper (T : TCB_Ptr);
+
+function p ("p");
+
+-- This file is an Ada file containing test data
+-- for etags (Ada83 and Ada95 support).
+
+package Pkg1 is
+
+  type Private_T is private;
+
+  package Inner1 is
+    procedure Private_T;
+  end Inner1;
+
+  package Inner2 is
+    task Private_T;
+  end Inner2;
+
+  type Public_T is
+    record
+      A : Integer;
+      B : Integer;
+    end record;
+
+  procedure Pkg1_Proc1;
+
+  procedure Pkg1_Proc2 (I : Integer);
+
+  function Pkg1_Func1 return Boolean;
+
+  function Pkg1_Func2 (Ijk : Integer; Z : Integer) return Natural;
+
+
+  package Pkg1_Pkg1 is
+    procedure Pkg1_Pkg1_Proc1;
+  end Pkg1_Pkg1;
+
+  task type Task_Type is
+    entry Entry1;
+    entry Entry2 (I : Integer);
+  end;
+
+private
+
+  type Private_T is
+    record
+      Z : Integer;
+      W : Boolean;
+    end record;
+end Pkg1;
+
+package body Pkg1 is
+
+  procedure Pkg1_Proc1 is
+  begin
+    null;
+  end;
+
+  package body Inner1 is
+    procedure Private_T is
+    begin
+      null;
+    end;
+  end Inner1;
+
+  package body Inner2 is
+    task body Private_T is
+    begin
+      loop
+        null;
+      end loop;
+    end;
+  end Inner2;
+
+  task body Task_Type is
+  begin
+    select
+      accept Entry1 do
+        null;
+      end;
+    or
+      accept Entry2 (I : Integer) do
+        null;
+      end;
+    end select;
+  end;
+
+
+  procedure Pkg1_Proc2 (I : Integer) is
+  begin
+    null;
+  end Pkg1_Proc2;
+
+
+  function Pkg1_Func1 return Boolean is separate;
+
+  function Pkg1_Func2 (Ijk : Integer; Z : Integer) return Natural is
+  begin
+    return 1;
+  end;
+
+
+  package body Pkg1_Pkg1 is separate;
+
+
+end Pkg1;
+
+separate (Pkg1)
+package body Pkg1_Pkg1 is
+  procedure Pkg1_Pkg1_Proc1 is
+  begin
+    null;
+  end;
+end Pkg1_Pkg1;
+
+
+separate (Pkg1)
+function  Pkg1_Func1 return Boolean is
+begin
+  return False;
+end;
+
+
+-- from now on, this is Ada 95 specific.
+package Truc is
+  I : Integer;
+end Truc;
+
+package Truc.Bidule is
+
+  protected Bidule is
+    entry Basar;
+  end Bidule;
+
+  protected type Machin_T is
+    entry Truc;
+  end Machin_T;
+
+end Truc.Bidule;
+
+package body Truc.Bidule is
+  protected body Bidule is
+    entry Basar is
+    begin
+      null;
+    end;
+  end Bidule;
+
+  protected Machin_T is
+    entry Truc is
+    begin
+      null;
+    end;
+  end Machin_T;
+
+end Truc.Bidule;
diff --git a/test/etags/ada-src/waroquiers.ada 
b/test/etags/ada-src/waroquiers.ada
new file mode 100644
index 0000000..3161209
--- /dev/null
+++ b/test/etags/ada-src/waroquiers.ada
@@ -0,0 +1,153 @@
+-- This file is an Ada file containing test data
+-- for etags (Ada83 and Ada95 support).
+package Pkg1 is
+
+  type Private_T is private;
+
+  package Inner1 is
+    procedure Private_T;
+  end Inner1;
+
+  package Inner2 is
+    task Private_T;
+  end Inner2;
+
+  type Public_T is
+    record
+      A : Integer;
+      B : Integer;
+    end record;
+
+  procedure Pkg1_Proc1;
+
+  procedure Pkg1_Proc2 (I : Integer);
+
+  function Pkg1_Func1 return Boolean;
+
+  function Pkg1_Func2 (Ijk : Integer; Z : Integer) return Natural;
+
+
+  package Pkg1_Pkg1 is
+    procedure Pkg1_Pkg1_Proc1;
+  end Pkg1_Pkg1;
+
+  task type Task_Type is
+    entry Entry1;
+    entry Entry2 (I : Integer);
+  end;
+private
+
+  type Private_T is
+    record
+      Z : Integer;
+      W : Boolean;
+    end record;
+end Pkg1;
+package body Pkg1 is
+
+  procedure Pkg1_Proc1 is
+  begin
+    null;
+  end;
+
+  package body Inner1 is
+    procedure Private_T is
+    begin
+      null;
+    end;
+  end Inner1;
+
+  package body Inner2 is
+    task body Private_T is
+    begin
+      loop
+        null;
+      end loop;
+    end;
+  end Inner2;
+  task body Task_Type is
+  begin
+    select
+      accept Entry1 do
+        null;
+      end;
+    or
+      accept Entry2 (I : Integer) do
+        null;
+      end;
+    end select;
+  end;
+
+
+  procedure Pkg1_Proc2 (I : Integer) is
+  begin
+    null;
+  end Pkg1_Proc2;
+
+
+  function Pkg1_Func1 return Boolean is separate;
+
+  function Pkg1_Func2 (Ijk : Integer; Z : Integer) return Natural is
+  begin
+    return 1;
+  end;
+
+
+  package body Pkg1_Pkg1 is separate;
+
+end Pkg1;
+separate (Pkg1)
+package body Pkg1_Pkg1 is
+  procedure Pkg1_Pkg1_Proc1 is
+  begin
+    null;
+  end;
+end Pkg1_Pkg1;
+separate (Pkg1)
+function  Pkg1_Func1 return Boolean is
+begin
+  return False;
+end;
+-- from now on, this is Ada 95 specific.
+package Truc is
+  I : Integer;
+end Truc;
+with Pkg1;
+package Truc.Bidule is
+  use type Pkg1.Public_T;
+  use Pkg1;
+  use
+    type Pkg1.Public_T;
+  use -- comment
+    type -- comment
+    Pkg1.Public_T;
+
+  protected Bidule is
+    entry Basar;
+  private
+    Ok : Boolean;
+  end Bidule;
+
+  protected type Machin_T is
+    entry Truc;
+  private
+    Ok : Boolean;
+  end Machin_T;
+
+end Truc.Bidule;
+package body Truc.Bidule is
+  protected body Bidule is
+    entry Basar when Ok is
+    begin
+      null;
+    end;
+  end Bidule;
+
+  protected body Machin_T is
+    entry Truc when Ok is
+    begin
+      null;
+    end;
+  end Machin_T;
+
+end Truc.Bidule;
diff --git a/test/etags/c-src/a/b/b.c b/test/etags/c-src/a/b/b.c
new file mode 100644
index 0000000..ee3c97c
--- /dev/null
+++ b/test/etags/c-src/a/b/b.c
@@ -0,0 +1,5 @@
+#define this that
+
+#line 33 "../c/c.web"
+
+#define questo quello
diff --git a/test/etags/c-src/abbrev.c b/test/etags/c-src/abbrev.c
new file mode 100644
index 0000000..f30986d
--- /dev/null
+++ b/test/etags/c-src/abbrev.c
@@ -0,0 +1,616 @@
+/* Primitives for word-abbrev mode.
+   Copyright (C) 1985, 1986, 1993, 1996, 1998 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+
+#include <config.h>
+#include <stdio.h>
+#include "lisp.h"
+#include "commands.h"
+#include "buffer.h"
+#include "window.h"
+#include "charset.h"
+#include "syntax.h"
+
+/* An abbrev table is an obarray.
+ Each defined abbrev is represented by a symbol in that obarray
+ whose print name is the abbreviation.
+ The symbol's value is a string which is the expansion.
+ If its function definition is non-nil, it is called
+  after the expansion is done.
+ The plist slot of the abbrev symbol is its usage count. */
+
+/* List of all abbrev-table name symbols:
+ symbols whose values are abbrev tables.  */
+
+Lisp_Object Vabbrev_table_name_list;
+
+/* The table of global abbrevs.  These are in effect
+ in any buffer in which abbrev mode is turned on. */
+
+Lisp_Object Vglobal_abbrev_table;
+
+/* The local abbrev table used by default (in Fundamental Mode buffers) */
+
+Lisp_Object Vfundamental_mode_abbrev_table;
+
+/* Set nonzero when an abbrev definition is changed */
+
+int abbrevs_changed;
+
+int abbrev_all_caps;
+
+/* Non-nil => use this location as the start of abbrev to expand
+ (rather than taking the word before point as the abbrev) */
+
+Lisp_Object Vabbrev_start_location;
+
+/* Buffer that Vabbrev_start_location applies to */
+Lisp_Object Vabbrev_start_location_buffer;
+
+/* The symbol representing the abbrev most recently expanded */
+
+Lisp_Object Vlast_abbrev;
+
+/* A string for the actual text of the abbrev most recently expanded.
+   This has more info than Vlast_abbrev since case is significant.  */
+
+Lisp_Object Vlast_abbrev_text;
+
+/* Character address of start of last abbrev expanded */
+
+int last_abbrev_point;
+
+/* Hook to run before expanding any abbrev.  */
+
+Lisp_Object Vpre_abbrev_expand_hook, Qpre_abbrev_expand_hook;
+
+DEFUN ("make-abbrev-table", Fmake_abbrev_table, Smake_abbrev_table, 0, 0, 0,
+  "Create a new, empty abbrev table object.")
+  ()
+{
+  return Fmake_vector (make_number (59), make_number (0));
+}
+
+DEFUN ("clear-abbrev-table", Fclear_abbrev_table, Sclear_abbrev_table, 1, 1, 0,
+  "Undefine all abbrevs in abbrev table TABLE, leaving it empty.")
+  (table)
+     Lisp_Object table;
+{
+  int i, size;
+
+  CHECK_VECTOR (table, 0);
+  size = XVECTOR (table)->size;
+  abbrevs_changed = 1;
+  for (i = 0; i < size; i++)
+    XVECTOR (table)->contents[i] = make_number (0);
+  return Qnil;
+}
+
+DEFUN ("define-abbrev", Fdefine_abbrev, Sdefine_abbrev, 3, 5, 0,
+  "Define an abbrev in TABLE named NAME, to expand to EXPANSION and call 
HOOK.\n\
+NAME must be a string.\n\
+EXPANSION should usually be a string.\n\
+To undefine an abbrev, define it with EXPANSION = nil.\n\
+If HOOK is non-nil, it should be a function of no arguments;\n\
+it is called after EXPANSION is inserted.\n\
+If EXPANSION is not a string, the abbrev is a special one,\n\
+ which does not expand in the usual way but only runs HOOK.\n\
+COUNT, if specified, initializes the abbrev's usage-count\n\
+which is incremented each time the abbrev is used.")
+  (table, name, expansion, hook, count)
+     Lisp_Object table, name, expansion, hook, count;
+{
+  Lisp_Object sym, oexp, ohook, tem;
+  CHECK_VECTOR (table, 0);
+  CHECK_STRING (name, 1);
+
+  if (NILP (count))
+    count = make_number (0);
+  else
+    CHECK_NUMBER (count, 0);
+
+  sym = Fintern (name, table);
+
+  oexp = XSYMBOL (sym)->value;
+  ohook = XSYMBOL (sym)->function;
+  if (!((EQ (oexp, expansion)
+        || (STRINGP (oexp) && STRINGP (expansion)
+            && (tem = Fstring_equal (oexp, expansion), !NILP (tem))))
+       &&
+       (EQ (ohook, hook)
+        || (tem = Fequal (ohook, hook), !NILP (tem)))))
+    abbrevs_changed = 1;
+
+  Fset (sym, expansion);
+  Ffset (sym, hook);
+  Fsetplist (sym, count);
+
+  return name;
+}
+
+DEFUN ("define-global-abbrev", Fdefine_global_abbrev, Sdefine_global_abbrev, 
2, 2,
+  "sDefine global abbrev: \nsExpansion for %s: ",
+  "Define ABBREV as a global abbreviation for EXPANSION.")
+  (abbrev, expansion)
+     Lisp_Object abbrev, expansion;
+{
+  Fdefine_abbrev (Vglobal_abbrev_table, Fdowncase (abbrev),
+                 expansion, Qnil, make_number (0));
+  return abbrev;
+}
+
+DEFUN ("define-mode-abbrev", Fdefine_mode_abbrev, Sdefine_mode_abbrev, 2, 2,
+  "sDefine mode abbrev: \nsExpansion for %s: ",
+  "Define ABBREV as a mode-specific abbreviation for EXPANSION.")
+  (abbrev, expansion)
+     Lisp_Object abbrev, expansion;
+{
+  if (NILP (current_buffer->abbrev_table))
+    error ("Major mode has no abbrev table");
+
+  Fdefine_abbrev (current_buffer->abbrev_table, Fdowncase (abbrev),
+                 expansion, Qnil, make_number (0));
+  return abbrev;
+}
+
+DEFUN ("abbrev-symbol", Fabbrev_symbol, Sabbrev_symbol, 1, 2, 0,
+  "Return the symbol representing abbrev named ABBREV.\n\
+This symbol's name is ABBREV, but it is not the canonical symbol of that 
name;\n\
+it is interned in an abbrev-table rather than the normal obarray.\n\
+The value is nil if that abbrev is not defined.\n\
+Optional second arg TABLE is abbrev table to look it up in.\n\
+The default is to try buffer's mode-specific abbrev table, then global table.")
+  (abbrev, table)
+     Lisp_Object abbrev, table;
+{
+  Lisp_Object sym;
+  CHECK_STRING (abbrev, 0);
+  if (!NILP (table))
+    sym = Fintern_soft (abbrev, table);
+  else
+    {
+      sym = Qnil;
+      if (!NILP (current_buffer->abbrev_table))
+       sym = Fintern_soft (abbrev, current_buffer->abbrev_table);
+      if (NILP (XSYMBOL (sym)->value))
+       sym = Qnil;
+      if (NILP (sym))
+       sym = Fintern_soft (abbrev, Vglobal_abbrev_table);
+    }
+  if (NILP (XSYMBOL (sym)->value)) return Qnil;
+  return sym;
+}
+
+DEFUN ("abbrev-expansion", Fabbrev_expansion, Sabbrev_expansion, 1, 2, 0,
+  "Return the string that ABBREV expands into in the current buffer.\n\
+Optionally specify an abbrev table as second arg;\n\
+then ABBREV is looked up in that table only.")
+  (abbrev, table)
+     Lisp_Object abbrev, table;
+{
+  Lisp_Object sym;
+  sym = Fabbrev_symbol (abbrev, table);
+  if (NILP (sym)) return sym;
+  return Fsymbol_value (sym);
+}
+
+/* Expand the word before point, if it is an abbrev.
+  Returns 1 if an expansion is done. */
+
+DEFUN ("expand-abbrev", Fexpand_abbrev, Sexpand_abbrev, 0, 0, "",
+  "Expand the abbrev before point, if there is an abbrev there.\n\
+Effective when explicitly called even when `abbrev-mode' is nil.\n\
+Returns the abbrev symbol, if expansion took place.")
+  ()
+{
+  register char *buffer, *p;
+  int wordstart, wordend;
+  register int wordstart_byte, wordend_byte, idx;
+  int whitecnt;
+  int uccount = 0, lccount = 0;
+  register Lisp_Object sym;
+  Lisp_Object expansion, hook, tem;
+  Lisp_Object value;
+
+  value = Qnil;
+
+  if (!NILP (Vrun_hooks))
+    call1 (Vrun_hooks, Qpre_abbrev_expand_hook);
+
+  wordstart = 0;
+  if (!(BUFFERP (Vabbrev_start_location_buffer)
+       && XBUFFER (Vabbrev_start_location_buffer) == current_buffer))
+    Vabbrev_start_location = Qnil;
+  if (!NILP (Vabbrev_start_location))
+    {
+      tem = Vabbrev_start_location;
+      CHECK_NUMBER_COERCE_MARKER (tem, 0);
+      wordstart = XINT (tem);
+      Vabbrev_start_location = Qnil;
+      if (wordstart < BEGV || wordstart > ZV)
+       wordstart = 0;
+      if (wordstart && wordstart != ZV)
+       {
+         wordstart_byte = CHAR_TO_BYTE (wordstart);
+         if (FETCH_BYTE (wordstart_byte) == '-')
+           del_range (wordstart, wordstart + 1);
+       }
+    }
+  if (!wordstart)
+    wordstart = scan_words (PT, -1);
+
+  if (!wordstart)
+    return value;
+
+  wordstart_byte = CHAR_TO_BYTE (wordstart);
+  wordend = scan_words (wordstart, 1);
+  if (!wordend)
+    return value;
+
+  if (wordend > PT)
+    wordend = PT;
+
+  wordend_byte = CHAR_TO_BYTE (wordend);
+  whitecnt = PT - wordend;
+  if (wordend <= wordstart)
+    return value;
+
+  p = buffer = (char *) alloca (wordend_byte - wordstart_byte);
+
+  for (idx = wordstart_byte; idx < wordend_byte; idx++)
+    {
+      /* ??? This loop needs to go by characters!  */
+      register int c = FETCH_BYTE (idx);
+      if (UPPERCASEP (c))
+       c = DOWNCASE (c), uccount++;
+      else if (! NOCASEP (c))
+       lccount++;
+      *p++ = c;
+    }
+
+  if (VECTORP (current_buffer->abbrev_table))
+    sym = oblookup (current_buffer->abbrev_table, buffer,
+                   wordend - wordstart, wordend_byte - wordstart_byte);
+  else
+    XSETFASTINT (sym, 0);
+  if (INTEGERP (sym) || NILP (XSYMBOL (sym)->value))
+    sym = oblookup (Vglobal_abbrev_table, buffer,
+                   wordend - wordstart, wordend_byte - wordstart_byte);
+  if (INTEGERP (sym) || NILP (XSYMBOL (sym)->value))
+    return value;
+
+  if (INTERACTIVE && !EQ (minibuf_window, selected_window))
+    {
+      /* Add an undo boundary, in case we are doing this for
+        a self-inserting command which has avoided making one so far.  */
+      SET_PT (wordend);
+      Fundo_boundary ();
+    }
+
+  Vlast_abbrev_text
+    = Fbuffer_substring (make_number (wordstart), make_number (wordend));
+
+  /* Now sym is the abbrev symbol.  */
+  Vlast_abbrev = sym;
+  value = sym;
+  last_abbrev_point = wordstart;
+
+  if (INTEGERP (XSYMBOL (sym)->plist))
+    XSETINT (XSYMBOL (sym)->plist,
+            XINT (XSYMBOL (sym)->plist) + 1);  /* Increment use count */
+
+  /* If this abbrev has an expansion, delete the abbrev
+     and insert the expansion.  */
+  expansion = XSYMBOL (sym)->value;
+  if (STRINGP (expansion))
+    {
+      SET_PT (wordstart);
+
+      del_range_both (wordstart, wordstart_byte, wordend, wordend_byte, 1);
+
+      insert_from_string (expansion, 0, 0, XSTRING (expansion)->size,
+                         STRING_BYTES (XSTRING (expansion)), 1);
+      SET_PT (PT + whitecnt);
+
+      if (uccount && !lccount)
+       {
+         /* Abbrev was all caps */
+         /* If expansion is multiple words, normally capitalize each word */
+         /* This used to be if (!... && ... >= ...) Fcapitalize; else Fupcase
+            but Megatest 68000 compiler can't handle that */
+         if (!abbrev_all_caps)
+           if (scan_words (PT, -1) > scan_words (wordstart, 1))
+             {
+               Fupcase_initials_region (make_number (wordstart),
+                                        make_number (PT));
+               goto caped;
+             }
+         /* If expansion is one word, or if user says so, upcase it all. */
+         Fupcase_region (make_number (wordstart), make_number (PT));
+       caped: ;
+       }
+      else if (uccount)
+       {
+         /* Abbrev included some caps.  Cap first initial of expansion */
+         int pos = wordstart_byte;
+
+         /* Find the initial.  */
+         while (pos < PT_BYTE
+                && SYNTAX (*BUF_BYTE_ADDRESS (current_buffer, pos)) != Sword)
+           pos++;
+
+         /* Change just that.  */
+         pos = BYTE_TO_CHAR (pos);
+         Fupcase_initials_region (make_number (pos), make_number (pos + 1));
+       }
+    }
+
+  hook = XSYMBOL (sym)->function;
+  if (!NILP (hook))
+    {
+      Lisp_Object expanded, prop;
+
+      /* If the abbrev has a hook function, run it.  */
+      expanded = call0 (hook);
+
+      /* In addition, if the hook function is a symbol with a a
+        non-nil `no-self-insert' property, let the value it returned
+        specify whether we consider that an expansion took place.  If
+        it returns nil, no expansion has been done.  */
+
+      if (SYMBOLP (hook)
+         && NILP (expanded)
+         && (prop = Fget (hook, intern ("no-self-insert")),
+             !NILP (prop)))
+       value = Qnil;
+    }
+
+  return value;
+}
+
+DEFUN ("unexpand-abbrev", Funexpand_abbrev, Sunexpand_abbrev, 0, 0, "",
+  "Undo the expansion of the last abbrev that expanded.\n\
+This differs from ordinary undo in that other editing done since then\n\
+is not undone.")
+  ()
+{
+  int opoint = PT;
+  int adjust = 0;
+  if (last_abbrev_point < BEGV
+      || last_abbrev_point > ZV)
+    return Qnil;
+  SET_PT (last_abbrev_point);
+  if (STRINGP (Vlast_abbrev_text))
+    {
+      /* This isn't correct if Vlast_abbrev->function was used
+         to do the expansion */
+      Lisp_Object val;
+      int zv_before;
+
+      val = XSYMBOL (Vlast_abbrev)->value;
+      if (!STRINGP (val))
+       error ("value of abbrev-symbol must be a string");
+      zv_before = ZV;
+      del_range_byte (PT_BYTE, PT_BYTE + STRING_BYTES (XSTRING (val)), 1);
+      /* Don't inherit properties here; just copy from old contents.  */
+      insert_from_string (Vlast_abbrev_text, 0, 0,
+                         XSTRING (Vlast_abbrev_text)->size,
+                         STRING_BYTES (XSTRING (Vlast_abbrev_text)), 0);
+      Vlast_abbrev_text = Qnil;
+      /* Total number of characters deleted.  */
+      adjust = ZV - zv_before;
+    }
+  SET_PT (last_abbrev_point < opoint ? opoint + adjust : opoint);
+  return Qnil;
+}
+
+static void
+write_abbrev (sym, stream)
+     Lisp_Object sym, stream;
+{
+  Lisp_Object name;
+  if (NILP (XSYMBOL (sym)->value))
+    return;
+  insert ("    (", 5);
+  XSETSTRING (name, XSYMBOL (sym)->name);
+  Fprin1 (name, stream);
+  insert (" ", 1);
+  Fprin1 (XSYMBOL (sym)->value, stream);
+  insert (" ", 1);
+  Fprin1 (XSYMBOL (sym)->function, stream);
+  insert (" ", 1);
+  Fprin1 (XSYMBOL (sym)->plist, stream);
+  insert (")\n", 2);
+}
+
+static void
+describe_abbrev (sym, stream)
+     Lisp_Object sym, stream;
+{
+  Lisp_Object one;
+
+  if (NILP (XSYMBOL (sym)->value))
+    return;
+  one = make_number (1);
+  Fprin1 (Fsymbol_name (sym), stream);
+  Findent_to (make_number (15), one);
+  Fprin1 (XSYMBOL (sym)->plist, stream);
+  Findent_to (make_number (20), one);
+  Fprin1 (XSYMBOL (sym)->value, stream);
+  if (!NILP (XSYMBOL (sym)->function))
+    {
+      Findent_to (make_number (45), one);
+      Fprin1 (XSYMBOL (sym)->function, stream);
+    }
+  Fterpri (stream);
+}
+
+DEFUN ("insert-abbrev-table-description", Finsert_abbrev_table_description,
+  Sinsert_abbrev_table_description, 1, 2, 0,
+  "Insert before point a full description of abbrev table named NAME.\n\
+NAME is a symbol whose value is an abbrev table.\n\
+If optional 2nd arg READABLE is non-nil, a human-readable description\n\
+is inserted.  Otherwise the description is an expression,\n\
+a call to `define-abbrev-table', which would\n\
+define the abbrev table NAME exactly as it is currently defined.")
+  (name, readable)
+     Lisp_Object name, readable;
+{
+  Lisp_Object table;
+  Lisp_Object stream;
+
+  CHECK_SYMBOL (name, 0);
+  table = Fsymbol_value (name);
+  CHECK_VECTOR (table, 0);
+
+  XSETBUFFER (stream, current_buffer);
+
+  if (!NILP (readable))
+    {
+      insert_string ("(");
+      Fprin1 (name, stream);
+      insert_string (")\n\n");
+      map_obarray (table, describe_abbrev, stream);
+      insert_string ("\n\n");
+    }
+  else
+    {
+      insert_string ("(define-abbrev-table '");
+      Fprin1 (name, stream);
+      insert_string (" '(\n");
+      map_obarray (table, write_abbrev, stream);
+      insert_string ("    ))\n\n");
+    }
+
+  return Qnil;
+}
+
+DEFUN ("define-abbrev-table", Fdefine_abbrev_table, Sdefine_abbrev_table,
+       2, 2, 0,
+  "Define TABLENAME (a symbol) as an abbrev table name.\n\
+Define abbrevs in it according to DEFINITIONS, which is a list of elements\n\
+of the form (ABBREVNAME EXPANSION HOOK USECOUNT).")
+  (tablename, definitions)
+     Lisp_Object tablename, definitions;
+{
+  Lisp_Object name, exp, hook, count;
+  Lisp_Object table, elt;
+
+  CHECK_SYMBOL (tablename, 0);
+  table = Fboundp (tablename);
+  if (NILP (table) || (table = Fsymbol_value (tablename), NILP (table)))
+    {
+      table = Fmake_abbrev_table ();
+      Fset (tablename, table);
+      Vabbrev_table_name_list = Fcons (tablename, Vabbrev_table_name_list);
+    }
+  CHECK_VECTOR (table, 0);
+
+  for (; !NILP (definitions); definitions = Fcdr (definitions))
+    {
+      elt = Fcar (definitions);
+      name  = Fcar (elt);      elt = Fcdr (elt);
+      exp   = Fcar (elt);      elt = Fcdr (elt);
+      hook  = Fcar (elt);      elt = Fcdr (elt);
+      count = Fcar (elt);
+      Fdefine_abbrev (table, name, exp, hook, count);
+    }
+  return Qnil;
+}
+
+void
+syms_of_abbrev ()
+{
+  DEFVAR_LISP ("abbrev-table-name-list", &Vabbrev_table_name_list,
+    "List of symbols whose values are abbrev tables.");
+  Vabbrev_table_name_list = Fcons (intern ("fundamental-mode-abbrev-table"),
+                                  Fcons (intern ("global-abbrev-table"),
+                                         Qnil));
+
+  DEFVAR_LISP ("global-abbrev-table", &Vglobal_abbrev_table,
+    "The abbrev table whose abbrevs affect all buffers.\n\
+Each buffer may also have a local abbrev table.\n\
+If it does, the local table overrides the global one\n\
+for any particular abbrev defined in both.");
+  Vglobal_abbrev_table = Fmake_abbrev_table ();
+
+  DEFVAR_LISP ("fundamental-mode-abbrev-table", 
&Vfundamental_mode_abbrev_table,
+    "The abbrev table of mode-specific abbrevs for Fundamental Mode.");
+  Vfundamental_mode_abbrev_table = Fmake_abbrev_table ();
+  current_buffer->abbrev_table = Vfundamental_mode_abbrev_table;
+  buffer_defaults.abbrev_table = Vfundamental_mode_abbrev_table;
+
+  DEFVAR_LISP ("last-abbrev", &Vlast_abbrev,
+    "The abbrev-symbol of the last abbrev expanded.  See `abbrev-symbol'.");
+
+  DEFVAR_LISP ("last-abbrev-text", &Vlast_abbrev_text,
+    "The exact text of the last abbrev expanded.\n\
+nil if the abbrev has already been unexpanded.");
+
+  DEFVAR_INT ("last-abbrev-location", &last_abbrev_point,
+    "The location of the start of the last abbrev expanded.");
+
+  Vlast_abbrev = Qnil;
+  Vlast_abbrev_text = Qnil;
+  last_abbrev_point = 0;
+
+  DEFVAR_LISP ("abbrev-start-location", &Vabbrev_start_location,
+    "Buffer position for `expand-abbrev' to use as the start of the abbrev.\n\
+nil means use the word before point as the abbrev.\n\
+Calling `expand-abbrev' sets this to nil.");
+  Vabbrev_start_location = Qnil;
+
+  DEFVAR_LISP ("abbrev-start-location-buffer", &Vabbrev_start_location_buffer,
+    "Buffer that `abbrev-start-location' has been set for.\n\
+Trying to expand an abbrev in any other buffer clears 
`abbrev-start-location'.");
+  Vabbrev_start_location_buffer = Qnil;
+
+  DEFVAR_PER_BUFFER ("local-abbrev-table", &current_buffer->abbrev_table, Qnil,
+    "Local (mode-specific) abbrev table of current buffer.");
+
+  DEFVAR_BOOL ("abbrevs-changed", &abbrevs_changed,
+    "Set non-nil by defining or altering any word abbrevs.\n\
+This causes `save-some-buffers' to offer to save the abbrevs.");
+  abbrevs_changed = 0;
+
+  DEFVAR_BOOL ("abbrev-all-caps", &abbrev_all_caps,
+    "*Set non-nil means expand multi-word abbrevs all caps if abbrev was so.");
+  abbrev_all_caps = 0;
+
+  DEFVAR_LISP ("pre-abbrev-expand-hook", &Vpre_abbrev_expand_hook,
+    "Function or functions to be called before abbrev expansion is done.\n\
+This is the first thing that `expand-abbrev' does, and so this may change\n\
+the current abbrev table before abbrev lookup happens.");
+  Vpre_abbrev_expand_hook = Qnil;
+  Qpre_abbrev_expand_hook = intern ("pre-abbrev-expand-hook");
+  staticpro (&Qpre_abbrev_expand_hook);
+
+  defsubr (&Smake_abbrev_table);
+  defsubr (&Sclear_abbrev_table);
+  defsubr (&Sdefine_abbrev);
+  defsubr (&Sdefine_global_abbrev);
+  defsubr (&Sdefine_mode_abbrev);
+  defsubr (&Sabbrev_expansion);
+  defsubr (&Sabbrev_symbol);
+  defsubr (&Sexpand_abbrev);
+  defsubr (&Sunexpand_abbrev);
+  defsubr (&Sinsert_abbrev_table_description);
+  defsubr (&Sdefine_abbrev_table);
+}
diff --git a/test/etags/c-src/c.c b/test/etags/c-src/c.c
new file mode 100644
index 0000000..77c8929
--- /dev/null
+++ b/test/etags/c-src/c.c
@@ -0,0 +1,169 @@
+T f(){if(x){}
+}T i;
+
+// The next two functions must be kept together
+void bar() {while(0) {}}
+int foobar() {;}
+
+struct interface *
+interface_locate(void)
+{ return 0; }
+
+#line 123 "c.c"
+// 7.4: string literal in #line directive shall be a character string
+//      literal.
+//E t_6_062.cpp(21): warning: ill formed #line directive: 123 L"wide"
+#line 123                                      L"wide.c"
+#line 123 L"wide.c"
+#line 123L"wide.c"
+
+
+void (*fa) (void);
+void (__attribute__((noreturn)) *fb) (void);
+
+extern int
+my_printf (void *my_object, const char *my_format, ...)
+     __attribute__ ((format (printf, 2, 3)));
+
+void fatala () __attribute__ ((noreturn));
+void fatalb ();
+
+max (int a, int b)
+{ if (a > b) return a; else return b; }
+struct bar {
+  char z;
+  struct foo f;
+};
+__attribute__ ((always_inline)) max (int a, int b)
+{ if (a > b) return a; else return b }
+extern int old_var __attribute__ ((deprecated));
+struct foo
+{
+  char a;
+  int x[2] __attribute__ ((packed));
+};
+char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
+struct S { short f[3]; } __attribute__ ((aligned (8)));
+typedef union
+{
+  int *__ip;
+  union wait *__up;
+} wait_status_ptr_t __attribute__ ((__transparent_union__));
+Some_Class  A  __attribute__ ((init_priority (2000)));
+typedef T1 T3 __attribute__ ((deprecated));
+T3 z __attribute__ ((deprecated));
+typedef int more_aligned_int __attribute__ ((aligned (8)));
+struct S  __attribute__ ((vector_size (16))) foo;
+int foo __attribute__ ((vector_size (16)));
+char *__attribute__((aligned(8))) *f;
+int i __attribute__ ((visibility ("hidden")));
+extern void foobar (void) __attribute__ ((section ("bar")));
+
+typedef struct cacheLRUEntry_s
+{
+  U16 next;
+  U16 prev;
+}
+__attribute__ ((packed)) cacheLRUEntry_t;
+struct foo {
+  int x;
+  char a, b, c, d;
+} __attribute__((packed));
+void __attribute__ ((visibility ("protected")))
+     f1 () { /* Do something. */; }
+void f2 () { /* Do something. */; }
+__attribute__((noreturn)) void d0 (void),
+  __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
+  d2 (void);
+int x __attribute__ ((aligned (16))) = 0;
+struct foo { int x[2] __attribute__ ((aligned (8))); };
+short array[3] __attribute__ ((aligned));
+
+asm("  section 10");
+int f
+       () {}
+
+DEAFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0,
+  "name.")
+     (name, defalt)
+     Lisp_Object name, defalt;
+{
+  unsigned char *nm;
+}
+XDEFUN ("x-get-selection-internal", Fx_get_selection_internal,
+       Sx_get_selection_internal, 2, 2, 0, "")
+{}
+DEFUN ("x-get-selection-internal", Fx_get_selection_internal,
+       Sx_get_selection_internal, 2, 2, 0, "")
+{}
+/* The next two are not tagged correctly.  To prevent this, the code in
+   Emacs should contain the two first args of DEFUN on the same line. */
+DEFUN ("x-get-selection-internal",
+       Fx_get_selection_internal, Sx_get_selection_internal, 2, 2, 0, "")
+{}
+DEFUN
+     ("y-get-selection-internal",
+      Fy_get_selection_internal, Sy_get_selection_internal, 2, 2, 0, "")
+{}
+defun_func1()
+{}
+DEFUN_func2()
+{}
+typedef int bool;
+bool funcboo ()
+{}
+static void (*lang_func) () = NULL;
+struct my_struct {
+};
+typedef struct my_struct my_typedef;
+int bla ()
+{
+  PrkList ExistingOperations =
+      ProcedureOperationSelections(PrkNull, CalledFromDomain);
+}
+a()
+ b c;
+{}
+int func1
+  (a,b,c,d) {};
+static struct cca_control init_control = { 0 };
+static tpcmd rbtp [RB_TPSZ];
+static byte ring1 [(RBUFNO + 1) + 8];
+static byte ring2 [(RBUFNO + 1) * sizeof (struct le_md) + 8];
+request request (a, b)
+{
+}
+int func2 (a,b
+         c,d) {};
+int wrongfunc
+  aaa;
+struct wrongstruct
+  bbb;
+struct sss1 {};
+struct sss2
+{
+  struct ss3
+    {
+    };
+};
+struct a b;
+struct aa *b;
+struct aaa
+  **b;
+caccacacca (a,b,c,d,e,f,g)
+     struct aa *b;
+{
+}
+a ()
+{
+  typedef struct aa {} aaa;
+}
+static void inita () {}
+node *lasta = NULL;
+b ()
+{
+  typedef  int bb;
+}
+static void initb () {}
+node *lastb = NULL;
+typedef enum { REG_ENOSYS = -1, aa } reg_errcode_t;
diff --git a/test/etags/c-src/dostorture.c b/test/etags/c-src/dostorture.c
new file mode 100644
index 0000000..5190734
--- /dev/null
+++ b/test/etags/c-src/dostorture.c
@@ -0,0 +1,107 @@
+/* Date: Thu, 05 Aug 1993 20:28:03 +0200
+   From: "Tom R.Hageman" <address@hidden>
+   Subject: more etags torture;-) [etags 7.3 patch#3]
+   To: address@hidden
+
+   Hi,
+
+   This test file illustrates some more problems with etags (7.3):
+
+
+   1. parentheses are confusing,
+   2. preprocessor directives can disrupt other state machines. */
+
+/* A small torture test for etags. */
+
+/* The classic parenthesis nightmare, based on signal(). */
+void
+(*tag1 (sig, handler)) ()
+  int sig;
+  void (*handler) ();
+{
+  (*handler)(sig);
+  return handler;
+}
+
+#define notag2 void
+/* The classic, with user-defined return type. */
+notag2
+(*tag2 (sig, handler)) ()
+  int sig;
+  void (*handler) ();
+{
+  (*handler)(sig);
+  return handler;
+}
+
+/* The classic, in ANSI C style. */
+void
+(*tag3 (int sig, void (*handler) (int))) (int)
+{
+  (*handler)(sig);
+  return handler;
+}
+
+#define notag4 void
+/* The classic, with user-defined return type, in ANSI C style. */
+notag4
+(*tag4 (int sig, void (*handler) (int))) (int)
+{
+  (*handler)(sig);
+  return handler;
+}
+
+
+/* A less tortuous example. */
+void
+tag5 (handler, arg)
+void (*handler)();
+void *arg;
+{
+  (*handler)(arg);
+}
+
+/* A less tortuous example, in ANSI C style. */
+void
+tag6 (void (*handler) (void *), void *arg)
+{
+  (*handler)(arg);
+}
+
+
+/* Interfering preprocessing torture */
+
+int pp1(
+#if (__STDC__)
+       int
+#endif
+       bar)
+#if (!__STDC__)
+     int bar;
+#endif
+{
+  return bar;
+}
+
+int
+pp2
+#if __STDC__
+  (int bar)
+#else
+  (bar)
+    int bar;
+#endif
+{
+  return bar;
+}
+
+int
+#if __STDC__
+pp3(int bar)
+#else
+pp3(bar)
+  int bar;
+#endif
+{
+  return bar;
+}
diff --git a/test/etags/c-src/emacs/src/gmalloc.c 
b/test/etags/c-src/emacs/src/gmalloc.c
new file mode 100644
index 0000000..a88f4ab
--- /dev/null
+++ b/test/etags/c-src/emacs/src/gmalloc.c
@@ -0,0 +1,2040 @@
+/* Declarations for `malloc' and friends.
+   Copyright (C) 1990-1993, 1995-1996, 1999, 2002-2007, 2013-2015 Free
+   Software Foundation, Inc.
+                 Written May 1989 by Mike Haertel.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+   The author may be reached (Email) at the address address@hidden,
+   or (US mail) as Mike Haertel c/o Free Software Foundation.  */
+
+#include <config.h>
+
+#if defined HAVE_PTHREAD && !defined HYBRID_MALLOC
+#define USE_PTHREAD
+#endif
+
+#include <string.h>
+#include <limits.h>
+#include <stdint.h>
+
+#ifdef HYBRID_GET_CURRENT_DIR_NAME
+#undef get_current_dir_name
+#endif
+
+#include <unistd.h>
+
+#ifdef USE_PTHREAD
+#include <pthread.h>
+#endif
+
+#ifdef WINDOWSNT
+#include <w32heap.h>   /* for sbrk */
+#endif
+
+#ifdef emacs
+extern void emacs_abort (void);
+#endif
+
+/* If HYBRID_MALLOC is defined, then temacs will use malloc,
+   realloc... as defined in this file (and renamed gmalloc,
+   grealloc... via the macros that follow).  The dumped emacs,
+   however, will use the system malloc, realloc....  In other source
+   files, malloc, realloc... are renamed hybrid_malloc,
+   hybrid_realloc... via macros in conf_post.h.  hybrid_malloc and
+   friends are wrapper functions defined later in this file.
+   aligned_alloc is defined as a macro only in alloc.c.
+
+   As of this writing (August 2014), Cygwin is the only platform on
+   which HYBRID_MACRO is defined.  Any other platform that wants to
+   define it will have to define the macros DUMPED and
+   ALLOCATED_BEFORE_DUMPING, defined below for Cygwin.  */
+#ifdef HYBRID_MALLOC
+#undef malloc
+#undef realloc
+#undef calloc
+#undef free
+#define malloc gmalloc
+#define realloc grealloc
+#define calloc gcalloc
+#define aligned_alloc galigned_alloc
+#define free gfree
+#endif  /* HYBRID_MALLOC */
+
+#ifdef CYGWIN
+extern void *bss_sbrk (ptrdiff_t size);
+extern int bss_sbrk_did_unexec;
+extern char bss_sbrk_buffer[];
+extern void *bss_sbrk_buffer_end;
+#define DUMPED bss_sbrk_did_unexec
+#define ALLOCATED_BEFORE_DUMPING(P) \
+  ((P) < bss_sbrk_buffer_end && (P) >= (void *) bss_sbrk_buffer)
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stddef.h>
+
+
+/* Allocate SIZE bytes of memory.  */
+extern void *malloc (size_t size) ATTRIBUTE_MALLOC_SIZE ((1));
+/* Re-allocate the previously allocated block
+   in ptr, making the new block SIZE bytes long.  */
+extern void *realloc (void *ptr, size_t size) ATTRIBUTE_ALLOC_SIZE ((2));
+/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0.  */
+extern void *calloc (size_t nmemb, size_t size) ATTRIBUTE_MALLOC_SIZE ((1,2));
+/* Free a block allocated by `malloc', `realloc' or `calloc'.  */
+extern void free (void *ptr);
+
+/* Allocate SIZE bytes allocated to ALIGNMENT bytes.  */
+#ifdef MSDOS
+extern void *aligned_alloc (size_t, size_t);
+extern void *memalign (size_t, size_t);
+extern int posix_memalign (void **, size_t, size_t);
+#endif
+
+#ifdef USE_PTHREAD
+/* Set up mutexes and make malloc etc. thread-safe.  */
+extern void malloc_enable_thread (void);
+#endif
+
+#ifdef emacs
+extern void emacs_abort (void);
+#endif
+
+/* The allocator divides the heap into blocks of fixed size; large
+   requests receive one or more whole blocks, and small requests
+   receive a fragment of a block.  Fragment sizes are powers of two,
+   and all fragments of a block are the same size.  When all the
+   fragments in a block have been freed, the block itself is freed.  */
+#define INT_BIT                (CHAR_BIT * sizeof (int))
+#define BLOCKLOG       (INT_BIT > 16 ? 12 : 9)
+#define BLOCKSIZE      (1 << BLOCKLOG)
+#define BLOCKIFY(SIZE) (((SIZE) + BLOCKSIZE - 1) / BLOCKSIZE)
+
+/* Determine the amount of memory spanned by the initial heap table
+   (not an absolute limit).  */
+#define HEAP           (INT_BIT > 16 ? 4194304 : 65536)
+
+/* Number of contiguous free blocks allowed to build up at the end of
+   memory before they will be returned to the system.  */
+#define FINAL_FREE_BLOCKS      8
+
+/* Data structure giving per-block information.  */
+typedef union
+  {
+    /* Heap information for a busy block.  */
+    struct
+      {
+       /* Zero for a large (multiblock) object, or positive giving the
+          logarithm to the base two of the fragment size.  */
+       int type;
+       union
+         {
+           struct
+             {
+               size_t nfree; /* Free frags in a fragmented block.  */
+               size_t first; /* First free fragment of the block.  */
+             } frag;
+           /* For a large object, in its first block, this has the number
+              of blocks in the object.  In the other blocks, this has a
+              negative number which says how far back the first block is.  */
+           ptrdiff_t size;
+         } info;
+      } busy;
+    /* Heap information for a free block
+       (that may be the first of a free cluster).  */
+    struct
+      {
+       size_t size;    /* Size (in blocks) of a free cluster.  */
+       size_t next;    /* Index of next free cluster.  */
+       size_t prev;    /* Index of previous free cluster.  */
+      } free;
+  } malloc_info;
+
+/* Pointer to first block of the heap.  */
+extern char *_heapbase;
+
+/* Table indexed by block number giving per-block information.  */
+extern malloc_info *_heapinfo;
+
+/* Address to block number and vice versa.  */
+#define BLOCK(A)       (((char *) (A) - _heapbase) / BLOCKSIZE + 1)
+#define ADDRESS(B)     ((void *) (((B) - 1) * BLOCKSIZE + _heapbase))
+
+/* Current search index for the heap table.  */
+extern size_t _heapindex;
+
+/* Limit of valid info table indices.  */
+extern size_t _heaplimit;
+
+/* Doubly linked lists of free fragments.  */
+struct list
+  {
+    struct list *next;
+    struct list *prev;
+  };
+
+/* Free list headers for each fragment size.  */
+extern struct list _fraghead[];
+
+/* List of blocks allocated with aligned_alloc and friends.  */
+struct alignlist
+  {
+    struct alignlist *next;
+    void *aligned;             /* The address that aligned_alloc returned.  */
+    void *exact;               /* The address that malloc returned.  */
+  };
+extern struct alignlist *_aligned_blocks;
+
+/* Instrumentation.  */
+extern size_t _chunks_used;
+extern size_t _bytes_used;
+extern size_t _chunks_free;
+extern size_t _bytes_free;
+
+/* Internal versions of `malloc', `realloc', and `free'
+   used when these functions need to call each other.
+   They are the same but don't call the hooks.  */
+extern void *_malloc_internal (size_t);
+extern void *_realloc_internal (void *, size_t);
+extern void _free_internal (void *);
+extern void *_malloc_internal_nolock (size_t);
+extern void *_realloc_internal_nolock (void *, size_t);
+extern void _free_internal_nolock (void *);
+
+#ifdef USE_PTHREAD
+extern pthread_mutex_t _malloc_mutex, _aligned_blocks_mutex;
+extern int _malloc_thread_enabled_p;
+#define LOCK()                                 \
+  do {                                         \
+    if (_malloc_thread_enabled_p)              \
+      pthread_mutex_lock (&_malloc_mutex);     \
+  } while (0)
+#define UNLOCK()                               \
+  do {                                         \
+    if (_malloc_thread_enabled_p)              \
+      pthread_mutex_unlock (&_malloc_mutex);   \
+  } while (0)
+#define LOCK_ALIGNED_BLOCKS()                          \
+  do {                                                 \
+    if (_malloc_thread_enabled_p)                      \
+      pthread_mutex_lock (&_aligned_blocks_mutex);     \
+  } while (0)
+#define UNLOCK_ALIGNED_BLOCKS()                                \
+  do {                                                 \
+    if (_malloc_thread_enabled_p)                      \
+      pthread_mutex_unlock (&_aligned_blocks_mutex);   \
+  } while (0)
+#else
+#define LOCK()
+#define UNLOCK()
+#define LOCK_ALIGNED_BLOCKS()
+#define UNLOCK_ALIGNED_BLOCKS()
+#endif
+
+/* Given an address in the middle of a malloc'd object,
+   return the address of the beginning of the object.  */
+extern void *malloc_find_object_address (void *ptr);
+
+/* Underlying allocation function; successive calls should
+   return contiguous pieces of memory.  */
+extern void *(*__morecore) (ptrdiff_t size);
+
+/* Default value of `__morecore'.  */
+extern void *__default_morecore (ptrdiff_t size);
+
+/* If not NULL, this function is called after each time
+   `__morecore' is called to increase the data size.  */
+extern void (*__after_morecore_hook) (void);
+
+/* Number of extra blocks to get each time we ask for more core.
+   This reduces the frequency of calling `(*__morecore)'.  */
+extern size_t __malloc_extra_blocks;
+
+/* Nonzero if `malloc' has been called and done its initialization.  */
+extern int __malloc_initialized;
+/* Function called to initialize malloc data structures.  */
+extern int __malloc_initialize (void);
+
+/* Hooks for debugging versions.  */
+extern void (*__malloc_initialize_hook) (void);
+extern void (*__free_hook) (void *ptr);
+extern void *(*__malloc_hook) (size_t size);
+extern void *(*__realloc_hook) (void *ptr, size_t size);
+extern void *(*__memalign_hook) (size_t size, size_t alignment);
+
+/* Return values for `mprobe': these are the kinds of inconsistencies that
+   `mcheck' enables detection of.  */
+enum mcheck_status
+  {
+    MCHECK_DISABLED = -1,      /* Consistency checking is not turned on.  */
+    MCHECK_OK,                 /* Block is fine.  */
+    MCHECK_FREE,               /* Block freed twice.  */
+    MCHECK_HEAD,               /* Memory before the block was clobbered.  */
+    MCHECK_TAIL                        /* Memory after the block was 
clobbered.  */
+  };
+
+/* Activate a standard collection of debugging hooks.  This must be called
+   before `malloc' is ever called.  ABORTFUNC is called with an error code
+   (see enum above) when an inconsistency is detected.  If ABORTFUNC is
+   null, the standard function prints on stderr and then calls `abort'.  */
+extern int mcheck (void (*abortfunc) (enum mcheck_status));
+
+/* Check for aberrations in a particular malloc'd block.  You must have
+   called `mcheck' already.  These are the same checks that `mcheck' does
+   when you free or reallocate a block.  */
+extern enum mcheck_status mprobe (void *ptr);
+
+/* Activate a standard collection of tracing hooks.  */
+extern void mtrace (void);
+extern void muntrace (void);
+
+/* Statistics available to the user.  */
+struct mstats
+  {
+    size_t bytes_total;        /* Total size of the heap. */
+    size_t chunks_used;        /* Chunks allocated by the user. */
+    size_t bytes_used; /* Byte total of user-allocated chunks. */
+    size_t chunks_free;        /* Chunks in the free list. */
+    size_t bytes_free; /* Byte total of chunks in the free list. */
+  };
+
+/* Pick up the current statistics. */
+extern struct mstats mstats (void);
+
+/* Call WARNFUN with a warning message when memory usage is high.  */
+extern void memory_warnings (void *start, void (*warnfun) (const char *));
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Memory allocator `malloc'.
+   Copyright 1990, 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+                 Written May 1989 by Mike Haertel.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+   The author may be reached (Email) at the address address@hidden,
+   or (US mail) as Mike Haertel c/o Free Software Foundation.  */
+
+#include <errno.h>
+
+void *(*__morecore) (ptrdiff_t size) = __default_morecore;
+
+/* Debugging hook for `malloc'.  */
+void *(*__malloc_hook) (size_t size);
+
+/* Pointer to the base of the first block.  */
+char *_heapbase;
+
+/* Block information table.  Allocated with align/__free (not malloc/free).  */
+malloc_info *_heapinfo;
+
+/* Number of info entries.  */
+static size_t heapsize;
+
+/* Search index in the info table.  */
+size_t _heapindex;
+
+/* Limit of valid info table indices.  */
+size_t _heaplimit;
+
+/* Free lists for each fragment size.  */
+struct list _fraghead[BLOCKLOG];
+
+/* Instrumentation.  */
+size_t _chunks_used;
+size_t _bytes_used;
+size_t _chunks_free;
+size_t _bytes_free;
+
+/* Are you experienced?  */
+int __malloc_initialized;
+
+size_t __malloc_extra_blocks;
+
+void (*__malloc_initialize_hook) (void);
+void (*__after_morecore_hook) (void);
+
+#if defined GC_MALLOC_CHECK && defined GC_PROTECT_MALLOC_STATE
+
+/* Some code for hunting a bug writing into _heapinfo.
+
+   Call this macro with argument PROT non-zero to protect internal
+   malloc state against writing to it, call it with a zero argument to
+   make it readable and writable.
+
+   Note that this only works if BLOCKSIZE == page size, which is
+   the case on the i386.  */
+
+#include <sys/types.h>
+#include <sys/mman.h>
+
+static int state_protected_p;
+static size_t last_state_size;
+static malloc_info *last_heapinfo;
+
+void
+protect_malloc_state (int protect_p)
+{
+  /* If _heapinfo has been relocated, make sure its old location
+     isn't left read-only; it will be reused by malloc.  */
+  if (_heapinfo != last_heapinfo
+      && last_heapinfo
+      && state_protected_p)
+    mprotect (last_heapinfo, last_state_size, PROT_READ | PROT_WRITE);
+
+  last_state_size = _heaplimit * sizeof *_heapinfo;
+  last_heapinfo   = _heapinfo;
+
+  if (protect_p != state_protected_p)
+    {
+      state_protected_p = protect_p;
+      if (mprotect (_heapinfo, last_state_size,
+                   protect_p ? PROT_READ : PROT_READ | PROT_WRITE) != 0)
+       abort ();
+    }
+}
+
+#define PROTECT_MALLOC_STATE(PROT) protect_malloc_state (PROT)
+
+#else
+#define PROTECT_MALLOC_STATE(PROT)     /* empty */
+#endif
+
+
+/* Aligned allocation.  */
+static void *
+align (size_t size)
+{
+  void *result;
+  ptrdiff_t adj;
+
+  /* align accepts an unsigned argument, but __morecore accepts a
+     signed one.  This could lead to trouble if SIZE overflows the
+     ptrdiff_t type accepted by __morecore.  We just punt in that
+     case, since they are requesting a ludicrous amount anyway.  */
+  if (PTRDIFF_MAX < size)
+    result = 0;
+  else
+    result = (*__morecore) (size);
+  adj = (uintptr_t) result % BLOCKSIZE;
+  if (adj != 0)
+    {
+      adj = BLOCKSIZE - adj;
+      (*__morecore) (adj);
+      result = (char *) result + adj;
+    }
+
+  if (__after_morecore_hook)
+    (*__after_morecore_hook) ();
+
+  return result;
+}
+
+/* Get SIZE bytes, if we can get them starting at END.
+   Return the address of the space we got.
+   If we cannot get space at END, fail and return 0.  */
+static void *
+get_contiguous_space (ptrdiff_t size, void *position)
+{
+  void *before;
+  void *after;
+
+  before = (*__morecore) (0);
+  /* If we can tell in advance that the break is at the wrong place,
+     fail now.  */
+  if (before != position)
+    return 0;
+
+  /* Allocate SIZE bytes and get the address of them.  */
+  after = (*__morecore) (size);
+  if (!after)
+    return 0;
+
+  /* It was not contiguous--reject it.  */
+  if (after != position)
+    {
+      (*__morecore) (- size);
+      return 0;
+    }
+
+  return after;
+}
+
+
+/* This is called when `_heapinfo' and `heapsize' have just
+   been set to describe a new info table.  Set up the table
+   to describe itself and account for it in the statistics.  */
+static void
+register_heapinfo (void)
+{
+  size_t block, blocks;
+
+  block = BLOCK (_heapinfo);
+  blocks = BLOCKIFY (heapsize * sizeof (malloc_info));
+
+  /* Account for the _heapinfo block itself in the statistics.  */
+  _bytes_used += blocks * BLOCKSIZE;
+  ++_chunks_used;
+
+  /* Describe the heapinfo block itself in the heapinfo.  */
+  _heapinfo[block].busy.type = 0;
+  _heapinfo[block].busy.info.size = blocks;
+  /* Leave back-pointers for malloc_find_address.  */
+  while (--blocks > 0)
+    _heapinfo[block + blocks].busy.info.size = -blocks;
+}
+
+#ifdef USE_PTHREAD
+pthread_mutex_t _malloc_mutex = PTHREAD_MUTEX_INITIALIZER;
+pthread_mutex_t _aligned_blocks_mutex = PTHREAD_MUTEX_INITIALIZER;
+int _malloc_thread_enabled_p;
+
+static void
+malloc_atfork_handler_prepare (void)
+{
+  LOCK ();
+  LOCK_ALIGNED_BLOCKS ();
+}
+
+static void
+malloc_atfork_handler_parent (void)
+{
+  UNLOCK_ALIGNED_BLOCKS ();
+  UNLOCK ();
+}
+
+static void
+malloc_atfork_handler_child (void)
+{
+  UNLOCK_ALIGNED_BLOCKS ();
+  UNLOCK ();
+}
+
+/* Set up mutexes and make malloc etc. thread-safe.  */
+void
+malloc_enable_thread (void)
+{
+  if (_malloc_thread_enabled_p)
+    return;
+
+  /* Some pthread implementations call malloc for statically
+     initialized mutexes when they are used first.  To avoid such a
+     situation, we initialize mutexes here while their use is
+     disabled in malloc etc.  */
+  pthread_mutex_init (&_malloc_mutex, NULL);
+  pthread_mutex_init (&_aligned_blocks_mutex, NULL);
+  pthread_atfork (malloc_atfork_handler_prepare,
+                 malloc_atfork_handler_parent,
+                 malloc_atfork_handler_child);
+  _malloc_thread_enabled_p = 1;
+}
+#endif /* USE_PTHREAD */
+
+static void
+malloc_initialize_1 (void)
+{
+#ifdef GC_MCHECK
+  mcheck (NULL);
+#endif
+
+  if (__malloc_initialize_hook)
+    (*__malloc_initialize_hook) ();
+
+  heapsize = HEAP / BLOCKSIZE;
+  _heapinfo = align (heapsize * sizeof (malloc_info));
+  if (_heapinfo == NULL)
+    return;
+  memset (_heapinfo, 0, heapsize * sizeof (malloc_info));
+  _heapinfo[0].free.size = 0;
+  _heapinfo[0].free.next = _heapinfo[0].free.prev = 0;
+  _heapindex = 0;
+  _heapbase = (char *) _heapinfo;
+  _heaplimit = BLOCK (_heapbase + heapsize * sizeof (malloc_info));
+
+  register_heapinfo ();
+
+  __malloc_initialized = 1;
+  PROTECT_MALLOC_STATE (1);
+  return;
+}
+
+/* Set everything up and remember that we have.
+   main will call malloc which calls this function.  That is before any threads
+   or signal handlers has been set up, so we don't need thread protection.  */
+int
+__malloc_initialize (void)
+{
+  if (__malloc_initialized)
+    return 0;
+
+  malloc_initialize_1 ();
+
+  return __malloc_initialized;
+}
+
+static int morecore_recursing;
+
+/* Get neatly aligned memory, initializing or
+   growing the heap info table as necessary. */
+static void *
+morecore_nolock (size_t size)
+{
+  void *result;
+  malloc_info *newinfo, *oldinfo;
+  size_t newsize;
+
+  if (morecore_recursing)
+    /* Avoid recursion.  The caller will know how to handle a null return.  */
+    return NULL;
+
+  result = align (size);
+  if (result == NULL)
+    return NULL;
+
+  PROTECT_MALLOC_STATE (0);
+
+  /* Check if we need to grow the info table.  */
+  if ((size_t) BLOCK ((char *) result + size) > heapsize)
+    {
+      /* Calculate the new _heapinfo table size.  We do not account for the
+        added blocks in the table itself, as we hope to place them in
+        existing free space, which is already covered by part of the
+        existing table.  */
+      newsize = heapsize;
+      do
+       newsize *= 2;
+      while ((size_t) BLOCK ((char *) result + size) > newsize);
+
+      /* We must not reuse existing core for the new info table when called
+        from realloc in the case of growing a large block, because the
+        block being grown is momentarily marked as free.  In this case
+        _heaplimit is zero so we know not to reuse space for internal
+        allocation.  */
+      if (_heaplimit != 0)
+       {
+         /* First try to allocate the new info table in core we already
+            have, in the usual way using realloc.  If realloc cannot
+            extend it in place or relocate it to existing sufficient core,
+            we will get called again, and the code above will notice the
+            `morecore_recursing' flag and return null.  */
+         int save = errno;     /* Don't want to clobber errno with ENOMEM.  */
+         morecore_recursing = 1;
+         newinfo = _realloc_internal_nolock (_heapinfo,
+                                             newsize * sizeof (malloc_info));
+         morecore_recursing = 0;
+         if (newinfo == NULL)
+           errno = save;
+         else
+           {
+             /* We found some space in core, and realloc has put the old
+                table's blocks on the free list.  Now zero the new part
+                of the table and install the new table location.  */
+             memset (&newinfo[heapsize], 0,
+                     (newsize - heapsize) * sizeof (malloc_info));
+             _heapinfo = newinfo;
+             heapsize = newsize;
+             goto got_heap;
+           }
+       }
+
+      /* Allocate new space for the malloc info table.  */
+      while (1)
+       {
+         newinfo = align (newsize * sizeof (malloc_info));
+
+         /* Did it fail?  */
+         if (newinfo == NULL)
+           {
+             (*__morecore) (-size);
+             return NULL;
+           }
+
+         /* Is it big enough to record status for its own space?
+            If so, we win.  */
+         if ((size_t) BLOCK ((char *) newinfo
+                             + newsize * sizeof (malloc_info))
+             < newsize)
+           break;
+
+         /* Must try again.  First give back most of what we just got.  */
+         (*__morecore) (- newsize * sizeof (malloc_info));
+         newsize *= 2;
+       }
+
+      /* Copy the old table to the beginning of the new,
+        and zero the rest of the new table.  */
+      memcpy (newinfo, _heapinfo, heapsize * sizeof (malloc_info));
+      memset (&newinfo[heapsize], 0,
+             (newsize - heapsize) * sizeof (malloc_info));
+      oldinfo = _heapinfo;
+      _heapinfo = newinfo;
+      heapsize = newsize;
+
+      register_heapinfo ();
+
+      /* Reset _heaplimit so _free_internal never decides
+        it can relocate or resize the info table.  */
+      _heaplimit = 0;
+      _free_internal_nolock (oldinfo);
+      PROTECT_MALLOC_STATE (0);
+
+      /* The new heap limit includes the new table just allocated.  */
+      _heaplimit = BLOCK ((char *) newinfo + heapsize * sizeof (malloc_info));
+      return result;
+    }
+
+ got_heap:
+  _heaplimit = BLOCK ((char *) result + size);
+  return result;
+}
+
+/* Allocate memory from the heap.  */
+void *
+_malloc_internal_nolock (size_t size)
+{
+  void *result;
+  size_t block, blocks, lastblocks, start;
+  register size_t i;
+  struct list *next;
+
+  /* ANSI C allows `malloc (0)' to either return NULL, or to return a
+     valid address you can realloc and free (though not dereference).
+
+     It turns out that some extant code (sunrpc, at least Ultrix's version)
+     expects `malloc (0)' to return non-NULL and breaks otherwise.
+     Be compatible.  */
+
+#if    0
+  if (size == 0)
+    return NULL;
+#endif
+
+  PROTECT_MALLOC_STATE (0);
+
+  if (size < sizeof (struct list))
+    size = sizeof (struct list);
+
+  /* Determine the allocation policy based on the request size.  */
+  if (size <= BLOCKSIZE / 2)
+    {
+      /* Small allocation to receive a fragment of a block.
+        Determine the logarithm to base two of the fragment size. */
+      register size_t log = 1;
+      --size;
+      while ((size /= 2) != 0)
+       ++log;
+
+      /* Look in the fragment lists for a
+        free fragment of the desired size. */
+      next = _fraghead[log].next;
+      if (next != NULL)
+       {
+         /* There are free fragments of this size.
+            Pop a fragment out of the fragment list and return it.
+            Update the block's nfree and first counters. */
+         result = next;
+         next->prev->next = next->next;
+         if (next->next != NULL)
+           next->next->prev = next->prev;
+         block = BLOCK (result);
+         if (--_heapinfo[block].busy.info.frag.nfree != 0)
+           _heapinfo[block].busy.info.frag.first =
+             (uintptr_t) next->next % BLOCKSIZE >> log;
+
+         /* Update the statistics.  */
+         ++_chunks_used;
+         _bytes_used += 1 << log;
+         --_chunks_free;
+         _bytes_free -= 1 << log;
+       }
+      else
+       {
+         /* No free fragments of the desired size, so get a new block
+            and break it into fragments, returning the first.  */
+#ifdef GC_MALLOC_CHECK
+         result = _malloc_internal_nolock (BLOCKSIZE);
+         PROTECT_MALLOC_STATE (0);
+#elif defined (USE_PTHREAD)
+         result = _malloc_internal_nolock (BLOCKSIZE);
+#else
+         result = malloc (BLOCKSIZE);
+#endif
+         if (result == NULL)
+           {
+             PROTECT_MALLOC_STATE (1);
+             goto out;
+           }
+
+         /* Link all fragments but the first into the free list.  */
+         next = (struct list *) ((char *) result + (1 << log));
+         next->next = NULL;
+         next->prev = &_fraghead[log];
+         _fraghead[log].next = next;
+
+         for (i = 2; i < (size_t) (BLOCKSIZE >> log); ++i)
+           {
+             next = (struct list *) ((char *) result + (i << log));
+             next->next = _fraghead[log].next;
+             next->prev = &_fraghead[log];
+             next->prev->next = next;
+             next->next->prev = next;
+           }
+
+         /* Initialize the nfree and first counters for this block.  */
+         block = BLOCK (result);
+         _heapinfo[block].busy.type = log;
+         _heapinfo[block].busy.info.frag.nfree = i - 1;
+         _heapinfo[block].busy.info.frag.first = i - 1;
+
+         _chunks_free += (BLOCKSIZE >> log) - 1;
+         _bytes_free += BLOCKSIZE - (1 << log);
+         _bytes_used -= BLOCKSIZE - (1 << log);
+       }
+    }
+  else
+    {
+      /* Large allocation to receive one or more blocks.
+        Search the free list in a circle starting at the last place visited.
+        If we loop completely around without finding a large enough
+        space we will have to get more memory from the system.  */
+      blocks = BLOCKIFY (size);
+      start = block = _heapindex;
+      while (_heapinfo[block].free.size < blocks)
+       {
+         block = _heapinfo[block].free.next;
+         if (block == start)
+           {
+             /* Need to get more from the system.  Get a little extra.  */
+             size_t wantblocks = blocks + __malloc_extra_blocks;
+             block = _heapinfo[0].free.prev;
+             lastblocks = _heapinfo[block].free.size;
+             /* Check to see if the new core will be contiguous with the
+                final free block; if so we don't need to get as much.  */
+             if (_heaplimit != 0 && block + lastblocks == _heaplimit &&
+                 /* We can't do this if we will have to make the heap info
+                     table bigger to accommodate the new space.  */
+                 block + wantblocks <= heapsize &&
+                 get_contiguous_space ((wantblocks - lastblocks) * BLOCKSIZE,
+                                       ADDRESS (block + lastblocks)))
+               {
+                 /* We got it contiguously.  Which block we are extending
+                    (the `final free block' referred to above) might have
+                    changed, if it got combined with a freed info table.  */
+                 block = _heapinfo[0].free.prev;
+                 _heapinfo[block].free.size += (wantblocks - lastblocks);
+                 _bytes_free += (wantblocks - lastblocks) * BLOCKSIZE;
+                 _heaplimit += wantblocks - lastblocks;
+                 continue;
+               }
+             result = morecore_nolock (wantblocks * BLOCKSIZE);
+             if (result == NULL)
+               goto out;
+             block = BLOCK (result);
+             /* Put the new block at the end of the free list.  */
+             _heapinfo[block].free.size = wantblocks;
+             _heapinfo[block].free.prev = _heapinfo[0].free.prev;
+             _heapinfo[block].free.next = 0;
+             _heapinfo[0].free.prev = block;
+             _heapinfo[_heapinfo[block].free.prev].free.next = block;
+             ++_chunks_free;
+             /* Now loop to use some of that block for this allocation.  */
+           }
+       }
+
+      /* At this point we have found a suitable free list entry.
+        Figure out how to remove what we need from the list. */
+      result = ADDRESS (block);
+      if (_heapinfo[block].free.size > blocks)
+       {
+         /* The block we found has a bit left over,
+            so relink the tail end back into the free list. */
+         _heapinfo[block + blocks].free.size
+           = _heapinfo[block].free.size - blocks;
+         _heapinfo[block + blocks].free.next
+           = _heapinfo[block].free.next;
+         _heapinfo[block + blocks].free.prev
+           = _heapinfo[block].free.prev;
+         _heapinfo[_heapinfo[block].free.prev].free.next
+           = _heapinfo[_heapinfo[block].free.next].free.prev
+           = _heapindex = block + blocks;
+       }
+      else
+       {
+         /* The block exactly matches our requirements,
+            so just remove it from the list. */
+         _heapinfo[_heapinfo[block].free.next].free.prev
+           = _heapinfo[block].free.prev;
+         _heapinfo[_heapinfo[block].free.prev].free.next
+           = _heapindex = _heapinfo[block].free.next;
+         --_chunks_free;
+       }
+
+      _heapinfo[block].busy.type = 0;
+      _heapinfo[block].busy.info.size = blocks;
+      ++_chunks_used;
+      _bytes_used += blocks * BLOCKSIZE;
+      _bytes_free -= blocks * BLOCKSIZE;
+
+      /* Mark all the blocks of the object just allocated except for the
+        first with a negative number so you can find the first block by
+        adding that adjustment.  */
+      while (--blocks > 0)
+       _heapinfo[block + blocks].busy.info.size = -blocks;
+    }
+
+  PROTECT_MALLOC_STATE (1);
+ out:
+  return result;
+}
+
+void *
+_malloc_internal (size_t size)
+{
+  void *result;
+
+  LOCK ();
+  result = _malloc_internal_nolock (size);
+  UNLOCK ();
+
+  return result;
+}
+
+void *
+malloc (size_t size)
+{
+  void *(*hook) (size_t);
+
+  if (!__malloc_initialized && !__malloc_initialize ())
+    return NULL;
+
+  /* Copy the value of __malloc_hook to an automatic variable in case
+     __malloc_hook is modified in another thread between its
+     NULL-check and the use.
+
+     Note: Strictly speaking, this is not a right solution.  We should
+     use mutexes to access non-read-only variables that are shared
+     among multiple threads.  We just leave it for compatibility with
+     glibc malloc (i.e., assignments to __malloc_hook) for now.  */
+  hook = __malloc_hook;
+  return (hook != NULL ? *hook : _malloc_internal) (size);
+}
+
+#ifndef _LIBC
+
+/* On some ANSI C systems, some libc functions call _malloc, _free
+   and _realloc.  Make them use the GNU functions.  */
+
+extern void *_malloc (size_t);
+extern void _free (void *);
+extern void *_realloc (void *, size_t);
+
+void *
+_malloc (size_t size)
+{
+  return malloc (size);
+}
+
+void
+_free (void *ptr)
+{
+  free (ptr);
+}
+
+void *
+_realloc (void *ptr, size_t size)
+{
+  return realloc (ptr, size);
+}
+
+#endif
+/* Free a block of memory allocated by `malloc'.
+   Copyright 1990, 1991, 1992, 1994, 1995 Free Software Foundation, Inc.
+                 Written May 1989 by Mike Haertel.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+   The author may be reached (Email) at the address address@hidden,
+   or (US mail) as Mike Haertel c/o Free Software Foundation.  */
+
+
+/* Debugging hook for free.  */
+void (*__free_hook) (void *__ptr);
+
+/* List of blocks allocated by aligned_alloc.  */
+struct alignlist *_aligned_blocks = NULL;
+
+/* Return memory to the heap.
+   Like `_free_internal' but don't lock mutex.  */
+void
+_free_internal_nolock (void *ptr)
+{
+  int type;
+  size_t block, blocks;
+  register size_t i;
+  struct list *prev, *next;
+  void *curbrk;
+  const size_t lesscore_threshold
+    /* Threshold of free space at which we will return some to the system.  */
+    = FINAL_FREE_BLOCKS + 2 * __malloc_extra_blocks;
+
+  register struct alignlist *l;
+
+  if (ptr == NULL)
+    return;
+
+  PROTECT_MALLOC_STATE (0);
+
+  LOCK_ALIGNED_BLOCKS ();
+  for (l = _aligned_blocks; l != NULL; l = l->next)
+    if (l->aligned == ptr)
+      {
+       l->aligned = NULL;      /* Mark the slot in the list as free.  */
+       ptr = l->exact;
+       break;
+      }
+  UNLOCK_ALIGNED_BLOCKS ();
+
+  block = BLOCK (ptr);
+
+  type = _heapinfo[block].busy.type;
+  switch (type)
+    {
+    case 0:
+      /* Get as many statistics as early as we can.  */
+      --_chunks_used;
+      _bytes_used -= _heapinfo[block].busy.info.size * BLOCKSIZE;
+      _bytes_free += _heapinfo[block].busy.info.size * BLOCKSIZE;
+
+      /* Find the free cluster previous to this one in the free list.
+        Start searching at the last block referenced; this may benefit
+        programs with locality of allocation.  */
+      i = _heapindex;
+      if (i > block)
+       while (i > block)
+         i = _heapinfo[i].free.prev;
+      else
+       {
+         do
+           i = _heapinfo[i].free.next;
+         while (i > 0 && i < block);
+         i = _heapinfo[i].free.prev;
+       }
+
+      /* Determine how to link this block into the free list.  */
+      if (block == i + _heapinfo[i].free.size)
+       {
+         /* Coalesce this block with its predecessor.  */
+         _heapinfo[i].free.size += _heapinfo[block].busy.info.size;
+         block = i;
+       }
+      else
+       {
+         /* Really link this block back into the free list.  */
+         _heapinfo[block].free.size = _heapinfo[block].busy.info.size;
+         _heapinfo[block].free.next = _heapinfo[i].free.next;
+         _heapinfo[block].free.prev = i;
+         _heapinfo[i].free.next = block;
+         _heapinfo[_heapinfo[block].free.next].free.prev = block;
+         ++_chunks_free;
+       }
+
+      /* Now that the block is linked in, see if we can coalesce it
+        with its successor (by deleting its successor from the list
+        and adding in its size).  */
+      if (block + _heapinfo[block].free.size == _heapinfo[block].free.next)
+       {
+         _heapinfo[block].free.size
+           += _heapinfo[_heapinfo[block].free.next].free.size;
+         _heapinfo[block].free.next
+           = _heapinfo[_heapinfo[block].free.next].free.next;
+         _heapinfo[_heapinfo[block].free.next].free.prev = block;
+         --_chunks_free;
+       }
+
+      /* How many trailing free blocks are there now?  */
+      blocks = _heapinfo[block].free.size;
+
+      /* Where is the current end of accessible core?  */
+      curbrk = (*__morecore) (0);
+
+      if (_heaplimit != 0 && curbrk == ADDRESS (_heaplimit))
+       {
+         /* The end of the malloc heap is at the end of accessible core.
+            It's possible that moving _heapinfo will allow us to
+            return some space to the system.  */
+
+         size_t info_block = BLOCK (_heapinfo);
+         size_t info_blocks = _heapinfo[info_block].busy.info.size;
+         size_t prev_block = _heapinfo[block].free.prev;
+         size_t prev_blocks = _heapinfo[prev_block].free.size;
+         size_t next_block = _heapinfo[block].free.next;
+         size_t next_blocks = _heapinfo[next_block].free.size;
+
+         if (/* Win if this block being freed is last in core, the info table
+                is just before it, the previous free block is just before the
+                info table, and the two free blocks together form a useful
+                amount to return to the system.  */
+             (block + blocks == _heaplimit &&
+              info_block + info_blocks == block &&
+              prev_block != 0 && prev_block + prev_blocks == info_block &&
+              blocks + prev_blocks >= lesscore_threshold) ||
+             /* Nope, not the case.  We can also win if this block being
+                freed is just before the info table, and the table extends
+                to the end of core or is followed only by a free block,
+                and the total free space is worth returning to the system.  */
+             (block + blocks == info_block &&
+              ((info_block + info_blocks == _heaplimit &&
+                blocks >= lesscore_threshold) ||
+               (info_block + info_blocks == next_block &&
+                next_block + next_blocks == _heaplimit &&
+                blocks + next_blocks >= lesscore_threshold)))
+             )
+           {
+             malloc_info *newinfo;
+             size_t oldlimit = _heaplimit;
+
+             /* Free the old info table, clearing _heaplimit to avoid
+                recursion into this code.  We don't want to return the
+                table's blocks to the system before we have copied them to
+                the new location.  */
+             _heaplimit = 0;
+             _free_internal_nolock (_heapinfo);
+             _heaplimit = oldlimit;
+
+             /* Tell malloc to search from the beginning of the heap for
+                free blocks, so it doesn't reuse the ones just freed.  */
+             _heapindex = 0;
+
+             /* Allocate new space for the info table and move its data.  */
+             newinfo = _malloc_internal_nolock (info_blocks * BLOCKSIZE);
+             PROTECT_MALLOC_STATE (0);
+             memmove (newinfo, _heapinfo, info_blocks * BLOCKSIZE);
+             _heapinfo = newinfo;
+
+             /* We should now have coalesced the free block with the
+                blocks freed from the old info table.  Examine the entire
+                trailing free block to decide below whether to return some
+                to the system.  */
+             block = _heapinfo[0].free.prev;
+             blocks = _heapinfo[block].free.size;
+           }
+
+         /* Now see if we can return stuff to the system.  */
+         if (block + blocks == _heaplimit && blocks >= lesscore_threshold)
+           {
+             register size_t bytes = blocks * BLOCKSIZE;
+             _heaplimit -= blocks;
+             (*__morecore) (-bytes);
+             _heapinfo[_heapinfo[block].free.prev].free.next
+               = _heapinfo[block].free.next;
+             _heapinfo[_heapinfo[block].free.next].free.prev
+               = _heapinfo[block].free.prev;
+             block = _heapinfo[block].free.prev;
+             --_chunks_free;
+             _bytes_free -= bytes;
+           }
+       }
+
+      /* Set the next search to begin at this block.  */
+      _heapindex = block;
+      break;
+
+    default:
+      /* Do some of the statistics.  */
+      --_chunks_used;
+      _bytes_used -= 1 << type;
+      ++_chunks_free;
+      _bytes_free += 1 << type;
+
+      /* Get the address of the first free fragment in this block.  */
+      prev = (struct list *) ((char *) ADDRESS (block) +
+                             (_heapinfo[block].busy.info.frag.first << type));
+
+      if (_heapinfo[block].busy.info.frag.nfree == (BLOCKSIZE >> type) - 1)
+       {
+         /* If all fragments of this block are free, remove them
+            from the fragment list and free the whole block.  */
+         next = prev;
+         for (i = 1; i < (size_t) (BLOCKSIZE >> type); ++i)
+           next = next->next;
+         prev->prev->next = next;
+         if (next != NULL)
+           next->prev = prev->prev;
+         _heapinfo[block].busy.type = 0;
+         _heapinfo[block].busy.info.size = 1;
+
+         /* Keep the statistics accurate.  */
+         ++_chunks_used;
+         _bytes_used += BLOCKSIZE;
+         _chunks_free -= BLOCKSIZE >> type;
+         _bytes_free -= BLOCKSIZE;
+
+#if defined (GC_MALLOC_CHECK) || defined (USE_PTHREAD)
+         _free_internal_nolock (ADDRESS (block));
+#else
+         free (ADDRESS (block));
+#endif
+       }
+      else if (_heapinfo[block].busy.info.frag.nfree != 0)
+       {
+         /* If some fragments of this block are free, link this
+            fragment into the fragment list after the first free
+            fragment of this block. */
+         next = ptr;
+         next->next = prev->next;
+         next->prev = prev;
+         prev->next = next;
+         if (next->next != NULL)
+           next->next->prev = next;
+         ++_heapinfo[block].busy.info.frag.nfree;
+       }
+      else
+       {
+         /* No fragments of this block are free, so link this
+            fragment into the fragment list and announce that
+            it is the first free fragment of this block. */
+         prev = ptr;
+         _heapinfo[block].busy.info.frag.nfree = 1;
+         _heapinfo[block].busy.info.frag.first =
+           (uintptr_t) ptr % BLOCKSIZE >> type;
+         prev->next = _fraghead[type].next;
+         prev->prev = &_fraghead[type];
+         prev->prev->next = prev;
+         if (prev->next != NULL)
+           prev->next->prev = prev;
+       }
+      break;
+    }
+
+  PROTECT_MALLOC_STATE (1);
+}
+
+/* Return memory to the heap.
+   Like `free' but don't call a __free_hook if there is one.  */
+void
+_free_internal (void *ptr)
+{
+  LOCK ();
+  _free_internal_nolock (ptr);
+  UNLOCK ();
+}
+
+/* Return memory to the heap.  */
+
+void
+free (void *ptr)
+{
+  void (*hook) (void *) = __free_hook;
+
+  if (hook != NULL)
+    (*hook) (ptr);
+  else
+    _free_internal (ptr);
+}
+
+/* Define the `cfree' alias for `free'.  */
+#ifdef weak_alias
+weak_alias (free, cfree)
+#else
+void
+cfree (void *ptr)
+{
+  free (ptr);
+}
+#endif
+/* Change the size of a block allocated by `malloc'.
+   Copyright 1990, 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+                    Written May 1989 by Mike Haertel.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+   The author may be reached (Email) at the address address@hidden,
+   or (US mail) as Mike Haertel c/o Free Software Foundation.  */
+
+#ifndef min
+#define min(a, b) ((a) < (b) ? (a) : (b))
+#endif
+
+/* Debugging hook for realloc.  */
+void *(*__realloc_hook) (void *ptr, size_t size);
+
+/* Resize the given region to the new size, returning a pointer
+   to the (possibly moved) region.  This is optimized for speed;
+   some benchmarks seem to indicate that greater compactness is
+   achieved by unconditionally allocating and copying to a
+   new region.  This module has incestuous knowledge of the
+   internals of both free and malloc. */
+void *
+_realloc_internal_nolock (void *ptr, size_t size)
+{
+  void *result;
+  int type;
+  size_t block, blocks, oldlimit;
+
+  if (size == 0)
+    {
+      _free_internal_nolock (ptr);
+      return _malloc_internal_nolock (0);
+    }
+  else if (ptr == NULL)
+    return _malloc_internal_nolock (size);
+
+  block = BLOCK (ptr);
+
+  PROTECT_MALLOC_STATE (0);
+
+  type = _heapinfo[block].busy.type;
+  switch (type)
+    {
+    case 0:
+      /* Maybe reallocate a large block to a small fragment.  */
+      if (size <= BLOCKSIZE / 2)
+       {
+         result = _malloc_internal_nolock (size);
+         if (result != NULL)
+           {
+             memcpy (result, ptr, size);
+             _free_internal_nolock (ptr);
+             goto out;
+           }
+       }
+
+      /* The new size is a large allocation as well;
+        see if we can hold it in place. */
+      blocks = BLOCKIFY (size);
+      if (blocks < _heapinfo[block].busy.info.size)
+       {
+         /* The new size is smaller; return
+            excess memory to the free list. */
+         _heapinfo[block + blocks].busy.type = 0;
+         _heapinfo[block + blocks].busy.info.size
+           = _heapinfo[block].busy.info.size - blocks;
+         _heapinfo[block].busy.info.size = blocks;
+         /* We have just created a new chunk by splitting a chunk in two.
+            Now we will free this chunk; increment the statistics counter
+            so it doesn't become wrong when _free_internal decrements it.  */
+         ++_chunks_used;
+         _free_internal_nolock (ADDRESS (block + blocks));
+         result = ptr;
+       }
+      else if (blocks == _heapinfo[block].busy.info.size)
+       /* No size change necessary.  */
+       result = ptr;
+      else
+       {
+         /* Won't fit, so allocate a new region that will.
+            Free the old region first in case there is sufficient
+            adjacent free space to grow without moving. */
+         blocks = _heapinfo[block].busy.info.size;
+         /* Prevent free from actually returning memory to the system.  */
+         oldlimit = _heaplimit;
+         _heaplimit = 0;
+         _free_internal_nolock (ptr);
+         result = _malloc_internal_nolock (size);
+         PROTECT_MALLOC_STATE (0);
+         if (_heaplimit == 0)
+           _heaplimit = oldlimit;
+         if (result == NULL)
+           {
+             /* Now we're really in trouble.  We have to unfree
+                the thing we just freed.  Unfortunately it might
+                have been coalesced with its neighbors.  */
+             if (_heapindex == block)
+               (void) _malloc_internal_nolock (blocks * BLOCKSIZE);
+             else
+               {
+                 void *previous
+                   = _malloc_internal_nolock ((block - _heapindex) * 
BLOCKSIZE);
+                 (void) _malloc_internal_nolock (blocks * BLOCKSIZE);
+                 _free_internal_nolock (previous);
+               }
+             goto out;
+           }
+         if (ptr != result)
+           memmove (result, ptr, blocks * BLOCKSIZE);
+       }
+      break;
+
+    default:
+      /* Old size is a fragment; type is logarithm
+        to base two of the fragment size.  */
+      if (size > (size_t) (1 << (type - 1)) &&
+         size <= (size_t) (1 << type))
+       /* The new size is the same kind of fragment.  */
+       result = ptr;
+      else
+       {
+         /* The new size is different; allocate a new space,
+            and copy the lesser of the new size and the old. */
+         result = _malloc_internal_nolock (size);
+         if (result == NULL)
+           goto out;
+         memcpy (result, ptr, min (size, (size_t) 1 << type));
+         _free_internal_nolock (ptr);
+       }
+      break;
+    }
+
+  PROTECT_MALLOC_STATE (1);
+ out:
+  return result;
+}
+
+void *
+_realloc_internal (void *ptr, size_t size)
+{
+  void *result;
+
+  LOCK ();
+  result = _realloc_internal_nolock (ptr, size);
+  UNLOCK ();
+
+  return result;
+}
+
+void *
+realloc (void *ptr, size_t size)
+{
+  void *(*hook) (void *, size_t);
+
+  if (!__malloc_initialized && !__malloc_initialize ())
+    return NULL;
+
+  hook = __realloc_hook;
+  return (hook != NULL ? *hook : _realloc_internal) (ptr, size);
+}
+/* Copyright (C) 1991, 1992, 1994 Free Software Foundation, Inc.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+   The author may be reached (Email) at the address address@hidden,
+   or (US mail) as Mike Haertel c/o Free Software Foundation.  */
+
+/* Allocate an array of NMEMB elements each SIZE bytes long.
+   The entire array is initialized to zeros.  */
+void *
+calloc (size_t nmemb, size_t size)
+{
+  void *result;
+  size_t bytes = nmemb * size;
+
+  if (size != 0 && bytes / size != nmemb)
+    {
+      errno = ENOMEM;
+      return NULL;
+    }
+
+  result = malloc (bytes);
+  if (result)
+    return memset (result, 0, bytes);
+  return result;
+}
+/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* uClibc defines __GNU_LIBRARY__, but it is not completely
+   compatible.  */
+#if !defined (__GNU_LIBRARY__) || defined (__UCLIBC__)
+#define        __sbrk  sbrk
+#else /* __GNU_LIBRARY__ && ! defined (__UCLIBC__) */
+/* It is best not to declare this and cast its result on foreign operating
+   systems with potentially hostile include files.  */
+
+extern void *__sbrk (ptrdiff_t increment);
+#endif /* __GNU_LIBRARY__ && ! defined (__UCLIBC__) */
+
+/* Allocate INCREMENT more bytes of data space,
+   and return the start of data space, or NULL on errors.
+   If INCREMENT is negative, shrink data space.  */
+void *
+__default_morecore (ptrdiff_t increment)
+{
+  void *result;
+#if defined (CYGWIN)
+  if (!DUMPED)
+    {
+      return bss_sbrk (increment);
+    }
+#endif
+  result = (void *) __sbrk (increment);
+  if (result == (void *) -1)
+    return NULL;
+  return result;
+}
+/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this library.  If not, see <http://www.gnu.org/licenses/>.  
*/
+
+void *(*__memalign_hook) (size_t size, size_t alignment);
+
+void *
+aligned_alloc (size_t alignment, size_t size)
+{
+  void *result;
+  size_t adj, lastadj;
+  void *(*hook) (size_t, size_t) = __memalign_hook;
+
+  if (hook)
+    return (*hook) (alignment, size);
+
+  /* Allocate a block with enough extra space to pad the block with up to
+     (ALIGNMENT - 1) bytes if necessary.  */
+  if (- size < alignment)
+    {
+      errno = ENOMEM;
+      return NULL;
+    }
+  result = malloc (size + alignment - 1);
+  if (result == NULL)
+    return NULL;
+
+  /* Figure out how much we will need to pad this particular block
+     to achieve the required alignment.  */
+  adj = alignment - (uintptr_t) result % alignment;
+  if (adj == alignment)
+    adj = 0;
+
+  if (adj != alignment - 1)
+    {
+      do
+       {
+         /* Reallocate the block with only as much excess as it
+            needs.  */
+         free (result);
+         result = malloc (size + adj);
+         if (result == NULL)   /* Impossible unless interrupted.  */
+           return NULL;
+
+         lastadj = adj;
+         adj = alignment - (uintptr_t) result % alignment;
+         if (adj == alignment)
+           adj = 0;
+         /* It's conceivable we might have been so unlucky as to get
+            a different block with weaker alignment.  If so, this
+            block is too short to contain SIZE after alignment
+            correction.  So we must try again and get another block,
+            slightly larger.  */
+       } while (adj > lastadj);
+    }
+
+  if (adj != 0)
+    {
+      /* Record this block in the list of aligned blocks, so that `free'
+        can identify the pointer it is passed, which will be in the middle
+        of an allocated block.  */
+
+      struct alignlist *l;
+      LOCK_ALIGNED_BLOCKS ();
+      for (l = _aligned_blocks; l != NULL; l = l->next)
+       if (l->aligned == NULL)
+         /* This slot is free.  Use it.  */
+         break;
+      if (l == NULL)
+       {
+         l = malloc (sizeof *l);
+         if (l != NULL)
+           {
+             l->next = _aligned_blocks;
+             _aligned_blocks = l;
+           }
+       }
+      if (l != NULL)
+       {
+         l->exact = result;
+         result = l->aligned = (char *) result + adj;
+       }
+      UNLOCK_ALIGNED_BLOCKS ();
+      if (l == NULL)
+       {
+         free (result);
+         result = NULL;
+       }
+    }
+
+  return result;
+}
+
+/* An obsolete alias for aligned_alloc, for any old libraries that use
+   this alias.  */
+
+void *
+memalign (size_t alignment, size_t size)
+{
+  return aligned_alloc (alignment, size);
+}
+
+/* If HYBRID_MALLOC is defined, we may want to use the system
+   posix_memalign below.  */
+#ifndef HYBRID_MALLOC
+int
+posix_memalign (void **memptr, size_t alignment, size_t size)
+{
+  void *mem;
+
+  if (alignment == 0
+      || alignment % sizeof (void *) != 0
+      || (alignment & (alignment - 1)) != 0)
+    return EINVAL;
+
+  mem = aligned_alloc (alignment, size);
+  if (mem == NULL)
+    return ENOMEM;
+
+  *memptr = mem;
+
+  return 0;
+}
+#endif
+
+/* Allocate memory on a page boundary.
+   Copyright (C) 1991, 92, 93, 94, 96 Free Software Foundation, Inc.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+   The author may be reached (Email) at the address address@hidden,
+   or (US mail) as Mike Haertel c/o Free Software Foundation.  */
+
+/* Allocate SIZE bytes on a page boundary.  */
+extern void *valloc (size_t);
+
+#if defined _SC_PAGESIZE || !defined HAVE_GETPAGESIZE
+# include "getpagesize.h"
+#elif !defined getpagesize
+extern int getpagesize (void);
+#endif
+
+static size_t pagesize;
+
+void *
+valloc (size_t size)
+{
+  if (pagesize == 0)
+    pagesize = getpagesize ();
+
+  return aligned_alloc (pagesize, size);
+}
+
+#ifdef HYBRID_MALLOC
+#undef malloc
+#undef realloc
+#undef calloc
+#undef aligned_alloc
+#undef free
+
+/* Declare system malloc and friends.  */
+extern void *malloc (size_t size);
+extern void *realloc (void *ptr, size_t size);
+extern void *calloc (size_t nmemb, size_t size);
+extern void free (void *ptr);
+#ifdef HAVE_ALIGNED_ALLOC
+extern void *aligned_alloc (size_t alignment, size_t size);
+#elif defined HAVE_POSIX_MEMALIGN
+extern int posix_memalign (void **memptr, size_t alignment, size_t size);
+#endif
+
+/* See the comments near the beginning of this file for explanations
+   of the following functions. */
+
+void *
+hybrid_malloc (size_t size)
+{
+  if (DUMPED)
+    return malloc (size);
+  return gmalloc (size);
+}
+
+void *
+hybrid_calloc (size_t nmemb, size_t size)
+{
+  if (DUMPED)
+    return calloc (nmemb, size);
+  return gcalloc (nmemb, size);
+}
+
+void
+hybrid_free (void *ptr)
+{
+  if (!DUMPED)
+    gfree (ptr);
+  else if (!ALLOCATED_BEFORE_DUMPING (ptr))
+    free (ptr);
+  /* Otherwise the dumped emacs is trying to free something allocated
+     before dumping; do nothing.  */
+  return;
+}
+
+#if defined HAVE_ALIGNED_ALLOC || defined HAVE_POSIX_MEMALIGN
+void *
+hybrid_aligned_alloc (size_t alignment, size_t size)
+{
+  if (!DUMPED)
+    return galigned_alloc (alignment, size);
+  /* The following is copied from alloc.c */
+#ifdef HAVE_ALIGNED_ALLOC
+  return aligned_alloc (alignment, size);
+#else  /* HAVE_POSIX_MEMALIGN */
+  void *p;
+  return posix_memalign (&p, alignment, size) == 0 ? p : 0;
+#endif
+}
+#endif
+  
+void *
+hybrid_realloc (void *ptr, size_t size)
+{
+  void *result;
+  int type;
+  size_t block, oldsize;
+
+  if (!DUMPED)
+    return grealloc (ptr, size);
+  if (!ALLOCATED_BEFORE_DUMPING (ptr))
+    return realloc (ptr, size);
+
+  /* The dumped emacs is trying to realloc storage allocated before
+   dumping.  We just malloc new space and copy the data.  */
+  if (size == 0 || ptr == NULL)
+    return malloc (size);
+  block = ((char *) ptr - _heapbase) / BLOCKSIZE + 1;
+  type = _heapinfo[block].busy.type;
+  oldsize =
+    type == 0 ? _heapinfo[block].busy.info.size * BLOCKSIZE
+    : (size_t) 1 << type;
+  result = malloc (size);
+  if (result)
+    return memcpy (result, ptr, min (oldsize, size));
+  return result;
+}
+
+#ifdef HYBRID_GET_CURRENT_DIR_NAME
+/* Defined in sysdep.c.  */
+char *gget_current_dir_name (void);
+
+char *
+hybrid_get_current_dir_name (void)
+{
+  if (DUMPED)
+    return get_current_dir_name ();
+  return gget_current_dir_name ();
+}
+#endif
+
+#endif /* HYBRID_MALLOC */
+
+#ifdef GC_MCHECK
+
+/* Standard debugging hooks for `malloc'.
+   Copyright 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
+   Written May 1989 by Mike Haertel.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+   The author may be reached (Email) at the address address@hidden,
+   or (US mail) as Mike Haertel c/o Free Software Foundation.  */
+
+#include <stdio.h>
+
+/* Old hook values.  */
+static void (*old_free_hook) (void *ptr);
+static void *(*old_malloc_hook) (size_t size);
+static void *(*old_realloc_hook) (void *ptr, size_t size);
+
+/* Function to call when something awful happens.  */
+static void (*abortfunc) (enum mcheck_status);
+
+/* Arbitrary magical numbers.  */
+#define MAGICWORD      (SIZE_MAX / 11 ^ SIZE_MAX / 13 << 3)
+#define MAGICFREE      (SIZE_MAX / 17 ^ SIZE_MAX / 19 << 4)
+#define MAGICBYTE      ((char) 0xd7)
+#define MALLOCFLOOD    ((char) 0x93)
+#define FREEFLOOD      ((char) 0x95)
+
+struct hdr
+  {
+    size_t size;       /* Exact size requested by user.  */
+    size_t magic;      /* Magic number to check header integrity.  */
+  };
+
+static enum mcheck_status
+checkhdr (const struct hdr *hdr)
+{
+  enum mcheck_status status;
+  switch (hdr->magic)
+    {
+    default:
+      status = MCHECK_HEAD;
+      break;
+    case MAGICFREE:
+      status = MCHECK_FREE;
+      break;
+    case MAGICWORD:
+      if (((char *) &hdr[1])[hdr->size] != MAGICBYTE)
+       status = MCHECK_TAIL;
+      else
+       status = MCHECK_OK;
+      break;
+    }
+  if (status != MCHECK_OK)
+    (*abortfunc) (status);
+  return status;
+}
+
+static void
+freehook (void *ptr)
+{
+  struct hdr *hdr;
+
+  if (ptr)
+    {
+      struct alignlist *l;
+
+      /* If the block was allocated by aligned_alloc, its real pointer
+        to free is recorded in _aligned_blocks; find that.  */
+      PROTECT_MALLOC_STATE (0);
+      LOCK_ALIGNED_BLOCKS ();
+      for (l = _aligned_blocks; l != NULL; l = l->next)
+       if (l->aligned == ptr)
+         {
+           l->aligned = NULL;  /* Mark the slot in the list as free.  */
+           ptr = l->exact;
+           break;
+         }
+      UNLOCK_ALIGNED_BLOCKS ();
+      PROTECT_MALLOC_STATE (1);
+
+      hdr = ((struct hdr *) ptr) - 1;
+      checkhdr (hdr);
+      hdr->magic = MAGICFREE;
+      memset (ptr, FREEFLOOD, hdr->size);
+    }
+  else
+    hdr = NULL;
+
+  __free_hook = old_free_hook;
+  free (hdr);
+  __free_hook = freehook;
+}
+
+static void *
+mallochook (size_t size)
+{
+  struct hdr *hdr;
+
+  __malloc_hook = old_malloc_hook;
+  hdr = malloc (sizeof *hdr + size + 1);
+  __malloc_hook = mallochook;
+  if (hdr == NULL)
+    return NULL;
+
+  hdr->size = size;
+  hdr->magic = MAGICWORD;
+  ((char *) &hdr[1])[size] = MAGICBYTE;
+  return memset (hdr + 1, MALLOCFLOOD, size);
+}
+
+static void *
+reallochook (void *ptr, size_t size)
+{
+  struct hdr *hdr = NULL;
+  size_t osize = 0;
+
+  if (ptr)
+    {
+      hdr = ((struct hdr *) ptr) - 1;
+      osize = hdr->size;
+
+      checkhdr (hdr);
+      if (size < osize)
+       memset ((char *) ptr + size, FREEFLOOD, osize - size);
+    }
+
+  __free_hook = old_free_hook;
+  __malloc_hook = old_malloc_hook;
+  __realloc_hook = old_realloc_hook;
+  hdr = realloc (hdr, sizeof *hdr + size + 1);
+  __free_hook = freehook;
+  __malloc_hook = mallochook;
+  __realloc_hook = reallochook;
+  if (hdr == NULL)
+    return NULL;
+
+  hdr->size = size;
+  hdr->magic = MAGICWORD;
+  ((char *) &hdr[1])[size] = MAGICBYTE;
+  if (size > osize)
+    memset ((char *) (hdr + 1) + osize, MALLOCFLOOD, size - osize);
+  return hdr + 1;
+}
+
+static void
+mabort (enum mcheck_status status)
+{
+  const char *msg;
+  switch (status)
+    {
+    case MCHECK_OK:
+      msg = "memory is consistent, library is buggy";
+      break;
+    case MCHECK_HEAD:
+      msg = "memory clobbered before allocated block";
+      break;
+    case MCHECK_TAIL:
+      msg = "memory clobbered past end of allocated block";
+      break;
+    case MCHECK_FREE:
+      msg = "block freed twice";
+      break;
+    default:
+      msg = "bogus mcheck_status, library is buggy";
+      break;
+    }
+#ifdef __GNU_LIBRARY__
+  __libc_fatal (msg);
+#else
+  fprintf (stderr, "mcheck: %s\n", msg);
+  fflush (stderr);
+# ifdef emacs
+  emacs_abort ();
+# else
+  abort ();
+# endif
+#endif
+}
+
+static int mcheck_used = 0;
+
+int
+mcheck (void (*func) (enum mcheck_status))
+{
+  abortfunc = (func != NULL) ? func : &mabort;
+
+  /* These hooks may not be safely inserted if malloc is already in use.  */
+  if (!__malloc_initialized && !mcheck_used)
+    {
+      old_free_hook = __free_hook;
+      __free_hook = freehook;
+      old_malloc_hook = __malloc_hook;
+      __malloc_hook = mallochook;
+      old_realloc_hook = __realloc_hook;
+      __realloc_hook = reallochook;
+      mcheck_used = 1;
+    }
+
+  return mcheck_used ? 0 : -1;
+}
+
+enum mcheck_status
+mprobe (void *ptr)
+{
+  return mcheck_used ? checkhdr (ptr) : MCHECK_DISABLED;
+}
+
+#endif /* GC_MCHECK */
diff --git a/src/keyboard.c b/test/etags/c-src/emacs/src/keyboard.c
similarity index 99%
copy from src/keyboard.c
copy to test/etags/c-src/emacs/src/keyboard.c
index 392cea1..77f7fb9 100644
--- a/src/keyboard.c
+++ b/test/etags/c-src/emacs/src/keyboard.c
@@ -4135,13 +4135,6 @@ kbd_buffer_get_event (KBOARD **kbp,
          kbd_fetch_ptr = event + 1;
        }
 #endif
-#ifdef HAVE_XWIDGETS
-      else if (event->kind == XWIDGET_EVENT)
-       {
-         obj = make_lispy_event (event);
-         kbd_fetch_ptr = event + 1;
-       }
-#endif
       else if (event->kind == CONFIG_CHANGED_EVENT)
        {
          obj = make_lispy_event (event);
@@ -6090,14 +6083,6 @@ make_lispy_event (struct input_event *event)
       }
 #endif /* HAVE_DBUS */
 
-#ifdef HAVE_XWIDGETS
-    case XWIDGET_EVENT:
-      {
-        return Fcons (Qxwidget_event,event->arg);
-      }
-#endif
-
-
 #if defined HAVE_GFILENOTIFY || defined HAVE_INOTIFY
     case FILE_NOTIFY_EVENT:
       {
@@ -8722,12 +8707,10 @@ read_char_minibuf_menu_prompt (int commandflag,
       while (BUFFERP (obj));
       kset_defining_kbd_macro (current_kboard, orig_defn_macro);
 
-      if (!INTEGERP (obj) || XINT (obj) == -2)
-        return obj;
-
-      if (! EQ (obj, menu_prompt_more_char)
-         && (!INTEGERP (menu_prompt_more_char)
-             || ! EQ (obj, make_number (Ctl (XINT (menu_prompt_more_char))))))
+      if (!INTEGERP (obj) || XINT (obj) == -2
+         || (! EQ (obj, menu_prompt_more_char)
+             && (!INTEGERP (menu_prompt_more_char)
+                 || ! EQ (obj, make_number (Ctl (XINT 
(menu_prompt_more_char)))))))
        {
          if (!NILP (KVAR (current_kboard, defining_kbd_macro)))
            store_kbd_macro_char (obj);
@@ -11127,10 +11110,6 @@ syms_of_keyboard (void)
   DEFSYM (Qdbus_event, "dbus-event");
 #endif
 
-#ifdef HAVE_XWIDGETS
-  DEFSYM (Qxwidget_event,"xwidget-event");
-#endif
-
 #ifdef USE_FILE_NOTIFY
   DEFSYM (Qfile_notify, "file-notify");
 #endif /* USE_FILE_NOTIFY */
diff --git a/test/etags/c-src/emacs/src/lisp.h 
b/test/etags/c-src/emacs/src/lisp.h
new file mode 100644
index 0000000..6d34ce3
--- /dev/null
+++ b/test/etags/c-src/emacs/src/lisp.h
@@ -0,0 +1,4817 @@
+/* Fundamental definitions for GNU Emacs Lisp interpreter.
+
+Copyright (C) 1985-1987, 1993-1995, 1997-2015 Free Software Foundation,
+Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef EMACS_LISP_H
+#define EMACS_LISP_H
+
+#include <setjmp.h>
+#include <stdalign.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <float.h>
+#include <inttypes.h>
+#include <limits.h>
+
+#include <intprops.h>
+#include <verify.h>
+
+INLINE_HEADER_BEGIN
+
+/* Define a TYPE constant ID as an externally visible name.  Use like this:
+
+      DEFINE_GDB_SYMBOL_BEGIN (TYPE, ID)
+      # define ID (some integer preprocessor expression of type TYPE)
+      DEFINE_GDB_SYMBOL_END (ID)
+
+   This hack is for the benefit of compilers that do not make macro
+   definitions or enums visible to the debugger.  It's used for symbols
+   that .gdbinit needs.  */
+
+#define DECLARE_GDB_SYM(type, id) type const id EXTERNALLY_VISIBLE
+#ifdef MAIN_PROGRAM
+# define DEFINE_GDB_SYMBOL_BEGIN(type, id) DECLARE_GDB_SYM (type, id)
+# define DEFINE_GDB_SYMBOL_END(id) = id;
+#else
+# define DEFINE_GDB_SYMBOL_BEGIN(type, id) extern DECLARE_GDB_SYM (type, id)
+# define DEFINE_GDB_SYMBOL_END(val) ;
+#endif
+
+/* The ubiquitous max and min macros.  */
+#undef min
+#undef max
+#define max(a, b) ((a) > (b) ? (a) : (b))
+#define min(a, b) ((a) < (b) ? (a) : (b))
+
+/* Number of elements in an array.  */
+#define ARRAYELTS(arr) (sizeof (arr) / sizeof (arr)[0])
+
+/* Number of bits in a Lisp_Object tag.  */
+DEFINE_GDB_SYMBOL_BEGIN (int, GCTYPEBITS)
+#define GCTYPEBITS 3
+DEFINE_GDB_SYMBOL_END (GCTYPEBITS)
+
+/* The number of bits needed in an EMACS_INT over and above the number
+   of bits in a pointer.  This is 0 on systems where:
+   1.  We can specify multiple-of-8 alignment on static variables.
+   2.  We know malloc returns a multiple of 8.  */
+#if (defined alignas \
+     && (defined GNU_MALLOC || defined DOUG_LEA_MALLOC || defined __GLIBC__ \
+        || defined DARWIN_OS || defined __sun || defined __MINGW32__ \
+        || defined CYGWIN))
+# define NONPOINTER_BITS 0
+#else
+# define NONPOINTER_BITS GCTYPEBITS
+#endif
+
+/* EMACS_INT - signed integer wide enough to hold an Emacs value
+   EMACS_INT_MAX - maximum value of EMACS_INT; can be used in #if
+   pI - printf length modifier for EMACS_INT
+   EMACS_UINT - unsigned variant of EMACS_INT */
+#ifndef EMACS_INT_MAX
+# if INTPTR_MAX <= 0
+#  error "INTPTR_MAX misconfigured"
+# elif INTPTR_MAX <= INT_MAX >> NONPOINTER_BITS && !defined WIDE_EMACS_INT
+typedef int EMACS_INT;
+typedef unsigned int EMACS_UINT;
+#  define EMACS_INT_MAX INT_MAX
+#  define pI ""
+# elif INTPTR_MAX <= LONG_MAX >> NONPOINTER_BITS && !defined WIDE_EMACS_INT
+typedef long int EMACS_INT;
+typedef unsigned long EMACS_UINT;
+#  define EMACS_INT_MAX LONG_MAX
+#  define pI "l"
+/* Check versus LLONG_MAX, not LLONG_MAX >> NONPOINTER_BITS.
+   In theory this is not safe, but in practice it seems to be OK.  */
+# elif INTPTR_MAX <= LLONG_MAX
+typedef long long int EMACS_INT;
+typedef unsigned long long int EMACS_UINT;
+#  define EMACS_INT_MAX LLONG_MAX
+#  define pI "ll"
+# else
+#  error "INTPTR_MAX too large"
+# endif
+#endif
+
+/* Number of bits to put in each character in the internal representation
+   of bool vectors.  This should not vary across implementations.  */
+enum {  BOOL_VECTOR_BITS_PER_CHAR =
+#define BOOL_VECTOR_BITS_PER_CHAR 8
+        BOOL_VECTOR_BITS_PER_CHAR
+};
+
+/* An unsigned integer type representing a fixed-length bit sequence,
+   suitable for bool vector words, GC mark bits, etc.  Normally it is size_t
+   for speed, but it is unsigned char on weird platforms.  */
+#if BOOL_VECTOR_BITS_PER_CHAR == CHAR_BIT
+typedef size_t bits_word;
+# define BITS_WORD_MAX SIZE_MAX
+enum { BITS_PER_BITS_WORD = CHAR_BIT * sizeof (bits_word) };
+#else
+typedef unsigned char bits_word;
+# define BITS_WORD_MAX ((1u << BOOL_VECTOR_BITS_PER_CHAR) - 1)
+enum { BITS_PER_BITS_WORD = BOOL_VECTOR_BITS_PER_CHAR };
+#endif
+verify (BITS_WORD_MAX >> (BITS_PER_BITS_WORD - 1) == 1);
+
+/* Number of bits in some machine integer types.  */
+enum
+  {
+    BITS_PER_CHAR      = CHAR_BIT,
+    BITS_PER_SHORT     = CHAR_BIT * sizeof (short),
+    BITS_PER_LONG      = CHAR_BIT * sizeof (long int),
+    BITS_PER_EMACS_INT = CHAR_BIT * sizeof (EMACS_INT)
+  };
+
+/* printmax_t and uprintmax_t are types for printing large integers.
+   These are the widest integers that are supported for printing.
+   pMd etc. are conversions for printing them.
+   On C99 hosts, there's no problem, as even the widest integers work.
+   Fall back on EMACS_INT on pre-C99 hosts.  */
+#ifdef PRIdMAX
+typedef intmax_t printmax_t;
+typedef uintmax_t uprintmax_t;
+# define pMd PRIdMAX
+# define pMu PRIuMAX
+#else
+typedef EMACS_INT printmax_t;
+typedef EMACS_UINT uprintmax_t;
+# define pMd pI"d"
+# define pMu pI"u"
+#endif
+
+/* Use pD to format ptrdiff_t values, which suffice for indexes into
+   buffers and strings.  Emacs never allocates objects larger than
+   PTRDIFF_MAX bytes, as they cause problems with pointer subtraction.
+   In C99, pD can always be "t"; configure it here for the sake of
+   pre-C99 libraries such as glibc 2.0 and Solaris 8.  */
+#if PTRDIFF_MAX == INT_MAX
+# define pD ""
+#elif PTRDIFF_MAX == LONG_MAX
+# define pD "l"
+#elif PTRDIFF_MAX == LLONG_MAX
+# define pD "ll"
+#else
+# define pD "t"
+#endif
+
+/* Extra internal type checking?  */
+
+/* Define Emacs versions of <assert.h>'s 'assert (COND)' and <verify.h>'s
+   'assume (COND)'.  COND should be free of side effects, as it may or
+   may not be evaluated.
+
+   'eassert (COND)' checks COND at runtime if ENABLE_CHECKING is
+   defined and suppress_checking is false, and does nothing otherwise.
+   Emacs dies if COND is checked and is false.  The suppress_checking
+   variable is initialized to 0 in alloc.c.  Set it to 1 using a
+   debugger to temporarily disable aborting on detected internal
+   inconsistencies or error conditions.
+
+   In some cases, a good compiler may be able to optimize away the
+   eassert macro even if ENABLE_CHECKING is true, e.g., if XSTRING (x)
+   uses eassert to test STRINGP (x), but a particular use of XSTRING
+   is invoked only after testing that STRINGP (x) is true, making the
+   test redundant.
+
+   eassume is like eassert except that it also causes the compiler to
+   assume that COND is true afterwards, regardless of whether runtime
+   checking is enabled.  This can improve performance in some cases,
+   though it can degrade performance in others.  It's often suboptimal
+   for COND to call external functions or access volatile storage.  */
+
+#ifndef ENABLE_CHECKING
+# define eassert(cond) ((void) (false && (cond))) /* Check COND compiles.  */
+# define eassume(cond) assume (cond)
+#else /* ENABLE_CHECKING */
+
+extern _Noreturn void die (const char *, const char *, int);
+
+extern bool suppress_checking EXTERNALLY_VISIBLE;
+
+# define eassert(cond)                                         \
+   (suppress_checking || (cond)                                \
+    ? (void) 0                                                 \
+    : die (# cond, __FILE__, __LINE__))
+# define eassume(cond)                                         \
+   (suppress_checking                                          \
+    ? assume (cond)                                            \
+    : (cond)                                                   \
+    ? (void) 0                                                 \
+    : die (# cond, __FILE__, __LINE__))
+#endif /* ENABLE_CHECKING */
+
+
+/* Use the configure flag --enable-check-lisp-object-type to make
+   Lisp_Object use a struct type instead of the default int.  The flag
+   causes CHECK_LISP_OBJECT_TYPE to be defined.  */
+
+/***** Select the tagging scheme.  *****/
+/* The following option controls the tagging scheme:
+   - USE_LSB_TAG means that we can assume the least 3 bits of pointers are
+     always 0, and we can thus use them to hold tag bits, without
+     restricting our addressing space.
+
+   If ! USE_LSB_TAG, then use the top 3 bits for tagging, thus
+   restricting our possible address range.
+
+   USE_LSB_TAG not only requires the least 3 bits of pointers returned by
+   malloc to be 0 but also needs to be able to impose a mult-of-8 alignment
+   on the few static Lisp_Objects used: lispsym, all the defsubr, and
+   the two special buffers buffer_defaults and buffer_local_symbols.  */
+
+enum Lisp_Bits
+  {
+    /* 2**GCTYPEBITS.  This must be a macro that expands to a literal
+       integer constant, for MSVC.  */
+#define GCALIGNMENT 8
+
+    /* Number of bits in a Lisp_Object value, not counting the tag.  */
+    VALBITS = BITS_PER_EMACS_INT - GCTYPEBITS,
+
+    /* Number of bits in a Lisp fixnum tag.  */
+    INTTYPEBITS = GCTYPEBITS - 1,
+
+    /* Number of bits in a Lisp fixnum value, not counting the tag.  */
+    FIXNUM_BITS = VALBITS + 1
+  };
+
+#if GCALIGNMENT != 1 << GCTYPEBITS
+# error "GCALIGNMENT and GCTYPEBITS are inconsistent"
+#endif
+
+/* The maximum value that can be stored in a EMACS_INT, assuming all
+   bits other than the type bits contribute to a nonnegative signed value.
+   This can be used in #if, e.g., '#if USB_TAG' below expands to an
+   expression involving VAL_MAX.  */
+#define VAL_MAX (EMACS_INT_MAX >> (GCTYPEBITS - 1))
+
+/* Whether the least-significant bits of an EMACS_INT contain the tag.
+   On hosts where pointers-as-ints do not exceed VAL_MAX / 2, USE_LSB_TAG is:
+    a. unnecessary, because the top bits of an EMACS_INT are unused, and
+    b. slower, because it typically requires extra masking.
+   So, USE_LSB_TAG is true only on hosts where it might be useful.  */
+DEFINE_GDB_SYMBOL_BEGIN (bool, USE_LSB_TAG)
+#define USE_LSB_TAG (VAL_MAX / 2 < INTPTR_MAX)
+DEFINE_GDB_SYMBOL_END (USE_LSB_TAG)
+
+#if !USE_LSB_TAG && !defined WIDE_EMACS_INT
+# error "USE_LSB_TAG not supported on this platform; please report this." \
+       "Try 'configure --with-wide-int' to work around the problem."
+error !;
+#endif
+
+#ifndef alignas
+# define alignas(alignment) /* empty */
+# if USE_LSB_TAG
+#  error "USE_LSB_TAG requires alignas"
+# endif
+#endif
+
+#ifdef HAVE_STRUCT_ATTRIBUTE_ALIGNED
+# define GCALIGNED __attribute__ ((aligned (GCALIGNMENT)))
+#else
+# define GCALIGNED /* empty */
+#endif
+
+/* Some operations are so commonly executed that they are implemented
+   as macros, not functions, because otherwise runtime performance would
+   suffer too much when compiling with GCC without optimization.
+   There's no need to inline everything, just the operations that
+   would otherwise cause a serious performance problem.
+
+   For each such operation OP, define a macro lisp_h_OP that contains
+   the operation's implementation.  That way, OP can be implemented
+   via a macro definition like this:
+
+     #define OP(x) lisp_h_OP (x)
+
+   and/or via a function definition like this:
+
+     LISP_MACRO_DEFUN (OP, Lisp_Object, (Lisp_Object x), (x))
+
+   which macro-expands to this:
+
+     Lisp_Object (OP) (Lisp_Object x) { return lisp_h_OP (x); }
+
+   without worrying about the implementations diverging, since
+   lisp_h_OP defines the actual implementation.  The lisp_h_OP macros
+   are intended to be private to this include file, and should not be
+   used elsewhere.
+
+   FIXME: Remove the lisp_h_OP macros, and define just the inline OP
+   functions, once most developers have access to GCC 4.8 or later and
+   can use "gcc -Og" to debug.  Maybe in the year 2016.  See
+   Bug#11935.
+
+   Commentary for these macros can be found near their corresponding
+   functions, below.  */
+
+#if CHECK_LISP_OBJECT_TYPE
+# define lisp_h_XLI(o) ((o).i)
+# define lisp_h_XIL(i) ((Lisp_Object) { i })
+#else
+# define lisp_h_XLI(o) (o)
+# define lisp_h_XIL(i) (i)
+#endif
+#define lisp_h_CHECK_LIST_CONS(x, y) CHECK_TYPE (CONSP (x), Qlistp, y)
+#define lisp_h_CHECK_NUMBER(x) CHECK_TYPE (INTEGERP (x), Qintegerp, x)
+#define lisp_h_CHECK_SYMBOL(x) CHECK_TYPE (SYMBOLP (x), Qsymbolp, x)
+#define lisp_h_CHECK_TYPE(ok, predicate, x) \
+   ((ok) ? (void) 0 : (void) wrong_type_argument (predicate, x))
+#define lisp_h_CONSP(x) (XTYPE (x) == Lisp_Cons)
+#define lisp_h_EQ(x, y) (XLI (x) == XLI (y))
+#define lisp_h_FLOATP(x) (XTYPE (x) == Lisp_Float)
+#define lisp_h_INTEGERP(x) ((XTYPE (x) & (Lisp_Int0 | ~Lisp_Int1)) == 
Lisp_Int0)
+#define lisp_h_MARKERP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Marker)
+#define lisp_h_MISCP(x) (XTYPE (x) == Lisp_Misc)
+#define lisp_h_NILP(x) EQ (x, Qnil)
+#define lisp_h_SET_SYMBOL_VAL(sym, v) \
+   (eassert ((sym)->redirect == SYMBOL_PLAINVAL), (sym)->val.value = (v))
+#define lisp_h_SYMBOL_CONSTANT_P(sym) (XSYMBOL (sym)->constant)
+#define lisp_h_SYMBOL_VAL(sym) \
+   (eassert ((sym)->redirect == SYMBOL_PLAINVAL), (sym)->val.value)
+#define lisp_h_SYMBOLP(x) (XTYPE (x) == Lisp_Symbol)
+#define lisp_h_VECTORLIKEP(x) (XTYPE (x) == Lisp_Vectorlike)
+#define lisp_h_XCAR(c) XCONS (c)->car
+#define lisp_h_XCDR(c) XCONS (c)->u.cdr
+#define lisp_h_XCONS(a) \
+   (eassert (CONSP (a)), (struct Lisp_Cons *) XUNTAG (a, Lisp_Cons))
+#define lisp_h_XHASH(a) XUINT (a)
+#define lisp_h_XPNTR(a) \
+   (SYMBOLP (a) ? XSYMBOL (a) : (void *) ((intptr_t) (XLI (a) & VALMASK)))
+#ifndef GC_CHECK_CONS_LIST
+# define lisp_h_check_cons_list() ((void) 0)
+#endif
+#if USE_LSB_TAG
+# define lisp_h_make_number(n) \
+    XIL ((EMACS_INT) (((EMACS_UINT) (n) << INTTYPEBITS) + Lisp_Int0))
+# define lisp_h_XFASTINT(a) XINT (a)
+# define lisp_h_XINT(a) (XLI (a) >> INTTYPEBITS)
+# define lisp_h_XSYMBOL(a) \
+    (eassert (SYMBOLP (a)), \
+     (struct Lisp_Symbol *) ((uintptr_t) XLI (a) - Lisp_Symbol \
+                            + (char *) lispsym))
+# define lisp_h_XTYPE(a) ((enum Lisp_Type) (XLI (a) & ~VALMASK))
+# define lisp_h_XUNTAG(a, type) ((void *) (intptr_t) (XLI (a) - (type)))
+#endif
+
+/* When compiling via gcc -O0, define the key operations as macros, as
+   Emacs is too slow otherwise.  To disable this optimization, compile
+   with -DINLINING=false.  */
+#if (defined __NO_INLINE__ \
+     && ! defined __OPTIMIZE__ && ! defined __OPTIMIZE_SIZE__ \
+     && ! (defined INLINING && ! INLINING))
+# define XLI(o) lisp_h_XLI (o)
+# define XIL(i) lisp_h_XIL (i)
+# define CHECK_LIST_CONS(x, y) lisp_h_CHECK_LIST_CONS (x, y)
+# define CHECK_NUMBER(x) lisp_h_CHECK_NUMBER (x)
+# define CHECK_SYMBOL(x) lisp_h_CHECK_SYMBOL (x)
+# define CHECK_TYPE(ok, predicate, x) lisp_h_CHECK_TYPE (ok, predicate, x)
+# define CONSP(x) lisp_h_CONSP (x)
+# define EQ(x, y) lisp_h_EQ (x, y)
+# define FLOATP(x) lisp_h_FLOATP (x)
+# define INTEGERP(x) lisp_h_INTEGERP (x)
+# define MARKERP(x) lisp_h_MARKERP (x)
+# define MISCP(x) lisp_h_MISCP (x)
+# define NILP(x) lisp_h_NILP (x)
+# define SET_SYMBOL_VAL(sym, v) lisp_h_SET_SYMBOL_VAL (sym, v)
+# define SYMBOL_CONSTANT_P(sym) lisp_h_SYMBOL_CONSTANT_P (sym)
+# define SYMBOL_VAL(sym) lisp_h_SYMBOL_VAL (sym)
+# define SYMBOLP(x) lisp_h_SYMBOLP (x)
+# define VECTORLIKEP(x) lisp_h_VECTORLIKEP (x)
+# define XCAR(c) lisp_h_XCAR (c)
+# define XCDR(c) lisp_h_XCDR (c)
+# define XCONS(a) lisp_h_XCONS (a)
+# define XHASH(a) lisp_h_XHASH (a)
+# define XPNTR(a) lisp_h_XPNTR (a)
+# ifndef GC_CHECK_CONS_LIST
+#  define check_cons_list() lisp_h_check_cons_list ()
+# endif
+# if USE_LSB_TAG
+#  define make_number(n) lisp_h_make_number (n)
+#  define XFASTINT(a) lisp_h_XFASTINT (a)
+#  define XINT(a) lisp_h_XINT (a)
+#  define XSYMBOL(a) lisp_h_XSYMBOL (a)
+#  define XTYPE(a) lisp_h_XTYPE (a)
+#  define XUNTAG(a, type) lisp_h_XUNTAG (a, type)
+# endif
+#endif
+
+/* Define NAME as a lisp.h inline function that returns TYPE and has
+   arguments declared as ARGDECLS and passed as ARGS.  ARGDECLS and
+   ARGS should be parenthesized.  Implement the function by calling
+   lisp_h_NAME ARGS.  */
+#define LISP_MACRO_DEFUN(name, type, argdecls, args) \
+  INLINE type (name) argdecls { return lisp_h_##name args; }
+
+/* like LISP_MACRO_DEFUN, except NAME returns void.  */
+#define LISP_MACRO_DEFUN_VOID(name, argdecls, args) \
+  INLINE void (name) argdecls { lisp_h_##name args; }
+
+
+/* Define the fundamental Lisp data structures.  */
+
+/* This is the set of Lisp data types.  If you want to define a new
+   data type, read the comments after Lisp_Fwd_Type definition
+   below.  */
+
+/* Lisp integers use 2 tags, to give them one extra bit, thus
+   extending their range from, e.g., -2^28..2^28-1 to -2^29..2^29-1.  */
+#define INTMASK (EMACS_INT_MAX >> (INTTYPEBITS - 1))
+#define case_Lisp_Int case Lisp_Int0: case Lisp_Int1
+
+/* Idea stolen from GDB.  Pedantic GCC complains about enum bitfields,
+   MSVC doesn't support them, and xlc and Oracle Studio c99 complain
+   vociferously about them.  */
+#if (defined __STRICT_ANSI__ || defined _MSC_VER || defined __IBMC__ \
+     || (defined __SUNPRO_C && __STDC__))
+#define ENUM_BF(TYPE) unsigned int
+#else
+#define ENUM_BF(TYPE) enum TYPE
+#endif
+
+
+enum Lisp_Type
+  {
+    /* Symbol.  XSYMBOL (object) points to a struct Lisp_Symbol.  */
+    Lisp_Symbol = 0,
+
+    /* Miscellaneous.  XMISC (object) points to a union Lisp_Misc,
+       whose first member indicates the subtype.  */
+    Lisp_Misc = 1,
+
+    /* Integer.  XINT (obj) is the integer value.  */
+    Lisp_Int0 = 2,
+    Lisp_Int1 = USE_LSB_TAG ? 6 : 3,
+
+    /* String.  XSTRING (object) points to a struct Lisp_String.
+       The length of the string, and its contents, are stored therein.  */
+    Lisp_String = 4,
+
+    /* Vector of Lisp objects, or something resembling it.
+       XVECTOR (object) points to a struct Lisp_Vector, which contains
+       the size and contents.  The size field also contains the type
+       information, if it's not a real vector object.  */
+    Lisp_Vectorlike = 5,
+
+    /* Cons.  XCONS (object) points to a struct Lisp_Cons.  */
+    Lisp_Cons = USE_LSB_TAG ? 3 : 6,
+
+    Lisp_Float = 7
+  };
+
+/* This is the set of data types that share a common structure.
+   The first member of the structure is a type code from this set.
+   The enum values are arbitrary, but we'll use large numbers to make it
+   more likely that we'll spot the error if a random word in memory is
+   mistakenly interpreted as a Lisp_Misc.  */
+enum Lisp_Misc_Type
+  {
+    Lisp_Misc_Free = 0x5eab,
+    Lisp_Misc_Marker,
+    Lisp_Misc_Overlay,
+    Lisp_Misc_Save_Value,
+    Lisp_Misc_Finalizer,
+    /* Currently floats are not a misc type,
+       but let's define this in case we want to change that.  */
+    Lisp_Misc_Float,
+    /* This is not a type code.  It is for range checking.  */
+    Lisp_Misc_Limit
+  };
+
+/* These are the types of forwarding objects used in the value slot
+   of symbols for special built-in variables whose value is stored in
+   C variables.  */
+enum Lisp_Fwd_Type
+  {
+    Lisp_Fwd_Int,              /* Fwd to a C `int' variable.  */
+    Lisp_Fwd_Bool,             /* Fwd to a C boolean var.  */
+    Lisp_Fwd_Obj,              /* Fwd to a C Lisp_Object variable.  */
+    Lisp_Fwd_Buffer_Obj,       /* Fwd to a Lisp_Object field of buffers.  */
+    Lisp_Fwd_Kboard_Obj                /* Fwd to a Lisp_Object field of 
kboards.  */
+  };
+
+/* If you want to define a new Lisp data type, here are some
+   instructions.  See the thread at
+   http://lists.gnu.org/archive/html/emacs-devel/2012-10/msg00561.html
+   for more info.
+
+   First, there are already a couple of Lisp types that can be used if
+   your new type does not need to be exposed to Lisp programs nor
+   displayed to users.  These are Lisp_Save_Value, a Lisp_Misc
+   subtype; and PVEC_OTHER, a kind of vectorlike object.  The former
+   is suitable for temporarily stashing away pointers and integers in
+   a Lisp object.  The latter is useful for vector-like Lisp objects
+   that need to be used as part of other objects, but which are never
+   shown to users or Lisp code (search for PVEC_OTHER in xterm.c for
+   an example).
+
+   These two types don't look pretty when printed, so they are
+   unsuitable for Lisp objects that can be exposed to users.
+
+   To define a new data type, add one more Lisp_Misc subtype or one
+   more pseudovector subtype.  Pseudovectors are more suitable for
+   objects with several slots that need to support fast random access,
+   while Lisp_Misc types are for everything else.  A pseudovector object
+   provides one or more slots for Lisp objects, followed by struct
+   members that are accessible only from C.  A Lisp_Misc object is a
+   wrapper for a C struct that can contain anything you like.
+
+   Explicit freeing is discouraged for Lisp objects in general.  But if
+   you really need to exploit this, use Lisp_Misc (check free_misc in
+   alloc.c to see why).  There is no way to free a vectorlike object.
+
+   To add a new pseudovector type, extend the pvec_type enumeration;
+   to add a new Lisp_Misc, extend the Lisp_Misc_Type enumeration.
+
+   For a Lisp_Misc, you will also need to add your entry to union
+   Lisp_Misc (but make sure the first word has the same structure as
+   the others, starting with a 16-bit member of the Lisp_Misc_Type
+   enumeration and a 1-bit GC markbit) and make sure the overall size
+   of the union is not increased by your addition.
+
+   For a new pseudovector, it's highly desirable to limit the size
+   of your data type by VBLOCK_BYTES_MAX bytes (defined in alloc.c).
+   Otherwise you will need to change sweep_vectors (also in alloc.c).
+
+   Then you will need to add switch branches in print.c (in
+   print_object, to print your object, and possibly also in
+   print_preprocess) and to alloc.c, to mark your object (in
+   mark_object) and to free it (in gc_sweep).  The latter is also the
+   right place to call any code specific to your data type that needs
+   to run when the object is recycled -- e.g., free any additional
+   resources allocated for it that are not Lisp objects.  You can even
+   make a pointer to the function that frees the resources a slot in
+   your object -- this way, the same object could be used to represent
+   several disparate C structures.  */
+
+#ifdef CHECK_LISP_OBJECT_TYPE
+
+typedef struct { EMACS_INT i; } Lisp_Object;
+
+#define LISP_INITIALLY(i) {i}
+
+#undef CHECK_LISP_OBJECT_TYPE
+enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE = true };
+#else /* CHECK_LISP_OBJECT_TYPE */
+
+/* If a struct type is not wanted, define Lisp_Object as just a number.  */
+
+typedef EMACS_INT Lisp_Object;
+#define LISP_INITIALLY(i) (i)
+enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE = false };
+#endif /* CHECK_LISP_OBJECT_TYPE */
+
+#define LISP_INITIALLY_ZERO LISP_INITIALLY (0)
+
+/* Forward declarations.  */
+
+/* Defined in this file.  */
+union Lisp_Fwd;
+INLINE bool BOOL_VECTOR_P (Lisp_Object);
+INLINE bool BUFFER_OBJFWDP (union Lisp_Fwd *);
+INLINE bool BUFFERP (Lisp_Object);
+INLINE bool CHAR_TABLE_P (Lisp_Object);
+INLINE Lisp_Object CHAR_TABLE_REF_ASCII (Lisp_Object, ptrdiff_t);
+INLINE bool (CONSP) (Lisp_Object);
+INLINE bool (FLOATP) (Lisp_Object);
+INLINE bool functionp (Lisp_Object);
+INLINE bool (INTEGERP) (Lisp_Object);
+INLINE bool (MARKERP) (Lisp_Object);
+INLINE bool (MISCP) (Lisp_Object);
+INLINE bool (NILP) (Lisp_Object);
+INLINE bool OVERLAYP (Lisp_Object);
+INLINE bool PROCESSP (Lisp_Object);
+INLINE bool PSEUDOVECTORP (Lisp_Object, int);
+INLINE bool SAVE_VALUEP (Lisp_Object);
+INLINE bool FINALIZERP (Lisp_Object);
+INLINE void set_sub_char_table_contents (Lisp_Object, ptrdiff_t,
+                                             Lisp_Object);
+INLINE bool STRINGP (Lisp_Object);
+INLINE bool SUB_CHAR_TABLE_P (Lisp_Object);
+INLINE bool SUBRP (Lisp_Object);
+INLINE bool (SYMBOLP) (Lisp_Object);
+INLINE bool (VECTORLIKEP) (Lisp_Object);
+INLINE bool WINDOWP (Lisp_Object);
+INLINE bool TERMINALP (Lisp_Object);
+INLINE struct Lisp_Save_Value *XSAVE_VALUE (Lisp_Object);
+INLINE struct Lisp_Finalizer *XFINALIZER (Lisp_Object);
+INLINE struct Lisp_Symbol *(XSYMBOL) (Lisp_Object);
+INLINE void *(XUNTAG) (Lisp_Object, int);
+
+/* Defined in chartab.c.  */
+extern Lisp_Object char_table_ref (Lisp_Object, int);
+extern void char_table_set (Lisp_Object, int, Lisp_Object);
+
+/* Defined in data.c.  */
+extern _Noreturn Lisp_Object wrong_type_argument (Lisp_Object, Lisp_Object);
+extern _Noreturn void wrong_choice (Lisp_Object, Lisp_Object);
+
+/* Defined in emacs.c.  */
+extern bool might_dump;
+/* True means Emacs has already been initialized.
+   Used during startup to detect startup of dumped Emacs.  */
+extern bool initialized;
+
+/* Defined in floatfns.c.  */
+extern double extract_float (Lisp_Object);
+
+
+/* Interned state of a symbol.  */
+
+enum symbol_interned
+{
+  SYMBOL_UNINTERNED = 0,
+  SYMBOL_INTERNED = 1,
+  SYMBOL_INTERNED_IN_INITIAL_OBARRAY = 2
+};
+
+enum symbol_redirect
+{
+  SYMBOL_PLAINVAL  = 4,
+  SYMBOL_VARALIAS  = 1,
+  SYMBOL_LOCALIZED = 2,
+  SYMBOL_FORWARDED = 3
+};
+
+struct Lisp_Symbol
+{
+  bool_bf gcmarkbit : 1;
+
+  /* Indicates where the value can be found:
+     0 : it's a plain var, the value is in the `value' field.
+     1 : it's a varalias, the value is really in the `alias' symbol.
+     2 : it's a localized var, the value is in the `blv' object.
+     3 : it's a forwarding variable, the value is in `forward'.  */
+  ENUM_BF (symbol_redirect) redirect : 3;
+
+  /* Non-zero means symbol is constant, i.e. changing its value
+     should signal an error.  If the value is 3, then the var
+     can be changed, but only by `defconst'.  */
+  unsigned constant : 2;
+
+  /* Interned state of the symbol.  This is an enumerator from
+     enum symbol_interned.  */
+  unsigned interned : 2;
+
+  /* True means that this variable has been explicitly declared
+     special (with `defvar' etc), and shouldn't be lexically bound.  */
+  bool_bf declared_special : 1;
+
+  /* True if pointed to from purespace and hence can't be GC'd.  */
+  bool_bf pinned : 1;
+
+  /* The symbol's name, as a Lisp string.  */
+  Lisp_Object name;
+
+  /* Value of the symbol or Qunbound if unbound.  Which alternative of the
+     union is used depends on the `redirect' field above.  */
+  union {
+    Lisp_Object value;
+    struct Lisp_Symbol *alias;
+    struct Lisp_Buffer_Local_Value *blv;
+    union Lisp_Fwd *fwd;
+  } val;
+
+  /* Function value of the symbol or Qnil if not fboundp.  */
+  Lisp_Object function;
+
+  /* The symbol's property list.  */
+  Lisp_Object plist;
+
+  /* Next symbol in obarray bucket, if the symbol is interned.  */
+  struct Lisp_Symbol *next;
+};
+
+/* Declare a Lisp-callable function.  The MAXARGS parameter has the same
+   meaning as in the DEFUN macro, and is used to construct a prototype.  */
+/* We can use the same trick as in the DEFUN macro to generate the
+   appropriate prototype.  */
+#define EXFUN(fnname, maxargs) \
+  extern Lisp_Object fnname DEFUN_ARGS_ ## maxargs
+
+/* Note that the weird token-substitution semantics of ANSI C makes
+   this work for MANY and UNEVALLED.  */
+#define DEFUN_ARGS_MANY                (ptrdiff_t, Lisp_Object *)
+#define DEFUN_ARGS_UNEVALLED   (Lisp_Object)
+#define DEFUN_ARGS_0   (void)
+#define DEFUN_ARGS_1   (Lisp_Object)
+#define DEFUN_ARGS_2   (Lisp_Object, Lisp_Object)
+#define DEFUN_ARGS_3   (Lisp_Object, Lisp_Object, Lisp_Object)
+#define DEFUN_ARGS_4   (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)
+#define DEFUN_ARGS_5   (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
+                        Lisp_Object)
+#define DEFUN_ARGS_6   (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
+                        Lisp_Object, Lisp_Object)
+#define DEFUN_ARGS_7   (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
+                        Lisp_Object, Lisp_Object, Lisp_Object)
+#define DEFUN_ARGS_8   (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
+                        Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)
+
+/* Yield an integer that contains TAG along with PTR.  */
+#define TAG_PTR(tag, ptr) \
+  ((USE_LSB_TAG ? (tag) : (EMACS_UINT) (tag) << VALBITS) + (uintptr_t) (ptr))
+
+/* Yield an integer that contains a symbol tag along with OFFSET.
+   OFFSET should be the offset in bytes from 'lispsym' to the symbol.  */
+#define TAG_SYMOFFSET(offset)                              \
+  TAG_PTR (Lisp_Symbol,                                            \
+          ((uintptr_t) (offset) >> (USE_LSB_TAG ? 0 : GCTYPEBITS)))
+
+/* XLI_BUILTIN_LISPSYM (iQwhatever) is equivalent to
+   XLI (builtin_lisp_symbol (Qwhatever)),
+   except the former expands to an integer constant expression.  */
+#define XLI_BUILTIN_LISPSYM(iname) TAG_SYMOFFSET ((iname) * sizeof *lispsym)
+
+/* Declare extern constants for Lisp symbols.  These can be helpful
+   when using a debugger like GDB, on older platforms where the debug
+   format does not represent C macros.  */
+#define DEFINE_LISP_SYMBOL(name) \
+  DEFINE_GDB_SYMBOL_BEGIN (Lisp_Object, name) \
+  DEFINE_GDB_SYMBOL_END (LISP_INITIALLY (XLI_BUILTIN_LISPSYM (i##name)))
+
+/* By default, define macros for Qt, etc., as this leads to a bit
+   better performance in the core Emacs interpreter.  A plugin can
+   define DEFINE_NON_NIL_Q_SYMBOL_MACROS to be false, to be portable to
+   other Emacs instances that assign different values to Qt, etc.  */
+#ifndef DEFINE_NON_NIL_Q_SYMBOL_MACROS
+# define DEFINE_NON_NIL_Q_SYMBOL_MACROS true
+#endif
+
+#include "globals.h"
+
+/* Convert a Lisp_Object to the corresponding EMACS_INT and vice versa.
+   At the machine level, these operations are no-ops.  */
+LISP_MACRO_DEFUN (XLI, EMACS_INT, (Lisp_Object o), (o))
+LISP_MACRO_DEFUN (XIL, Lisp_Object, (EMACS_INT i), (i))
+
+/* In the size word of a vector, this bit means the vector has been marked.  */
+
+DEFINE_GDB_SYMBOL_BEGIN (ptrdiff_t, ARRAY_MARK_FLAG)
+# define ARRAY_MARK_FLAG PTRDIFF_MIN
+DEFINE_GDB_SYMBOL_END (ARRAY_MARK_FLAG)
+
+/* In the size word of a struct Lisp_Vector, this bit means it's really
+   some other vector-like object.  */
+DEFINE_GDB_SYMBOL_BEGIN (ptrdiff_t, PSEUDOVECTOR_FLAG)
+# define PSEUDOVECTOR_FLAG (PTRDIFF_MAX - PTRDIFF_MAX / 2)
+DEFINE_GDB_SYMBOL_END (PSEUDOVECTOR_FLAG)
+
+/* In a pseudovector, the size field actually contains a word with one
+   PSEUDOVECTOR_FLAG bit set, and one of the following values extracted
+   with PVEC_TYPE_MASK to indicate the actual type.  */
+enum pvec_type
+{
+  PVEC_NORMAL_VECTOR,
+  PVEC_FREE,
+  PVEC_PROCESS,
+  PVEC_FRAME,
+  PVEC_WINDOW,
+  PVEC_BOOL_VECTOR,
+  PVEC_BUFFER,
+  PVEC_HASH_TABLE,
+  PVEC_TERMINAL,
+  PVEC_WINDOW_CONFIGURATION,
+  PVEC_SUBR,
+  PVEC_OTHER,
+  /* These should be last, check internal_equal to see why.  */
+  PVEC_COMPILED,
+  PVEC_CHAR_TABLE,
+  PVEC_SUB_CHAR_TABLE,
+  PVEC_FONT /* Should be last because it's used for range checking.  */
+};
+
+enum More_Lisp_Bits
+  {
+    /* For convenience, we also store the number of elements in these bits.
+       Note that this size is not necessarily the memory-footprint size, but
+       only the number of Lisp_Object fields (that need to be traced by GC).
+       The distinction is used, e.g., by Lisp_Process, which places extra
+       non-Lisp_Object fields at the end of the structure.  */
+    PSEUDOVECTOR_SIZE_BITS = 12,
+    PSEUDOVECTOR_SIZE_MASK = (1 << PSEUDOVECTOR_SIZE_BITS) - 1,
+
+    /* To calculate the memory footprint of the pseudovector, it's useful
+       to store the size of non-Lisp area in word_size units here.  */
+    PSEUDOVECTOR_REST_BITS = 12,
+    PSEUDOVECTOR_REST_MASK = (((1 << PSEUDOVECTOR_REST_BITS) - 1)
+                             << PSEUDOVECTOR_SIZE_BITS),
+
+    /* Used to extract pseudovector subtype information.  */
+    PSEUDOVECTOR_AREA_BITS = PSEUDOVECTOR_SIZE_BITS + PSEUDOVECTOR_REST_BITS,
+    PVEC_TYPE_MASK = 0x3f << PSEUDOVECTOR_AREA_BITS
+  };
+
+/* These functions extract various sorts of values from a Lisp_Object.
+   For example, if tem is a Lisp_Object whose type is Lisp_Cons,
+   XCONS (tem) is the struct Lisp_Cons * pointing to the memory for
+   that cons.  */
+
+/* Mask for the value (as opposed to the type bits) of a Lisp object.  */
+DEFINE_GDB_SYMBOL_BEGIN (EMACS_INT, VALMASK)
+# define VALMASK (USE_LSB_TAG ? - (1 << GCTYPEBITS) : VAL_MAX)
+DEFINE_GDB_SYMBOL_END (VALMASK)
+
+/* Largest and smallest representable fixnum values.  These are the C
+   values.  They are macros for use in static initializers.  */
+#define MOST_POSITIVE_FIXNUM (EMACS_INT_MAX >> INTTYPEBITS)
+#define MOST_NEGATIVE_FIXNUM (-1 - MOST_POSITIVE_FIXNUM)
+
+#if USE_LSB_TAG
+
+LISP_MACRO_DEFUN (make_number, Lisp_Object, (EMACS_INT n), (n))
+LISP_MACRO_DEFUN (XINT, EMACS_INT, (Lisp_Object a), (a))
+LISP_MACRO_DEFUN (XFASTINT, EMACS_INT, (Lisp_Object a), (a))
+LISP_MACRO_DEFUN (XSYMBOL, struct Lisp_Symbol *, (Lisp_Object a), (a))
+LISP_MACRO_DEFUN (XTYPE, enum Lisp_Type, (Lisp_Object a), (a))
+LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type))
+
+#else /* ! USE_LSB_TAG */
+
+/* Although compiled only if ! USE_LSB_TAG, the following functions
+   also work when USE_LSB_TAG; this is to aid future maintenance when
+   the lisp_h_* macros are eventually removed.  */
+
+/* Make a Lisp integer representing the value of the low order
+   bits of N.  */
+INLINE Lisp_Object
+make_number (EMACS_INT n)
+{
+  EMACS_INT int0 = Lisp_Int0;
+  if (USE_LSB_TAG)
+    {
+      EMACS_UINT u = n;
+      n = u << INTTYPEBITS;
+      n += int0;
+    }
+  else
+    {
+      n &= INTMASK;
+      n += (int0 << VALBITS);
+    }
+  return XIL (n);
+}
+
+/* Extract A's value as a signed integer.  */
+INLINE EMACS_INT
+XINT (Lisp_Object a)
+{
+  EMACS_INT i = XLI (a);
+  if (! USE_LSB_TAG)
+    {
+      EMACS_UINT u = i;
+      i = u << INTTYPEBITS;
+    }
+  return i >> INTTYPEBITS;
+}
+
+/* Like XINT (A), but may be faster.  A must be nonnegative.
+   If ! USE_LSB_TAG, this takes advantage of the fact that Lisp
+   integers have zero-bits in their tags.  */
+INLINE EMACS_INT
+XFASTINT (Lisp_Object a)
+{
+  EMACS_INT int0 = Lisp_Int0;
+  EMACS_INT n = USE_LSB_TAG ? XINT (a) : XLI (a) - (int0 << VALBITS);
+  eassert (0 <= n);
+  return n;
+}
+
+/* Extract A's value as a symbol.  */
+INLINE struct Lisp_Symbol *
+XSYMBOL (Lisp_Object a)
+{
+  uintptr_t i = (uintptr_t) XUNTAG (a, Lisp_Symbol);
+  if (! USE_LSB_TAG)
+    i <<= GCTYPEBITS;
+  void *p = (char *) lispsym + i;
+  return p;
+}
+
+/* Extract A's type.  */
+INLINE enum Lisp_Type
+XTYPE (Lisp_Object a)
+{
+  EMACS_UINT i = XLI (a);
+  return USE_LSB_TAG ? i & ~VALMASK : i >> VALBITS;
+}
+
+/* Extract A's pointer value, assuming A's type is TYPE.  */
+INLINE void *
+XUNTAG (Lisp_Object a, int type)
+{
+  intptr_t i = USE_LSB_TAG ? XLI (a) - type : XLI (a) & VALMASK;
+  return (void *) i;
+}
+
+#endif /* ! USE_LSB_TAG */
+
+/* Extract the pointer hidden within A.  */
+LISP_MACRO_DEFUN (XPNTR, void *, (Lisp_Object a), (a))
+
+/* Extract A's value as an unsigned integer.  */
+INLINE EMACS_UINT
+XUINT (Lisp_Object a)
+{
+  EMACS_UINT i = XLI (a);
+  return USE_LSB_TAG ? i >> INTTYPEBITS : i & INTMASK;
+}
+
+/* Return A's (Lisp-integer sized) hash.  Happens to be like XUINT
+   right now, but XUINT should only be applied to objects we know are
+   integers.  */
+LISP_MACRO_DEFUN (XHASH, EMACS_INT, (Lisp_Object a), (a))
+
+/* Like make_number (N), but may be faster.  N must be in nonnegative range.  
*/
+INLINE Lisp_Object
+make_natnum (EMACS_INT n)
+{
+  eassert (0 <= n && n <= MOST_POSITIVE_FIXNUM);
+  EMACS_INT int0 = Lisp_Int0;
+  return USE_LSB_TAG ? make_number (n) : XIL (n + (int0 << VALBITS));
+}
+
+/* Return true if X and Y are the same object.  */
+LISP_MACRO_DEFUN (EQ, bool, (Lisp_Object x, Lisp_Object y), (x, y))
+
+/* Value is true if I doesn't fit into a Lisp fixnum.  It is
+   written this way so that it also works if I is of unsigned
+   type or if I is a NaN.  */
+
+#define FIXNUM_OVERFLOW_P(i) \
+  (! ((0 <= (i) || MOST_NEGATIVE_FIXNUM <= (i)) && (i) <= 
MOST_POSITIVE_FIXNUM))
+
+INLINE ptrdiff_t
+clip_to_bounds (ptrdiff_t lower, EMACS_INT num, ptrdiff_t upper)
+{
+  return num < lower ? lower : num <= upper ? num : upper;
+}
+
+
+/* Extract a value or address from a Lisp_Object.  */
+
+LISP_MACRO_DEFUN (XCONS, struct Lisp_Cons *, (Lisp_Object a), (a))
+
+INLINE struct Lisp_Vector *
+XVECTOR (Lisp_Object a)
+{
+  eassert (VECTORLIKEP (a));
+  return XUNTAG (a, Lisp_Vectorlike);
+}
+
+INLINE struct Lisp_String *
+XSTRING (Lisp_Object a)
+{
+  eassert (STRINGP (a));
+  return XUNTAG (a, Lisp_String);
+}
+
+/* The index of the C-defined Lisp symbol SYM.
+   This can be used in a static initializer.  */
+#define SYMBOL_INDEX(sym) i##sym
+
+INLINE struct Lisp_Float *
+XFLOAT (Lisp_Object a)
+{
+  eassert (FLOATP (a));
+  return XUNTAG (a, Lisp_Float);
+}
+
+/* Pseudovector types.  */
+
+INLINE struct Lisp_Process *
+XPROCESS (Lisp_Object a)
+{
+  eassert (PROCESSP (a));
+  return XUNTAG (a, Lisp_Vectorlike);
+}
+
+INLINE struct window *
+XWINDOW (Lisp_Object a)
+{
+  eassert (WINDOWP (a));
+  return XUNTAG (a, Lisp_Vectorlike);
+}
+
+INLINE struct terminal *
+XTERMINAL (Lisp_Object a)
+{
+  eassert (TERMINALP (a));
+  return XUNTAG (a, Lisp_Vectorlike);
+}
+
+INLINE struct Lisp_Subr *
+XSUBR (Lisp_Object a)
+{
+  eassert (SUBRP (a));
+  return XUNTAG (a, Lisp_Vectorlike);
+}
+
+INLINE struct buffer *
+XBUFFER (Lisp_Object a)
+{
+  eassert (BUFFERP (a));
+  return XUNTAG (a, Lisp_Vectorlike);
+}
+
+INLINE struct Lisp_Char_Table *
+XCHAR_TABLE (Lisp_Object a)
+{
+  eassert (CHAR_TABLE_P (a));
+  return XUNTAG (a, Lisp_Vectorlike);
+}
+
+INLINE struct Lisp_Sub_Char_Table *
+XSUB_CHAR_TABLE (Lisp_Object a)
+{
+  eassert (SUB_CHAR_TABLE_P (a));
+  return XUNTAG (a, Lisp_Vectorlike);
+}
+
+INLINE struct Lisp_Bool_Vector *
+XBOOL_VECTOR (Lisp_Object a)
+{
+  eassert (BOOL_VECTOR_P (a));
+  return XUNTAG (a, Lisp_Vectorlike);
+}
+
+/* Construct a Lisp_Object from a value or address.  */
+
+INLINE Lisp_Object
+make_lisp_ptr (void *ptr, enum Lisp_Type type)
+{
+  Lisp_Object a = XIL (TAG_PTR (type, ptr));
+  eassert (XTYPE (a) == type && XUNTAG (a, type) == ptr);
+  return a;
+}
+
+INLINE Lisp_Object
+make_lisp_symbol (struct Lisp_Symbol *sym)
+{
+  Lisp_Object a = XIL (TAG_SYMOFFSET ((char *) sym - (char *) lispsym));
+  eassert (XSYMBOL (a) == sym);
+  return a;
+}
+
+INLINE Lisp_Object
+builtin_lisp_symbol (int index)
+{
+  return make_lisp_symbol (lispsym + index);
+}
+
+#define XSETINT(a, b) ((a) = make_number (b))
+#define XSETFASTINT(a, b) ((a) = make_natnum (b))
+#define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Lisp_Cons))
+#define XSETVECTOR(a, b) ((a) = make_lisp_ptr (b, Lisp_Vectorlike))
+#define XSETSTRING(a, b) ((a) = make_lisp_ptr (b, Lisp_String))
+#define XSETSYMBOL(a, b) ((a) = make_lisp_symbol (b))
+#define XSETFLOAT(a, b) ((a) = make_lisp_ptr (b, Lisp_Float))
+#define XSETMISC(a, b) ((a) = make_lisp_ptr (b, Lisp_Misc))
+
+/* Pseudovector types.  */
+
+#define XSETPVECTYPE(v, code)                                          \
+  ((v)->header.size |= PSEUDOVECTOR_FLAG | ((code) << PSEUDOVECTOR_AREA_BITS))
+#define XSETPVECTYPESIZE(v, code, lispsize, restsize)          \
+  ((v)->header.size = (PSEUDOVECTOR_FLAG                       \
+                      | ((code) << PSEUDOVECTOR_AREA_BITS)     \
+                      | ((restsize) << PSEUDOVECTOR_SIZE_BITS) \
+                      | (lispsize)))
+
+/* The cast to struct vectorlike_header * avoids aliasing issues.  */
+#define XSETPSEUDOVECTOR(a, b, code) \
+  XSETTYPED_PSEUDOVECTOR (a, b,                                        \
+                         (((struct vectorlike_header *)        \
+                           XUNTAG (a, Lisp_Vectorlike))        \
+                          ->size),                             \
+                         code)
+#define XSETTYPED_PSEUDOVECTOR(a, b, size, code)                       \
+  (XSETVECTOR (a, b),                                                  \
+   eassert ((size & (PSEUDOVECTOR_FLAG | PVEC_TYPE_MASK))              \
+           == (PSEUDOVECTOR_FLAG | (code << PSEUDOVECTOR_AREA_BITS))))
+
+#define XSETWINDOW_CONFIGURATION(a, b) \
+  (XSETPSEUDOVECTOR (a, b, PVEC_WINDOW_CONFIGURATION))
+#define XSETPROCESS(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_PROCESS))
+#define XSETWINDOW(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_WINDOW))
+#define XSETTERMINAL(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_TERMINAL))
+#define XSETSUBR(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_SUBR))
+#define XSETCOMPILED(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_COMPILED))
+#define XSETBUFFER(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_BUFFER))
+#define XSETCHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_CHAR_TABLE))
+#define XSETBOOL_VECTOR(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_BOOL_VECTOR))
+#define XSETSUB_CHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_SUB_CHAR_TABLE))
+
+/* Efficiently convert a pointer to a Lisp object and back.  The
+   pointer is represented as a Lisp integer, so the garbage collector
+   does not know about it.  The pointer should not have both Lisp_Int1
+   bits set, which makes this conversion inherently unportable.  */
+
+INLINE void *
+XINTPTR (Lisp_Object a)
+{
+  return XUNTAG (a, Lisp_Int0);
+}
+
+INLINE Lisp_Object
+make_pointer_integer (void *p)
+{
+  Lisp_Object a = XIL (TAG_PTR (Lisp_Int0, p));
+  eassert (INTEGERP (a) && XINTPTR (a) == p);
+  return a;
+}
+
+/* Type checking.  */
+
+LISP_MACRO_DEFUN_VOID (CHECK_TYPE,
+                      (int ok, Lisp_Object predicate, Lisp_Object x),
+                      (ok, predicate, x))
+
+/* See the macros in intervals.h.  */
+
+typedef struct interval *INTERVAL;
+
+struct GCALIGNED Lisp_Cons
+  {
+    /* Car of this cons cell.  */
+    Lisp_Object car;
+
+    union
+    {
+      /* Cdr of this cons cell.  */
+      Lisp_Object cdr;
+
+      /* Used to chain conses on a free list.  */
+      struct Lisp_Cons *chain;
+    } u;
+  };
+
+/* Take the car or cdr of something known to be a cons cell.  */
+/* The _addr functions shouldn't be used outside of the minimal set
+   of code that has to know what a cons cell looks like.  Other code not
+   part of the basic lisp implementation should assume that the car and cdr
+   fields are not accessible.  (What if we want to switch to
+   a copying collector someday?  Cached cons cell field addresses may be
+   invalidated at arbitrary points.)  */
+INLINE Lisp_Object *
+xcar_addr (Lisp_Object c)
+{
+  return &XCONS (c)->car;
+}
+INLINE Lisp_Object *
+xcdr_addr (Lisp_Object c)
+{
+  return &XCONS (c)->u.cdr;
+}
+
+/* Use these from normal code.  */
+LISP_MACRO_DEFUN (XCAR, Lisp_Object, (Lisp_Object c), (c))
+LISP_MACRO_DEFUN (XCDR, Lisp_Object, (Lisp_Object c), (c))
+
+/* Use these to set the fields of a cons cell.
+
+   Note that both arguments may refer to the same object, so 'n'
+   should not be read after 'c' is first modified.  */
+INLINE void
+XSETCAR (Lisp_Object c, Lisp_Object n)
+{
+  *xcar_addr (c) = n;
+}
+INLINE void
+XSETCDR (Lisp_Object c, Lisp_Object n)
+{
+  *xcdr_addr (c) = n;
+}
+
+/* Take the car or cdr of something whose type is not known.  */
+INLINE Lisp_Object
+CAR (Lisp_Object c)
+{
+  return (CONSP (c) ? XCAR (c)
+         : NILP (c) ? Qnil
+         : wrong_type_argument (Qlistp, c));
+}
+INLINE Lisp_Object
+CDR (Lisp_Object c)
+{
+  return (CONSP (c) ? XCDR (c)
+         : NILP (c) ? Qnil
+         : wrong_type_argument (Qlistp, c));
+}
+
+/* Take the car or cdr of something whose type is not known.  */
+INLINE Lisp_Object
+CAR_SAFE (Lisp_Object c)
+{
+  return CONSP (c) ? XCAR (c) : Qnil;
+}
+INLINE Lisp_Object
+CDR_SAFE (Lisp_Object c)
+{
+  return CONSP (c) ? XCDR (c) : Qnil;
+}
+
+/* In a string or vector, the sign bit of the `size' is the gc mark bit.  */
+
+struct GCALIGNED Lisp_String
+  {
+    ptrdiff_t size;
+    ptrdiff_t size_byte;
+    INTERVAL intervals;                /* Text properties in this string.  */
+    unsigned char *data;
+  };
+
+/* True if STR is a multibyte string.  */
+INLINE bool
+STRING_MULTIBYTE (Lisp_Object str)
+{
+  return 0 <= XSTRING (str)->size_byte;
+}
+
+/* An upper bound on the number of bytes in a Lisp string, not
+   counting the terminating null.  This a tight enough bound to
+   prevent integer overflow errors that would otherwise occur during
+   string size calculations.  A string cannot contain more bytes than
+   a fixnum can represent, nor can it be so long that C pointer
+   arithmetic stops working on the string plus its terminating null.
+   Although the actual size limit (see STRING_BYTES_MAX in alloc.c)
+   may be a bit smaller than STRING_BYTES_BOUND, calculating it here
+   would expose alloc.c internal details that we'd rather keep
+   private.
+
+   This is a macro for use in static initializers.  The cast to
+   ptrdiff_t ensures that the macro is signed.  */
+#define STRING_BYTES_BOUND  \
+  ((ptrdiff_t) min (MOST_POSITIVE_FIXNUM, min (SIZE_MAX, PTRDIFF_MAX) - 1))
+
+/* Mark STR as a unibyte string.  */
+#define STRING_SET_UNIBYTE(STR)                                \
+  do {                                                 \
+    if (EQ (STR, empty_multibyte_string))              \
+      (STR) = empty_unibyte_string;                    \
+    else                                               \
+      XSTRING (STR)->size_byte = -1;                   \
+  } while (false)
+
+/* Mark STR as a multibyte string.  Assure that STR contains only
+   ASCII characters in advance.  */
+#define STRING_SET_MULTIBYTE(STR)                      \
+  do {                                                 \
+    if (EQ (STR, empty_unibyte_string))                        \
+      (STR) = empty_multibyte_string;                  \
+    else                                               \
+      XSTRING (STR)->size_byte = XSTRING (STR)->size;  \
+  } while (false)
+
+/* Convenience functions for dealing with Lisp strings.  */
+
+INLINE unsigned char *
+SDATA (Lisp_Object string)
+{
+  return XSTRING (string)->data;
+}
+INLINE char *
+SSDATA (Lisp_Object string)
+{
+  /* Avoid "differ in sign" warnings.  */
+  return (char *) SDATA (string);
+}
+INLINE unsigned char
+SREF (Lisp_Object string, ptrdiff_t index)
+{
+  return SDATA (string)[index];
+}
+INLINE void
+SSET (Lisp_Object string, ptrdiff_t index, unsigned char new)
+{
+  SDATA (string)[index] = new;
+}
+INLINE ptrdiff_t
+SCHARS (Lisp_Object string)
+{
+  return XSTRING (string)->size;
+}
+
+#ifdef GC_CHECK_STRING_BYTES
+extern ptrdiff_t string_bytes (struct Lisp_String *);
+#endif
+INLINE ptrdiff_t
+STRING_BYTES (struct Lisp_String *s)
+{
+#ifdef GC_CHECK_STRING_BYTES
+  return string_bytes (s);
+#else
+  return s->size_byte < 0 ? s->size : s->size_byte;
+#endif
+}
+
+INLINE ptrdiff_t
+SBYTES (Lisp_Object string)
+{
+  return STRING_BYTES (XSTRING (string));
+}
+INLINE void
+STRING_SET_CHARS (Lisp_Object string, ptrdiff_t newsize)
+{
+  XSTRING (string)->size = newsize;
+}
+
+/* Header of vector-like objects.  This documents the layout constraints on
+   vectors and pseudovectors (objects of PVEC_xxx subtype).  It also prevents
+   compilers from being fooled by Emacs's type punning: XSETPSEUDOVECTOR
+   and PSEUDOVECTORP cast their pointers to struct vectorlike_header *,
+   because when two such pointers potentially alias, a compiler won't
+   incorrectly reorder loads and stores to their size fields.  See
+   Bug#8546.  */
+struct vectorlike_header
+  {
+    /* The only field contains various pieces of information:
+       - The MSB (ARRAY_MARK_FLAG) holds the gcmarkbit.
+       - The next bit (PSEUDOVECTOR_FLAG) indicates whether this is a plain
+         vector (0) or a pseudovector (1).
+       - If PSEUDOVECTOR_FLAG is 0, the rest holds the size (number
+         of slots) of the vector.
+       - If PSEUDOVECTOR_FLAG is 1, the rest is subdivided into three fields:
+        - a) pseudovector subtype held in PVEC_TYPE_MASK field;
+        - b) number of Lisp_Objects slots at the beginning of the object
+          held in PSEUDOVECTOR_SIZE_MASK field.  These objects are always
+          traced by the GC;
+        - c) size of the rest fields held in PSEUDOVECTOR_REST_MASK and
+          measured in word_size units.  Rest fields may also include
+          Lisp_Objects, but these objects usually needs some special treatment
+          during GC.
+        There are some exceptions.  For PVEC_FREE, b) is always zero.  For
+        PVEC_BOOL_VECTOR and PVEC_SUBR, both b) and c) are always zero.
+        Current layout limits the pseudovectors to 63 PVEC_xxx subtypes,
+        4095 Lisp_Objects in GC-ed area and 4095 word-sized other slots.  */
+    ptrdiff_t size;
+  };
+
+/* A regular vector is just a header plus an array of Lisp_Objects.  */
+
+struct Lisp_Vector
+  {
+    struct vectorlike_header header;
+    Lisp_Object contents[FLEXIBLE_ARRAY_MEMBER];
+  };
+
+/* C11 prohibits alignof (struct Lisp_Vector), so compute it manually.  */
+enum
+  {
+    ALIGNOF_STRUCT_LISP_VECTOR
+      = alignof (union { struct vectorlike_header a; Lisp_Object b; })
+  };
+
+/* A boolvector is a kind of vectorlike, with contents like a string.  */
+
+struct Lisp_Bool_Vector
+  {
+    /* HEADER.SIZE is the vector's size field.  It doesn't have the real size,
+       just the subtype information.  */
+    struct vectorlike_header header;
+    /* This is the size in bits.  */
+    EMACS_INT size;
+    /* The actual bits, packed into bytes.
+       Zeros fill out the last word if needed.
+       The bits are in little-endian order in the bytes, and
+       the bytes are in little-endian order in the words.  */
+    bits_word data[FLEXIBLE_ARRAY_MEMBER];
+  };
+
+INLINE EMACS_INT
+bool_vector_size (Lisp_Object a)
+{
+  EMACS_INT size = XBOOL_VECTOR (a)->size;
+  eassume (0 <= size);
+  return size;
+}
+
+INLINE bits_word *
+bool_vector_data (Lisp_Object a)
+{
+  return XBOOL_VECTOR (a)->data;
+}
+
+INLINE unsigned char *
+bool_vector_uchar_data (Lisp_Object a)
+{
+  return (unsigned char *) bool_vector_data (a);
+}
+
+/* The number of data words and bytes in a bool vector with SIZE bits.  */
+
+INLINE EMACS_INT
+bool_vector_words (EMACS_INT size)
+{
+  eassume (0 <= size && size <= EMACS_INT_MAX - (BITS_PER_BITS_WORD - 1));
+  return (size + BITS_PER_BITS_WORD - 1) / BITS_PER_BITS_WORD;
+}
+
+INLINE EMACS_INT
+bool_vector_bytes (EMACS_INT size)
+{
+  eassume (0 <= size && size <= EMACS_INT_MAX - (BITS_PER_BITS_WORD - 1));
+  return (size + BOOL_VECTOR_BITS_PER_CHAR - 1) / BOOL_VECTOR_BITS_PER_CHAR;
+}
+
+/* True if A's Ith bit is set.  */
+
+INLINE bool
+bool_vector_bitref (Lisp_Object a, EMACS_INT i)
+{
+  eassume (0 <= i && i < bool_vector_size (a));
+  return !! (bool_vector_uchar_data (a)[i / BOOL_VECTOR_BITS_PER_CHAR]
+            & (1 << (i % BOOL_VECTOR_BITS_PER_CHAR)));
+}
+
+INLINE Lisp_Object
+bool_vector_ref (Lisp_Object a, EMACS_INT i)
+{
+  return bool_vector_bitref (a, i) ? Qt : Qnil;
+}
+
+/* Set A's Ith bit to B.  */
+
+INLINE void
+bool_vector_set (Lisp_Object a, EMACS_INT i, bool b)
+{
+  unsigned char *addr;
+
+  eassume (0 <= i && i < bool_vector_size (a));
+  addr = &bool_vector_uchar_data (a)[i / BOOL_VECTOR_BITS_PER_CHAR];
+
+  if (b)
+    *addr |= 1 << (i % BOOL_VECTOR_BITS_PER_CHAR);
+  else
+    *addr &= ~ (1 << (i % BOOL_VECTOR_BITS_PER_CHAR));
+}
+
+/* Some handy constants for calculating sizes
+   and offsets, mostly of vectorlike objects.   */
+
+enum
+  {
+    header_size = offsetof (struct Lisp_Vector, contents),
+    bool_header_size = offsetof (struct Lisp_Bool_Vector, data),
+    word_size = sizeof (Lisp_Object)
+  };
+
+/* Conveniences for dealing with Lisp arrays.  */
+
+INLINE Lisp_Object
+AREF (Lisp_Object array, ptrdiff_t idx)
+{
+  return XVECTOR (array)->contents[idx];
+}
+
+INLINE Lisp_Object *
+aref_addr (Lisp_Object array, ptrdiff_t idx)
+{
+  return & XVECTOR (array)->contents[idx];
+}
+
+INLINE ptrdiff_t
+ASIZE (Lisp_Object array)
+{
+  return XVECTOR (array)->header.size;
+}
+
+INLINE void
+ASET (Lisp_Object array, ptrdiff_t idx, Lisp_Object val)
+{
+  eassert (0 <= idx && idx < ASIZE (array));
+  XVECTOR (array)->contents[idx] = val;
+}
+
+INLINE void
+gc_aset (Lisp_Object array, ptrdiff_t idx, Lisp_Object val)
+{
+  /* Like ASET, but also can be used in the garbage collector:
+     sweep_weak_table calls set_hash_key etc. while the table is marked.  */
+  eassert (0 <= idx && idx < (ASIZE (array) & ~ARRAY_MARK_FLAG));
+  XVECTOR (array)->contents[idx] = val;
+}
+
+/* True, since Qnil's representation is zero.  Every place in the code
+   that assumes Qnil is zero should verify (NIL_IS_ZERO), to make it easy
+   to find such assumptions later if we change Qnil to be nonzero.  */
+enum { NIL_IS_ZERO = XLI_BUILTIN_LISPSYM (iQnil) == 0 };
+
+/* Clear the object addressed by P, with size NBYTES, so that all its
+   bytes are zero and all its Lisp values are nil.  */
+INLINE void
+memclear (void *p, ptrdiff_t nbytes)
+{
+  eassert (0 <= nbytes);
+  verify (NIL_IS_ZERO);
+  /* Since Qnil is zero, memset suffices.  */
+  memset (p, 0, nbytes);
+}
+
+/* If a struct is made to look like a vector, this macro returns the length
+   of the shortest vector that would hold that struct.  */
+
+#define VECSIZE(type)                                          \
+  ((sizeof (type) - header_size + word_size - 1) / word_size)
+
+/* Like VECSIZE, but used when the pseudo-vector has non-Lisp_Object fields
+   at the end and we need to compute the number of Lisp_Object fields (the
+   ones that the GC needs to trace).  */
+
+#define PSEUDOVECSIZE(type, nonlispfield)                      \
+  ((offsetof (type, nonlispfield) - header_size) / word_size)
+
+/* Compute A OP B, using the unsigned comparison operator OP.  A and B
+   should be integer expressions.  This is not the same as
+   mathematical comparison; for example, UNSIGNED_CMP (0, <, -1)
+   returns true.  For efficiency, prefer plain unsigned comparison if A
+   and B's sizes both fit (after integer promotion).  */
+#define UNSIGNED_CMP(a, op, b)                                         \
+  (max (sizeof ((a) + 0), sizeof ((b) + 0)) <= sizeof (unsigned)       \
+   ? ((a) + (unsigned) 0) op ((b) + (unsigned) 0)                      \
+   : ((a) + (uintmax_t) 0) op ((b) + (uintmax_t) 0))
+
+/* True iff C is an ASCII character.  */
+#define ASCII_CHAR_P(c) UNSIGNED_CMP (c, <, 0x80)
+
+/* A char-table is a kind of vectorlike, with contents are like a
+   vector but with a few other slots.  For some purposes, it makes
+   sense to handle a char-table with type struct Lisp_Vector.  An
+   element of a char table can be any Lisp objects, but if it is a sub
+   char-table, we treat it a table that contains information of a
+   specific range of characters.  A sub char-table is like a vector but
+   with two integer fields between the header and Lisp data, which means
+   that it has to be marked with some precautions (see mark_char_table
+   in alloc.c).  A sub char-table appears only in an element of a char-table,
+   and there's no way to access it directly from Emacs Lisp program.  */
+
+enum CHARTAB_SIZE_BITS
+  {
+    CHARTAB_SIZE_BITS_0 = 6,
+    CHARTAB_SIZE_BITS_1 = 4,
+    CHARTAB_SIZE_BITS_2 = 5,
+    CHARTAB_SIZE_BITS_3 = 7
+  };
+
+extern const int chartab_size[4];
+
+struct Lisp_Char_Table
+  {
+    /* HEADER.SIZE is the vector's size field, which also holds the
+       pseudovector type information.  It holds the size, too.
+       The size counts the defalt, parent, purpose, ascii,
+       contents, and extras slots.  */
+    struct vectorlike_header header;
+
+    /* This holds a default value,
+       which is used whenever the value for a specific character is nil.  */
+    Lisp_Object defalt;
+
+    /* This points to another char table, which we inherit from when the
+       value for a specific character is nil.  The `defalt' slot takes
+       precedence over this.  */
+    Lisp_Object parent;
+
+    /* This is a symbol which says what kind of use this char-table is
+       meant for.  */
+    Lisp_Object purpose;
+
+    /* The bottom sub char-table for characters of the range 0..127.  It
+       is nil if none of ASCII character has a specific value.  */
+    Lisp_Object ascii;
+
+    Lisp_Object contents[(1 << CHARTAB_SIZE_BITS_0)];
+
+    /* These hold additional data.  It is a vector.  */
+    Lisp_Object extras[FLEXIBLE_ARRAY_MEMBER];
+  };
+
+struct Lisp_Sub_Char_Table
+  {
+    /* HEADER.SIZE is the vector's size field, which also holds the
+       pseudovector type information.  It holds the size, too.  */
+    struct vectorlike_header header;
+
+    /* Depth of this sub char-table.  It should be 1, 2, or 3.  A sub
+       char-table of depth 1 contains 16 elements, and each element
+       covers 4096 (128*32) characters.  A sub char-table of depth 2
+       contains 32 elements, and each element covers 128 characters.  A
+       sub char-table of depth 3 contains 128 elements, and each element
+       is for one character.  */
+    int depth;
+
+    /* Minimum character covered by the sub char-table.  */
+    int min_char;
+
+    /* Use set_sub_char_table_contents to set this.  */
+    Lisp_Object contents[FLEXIBLE_ARRAY_MEMBER];
+  };
+
+INLINE Lisp_Object
+CHAR_TABLE_REF_ASCII (Lisp_Object ct, ptrdiff_t idx)
+{
+  struct Lisp_Char_Table *tbl = NULL;
+  Lisp_Object val;
+  do
+    {
+      tbl = tbl ? XCHAR_TABLE (tbl->parent) : XCHAR_TABLE (ct);
+      val = (! SUB_CHAR_TABLE_P (tbl->ascii) ? tbl->ascii
+            : XSUB_CHAR_TABLE (tbl->ascii)->contents[idx]);
+      if (NILP (val))
+       val = tbl->defalt;
+    }
+  while (NILP (val) && ! NILP (tbl->parent));
+
+  return val;
+}
+
+/* Almost equivalent to Faref (CT, IDX) with optimization for ASCII
+   characters.  Do not check validity of CT.  */
+INLINE Lisp_Object
+CHAR_TABLE_REF (Lisp_Object ct, int idx)
+{
+  return (ASCII_CHAR_P (idx)
+         ? CHAR_TABLE_REF_ASCII (ct, idx)
+         : char_table_ref (ct, idx));
+}
+
+/* Equivalent to Faset (CT, IDX, VAL) with optimization for ASCII and
+   8-bit European characters.  Do not check validity of CT.  */
+INLINE void
+CHAR_TABLE_SET (Lisp_Object ct, int idx, Lisp_Object val)
+{
+  if (ASCII_CHAR_P (idx) && SUB_CHAR_TABLE_P (XCHAR_TABLE (ct)->ascii))
+    set_sub_char_table_contents (XCHAR_TABLE (ct)->ascii, idx, val);
+  else
+    char_table_set (ct, idx, val);
+}
+
+/* This structure describes a built-in function.
+   It is generated by the DEFUN macro only.
+   defsubr makes it into a Lisp object.  */
+
+struct Lisp_Subr
+  {
+    struct vectorlike_header header;
+    union {
+      Lisp_Object (*a0) (void);
+      Lisp_Object (*a1) (Lisp_Object);
+      Lisp_Object (*a2) (Lisp_Object, Lisp_Object);
+      Lisp_Object (*a3) (Lisp_Object, Lisp_Object, Lisp_Object);
+      Lisp_Object (*a4) (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
+      Lisp_Object (*a5) (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, 
Lisp_Object);
+      Lisp_Object (*a6) (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, 
Lisp_Object, Lisp_Object);
+      Lisp_Object (*a7) (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, 
Lisp_Object, Lisp_Object, Lisp_Object);
+      Lisp_Object (*a8) (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, 
Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
+      Lisp_Object (*aUNEVALLED) (Lisp_Object args);
+      Lisp_Object (*aMANY) (ptrdiff_t, Lisp_Object *);
+    } function;
+    short min_args, max_args;
+    const char *symbol_name;
+    const char *intspec;
+    const char *doc;
+  };
+
+enum char_table_specials
+  {
+    /* This is the number of slots that every char table must have.  This
+       counts the ordinary slots and the top, defalt, parent, and purpose
+       slots.  */
+    CHAR_TABLE_STANDARD_SLOTS = PSEUDOVECSIZE (struct Lisp_Char_Table, extras),
+
+    /* This is an index of first Lisp_Object field in Lisp_Sub_Char_Table
+       when the latter is treated as an ordinary Lisp_Vector.  */
+    SUB_CHAR_TABLE_OFFSET = PSEUDOVECSIZE (struct Lisp_Sub_Char_Table, 
contents)
+  };
+
+/* Return the number of "extra" slots in the char table CT.  */
+
+INLINE int
+CHAR_TABLE_EXTRA_SLOTS (struct Lisp_Char_Table *ct)
+{
+  return ((ct->header.size & PSEUDOVECTOR_SIZE_MASK)
+         - CHAR_TABLE_STANDARD_SLOTS);
+}
+
+/* Make sure that sub char-table contents slot is where we think it is.  */
+verify (offsetof (struct Lisp_Sub_Char_Table, contents)
+       == offsetof (struct Lisp_Vector, contents[SUB_CHAR_TABLE_OFFSET]));
+
+/***********************************************************************
+                              Symbols
+ ***********************************************************************/
+
+/* Value is name of symbol.  */
+
+LISP_MACRO_DEFUN (SYMBOL_VAL, Lisp_Object, (struct Lisp_Symbol *sym), (sym))
+
+INLINE struct Lisp_Symbol *
+SYMBOL_ALIAS (struct Lisp_Symbol *sym)
+{
+  eassert (sym->redirect == SYMBOL_VARALIAS);
+  return sym->val.alias;
+}
+INLINE struct Lisp_Buffer_Local_Value *
+SYMBOL_BLV (struct Lisp_Symbol *sym)
+{
+  eassert (sym->redirect == SYMBOL_LOCALIZED);
+  return sym->val.blv;
+}
+INLINE union Lisp_Fwd *
+SYMBOL_FWD (struct Lisp_Symbol *sym)
+{
+  eassert (sym->redirect == SYMBOL_FORWARDED);
+  return sym->val.fwd;
+}
+
+LISP_MACRO_DEFUN_VOID (SET_SYMBOL_VAL,
+                      (struct Lisp_Symbol *sym, Lisp_Object v), (sym, v))
+
+INLINE void
+SET_SYMBOL_ALIAS (struct Lisp_Symbol *sym, struct Lisp_Symbol *v)
+{
+  eassert (sym->redirect == SYMBOL_VARALIAS);
+  sym->val.alias = v;
+}
+INLINE void
+SET_SYMBOL_BLV (struct Lisp_Symbol *sym, struct Lisp_Buffer_Local_Value *v)
+{
+  eassert (sym->redirect == SYMBOL_LOCALIZED);
+  sym->val.blv = v;
+}
+INLINE void
+SET_SYMBOL_FWD (struct Lisp_Symbol *sym, union Lisp_Fwd *v)
+{
+  eassert (sym->redirect == SYMBOL_FORWARDED);
+  sym->val.fwd = v;
+}
+
+INLINE Lisp_Object
+SYMBOL_NAME (Lisp_Object sym)
+{
+  return XSYMBOL (sym)->name;
+}
+
+/* Value is true if SYM is an interned symbol.  */
+
+INLINE bool
+SYMBOL_INTERNED_P (Lisp_Object sym)
+{
+  return XSYMBOL (sym)->interned != SYMBOL_UNINTERNED;
+}
+
+/* Value is true if SYM is interned in initial_obarray.  */
+
+INLINE bool
+SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P (Lisp_Object sym)
+{
+  return XSYMBOL (sym)->interned == SYMBOL_INTERNED_IN_INITIAL_OBARRAY;
+}
+
+/* Value is non-zero if symbol is considered a constant, i.e. its
+   value cannot be changed (there is an exception for keyword symbols,
+   whose value can be set to the keyword symbol itself).  */
+
+LISP_MACRO_DEFUN (SYMBOL_CONSTANT_P, int, (Lisp_Object sym), (sym))
+
+/* Placeholder for make-docfile to process.  The actual symbol
+   definition is done by lread.c's defsym.  */
+#define DEFSYM(sym, name) /* empty */
+
+
+/***********************************************************************
+                            Hash Tables
+ ***********************************************************************/
+
+/* The structure of a Lisp hash table.  */
+
+struct hash_table_test
+{
+  /* Name of the function used to compare keys.  */
+  Lisp_Object name;
+
+  /* User-supplied hash function, or nil.  */
+  Lisp_Object user_hash_function;
+
+  /* User-supplied key comparison function, or nil.  */
+  Lisp_Object user_cmp_function;
+
+  /* C function to compare two keys.  */
+  bool (*cmpfn) (struct hash_table_test *t, Lisp_Object, Lisp_Object);
+
+  /* C function to compute hash code.  */
+  EMACS_UINT (*hashfn) (struct hash_table_test *t, Lisp_Object);
+};
+
+struct Lisp_Hash_Table
+{
+  /* This is for Lisp; the hash table code does not refer to it.  */
+  struct vectorlike_header header;
+
+  /* Nil if table is non-weak.  Otherwise a symbol describing the
+     weakness of the table.  */
+  Lisp_Object weak;
+
+  /* When the table is resized, and this is an integer, compute the
+     new size by adding this to the old size.  If a float, compute the
+     new size by multiplying the old size with this factor.  */
+  Lisp_Object rehash_size;
+
+  /* Resize hash table when number of entries/ table size is >= this
+     ratio, a float.  */
+  Lisp_Object rehash_threshold;
+
+  /* Vector of hash codes.  If hash[I] is nil, this means that the
+     I-th entry is unused.  */
+  Lisp_Object hash;
+
+  /* Vector used to chain entries.  If entry I is free, next[I] is the
+     entry number of the next free item.  If entry I is non-free,
+     next[I] is the index of the next entry in the collision chain.  */
+  Lisp_Object next;
+
+  /* Index of first free entry in free list.  */
+  Lisp_Object next_free;
+
+  /* Bucket vector.  A non-nil entry is the index of the first item in
+     a collision chain.  This vector's size can be larger than the
+     hash table size to reduce collisions.  */
+  Lisp_Object index;
+
+  /* Only the fields above are traced normally by the GC.  The ones below
+     `count' are special and are either ignored by the GC or traced in
+     a special way (e.g. because of weakness).  */
+
+  /* Number of key/value entries in the table.  */
+  ptrdiff_t count;
+
+  /* Vector of keys and values.  The key of item I is found at index
+     2 * I, the value is found at index 2 * I + 1.
+     This is gc_marked specially if the table is weak.  */
+  Lisp_Object key_and_value;
+
+  /* The comparison and hash functions.  */
+  struct hash_table_test test;
+
+  /* Next weak hash table if this is a weak hash table.  The head
+     of the list is in weak_hash_tables.  */
+  struct Lisp_Hash_Table *next_weak;
+};
+
+
+INLINE struct Lisp_Hash_Table *
+XHASH_TABLE (Lisp_Object a)
+{
+  return XUNTAG (a, Lisp_Vectorlike);
+}
+
+#define XSET_HASH_TABLE(VAR, PTR) \
+     (XSETPSEUDOVECTOR (VAR, PTR, PVEC_HASH_TABLE))
+
+INLINE bool
+HASH_TABLE_P (Lisp_Object a)
+{
+  return PSEUDOVECTORP (a, PVEC_HASH_TABLE);
+}
+
+/* Value is the key part of entry IDX in hash table H.  */
+INLINE Lisp_Object
+HASH_KEY (struct Lisp_Hash_Table *h, ptrdiff_t idx)
+{
+  return AREF (h->key_and_value, 2 * idx);
+}
+
+/* Value is the value part of entry IDX in hash table H.  */
+INLINE Lisp_Object
+HASH_VALUE (struct Lisp_Hash_Table *h, ptrdiff_t idx)
+{
+  return AREF (h->key_and_value, 2 * idx + 1);
+}
+
+/* Value is the index of the next entry following the one at IDX
+   in hash table H.  */
+INLINE Lisp_Object
+HASH_NEXT (struct Lisp_Hash_Table *h, ptrdiff_t idx)
+{
+  return AREF (h->next, idx);
+}
+
+/* Value is the hash code computed for entry IDX in hash table H.  */
+INLINE Lisp_Object
+HASH_HASH (struct Lisp_Hash_Table *h, ptrdiff_t idx)
+{
+  return AREF (h->hash, idx);
+}
+
+/* Value is the index of the element in hash table H that is the
+   start of the collision list at index IDX in the index vector of H.  */
+INLINE Lisp_Object
+HASH_INDEX (struct Lisp_Hash_Table *h, ptrdiff_t idx)
+{
+  return AREF (h->index, idx);
+}
+
+/* Value is the size of hash table H.  */
+INLINE ptrdiff_t
+HASH_TABLE_SIZE (struct Lisp_Hash_Table *h)
+{
+  return ASIZE (h->next);
+}
+
+/* Default size for hash tables if not specified.  */
+
+enum DEFAULT_HASH_SIZE { DEFAULT_HASH_SIZE = 65 };
+
+/* Default threshold specifying when to resize a hash table.  The
+   value gives the ratio of current entries in the hash table and the
+   size of the hash table.  */
+
+static double const DEFAULT_REHASH_THRESHOLD = 0.8;
+
+/* Default factor by which to increase the size of a hash table.  */
+
+static double const DEFAULT_REHASH_SIZE = 1.5;
+
+/* Combine two integers X and Y for hashing.  The result might not fit
+   into a Lisp integer.  */
+
+INLINE EMACS_UINT
+sxhash_combine (EMACS_UINT x, EMACS_UINT y)
+{
+  return (x << 4) + (x >> (BITS_PER_EMACS_INT - 4)) + y;
+}
+
+/* Hash X, returning a value that fits into a fixnum.  */
+
+INLINE EMACS_UINT
+SXHASH_REDUCE (EMACS_UINT x)
+{
+  return (x ^ x >> (BITS_PER_EMACS_INT - FIXNUM_BITS)) & INTMASK;
+}
+
+/* These structures are used for various misc types.  */
+
+struct Lisp_Misc_Any           /* Supertype of all Misc types.  */
+{
+  ENUM_BF (Lisp_Misc_Type) type : 16;          /* = Lisp_Misc_??? */
+  bool_bf gcmarkbit : 1;
+  unsigned spacer : 15;
+};
+
+struct Lisp_Marker
+{
+  ENUM_BF (Lisp_Misc_Type) type : 16;          /* = Lisp_Misc_Marker */
+  bool_bf gcmarkbit : 1;
+  unsigned spacer : 13;
+  /* This flag is temporarily used in the functions
+     decode/encode_coding_object to record that the marker position
+     must be adjusted after the conversion.  */
+  bool_bf need_adjustment : 1;
+  /* True means normal insertion at the marker's position
+     leaves the marker after the inserted text.  */
+  bool_bf insertion_type : 1;
+  /* This is the buffer that the marker points into, or 0 if it points nowhere.
+     Note: a chain of markers can contain markers pointing into different
+     buffers (the chain is per buffer_text rather than per buffer, so it's
+     shared between indirect buffers).  */
+  /* This is used for (other than NULL-checking):
+     - Fmarker_buffer
+     - Fset_marker: check eq(oldbuf, newbuf) to avoid unchain+rechain.
+     - unchain_marker: to find the list from which to unchain.
+     - Fkill_buffer: to only unchain the markers of current indirect buffer.
+     */
+  struct buffer *buffer;
+
+  /* The remaining fields are meaningless in a marker that
+     does not point anywhere.  */
+
+  /* For markers that point somewhere,
+     this is used to chain of all the markers in a given buffer.  */
+  /* We could remove it and use an array in buffer_text instead.
+     That would also allow to preserve it ordered.  */
+  struct Lisp_Marker *next;
+  /* This is the char position where the marker points.  */
+  ptrdiff_t charpos;
+  /* This is the byte position.
+     It's mostly used as a charpos<->bytepos cache (i.e. it's not directly
+     used to implement the functionality of markers, but rather to (ab)use
+     markers as a cache for char<->byte mappings).  */
+  ptrdiff_t bytepos;
+};
+
+/* START and END are markers in the overlay's buffer, and
+   PLIST is the overlay's property list.  */
+struct Lisp_Overlay
+/* An overlay's real data content is:
+   - plist
+   - buffer (really there are two buffer pointers, one per marker,
+     and both points to the same buffer)
+   - insertion type of both ends (per-marker fields)
+   - start & start byte (of start marker)
+   - end & end byte (of end marker)
+   - next (singly linked list of overlays)
+   - next fields of start and end markers (singly linked list of markers).
+   I.e. 9words plus 2 bits, 3words of which are for external linked lists.
+*/
+  {
+    ENUM_BF (Lisp_Misc_Type) type : 16;        /* = Lisp_Misc_Overlay */
+    bool_bf gcmarkbit : 1;
+    unsigned spacer : 15;
+    struct Lisp_Overlay *next;
+    Lisp_Object start;
+    Lisp_Object end;
+    Lisp_Object plist;
+  };
+
+/* Types of data which may be saved in a Lisp_Save_Value.  */
+
+enum
+  {
+    SAVE_UNUSED,
+    SAVE_INTEGER,
+    SAVE_FUNCPOINTER,
+    SAVE_POINTER,
+    SAVE_OBJECT
+  };
+
+/* Number of bits needed to store one of the above values.  */
+enum { SAVE_SLOT_BITS = 3 };
+
+/* Number of slots in a save value where save_type is nonzero.  */
+enum { SAVE_VALUE_SLOTS = 4 };
+
+/* Bit-width and values for struct Lisp_Save_Value's save_type member.  */
+
+enum { SAVE_TYPE_BITS = SAVE_VALUE_SLOTS * SAVE_SLOT_BITS + 1 };
+
+enum Lisp_Save_Type
+  {
+    SAVE_TYPE_INT_INT = SAVE_INTEGER + (SAVE_INTEGER << SAVE_SLOT_BITS),
+    SAVE_TYPE_INT_INT_INT
+      = (SAVE_INTEGER + (SAVE_TYPE_INT_INT << SAVE_SLOT_BITS)),
+    SAVE_TYPE_OBJ_OBJ = SAVE_OBJECT + (SAVE_OBJECT << SAVE_SLOT_BITS),
+    SAVE_TYPE_OBJ_OBJ_OBJ = SAVE_OBJECT + (SAVE_TYPE_OBJ_OBJ << 
SAVE_SLOT_BITS),
+    SAVE_TYPE_OBJ_OBJ_OBJ_OBJ
+      = SAVE_OBJECT + (SAVE_TYPE_OBJ_OBJ_OBJ << SAVE_SLOT_BITS),
+    SAVE_TYPE_PTR_INT = SAVE_POINTER + (SAVE_INTEGER << SAVE_SLOT_BITS),
+    SAVE_TYPE_PTR_OBJ = SAVE_POINTER + (SAVE_OBJECT << SAVE_SLOT_BITS),
+    SAVE_TYPE_PTR_PTR = SAVE_POINTER + (SAVE_POINTER << SAVE_SLOT_BITS),
+    SAVE_TYPE_FUNCPTR_PTR_OBJ
+      = SAVE_FUNCPOINTER + (SAVE_TYPE_PTR_OBJ << SAVE_SLOT_BITS),
+
+    /* This has an extra bit indicating it's raw memory.  */
+    SAVE_TYPE_MEMORY = SAVE_TYPE_PTR_INT + (1 << (SAVE_TYPE_BITS - 1))
+  };
+
+/* Special object used to hold a different values for later use.
+
+   This is mostly used to package C integers and pointers to call
+   record_unwind_protect when two or more values need to be saved.
+   For example:
+
+   ...
+     struct my_data *md = get_my_data ();
+     ptrdiff_t mi = get_my_integer ();
+     record_unwind_protect (my_unwind, make_save_ptr_int (md, mi));
+   ...
+
+   Lisp_Object my_unwind (Lisp_Object arg)
+   {
+     struct my_data *md = XSAVE_POINTER (arg, 0);
+     ptrdiff_t mi = XSAVE_INTEGER (arg, 1);
+     ...
+   }
+
+   If ENABLE_CHECKING is in effect, XSAVE_xxx macros do type checking of the
+   saved objects and raise eassert if type of the saved object doesn't match
+   the type which is extracted.  In the example above, XSAVE_INTEGER (arg, 2)
+   and XSAVE_OBJECT (arg, 0) are wrong because nothing was saved in slot 2 and
+   slot 0 is a pointer.  */
+
+typedef void (*voidfuncptr) (void);
+
+struct Lisp_Save_Value
+  {
+    ENUM_BF (Lisp_Misc_Type) type : 16;        /* = Lisp_Misc_Save_Value */
+    bool_bf gcmarkbit : 1;
+    unsigned spacer : 32 - (16 + 1 + SAVE_TYPE_BITS);
+
+    /* V->data may hold up to SAVE_VALUE_SLOTS entries.  The type of
+       V's data entries are determined by V->save_type.  E.g., if
+       V->save_type == SAVE_TYPE_PTR_OBJ, V->data[0] is a pointer,
+       V->data[1] is an integer, and V's other data entries are unused.
+
+       If V->save_type == SAVE_TYPE_MEMORY, V->data[0].pointer is the address 
of
+       a memory area containing V->data[1].integer potential Lisp_Objects.  */
+    ENUM_BF (Lisp_Save_Type) save_type : SAVE_TYPE_BITS;
+    union {
+      void *pointer;
+      voidfuncptr funcpointer;
+      ptrdiff_t integer;
+      Lisp_Object object;
+    } data[SAVE_VALUE_SLOTS];
+  };
+
+/* Return the type of V's Nth saved value.  */
+INLINE int
+save_type (struct Lisp_Save_Value *v, int n)
+{
+  eassert (0 <= n && n < SAVE_VALUE_SLOTS);
+  return (v->save_type >> (SAVE_SLOT_BITS * n) & ((1 << SAVE_SLOT_BITS) - 1));
+}
+
+/* Get and set the Nth saved pointer.  */
+
+INLINE void *
+XSAVE_POINTER (Lisp_Object obj, int n)
+{
+  eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_POINTER);
+  return XSAVE_VALUE (obj)->data[n].pointer;
+}
+INLINE void
+set_save_pointer (Lisp_Object obj, int n, void *val)
+{
+  eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_POINTER);
+  XSAVE_VALUE (obj)->data[n].pointer = val;
+}
+INLINE voidfuncptr
+XSAVE_FUNCPOINTER (Lisp_Object obj, int n)
+{
+  eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_FUNCPOINTER);
+  return XSAVE_VALUE (obj)->data[n].funcpointer;
+}
+
+/* Likewise for the saved integer.  */
+
+INLINE ptrdiff_t
+XSAVE_INTEGER (Lisp_Object obj, int n)
+{
+  eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_INTEGER);
+  return XSAVE_VALUE (obj)->data[n].integer;
+}
+INLINE void
+set_save_integer (Lisp_Object obj, int n, ptrdiff_t val)
+{
+  eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_INTEGER);
+  XSAVE_VALUE (obj)->data[n].integer = val;
+}
+
+/* Extract Nth saved object.  */
+
+INLINE Lisp_Object
+XSAVE_OBJECT (Lisp_Object obj, int n)
+{
+  eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_OBJECT);
+  return XSAVE_VALUE (obj)->data[n].object;
+}
+
+/* A finalizer sentinel.  */
+struct Lisp_Finalizer
+  {
+    struct Lisp_Misc_Any base;
+
+    /* Circular list of all active weak references.  */
+    struct Lisp_Finalizer *prev;
+    struct Lisp_Finalizer *next;
+
+    /* Call FUNCTION when the finalizer becomes unreachable, even if
+       FUNCTION contains a reference to the finalizer; i.e., call
+       FUNCTION when it is reachable _only_ through finalizers.  */
+    Lisp_Object function;
+  };
+
+/* A miscellaneous object, when it's on the free list.  */
+struct Lisp_Free
+  {
+    ENUM_BF (Lisp_Misc_Type) type : 16;        /* = Lisp_Misc_Free */
+    bool_bf gcmarkbit : 1;
+    unsigned spacer : 15;
+    union Lisp_Misc *chain;
+  };
+
+/* To get the type field of a union Lisp_Misc, use XMISCTYPE.
+   It uses one of these struct subtypes to get the type field.  */
+
+union Lisp_Misc
+  {
+    struct Lisp_Misc_Any u_any;           /* Supertype of all Misc types.  */
+    struct Lisp_Free u_free;
+    struct Lisp_Marker u_marker;
+    struct Lisp_Overlay u_overlay;
+    struct Lisp_Save_Value u_save_value;
+    struct Lisp_Finalizer u_finalizer;
+  };
+
+INLINE union Lisp_Misc *
+XMISC (Lisp_Object a)
+{
+  return XUNTAG (a, Lisp_Misc);
+}
+
+INLINE struct Lisp_Misc_Any *
+XMISCANY (Lisp_Object a)
+{
+  eassert (MISCP (a));
+  return & XMISC (a)->u_any;
+}
+
+INLINE enum Lisp_Misc_Type
+XMISCTYPE (Lisp_Object a)
+{
+  return XMISCANY (a)->type;
+}
+
+INLINE struct Lisp_Marker *
+XMARKER (Lisp_Object a)
+{
+  eassert (MARKERP (a));
+  return & XMISC (a)->u_marker;
+}
+
+INLINE struct Lisp_Overlay *
+XOVERLAY (Lisp_Object a)
+{
+  eassert (OVERLAYP (a));
+  return & XMISC (a)->u_overlay;
+}
+
+INLINE struct Lisp_Save_Value *
+XSAVE_VALUE (Lisp_Object a)
+{
+  eassert (SAVE_VALUEP (a));
+  return & XMISC (a)->u_save_value;
+}
+
+INLINE struct Lisp_Finalizer *
+XFINALIZER (Lisp_Object a)
+{
+  eassert (FINALIZERP (a));
+  return & XMISC (a)->u_finalizer;
+}
+
+
+/* Forwarding pointer to an int variable.
+   This is allowed only in the value cell of a symbol,
+   and it means that the symbol's value really lives in the
+   specified int variable.  */
+struct Lisp_Intfwd
+  {
+    enum Lisp_Fwd_Type type;   /* = Lisp_Fwd_Int */
+    EMACS_INT *intvar;
+  };
+
+/* Boolean forwarding pointer to an int variable.
+   This is like Lisp_Intfwd except that the ostensible
+   "value" of the symbol is t if the bool variable is true,
+   nil if it is false.  */
+struct Lisp_Boolfwd
+  {
+    enum Lisp_Fwd_Type type;   /* = Lisp_Fwd_Bool */
+    bool *boolvar;
+  };
+
+/* Forwarding pointer to a Lisp_Object variable.
+   This is allowed only in the value cell of a symbol,
+   and it means that the symbol's value really lives in the
+   specified variable.  */
+struct Lisp_Objfwd
+  {
+    enum Lisp_Fwd_Type type;   /* = Lisp_Fwd_Obj */
+    Lisp_Object *objvar;
+  };
+
+/* Like Lisp_Objfwd except that value lives in a slot in the
+   current buffer.  Value is byte index of slot within buffer.  */
+struct Lisp_Buffer_Objfwd
+  {
+    enum Lisp_Fwd_Type type;   /* = Lisp_Fwd_Buffer_Obj */
+    int offset;
+    /* One of Qnil, Qintegerp, Qsymbolp, Qstringp, Qfloatp or Qnumberp.  */
+    Lisp_Object predicate;
+  };
+
+/* struct Lisp_Buffer_Local_Value is used in a symbol value cell when
+   the symbol has buffer-local or frame-local bindings.  (Exception:
+   some buffer-local variables are built-in, with their values stored
+   in the buffer structure itself.  They are handled differently,
+   using struct Lisp_Buffer_Objfwd.)
+
+   The `realvalue' slot holds the variable's current value, or a
+   forwarding pointer to where that value is kept.  This value is the
+   one that corresponds to the loaded binding.  To read or set the
+   variable, you must first make sure the right binding is loaded;
+   then you can access the value in (or through) `realvalue'.
+
+   `buffer' and `frame' are the buffer and frame for which the loaded
+   binding was found.  If those have changed, to make sure the right
+   binding is loaded it is necessary to find which binding goes with
+   the current buffer and selected frame, then load it.  To load it,
+   first unload the previous binding, then copy the value of the new
+   binding into `realvalue' (or through it).  Also update
+   LOADED-BINDING to point to the newly loaded binding.
+
+   `local_if_set' indicates that merely setting the variable creates a
+   local binding for the current buffer.  Otherwise the latter, setting
+   the variable does not do that; only make-local-variable does that.  */
+
+struct Lisp_Buffer_Local_Value
+  {
+    /* True means that merely setting the variable creates a local
+       binding for the current buffer.  */
+    bool_bf local_if_set : 1;
+    /* True means this variable can have frame-local bindings, otherwise, it is
+       can have buffer-local bindings.  The two cannot be combined.  */
+    bool_bf frame_local : 1;
+    /* True means that the binding now loaded was found.
+       Presumably equivalent to (defcell!=valcell).  */
+    bool_bf found : 1;
+    /* If non-NULL, a forwarding to the C var where it should also be set.  */
+    union Lisp_Fwd *fwd;       /* Should never be (Buffer|Kboard)_Objfwd.  */
+    /* The buffer or frame for which the loaded binding was found.  */
+    Lisp_Object where;
+    /* A cons cell that holds the default value.  It has the form
+       (SYMBOL . DEFAULT-VALUE).  */
+    Lisp_Object defcell;
+    /* The cons cell from `where's parameter alist.
+       It always has the form (SYMBOL . VALUE)
+       Note that if `forward' is non-nil, VALUE may be out of date.
+       Also if the currently loaded binding is the default binding, then
+       this is `eq'ual to defcell.  */
+    Lisp_Object valcell;
+  };
+
+/* Like Lisp_Objfwd except that value lives in a slot in the
+   current kboard.  */
+struct Lisp_Kboard_Objfwd
+  {
+    enum Lisp_Fwd_Type type;   /* = Lisp_Fwd_Kboard_Obj */
+    int offset;
+  };
+
+union Lisp_Fwd
+  {
+    struct Lisp_Intfwd u_intfwd;
+    struct Lisp_Boolfwd u_boolfwd;
+    struct Lisp_Objfwd u_objfwd;
+    struct Lisp_Buffer_Objfwd u_buffer_objfwd;
+    struct Lisp_Kboard_Objfwd u_kboard_objfwd;
+  };
+
+INLINE enum Lisp_Fwd_Type
+XFWDTYPE (union Lisp_Fwd *a)
+{
+  return a->u_intfwd.type;
+}
+
+INLINE struct Lisp_Buffer_Objfwd *
+XBUFFER_OBJFWD (union Lisp_Fwd *a)
+{
+  eassert (BUFFER_OBJFWDP (a));
+  return &a->u_buffer_objfwd;
+}
+
+/* Lisp floating point type.  */
+struct Lisp_Float
+  {
+    union
+    {
+      double data;
+      struct Lisp_Float *chain;
+    } u;
+  };
+
+INLINE double
+XFLOAT_DATA (Lisp_Object f)
+{
+  return XFLOAT (f)->u.data;
+}
+
+/* Most hosts nowadays use IEEE floating point, so they use IEC 60559
+   representations, have infinities and NaNs, and do not trap on
+   exceptions.  Define IEEE_FLOATING_POINT if this host is one of the
+   typical ones.  The C11 macro __STDC_IEC_559__ is close to what is
+   wanted here, but is not quite right because Emacs does not require
+   all the features of C11 Annex F (and does not require C11 at all,
+   for that matter).  */
+enum
+  {
+    IEEE_FLOATING_POINT
+      = (FLT_RADIX == 2 && FLT_MANT_DIG == 24
+        && FLT_MIN_EXP == -125 && FLT_MAX_EXP == 128)
+  };
+
+/* A character, declared with the following typedef, is a member
+   of some character set associated with the current buffer.  */
+#ifndef _UCHAR_T  /* Protect against something in ctab.h on AIX.  */
+#define _UCHAR_T
+typedef unsigned char UCHAR;
+#endif
+
+/* Meanings of slots in a Lisp_Compiled:  */
+
+enum Lisp_Compiled
+  {
+    COMPILED_ARGLIST = 0,
+    COMPILED_BYTECODE = 1,
+    COMPILED_CONSTANTS = 2,
+    COMPILED_STACK_DEPTH = 3,
+    COMPILED_DOC_STRING = 4,
+    COMPILED_INTERACTIVE = 5
+  };
+
+/* Flag bits in a character.  These also get used in termhooks.h.
+   Richard Stallman <address@hidden> thinks that MULE
+   (MUlti-Lingual Emacs) might need 22 bits for the character value
+   itself, so we probably shouldn't use any bits lower than 0x0400000.  */
+enum char_bits
+  {
+    CHAR_ALT = 0x0400000,
+    CHAR_SUPER = 0x0800000,
+    CHAR_HYPER = 0x1000000,
+    CHAR_SHIFT = 0x2000000,
+    CHAR_CTL = 0x4000000,
+    CHAR_META = 0x8000000,
+
+    CHAR_MODIFIER_MASK =
+      CHAR_ALT | CHAR_SUPER | CHAR_HYPER | CHAR_SHIFT | CHAR_CTL | CHAR_META,
+
+    /* Actually, the current Emacs uses 22 bits for the character value
+       itself.  */
+    CHARACTERBITS = 22
+  };
+
+/* Data type checking.  */
+
+LISP_MACRO_DEFUN (NILP, bool, (Lisp_Object x), (x))
+
+INLINE bool
+NUMBERP (Lisp_Object x)
+{
+  return INTEGERP (x) || FLOATP (x);
+}
+INLINE bool
+NATNUMP (Lisp_Object x)
+{
+  return INTEGERP (x) && 0 <= XINT (x);
+}
+
+INLINE bool
+RANGED_INTEGERP (intmax_t lo, Lisp_Object x, intmax_t hi)
+{
+  return INTEGERP (x) && lo <= XINT (x) && XINT (x) <= hi;
+}
+
+#define TYPE_RANGED_INTEGERP(type, x) \
+  (INTEGERP (x)                              \
+   && (TYPE_SIGNED (type) ? TYPE_MINIMUM (type) <= XINT (x) : 0 <= XINT (x)) \
+   && XINT (x) <= TYPE_MAXIMUM (type))
+
+LISP_MACRO_DEFUN (CONSP, bool, (Lisp_Object x), (x))
+LISP_MACRO_DEFUN (FLOATP, bool, (Lisp_Object x), (x))
+LISP_MACRO_DEFUN (MISCP, bool, (Lisp_Object x), (x))
+LISP_MACRO_DEFUN (SYMBOLP, bool, (Lisp_Object x), (x))
+LISP_MACRO_DEFUN (INTEGERP, bool, (Lisp_Object x), (x))
+LISP_MACRO_DEFUN (VECTORLIKEP, bool, (Lisp_Object x), (x))
+LISP_MACRO_DEFUN (MARKERP, bool, (Lisp_Object x), (x))
+
+INLINE bool
+STRINGP (Lisp_Object x)
+{
+  return XTYPE (x) == Lisp_String;
+}
+INLINE bool
+VECTORP (Lisp_Object x)
+{
+  return VECTORLIKEP (x) && ! (ASIZE (x) & PSEUDOVECTOR_FLAG);
+}
+INLINE bool
+OVERLAYP (Lisp_Object x)
+{
+  return MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Overlay;
+}
+INLINE bool
+SAVE_VALUEP (Lisp_Object x)
+{
+  return MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Save_Value;
+}
+
+INLINE bool
+FINALIZERP (Lisp_Object x)
+{
+  return MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Finalizer;
+}
+
+INLINE bool
+AUTOLOADP (Lisp_Object x)
+{
+  return CONSP (x) && EQ (Qautoload, XCAR (x));
+}
+
+INLINE bool
+BUFFER_OBJFWDP (union Lisp_Fwd *a)
+{
+  return XFWDTYPE (a) == Lisp_Fwd_Buffer_Obj;
+}
+
+INLINE bool
+PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, int code)
+{
+  return ((a->size & (PSEUDOVECTOR_FLAG | PVEC_TYPE_MASK))
+         == (PSEUDOVECTOR_FLAG | (code << PSEUDOVECTOR_AREA_BITS)));
+}
+
+/* True if A is a pseudovector whose code is CODE.  */
+INLINE bool
+PSEUDOVECTORP (Lisp_Object a, int code)
+{
+  if (! VECTORLIKEP (a))
+    return false;
+  else
+    {
+      /* Converting to struct vectorlike_header * avoids aliasing issues.  */
+      struct vectorlike_header *h = XUNTAG (a, Lisp_Vectorlike);
+      return PSEUDOVECTOR_TYPEP (h, code);
+    }
+}
+
+
+/* Test for specific pseudovector types.  */
+
+INLINE bool
+WINDOW_CONFIGURATIONP (Lisp_Object a)
+{
+  return PSEUDOVECTORP (a, PVEC_WINDOW_CONFIGURATION);
+}
+
+INLINE bool
+PROCESSP (Lisp_Object a)
+{
+  return PSEUDOVECTORP (a, PVEC_PROCESS);
+}
+
+INLINE bool
+WINDOWP (Lisp_Object a)
+{
+  return PSEUDOVECTORP (a, PVEC_WINDOW);
+}
+
+INLINE bool
+TERMINALP (Lisp_Object a)
+{
+  return PSEUDOVECTORP (a, PVEC_TERMINAL);
+}
+
+INLINE bool
+SUBRP (Lisp_Object a)
+{
+  return PSEUDOVECTORP (a, PVEC_SUBR);
+}
+
+INLINE bool
+COMPILEDP (Lisp_Object a)
+{
+  return PSEUDOVECTORP (a, PVEC_COMPILED);
+}
+
+INLINE bool
+BUFFERP (Lisp_Object a)
+{
+  return PSEUDOVECTORP (a, PVEC_BUFFER);
+}
+
+INLINE bool
+CHAR_TABLE_P (Lisp_Object a)
+{
+  return PSEUDOVECTORP (a, PVEC_CHAR_TABLE);
+}
+
+INLINE bool
+SUB_CHAR_TABLE_P (Lisp_Object a)
+{
+  return PSEUDOVECTORP (a, PVEC_SUB_CHAR_TABLE);
+}
+
+INLINE bool
+BOOL_VECTOR_P (Lisp_Object a)
+{
+  return PSEUDOVECTORP (a, PVEC_BOOL_VECTOR);
+}
+
+INLINE bool
+FRAMEP (Lisp_Object a)
+{
+  return PSEUDOVECTORP (a, PVEC_FRAME);
+}
+
+/* Test for image (image . spec)  */
+INLINE bool
+IMAGEP (Lisp_Object x)
+{
+  return CONSP (x) && EQ (XCAR (x), Qimage);
+}
+
+/* Array types.  */
+INLINE bool
+ARRAYP (Lisp_Object x)
+{
+  return VECTORP (x) || STRINGP (x) || CHAR_TABLE_P (x) || BOOL_VECTOR_P (x);
+}
+
+INLINE void
+CHECK_LIST (Lisp_Object x)
+{
+  CHECK_TYPE (CONSP (x) || NILP (x), Qlistp, x);
+}
+
+LISP_MACRO_DEFUN_VOID (CHECK_LIST_CONS, (Lisp_Object x, Lisp_Object y), (x, y))
+LISP_MACRO_DEFUN_VOID (CHECK_SYMBOL, (Lisp_Object x), (x))
+LISP_MACRO_DEFUN_VOID (CHECK_NUMBER, (Lisp_Object x), (x))
+
+INLINE void
+CHECK_STRING (Lisp_Object x)
+{
+  CHECK_TYPE (STRINGP (x), Qstringp, x);
+}
+INLINE void
+CHECK_STRING_CAR (Lisp_Object x)
+{
+  CHECK_TYPE (STRINGP (XCAR (x)), Qstringp, XCAR (x));
+}
+INLINE void
+CHECK_CONS (Lisp_Object x)
+{
+  CHECK_TYPE (CONSP (x), Qconsp, x);
+}
+INLINE void
+CHECK_VECTOR (Lisp_Object x)
+{
+  CHECK_TYPE (VECTORP (x), Qvectorp, x);
+}
+INLINE void
+CHECK_BOOL_VECTOR (Lisp_Object x)
+{
+  CHECK_TYPE (BOOL_VECTOR_P (x), Qbool_vector_p, x);
+}
+/* This is a bit special because we always need size afterwards.  */
+INLINE ptrdiff_t
+CHECK_VECTOR_OR_STRING (Lisp_Object x)
+{
+  if (VECTORP (x))
+    return ASIZE (x);
+  if (STRINGP (x))
+    return SCHARS (x);
+  wrong_type_argument (Qarrayp, x);
+}
+INLINE void
+CHECK_ARRAY (Lisp_Object x, Lisp_Object predicate)
+{
+  CHECK_TYPE (ARRAYP (x), predicate, x);
+}
+INLINE void
+CHECK_BUFFER (Lisp_Object x)
+{
+  CHECK_TYPE (BUFFERP (x), Qbufferp, x);
+}
+INLINE void
+CHECK_WINDOW (Lisp_Object x)
+{
+  CHECK_TYPE (WINDOWP (x), Qwindowp, x);
+}
+#ifdef subprocesses
+INLINE void
+CHECK_PROCESS (Lisp_Object x)
+{
+  CHECK_TYPE (PROCESSP (x), Qprocessp, x);
+}
+#endif
+INLINE void
+CHECK_NATNUM (Lisp_Object x)
+{
+  CHECK_TYPE (NATNUMP (x), Qwholenump, x);
+}
+
+#define CHECK_RANGED_INTEGER(x, lo, hi)                                        
\
+  do {                                                                 \
+    CHECK_NUMBER (x);                                                  \
+    if (! ((lo) <= XINT (x) && XINT (x) <= (hi)))                      \
+      args_out_of_range_3                                              \
+       (x,                                                             \
+        make_number ((lo) < 0 && (lo) < MOST_NEGATIVE_FIXNUM           \
+                     ? MOST_NEGATIVE_FIXNUM                            \
+                     : (lo)),                                          \
+        make_number (min (hi, MOST_POSITIVE_FIXNUM)));                 \
+  } while (false)
+#define CHECK_TYPE_RANGED_INTEGER(type, x) \
+  do {                                                                 \
+    if (TYPE_SIGNED (type))                                            \
+      CHECK_RANGED_INTEGER (x, TYPE_MINIMUM (type), TYPE_MAXIMUM (type)); \
+    else                                                               \
+      CHECK_RANGED_INTEGER (x, 0, TYPE_MAXIMUM (type));                        
\
+  } while (false)
+
+#define CHECK_NUMBER_COERCE_MARKER(x)                                  \
+  do {                                                                 \
+    if (MARKERP ((x)))                                                 \
+      XSETFASTINT (x, marker_position (x));                            \
+    else                                                               \
+      CHECK_TYPE (INTEGERP (x), Qinteger_or_marker_p, x);              \
+  } while (false)
+
+INLINE double
+XFLOATINT (Lisp_Object n)
+{
+  return extract_float (n);
+}
+
+INLINE void
+CHECK_NUMBER_OR_FLOAT (Lisp_Object x)
+{
+  CHECK_TYPE (FLOATP (x) || INTEGERP (x), Qnumberp, x);
+}
+
+#define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(x)                         \
+  do {                                                                 \
+    if (MARKERP (x))                                                   \
+      XSETFASTINT (x, marker_position (x));                            \
+    else                                                               \
+      CHECK_TYPE (INTEGERP (x) || FLOATP (x), Qnumber_or_marker_p, x); \
+  } while (false)
+
+/* Since we can't assign directly to the CAR or CDR fields of a cons
+   cell, use these when checking that those fields contain numbers.  */
+INLINE void
+CHECK_NUMBER_CAR (Lisp_Object x)
+{
+  Lisp_Object tmp = XCAR (x);
+  CHECK_NUMBER (tmp);
+  XSETCAR (x, tmp);
+}
+
+INLINE void
+CHECK_NUMBER_CDR (Lisp_Object x)
+{
+  Lisp_Object tmp = XCDR (x);
+  CHECK_NUMBER (tmp);
+  XSETCDR (x, tmp);
+}
+
+/* Define a built-in function for calling from Lisp.
+ `lname' should be the name to give the function in Lisp,
+    as a null-terminated C string.
+ `fnname' should be the name of the function in C.
+    By convention, it starts with F.
+ `sname' should be the name for the C constant structure
+    that records information on this function for internal use.
+    By convention, it should be the same as `fnname' but with S instead of F.
+    It's too bad that C macros can't compute this from `fnname'.
+ `minargs' should be a number, the minimum number of arguments allowed.
+ `maxargs' should be a number, the maximum number of arguments allowed,
+    or else MANY or UNEVALLED.
+    MANY means pass a vector of evaluated arguments,
+        in the form of an integer number-of-arguments
+        followed by the address of a vector of Lisp_Objects
+        which contains the argument values.
+    UNEVALLED means pass the list of unevaluated arguments
+ `intspec' says how interactive arguments are to be fetched.
+    If the string starts with a `(', `intspec' is evaluated and the resulting
+    list is the list of arguments.
+    If it's a string that doesn't start with `(', the value should follow
+    the one of the doc string for `interactive'.
+    A null string means call interactively with no arguments.
+ `doc' is documentation for the user.  */
+
+/* This version of DEFUN declares a function prototype with the right
+   arguments, so we can catch errors with maxargs at compile-time.  */
+#ifdef _MSC_VER
+#define DEFUN(lname, fnname, sname, minargs, maxargs, intspec, doc)    \
+   Lisp_Object fnname DEFUN_ARGS_ ## maxargs ;                         \
+   static struct Lisp_Subr alignas (GCALIGNMENT) sname =               \
+   { { (PVEC_SUBR << PSEUDOVECTOR_AREA_BITS)                           \
+       | (sizeof (struct Lisp_Subr) / sizeof (EMACS_INT)) },           \
+      { (Lisp_Object (__cdecl *)(void))fnname },                        \
+       minargs, maxargs, lname, intspec, 0};                           \
+   Lisp_Object fnname
+#else  /* not _MSC_VER */
+#define DEFUN(lname, fnname, sname, minargs, maxargs, intspec, doc)    \
+   static struct Lisp_Subr alignas (GCALIGNMENT) sname =               \
+     { { PVEC_SUBR << PSEUDOVECTOR_AREA_BITS },                                
\
+       { .a ## maxargs = fnname },                                     \
+       minargs, maxargs, lname, intspec, 0};                           \
+   Lisp_Object fnname
+#endif
+
+/* True if OBJ is a Lisp function.  */
+INLINE bool
+FUNCTIONP (Lisp_Object obj)
+{
+  return functionp (obj);
+}
+
+/* defsubr (Sname);
+   is how we define the symbol for function `name' at start-up time.  */
+extern void defsubr (struct Lisp_Subr *);
+
+enum maxargs
+  {
+    MANY = -2,
+    UNEVALLED = -1
+  };
+
+/* Call a function F that accepts many args, passing it ARRAY's elements.  */
+#define CALLMANY(f, array) (f) (ARRAYELTS (array), array)
+
+/* Call a function F that accepts many args, passing it the remaining args,
+   E.g., 'return CALLN (Fformat, fmt, text);' is less error-prone than
+   '{ Lisp_Object a[2]; a[0] = fmt; a[1] = text; return Fformat (2, a); }'.
+   CALLN is overkill for simple usages like 'Finsert (1, &text);'.  */
+#define CALLN(f, ...) CALLMANY (f, ((Lisp_Object []) {__VA_ARGS__}))
+
+extern void defvar_lisp (struct Lisp_Objfwd *, const char *, Lisp_Object *);
+extern void defvar_lisp_nopro (struct Lisp_Objfwd *, const char *, Lisp_Object 
*);
+extern void defvar_bool (struct Lisp_Boolfwd *, const char *, bool *);
+extern void defvar_int (struct Lisp_Intfwd *, const char *, EMACS_INT *);
+extern void defvar_kboard (struct Lisp_Kboard_Objfwd *, const char *, int);
+
+/* Macros we use to define forwarded Lisp variables.
+   These are used in the syms_of_FILENAME functions.
+
+   An ordinary (not in buffer_defaults, per-buffer, or per-keyboard)
+   lisp variable is actually a field in `struct emacs_globals'.  The
+   field's name begins with "f_", which is a convention enforced by
+   these macros.  Each such global has a corresponding #define in
+   globals.h; the plain name should be used in the code.
+
+   E.g., the global "cons_cells_consed" is declared as "int
+   f_cons_cells_consed" in globals.h, but there is a define:
+
+      #define cons_cells_consed globals.f_cons_cells_consed
+
+   All C code uses the `cons_cells_consed' name.  This is all done
+   this way to support indirection for multi-threaded Emacs.  */
+
+#define DEFVAR_LISP(lname, vname, doc)         \
+  do {                                         \
+    static struct Lisp_Objfwd o_fwd;           \
+    defvar_lisp (&o_fwd, lname, &globals.f_ ## vname);         \
+  } while (false)
+#define DEFVAR_LISP_NOPRO(lname, vname, doc)   \
+  do {                                         \
+    static struct Lisp_Objfwd o_fwd;           \
+    defvar_lisp_nopro (&o_fwd, lname, &globals.f_ ## vname);   \
+  } while (false)
+#define DEFVAR_BOOL(lname, vname, doc)         \
+  do {                                         \
+    static struct Lisp_Boolfwd b_fwd;          \
+    defvar_bool (&b_fwd, lname, &globals.f_ ## vname);         \
+  } while (false)
+#define DEFVAR_INT(lname, vname, doc)          \
+  do {                                         \
+    static struct Lisp_Intfwd i_fwd;           \
+    defvar_int (&i_fwd, lname, &globals.f_ ## vname);          \
+  } while (false)
+
+#define DEFVAR_BUFFER_DEFAULTS(lname, vname, doc)              \
+  do {                                                         \
+    static struct Lisp_Objfwd o_fwd;                           \
+    defvar_lisp_nopro (&o_fwd, lname, &BVAR (&buffer_defaults, vname));        
\
+  } while (false)
+
+#define DEFVAR_KBOARD(lname, vname, doc)                       \
+  do {                                                         \
+    static struct Lisp_Kboard_Objfwd ko_fwd;                   \
+    defvar_kboard (&ko_fwd, lname, offsetof (KBOARD, vname ## _)); \
+  } while (false)
+
+/* Save and restore the instruction and environment pointers,
+   without affecting the signal mask.  */
+
+#ifdef HAVE__SETJMP
+typedef jmp_buf sys_jmp_buf;
+# define sys_setjmp(j) _setjmp (j)
+# define sys_longjmp(j, v) _longjmp (j, v)
+#elif defined HAVE_SIGSETJMP
+typedef sigjmp_buf sys_jmp_buf;
+# define sys_setjmp(j) sigsetjmp (j, 0)
+# define sys_longjmp(j, v) siglongjmp (j, v)
+#else
+/* A platform that uses neither _longjmp nor siglongjmp; assume
+   longjmp does not affect the sigmask.  */
+typedef jmp_buf sys_jmp_buf;
+# define sys_setjmp(j) setjmp (j)
+# define sys_longjmp(j, v) longjmp (j, v)
+#endif
+
+
+/* Elisp uses several stacks:
+   - the C stack.
+   - the bytecode stack: used internally by the bytecode interpreter.
+     Allocated from the C stack.
+   - The specpdl stack: keeps track of active unwind-protect and
+     dynamic-let-bindings.  Allocated from the `specpdl' array, a manually
+     managed stack.
+   - The handler stack: keeps track of active catch tags and condition-case
+     handlers.  Allocated in a manually managed stack implemented by a
+     doubly-linked list allocated via xmalloc and never freed.  */
+
+/* Structure for recording Lisp call stack for backtrace purposes.  */
+
+/* The special binding stack holds the outer values of variables while
+   they are bound by a function application or a let form, stores the
+   code to be executed for unwind-protect forms.
+
+   NOTE: The specbinding union is defined here, because SPECPDL_INDEX is
+   used all over the place, needs to be fast, and needs to know the size of
+   union specbinding.  But only eval.c should access it.  */
+
+enum specbind_tag {
+  SPECPDL_UNWIND,              /* An unwind_protect function on Lisp_Object.  
*/
+  SPECPDL_UNWIND_PTR,          /* Likewise, on void *.  */
+  SPECPDL_UNWIND_INT,          /* Likewise, on int.  */
+  SPECPDL_UNWIND_VOID,         /* Likewise, with no arg.  */
+  SPECPDL_BACKTRACE,           /* An element of the backtrace.  */
+  SPECPDL_LET,                 /* A plain and simple dynamic let-binding.  */
+  /* Tags greater than SPECPDL_LET must be "subkinds" of LET.  */
+  SPECPDL_LET_LOCAL,           /* A buffer-local let-binding.  */
+  SPECPDL_LET_DEFAULT          /* A global binding for a localized var.  */
+};
+
+union specbinding
+  {
+    ENUM_BF (specbind_tag) kind : CHAR_BIT;
+    struct {
+      ENUM_BF (specbind_tag) kind : CHAR_BIT;
+      void (*func) (Lisp_Object);
+      Lisp_Object arg;
+    } unwind;
+    struct {
+      ENUM_BF (specbind_tag) kind : CHAR_BIT;
+      void (*func) (void *);
+      void *arg;
+    } unwind_ptr;
+    struct {
+      ENUM_BF (specbind_tag) kind : CHAR_BIT;
+      void (*func) (int);
+      int arg;
+    } unwind_int;
+    struct {
+      ENUM_BF (specbind_tag) kind : CHAR_BIT;
+      void (*func) (void);
+    } unwind_void;
+    struct {
+      ENUM_BF (specbind_tag) kind : CHAR_BIT;
+      /* `where' is not used in the case of SPECPDL_LET.  */
+      Lisp_Object symbol, old_value, where;
+    } let;
+    struct {
+      ENUM_BF (specbind_tag) kind : CHAR_BIT;
+      bool_bf debug_on_exit : 1;
+      Lisp_Object function;
+      Lisp_Object *args;
+      ptrdiff_t nargs;
+    } bt;
+  };
+
+extern union specbinding *specpdl;
+extern union specbinding *specpdl_ptr;
+extern ptrdiff_t specpdl_size;
+
+INLINE ptrdiff_t
+SPECPDL_INDEX (void)
+{
+  return specpdl_ptr - specpdl;
+}
+
+/* This structure helps implement the `catch/throw' and `condition-case/signal'
+   control structures.  A struct handler contains all the information needed to
+   restore the state of the interpreter after a non-local jump.
+
+   handler structures are chained together in a doubly linked list; the `next'
+   member points to the next outer catchtag and the `nextfree' member points in
+   the other direction to the next inner element (which is typically the next
+   free element since we mostly use it on the deepest handler).
+
+   A call like (throw TAG VAL) searches for a catchtag whose `tag_or_ch'
+   member is TAG, and then unbinds to it.  The `val' member is used to
+   hold VAL while the stack is unwound; `val' is returned as the value
+   of the catch form.
+
+   All the other members are concerned with restoring the interpreter
+   state.
+
+   Members are volatile if their values need to survive _longjmp when
+   a 'struct handler' is a local variable.  */
+
+enum handlertype { CATCHER, CONDITION_CASE };
+
+struct handler
+{
+  enum handlertype type;
+  Lisp_Object tag_or_ch;
+  Lisp_Object val;
+  struct handler *next;
+  struct handler *nextfree;
+
+  /* The bytecode interpreter can have several handlers active at the same
+     time, so when we longjmp to one of them, it needs to know which handler
+     this was and what was the corresponding internal state.  This is stored
+     here, and when we longjmp we make sure that handlerlist points to the
+     proper handler.  */
+  Lisp_Object *bytecode_top;
+  int bytecode_dest;
+
+  /* Most global vars are reset to their value via the specpdl mechanism,
+     but a few others are handled by storing their value here.  */
+#if true /* GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS, but defined later.  */
+  struct gcpro *gcpro;
+#endif
+  sys_jmp_buf jmp;
+  EMACS_INT lisp_eval_depth;
+  ptrdiff_t pdlcount;
+  int poll_suppress_count;
+  int interrupt_input_blocked;
+  struct byte_stack *byte_stack;
+};
+
+/* Fill in the components of c, and put it on the list.  */
+#define PUSH_HANDLER(c, tag_ch_val, handlertype)       \
+  if (handlerlist->nextfree)                           \
+    (c) = handlerlist->nextfree;                       \
+  else                                                 \
+    {                                                  \
+      (c) = xmalloc (sizeof (struct handler));         \
+      (c)->nextfree = NULL;                            \
+      handlerlist->nextfree = (c);                     \
+    }                                                  \
+  (c)->type = (handlertype);                           \
+  (c)->tag_or_ch = (tag_ch_val);                       \
+  (c)->val = Qnil;                                     \
+  (c)->next = handlerlist;                             \
+  (c)->lisp_eval_depth = lisp_eval_depth;              \
+  (c)->pdlcount = SPECPDL_INDEX ();                    \
+  (c)->poll_suppress_count = poll_suppress_count;      \
+  (c)->interrupt_input_blocked = interrupt_input_blocked;\
+  (c)->gcpro = gcprolist;                              \
+  (c)->byte_stack = byte_stack_list;                   \
+  handlerlist = (c);
+
+
+extern Lisp_Object memory_signal_data;
+
+/* An address near the bottom of the stack.
+   Tells GC how to save a copy of the stack.  */
+extern char *stack_bottom;
+
+/* Check quit-flag and quit if it is non-nil.
+   Typing C-g does not directly cause a quit; it only sets Vquit_flag.
+   So the program needs to do QUIT at times when it is safe to quit.
+   Every loop that might run for a long time or might not exit
+   ought to do QUIT at least once, at a safe place.
+   Unless that is impossible, of course.
+   But it is very desirable to avoid creating loops where QUIT is impossible.
+
+   Exception: if you set immediate_quit to true,
+   then the handler that responds to the C-g does the quit itself.
+   This is a good thing to do around a loop that has no side effects
+   and (in particular) cannot call arbitrary Lisp code.
+
+   If quit-flag is set to `kill-emacs' the SIGINT handler has received
+   a request to exit Emacs when it is safe to do.  */
+
+extern void process_pending_signals (void);
+extern bool volatile pending_signals;
+
+extern void process_quit_flag (void);
+#define QUIT                                           \
+  do {                                                 \
+    if (!NILP (Vquit_flag) && NILP (Vinhibit_quit))    \
+      process_quit_flag ();                            \
+    else if (pending_signals)                          \
+      process_pending_signals ();                      \
+  } while (false)
+
+
+/* True if ought to quit now.  */
+
+#define QUITP (!NILP (Vquit_flag) && NILP (Vinhibit_quit))
+
+extern Lisp_Object Vascii_downcase_table;
+extern Lisp_Object Vascii_canon_table;
+
+/* Structure for recording stack slots that need marking.  */
+
+/* This is a chain of structures, each of which points at a Lisp_Object
+   variable whose value should be marked in garbage collection.
+   Normally every link of the chain is an automatic variable of a function,
+   and its `val' points to some argument or local variable of the function.
+   On exit to the function, the chain is set back to the value it had on entry.
+   This way, no link remains in the chain when the stack frame containing the
+   link disappears.
+
+   Every function that can call Feval must protect in this fashion all
+   Lisp_Object variables whose contents will be used again.  */
+
+extern struct gcpro *gcprolist;
+
+struct gcpro
+{
+  struct gcpro *next;
+
+  /* Address of first protected variable.  */
+  volatile Lisp_Object *var;
+
+  /* Number of consecutive protected variables.  */
+  ptrdiff_t nvars;
+
+#ifdef DEBUG_GCPRO
+  /* File name where this record is used.  */
+  const char *name;
+
+  /* Line number in this file.  */
+  int lineno;
+
+  /* Index in the local chain of records.  */
+  int idx;
+
+  /* Nesting level.  */
+  int level;
+#endif
+};
+
+/* Values of GC_MARK_STACK during compilation:
+
+   0   Use GCPRO as before
+   1   Do the real thing, make GCPROs and UNGCPRO no-ops.
+   2    Mark the stack, and check that everything GCPRO'd is
+       marked.
+   3   Mark using GCPRO's, mark stack last, and count how many
+       dead objects are kept alive.
+
+   Formerly, method 0 was used.  Currently, method 1 is used unless
+   otherwise specified by hand when building, e.g.,
+   "make CPPFLAGS='-DGC_MARK_STACK=GC_USE_GCPROS_AS_BEFORE'".
+   Methods 2 and 3 are present mainly to debug the transition from 0 to 1.  */
+
+#define GC_USE_GCPROS_AS_BEFORE                0
+#define GC_MAKE_GCPROS_NOOPS           1
+#define GC_MARK_STACK_CHECK_GCPROS     2
+#define GC_USE_GCPROS_CHECK_ZOMBIES    3
+
+#ifndef GC_MARK_STACK
+#define GC_MARK_STACK GC_MAKE_GCPROS_NOOPS
+#endif
+
+/* Whether we do the stack marking manually.  */
+#define BYTE_MARK_STACK !(GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS                
\
+                         || GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS)
+
+
+#if GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS
+
+/* Do something silly with gcproN vars just so gcc shuts up.  */
+/* You get warnings from MIPSPro...  */
+
+#define GCPRO1(varname) ((void) gcpro1)
+#define GCPRO2(varname1, varname2) ((void) gcpro2, (void) gcpro1)
+#define GCPRO3(varname1, varname2, varname3) \
+  ((void) gcpro3, (void) gcpro2, (void) gcpro1)
+#define GCPRO4(varname1, varname2, varname3, varname4) \
+  ((void) gcpro4, (void) gcpro3, (void) gcpro2, (void) gcpro1)
+#define GCPRO5(varname1, varname2, varname3, varname4, varname5) \
+  ((void) gcpro5, (void) gcpro4, (void) gcpro3, (void) gcpro2, (void) gcpro1)
+#define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \
+  ((void) gcpro6, (void) gcpro5, (void) gcpro4, (void) gcpro3, (void) gcpro2, \
+   (void) gcpro1)
+#define GCPRO7(a, b, c, d, e, f, g) (GCPRO6 (a, b, c, d, e, f), (void) gcpro7)
+#define UNGCPRO ((void) 0)
+
+#else /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */
+
+#ifndef DEBUG_GCPRO
+
+#define GCPRO1(a)                                                      \
+  { gcpro1.next = gcprolist; gcpro1.var = &(a); gcpro1.nvars = 1;      \
+    gcprolist = &gcpro1; }
+
+#define GCPRO2(a, b)                                                   \
+  { gcpro1.next = gcprolist; gcpro1.var = &(a); gcpro1.nvars = 1;      \
+    gcpro2.next = &gcpro1; gcpro2.var = &(b); gcpro2.nvars = 1;                
\
+    gcprolist = &gcpro2; }
+
+#define GCPRO3(a, b, c)                                                        
\
+  { gcpro1.next = gcprolist; gcpro1.var = &(a); gcpro1.nvars = 1;      \
+    gcpro2.next = &gcpro1; gcpro2.var = &(b); gcpro2.nvars = 1;                
\
+    gcpro3.next = &gcpro2; gcpro3.var = &(c); gcpro3.nvars = 1;                
\
+    gcprolist = &gcpro3; }
+
+#define GCPRO4(a, b, c, d)                                             \
+  { gcpro1.next = gcprolist; gcpro1.var = &(a); gcpro1.nvars = 1;      \
+    gcpro2.next = &gcpro1; gcpro2.var = &(b); gcpro2.nvars = 1;                
\
+    gcpro3.next = &gcpro2; gcpro3.var = &(c); gcpro3.nvars = 1;                
\
+    gcpro4.next = &gcpro3; gcpro4.var = &(d); gcpro4.nvars = 1;                
\
+    gcprolist = &gcpro4; }
+
+#define GCPRO5(a, b, c, d, e)                                          \
+  { gcpro1.next = gcprolist; gcpro1.var = &(a); gcpro1.nvars = 1;      \
+    gcpro2.next = &gcpro1; gcpro2.var = &(b); gcpro2.nvars = 1;                
\
+    gcpro3.next = &gcpro2; gcpro3.var = &(c); gcpro3.nvars = 1;                
\
+    gcpro4.next = &gcpro3; gcpro4.var = &(d); gcpro4.nvars = 1;                
\
+    gcpro5.next = &gcpro4; gcpro5.var = &(e); gcpro5.nvars = 1;                
\
+    gcprolist = &gcpro5; }
+
+#define GCPRO6(a, b, c, d, e, f)                                       \
+  { gcpro1.next = gcprolist; gcpro1.var = &(a); gcpro1.nvars = 1;      \
+    gcpro2.next = &gcpro1; gcpro2.var = &(b); gcpro2.nvars = 1;                
\
+    gcpro3.next = &gcpro2; gcpro3.var = &(c); gcpro3.nvars = 1;                
\
+    gcpro4.next = &gcpro3; gcpro4.var = &(d); gcpro4.nvars = 1;                
\
+    gcpro5.next = &gcpro4; gcpro5.var = &(e); gcpro5.nvars = 1;                
\
+    gcpro6.next = &gcpro5; gcpro6.var = &(f); gcpro6.nvars = 1;                
\
+    gcprolist = &gcpro6; }
+
+#define GCPRO7(a, b, c, d, e, f, g)                                    \
+  { gcpro1.next = gcprolist; gcpro1.var = &(a); gcpro1.nvars = 1;      \
+    gcpro2.next = &gcpro1; gcpro2.var = &(b); gcpro2.nvars = 1;                
\
+    gcpro3.next = &gcpro2; gcpro3.var = &(c); gcpro3.nvars = 1;                
\
+    gcpro4.next = &gcpro3; gcpro4.var = &(d); gcpro4.nvars = 1;                
\
+    gcpro5.next = &gcpro4; gcpro5.var = &(e); gcpro5.nvars = 1;                
\
+    gcpro6.next = &gcpro5; gcpro6.var = &(f); gcpro6.nvars = 1;                
\
+    gcpro7.next = &gcpro6; gcpro7.var = &(g); gcpro7.nvars = 1;                
\
+    gcprolist = &gcpro7; }
+
+#define UNGCPRO (gcprolist = gcpro1.next)
+
+#else /* !DEBUG_GCPRO */
+
+extern int gcpro_level;
+
+#define GCPRO1(a)                                                      \
+  { gcpro1.next = gcprolist; gcpro1.var = &(a); gcpro1.nvars = 1;      \
+    gcpro1.name = __FILE__; gcpro1.lineno = __LINE__; gcpro1.idx = 1;  \
+    gcpro1.level = gcpro_level++;                                      \
+    gcprolist = &gcpro1; }
+
+#define GCPRO2(a, b)                                                   \
+  { gcpro1.next = gcprolist; gcpro1.var = &(a); gcpro1.nvars = 1;      \
+    gcpro1.name = __FILE__; gcpro1.lineno = __LINE__; gcpro1.idx = 1;  \
+    gcpro1.level = gcpro_level;                                                
\
+    gcpro2.next = &gcpro1; gcpro2.var = &(b); gcpro2.nvars = 1;                
\
+    gcpro2.name = __FILE__; gcpro2.lineno = __LINE__; gcpro2.idx = 2;  \
+    gcpro2.level = gcpro_level++;                                      \
+    gcprolist = &gcpro2; }
+
+#define GCPRO3(a, b, c)                                                        
\
+  { gcpro1.next = gcprolist; gcpro1.var = &(a); gcpro1.nvars = 1;      \
+    gcpro1.name = __FILE__; gcpro1.lineno = __LINE__; gcpro1.idx = 1;  \
+    gcpro1.level = gcpro_level;                                                
\
+    gcpro2.next = &gcpro1; gcpro2.var = &(b); gcpro2.nvars = 1;                
\
+    gcpro2.name = __FILE__; gcpro2.lineno = __LINE__; gcpro2.idx = 2;  \
+    gcpro3.next = &gcpro2; gcpro3.var = &(c); gcpro3.nvars = 1;                
\
+    gcpro3.name = __FILE__; gcpro3.lineno = __LINE__; gcpro3.idx = 3;  \
+    gcpro3.level = gcpro_level++;                                      \
+    gcprolist = &gcpro3; }
+
+#define GCPRO4(a, b, c, d)                                             \
+  { gcpro1.next = gcprolist; gcpro1.var = &(a); gcpro1.nvars = 1;      \
+    gcpro1.name = __FILE__; gcpro1.lineno = __LINE__; gcpro1.idx = 1;  \
+    gcpro1.level = gcpro_level;                                                
\
+    gcpro2.next = &gcpro1; gcpro2.var = &(b); gcpro2.nvars = 1;                
\
+    gcpro2.name = __FILE__; gcpro2.lineno = __LINE__; gcpro2.idx = 2;  \
+    gcpro3.next = &gcpro2; gcpro3.var = &(c); gcpro3.nvars = 1;                
\
+    gcpro3.name = __FILE__; gcpro3.lineno = __LINE__; gcpro3.idx = 3;  \
+    gcpro4.next = &gcpro3; gcpro4.var = &(d); gcpro4.nvars = 1;                
\
+    gcpro4.name = __FILE__; gcpro4.lineno = __LINE__; gcpro4.idx = 4;  \
+    gcpro4.level = gcpro_level++;                                      \
+    gcprolist = &gcpro4; }
+
+#define GCPRO5(a, b, c, d, e)                                          \
+  { gcpro1.next = gcprolist; gcpro1.var = &(a); gcpro1.nvars = 1;      \
+    gcpro1.name = __FILE__; gcpro1.lineno = __LINE__; gcpro1.idx = 1;  \
+    gcpro1.level = gcpro_level;                                                
\
+    gcpro2.next = &gcpro1; gcpro2.var = &(b); gcpro2.nvars = 1;                
\
+    gcpro2.name = __FILE__; gcpro2.lineno = __LINE__; gcpro2.idx = 2;  \
+    gcpro3.next = &gcpro2; gcpro3.var = &(c); gcpro3.nvars = 1;                
\
+    gcpro3.name = __FILE__; gcpro3.lineno = __LINE__; gcpro3.idx = 3;  \
+    gcpro4.next = &gcpro3; gcpro4.var = &(d); gcpro4.nvars = 1;                
\
+    gcpro4.name = __FILE__; gcpro4.lineno = __LINE__; gcpro4.idx = 4;  \
+    gcpro5.next = &gcpro4; gcpro5.var = &(e); gcpro5.nvars = 1;                
\
+    gcpro5.name = __FILE__; gcpro5.lineno = __LINE__; gcpro5.idx = 5;  \
+    gcpro5.level = gcpro_level++;                                      \
+    gcprolist = &gcpro5; }
+
+#define GCPRO6(a, b, c, d, e, f)                                       \
+  { gcpro1.next = gcprolist; gcpro1.var = &(a); gcpro1.nvars = 1;      \
+    gcpro1.name = __FILE__; gcpro1.lineno = __LINE__; gcpro1.idx = 1;  \
+    gcpro1.level = gcpro_level;                                                
\
+    gcpro2.next = &gcpro1; gcpro2.var = &(b); gcpro2.nvars = 1;                
\
+    gcpro2.name = __FILE__; gcpro2.lineno = __LINE__; gcpro2.idx = 2;  \
+    gcpro3.next = &gcpro2; gcpro3.var = &(c); gcpro3.nvars = 1;                
\
+    gcpro3.name = __FILE__; gcpro3.lineno = __LINE__; gcpro3.idx = 3;  \
+    gcpro4.next = &gcpro3; gcpro4.var = &(d); gcpro4.nvars = 1;                
\
+    gcpro4.name = __FILE__; gcpro4.lineno = __LINE__; gcpro4.idx = 4;  \
+    gcpro5.next = &gcpro4; gcpro5.var = &(e); gcpro5.nvars = 1;                
\
+    gcpro5.name = __FILE__; gcpro5.lineno = __LINE__; gcpro5.idx = 5;  \
+    gcpro6.next = &gcpro5; gcpro6.var = &(f); gcpro6.nvars = 1;                
\
+    gcpro6.name = __FILE__; gcpro6.lineno = __LINE__; gcpro6.idx = 6;  \
+    gcpro6.level = gcpro_level++;                                      \
+    gcprolist = &gcpro6; }
+
+#define GCPRO7(a, b, c, d, e, f, g)                                    \
+  { gcpro1.next = gcprolist; gcpro1.var = &(a); gcpro1.nvars = 1;      \
+    gcpro1.name = __FILE__; gcpro1.lineno = __LINE__; gcpro1.idx = 1;  \
+    gcpro1.level = gcpro_level;                                                
\
+    gcpro2.next = &gcpro1; gcpro2.var = &(b); gcpro2.nvars = 1;                
\
+    gcpro2.name = __FILE__; gcpro2.lineno = __LINE__; gcpro2.idx = 2;  \
+    gcpro3.next = &gcpro2; gcpro3.var = &(c); gcpro3.nvars = 1;                
\
+    gcpro3.name = __FILE__; gcpro3.lineno = __LINE__; gcpro3.idx = 3;  \
+    gcpro4.next = &gcpro3; gcpro4.var = &(d); gcpro4.nvars = 1;                
\
+    gcpro4.name = __FILE__; gcpro4.lineno = __LINE__; gcpro4.idx = 4;  \
+    gcpro5.next = &gcpro4; gcpro5.var = &(e); gcpro5.nvars = 1;                
\
+    gcpro5.name = __FILE__; gcpro5.lineno = __LINE__; gcpro5.idx = 5;  \
+    gcpro6.next = &gcpro5; gcpro6.var = &(f); gcpro6.nvars = 1;                
\
+    gcpro6.name = __FILE__; gcpro6.lineno = __LINE__; gcpro6.idx = 6;  \
+    gcpro7.next = &gcpro6; gcpro7.var = &(g); gcpro7.nvars = 1;                
\
+    gcpro7.name = __FILE__; gcpro7.lineno = __LINE__; gcpro7.idx = 7;  \
+    gcpro7.level = gcpro_level++;                                      \
+    gcprolist = &gcpro7; }
+
+#define UNGCPRO                                        \
+  (--gcpro_level != gcpro1.level               \
+   ? emacs_abort ()                            \
+   : (void) (gcprolist = gcpro1.next))
+
+#endif /* DEBUG_GCPRO */
+#endif /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */
+
+
+/* Evaluate expr, UNGCPRO, and then return the value of expr.  */
+#define RETURN_UNGCPRO(expr)                   \
+  do                                           \
+    {                                          \
+      Lisp_Object ret_ungc_val;                        \
+      ret_ungc_val = (expr);                   \
+      UNGCPRO;                                 \
+      return ret_ungc_val;                     \
+    }                                          \
+  while (false)
+
+/* Call staticpro (&var) to protect static variable `var'.  */
+
+void staticpro (Lisp_Object *);
+
+/* Forward declarations for prototypes.  */
+struct window;
+struct frame;
+
+/* Copy COUNT Lisp_Objects from ARGS to contents of V starting from OFFSET.  */
+
+INLINE void
+vcopy (Lisp_Object v, ptrdiff_t offset, Lisp_Object *args, ptrdiff_t count)
+{
+  eassert (0 <= offset && 0 <= count && offset + count <= ASIZE (v));
+  memcpy (XVECTOR (v)->contents + offset, args, count * sizeof *args);
+}
+
+/* Functions to modify hash tables.  */
+
+INLINE void
+set_hash_key_slot (struct Lisp_Hash_Table *h, ptrdiff_t idx, Lisp_Object val)
+{
+  gc_aset (h->key_and_value, 2 * idx, val);
+}
+
+INLINE void
+set_hash_value_slot (struct Lisp_Hash_Table *h, ptrdiff_t idx, Lisp_Object val)
+{
+  gc_aset (h->key_and_value, 2 * idx + 1, val);
+}
+
+/* Use these functions to set Lisp_Object
+   or pointer slots of struct Lisp_Symbol.  */
+
+INLINE void
+set_symbol_function (Lisp_Object sym, Lisp_Object function)
+{
+  XSYMBOL (sym)->function = function;
+}
+
+INLINE void
+set_symbol_plist (Lisp_Object sym, Lisp_Object plist)
+{
+  XSYMBOL (sym)->plist = plist;
+}
+
+INLINE void
+set_symbol_next (Lisp_Object sym, struct Lisp_Symbol *next)
+{
+  XSYMBOL (sym)->next = next;
+}
+
+/* Buffer-local (also frame-local) variable access functions.  */
+
+INLINE int
+blv_found (struct Lisp_Buffer_Local_Value *blv)
+{
+  eassert (blv->found == !EQ (blv->defcell, blv->valcell));
+  return blv->found;
+}
+
+/* Set overlay's property list.  */
+
+INLINE void
+set_overlay_plist (Lisp_Object overlay, Lisp_Object plist)
+{
+  XOVERLAY (overlay)->plist = plist;
+}
+
+/* Get text properties of S.  */
+
+INLINE INTERVAL
+string_intervals (Lisp_Object s)
+{
+  return XSTRING (s)->intervals;
+}
+
+/* Set text properties of S to I.  */
+
+INLINE void
+set_string_intervals (Lisp_Object s, INTERVAL i)
+{
+  XSTRING (s)->intervals = i;
+}
+
+/* Set a Lisp slot in TABLE to VAL.  Most code should use this instead
+   of setting slots directly.  */
+
+INLINE void
+set_char_table_defalt (Lisp_Object table, Lisp_Object val)
+{
+  XCHAR_TABLE (table)->defalt = val;
+}
+INLINE void
+set_char_table_purpose (Lisp_Object table, Lisp_Object val)
+{
+  XCHAR_TABLE (table)->purpose = val;
+}
+
+/* Set different slots in (sub)character tables.  */
+
+INLINE void
+set_char_table_extras (Lisp_Object table, ptrdiff_t idx, Lisp_Object val)
+{
+  eassert (0 <= idx && idx < CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (table)));
+  XCHAR_TABLE (table)->extras[idx] = val;
+}
+
+INLINE void
+set_char_table_contents (Lisp_Object table, ptrdiff_t idx, Lisp_Object val)
+{
+  eassert (0 <= idx && idx < (1 << CHARTAB_SIZE_BITS_0));
+  XCHAR_TABLE (table)->contents[idx] = val;
+}
+
+INLINE void
+set_sub_char_table_contents (Lisp_Object table, ptrdiff_t idx, Lisp_Object val)
+{
+  XSUB_CHAR_TABLE (table)->contents[idx] = val;
+}
+
+/* Defined in data.c.  */
+extern Lisp_Object indirect_function (Lisp_Object);
+extern Lisp_Object find_symbol_value (Lisp_Object);
+enum Arith_Comparison {
+  ARITH_EQUAL,
+  ARITH_NOTEQUAL,
+  ARITH_LESS,
+  ARITH_GRTR,
+  ARITH_LESS_OR_EQUAL,
+  ARITH_GRTR_OR_EQUAL
+};
+extern Lisp_Object arithcompare (Lisp_Object num1, Lisp_Object num2,
+                                 enum Arith_Comparison comparison);
+
+/* Convert the integer I to an Emacs representation, either the integer
+   itself, or a cons of two or three integers, or if all else fails a float.
+   I should not have side effects.  */
+#define INTEGER_TO_CONS(i)                                         \
+  (! FIXNUM_OVERFLOW_P (i)                                         \
+   ? make_number (i)                                               \
+   : ! ((FIXNUM_OVERFLOW_P (INTMAX_MIN >> 16)                      \
+        || FIXNUM_OVERFLOW_P (UINTMAX_MAX >> 16))                  \
+       && FIXNUM_OVERFLOW_P ((i) >> 16))                           \
+   ? Fcons (make_number ((i) >> 16), make_number ((i) & 0xffff))    \
+   : ! ((FIXNUM_OVERFLOW_P (INTMAX_MIN >> 16 >> 24)                \
+        || FIXNUM_OVERFLOW_P (UINTMAX_MAX >> 16 >> 24))            \
+       && FIXNUM_OVERFLOW_P ((i) >> 16 >> 24))                     \
+   ? Fcons (make_number ((i) >> 16 >> 24),                         \
+           Fcons (make_number ((i) >> 16 & 0xffffff),              \
+                  make_number ((i) & 0xffff)))                     \
+   : make_float (i))
+
+/* Convert the Emacs representation CONS back to an integer of type
+   TYPE, storing the result the variable VAR.  Signal an error if CONS
+   is not a valid representation or is out of range for TYPE.  */
+#define CONS_TO_INTEGER(cons, type, var)                               \
+ (TYPE_SIGNED (type)                                                   \
+  ? ((var) = cons_to_signed (cons, TYPE_MINIMUM (type), TYPE_MAXIMUM (type))) \
+  : ((var) = cons_to_unsigned (cons, TYPE_MAXIMUM (type))))
+extern intmax_t cons_to_signed (Lisp_Object, intmax_t, intmax_t);
+extern uintmax_t cons_to_unsigned (Lisp_Object, uintmax_t);
+
+extern struct Lisp_Symbol *indirect_variable (struct Lisp_Symbol *);
+extern _Noreturn void args_out_of_range (Lisp_Object, Lisp_Object);
+extern _Noreturn void args_out_of_range_3 (Lisp_Object, Lisp_Object,
+                                          Lisp_Object);
+extern Lisp_Object do_symval_forwarding (union Lisp_Fwd *);
+extern void set_internal (Lisp_Object, Lisp_Object, Lisp_Object, bool);
+extern void syms_of_data (void);
+extern void swap_in_global_binding (struct Lisp_Symbol *);
+
+/* Defined in cmds.c */
+extern void syms_of_cmds (void);
+extern void keys_of_cmds (void);
+
+/* Defined in coding.c.  */
+extern Lisp_Object detect_coding_system (const unsigned char *, ptrdiff_t,
+                                         ptrdiff_t, bool, bool, Lisp_Object);
+extern void init_coding (void);
+extern void init_coding_once (void);
+extern void syms_of_coding (void);
+
+/* Defined in character.c.  */
+extern ptrdiff_t chars_in_text (const unsigned char *, ptrdiff_t);
+extern ptrdiff_t multibyte_chars_in_text (const unsigned char *, ptrdiff_t);
+extern void syms_of_character (void);
+
+/* Defined in charset.c.  */
+extern void init_charset (void);
+extern void init_charset_once (void);
+extern void syms_of_charset (void);
+/* Structure forward declarations.  */
+struct charset;
+
+/* Defined in syntax.c.  */
+extern void init_syntax_once (void);
+extern void syms_of_syntax (void);
+
+/* Defined in fns.c.  */
+enum { NEXT_ALMOST_PRIME_LIMIT = 11 };
+extern EMACS_INT next_almost_prime (EMACS_INT) ATTRIBUTE_CONST;
+extern Lisp_Object larger_vector (Lisp_Object, ptrdiff_t, ptrdiff_t);
+extern void sweep_weak_hash_tables (void);
+EMACS_UINT hash_string (char const *, ptrdiff_t);
+EMACS_UINT sxhash (Lisp_Object, int);
+Lisp_Object make_hash_table (struct hash_table_test, Lisp_Object, Lisp_Object,
+                             Lisp_Object, Lisp_Object);
+ptrdiff_t hash_lookup (struct Lisp_Hash_Table *, Lisp_Object, EMACS_UINT *);
+ptrdiff_t hash_put (struct Lisp_Hash_Table *, Lisp_Object, Lisp_Object,
+                   EMACS_UINT);
+extern struct hash_table_test hashtest_eql, hashtest_equal;
+extern void validate_subarray (Lisp_Object, Lisp_Object, Lisp_Object,
+                              ptrdiff_t, ptrdiff_t *, ptrdiff_t *);
+extern Lisp_Object substring_both (Lisp_Object, ptrdiff_t, ptrdiff_t,
+                                  ptrdiff_t, ptrdiff_t);
+extern Lisp_Object merge (Lisp_Object, Lisp_Object, Lisp_Object);
+extern Lisp_Object do_yes_or_no_p (Lisp_Object);
+extern Lisp_Object concat2 (Lisp_Object, Lisp_Object);
+extern Lisp_Object concat3 (Lisp_Object, Lisp_Object, Lisp_Object);
+extern Lisp_Object nconc2 (Lisp_Object, Lisp_Object);
+extern Lisp_Object assq_no_quit (Lisp_Object, Lisp_Object);
+extern Lisp_Object assoc_no_quit (Lisp_Object, Lisp_Object);
+extern void clear_string_char_byte_cache (void);
+extern ptrdiff_t string_char_to_byte (Lisp_Object, ptrdiff_t);
+extern ptrdiff_t string_byte_to_char (Lisp_Object, ptrdiff_t);
+extern Lisp_Object string_to_multibyte (Lisp_Object);
+extern Lisp_Object string_make_unibyte (Lisp_Object);
+extern void syms_of_fns (void);
+
+/* Defined in floatfns.c.  */
+extern void syms_of_floatfns (void);
+extern Lisp_Object fmod_float (Lisp_Object x, Lisp_Object y);
+
+/* Defined in fringe.c.  */
+extern void syms_of_fringe (void);
+extern void init_fringe (void);
+#ifdef HAVE_WINDOW_SYSTEM
+extern void mark_fringe_data (void);
+extern void init_fringe_once (void);
+#endif /* HAVE_WINDOW_SYSTEM */
+
+/* Defined in image.c.  */
+extern int x_bitmap_mask (struct frame *, ptrdiff_t);
+extern void reset_image_types (void);
+extern void syms_of_image (void);
+
+/* Defined in insdel.c.  */
+extern void move_gap_both (ptrdiff_t, ptrdiff_t);
+extern _Noreturn void buffer_overflow (void);
+extern void make_gap (ptrdiff_t);
+extern void make_gap_1 (struct buffer *, ptrdiff_t);
+extern ptrdiff_t copy_text (const unsigned char *, unsigned char *,
+                           ptrdiff_t, bool, bool);
+extern int count_combining_before (const unsigned char *,
+                                  ptrdiff_t, ptrdiff_t, ptrdiff_t);
+extern int count_combining_after (const unsigned char *,
+                                 ptrdiff_t, ptrdiff_t, ptrdiff_t);
+extern void insert (const char *, ptrdiff_t);
+extern void insert_and_inherit (const char *, ptrdiff_t);
+extern void insert_1_both (const char *, ptrdiff_t, ptrdiff_t,
+                          bool, bool, bool);
+extern void insert_from_gap (ptrdiff_t, ptrdiff_t, bool text_at_gap_tail);
+extern void insert_from_string (Lisp_Object, ptrdiff_t, ptrdiff_t,
+                               ptrdiff_t, ptrdiff_t, bool);
+extern void insert_from_buffer (struct buffer *, ptrdiff_t, ptrdiff_t, bool);
+extern void insert_char (int);
+extern void insert_string (const char *);
+extern void insert_before_markers (const char *, ptrdiff_t);
+extern void insert_before_markers_and_inherit (const char *, ptrdiff_t);
+extern void insert_from_string_before_markers (Lisp_Object, ptrdiff_t,
+                                              ptrdiff_t, ptrdiff_t,
+                                              ptrdiff_t, bool);
+extern void del_range (ptrdiff_t, ptrdiff_t);
+extern Lisp_Object del_range_1 (ptrdiff_t, ptrdiff_t, bool, bool);
+extern void del_range_byte (ptrdiff_t, ptrdiff_t, bool);
+extern void del_range_both (ptrdiff_t, ptrdiff_t, ptrdiff_t, ptrdiff_t, bool);
+extern Lisp_Object del_range_2 (ptrdiff_t, ptrdiff_t,
+                               ptrdiff_t, ptrdiff_t, bool);
+extern void modify_text (ptrdiff_t, ptrdiff_t);
+extern void prepare_to_modify_buffer (ptrdiff_t, ptrdiff_t, ptrdiff_t *);
+extern void prepare_to_modify_buffer_1 (ptrdiff_t, ptrdiff_t, ptrdiff_t *);
+extern void invalidate_buffer_caches (struct buffer *, ptrdiff_t, ptrdiff_t);
+extern void signal_after_change (ptrdiff_t, ptrdiff_t, ptrdiff_t);
+extern void adjust_after_insert (ptrdiff_t, ptrdiff_t, ptrdiff_t,
+                                ptrdiff_t, ptrdiff_t);
+extern void adjust_markers_for_delete (ptrdiff_t, ptrdiff_t,
+                                      ptrdiff_t, ptrdiff_t);
+extern void replace_range (ptrdiff_t, ptrdiff_t, Lisp_Object, bool, bool, 
bool);
+extern void replace_range_2 (ptrdiff_t, ptrdiff_t, ptrdiff_t, ptrdiff_t,
+                            const char *, ptrdiff_t, ptrdiff_t, bool);
+extern void syms_of_insdel (void);
+
+/* Defined in dispnew.c.  */
+#if (defined PROFILING \
+     && (defined __FreeBSD__ || defined GNU_LINUX || defined __MINGW32__))
+_Noreturn void __executable_start (void);
+#endif
+extern Lisp_Object Vwindow_system;
+extern Lisp_Object sit_for (Lisp_Object, bool, int);
+
+/* Defined in xdisp.c.  */
+extern bool noninteractive_need_newline;
+extern Lisp_Object echo_area_buffer[2];
+extern void add_to_log (const char *, Lisp_Object, Lisp_Object);
+extern void check_message_stack (void);
+extern void setup_echo_area_for_printing (bool);
+extern bool push_message (void);
+extern void pop_message_unwind (void);
+extern Lisp_Object restore_message_unwind (Lisp_Object);
+extern void restore_message (void);
+extern Lisp_Object current_message (void);
+extern void clear_message (bool, bool);
+extern void message (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2);
+extern void message1 (const char *);
+extern void message1_nolog (const char *);
+extern void message3 (Lisp_Object);
+extern void message3_nolog (Lisp_Object);
+extern void message_dolog (const char *, ptrdiff_t, bool, bool);
+extern void message_with_string (const char *, Lisp_Object, bool);
+extern void message_log_maybe_newline (void);
+extern void update_echo_area (void);
+extern void truncate_echo_area (ptrdiff_t);
+extern void redisplay (void);
+
+void set_frame_cursor_types (struct frame *, Lisp_Object);
+extern void syms_of_xdisp (void);
+extern void init_xdisp (void);
+extern Lisp_Object safe_eval (Lisp_Object);
+extern bool pos_visible_p (struct window *, ptrdiff_t, int *,
+                          int *, int *, int *, int *, int *);
+
+/* Defined in xsettings.c.  */
+extern void syms_of_xsettings (void);
+
+/* Defined in vm-limit.c.  */
+extern void memory_warnings (void *, void (*warnfun) (const char *));
+
+/* Defined in character.c.  */
+extern void parse_str_as_multibyte (const unsigned char *, ptrdiff_t,
+                                   ptrdiff_t *, ptrdiff_t *);
+
+/* Defined in alloc.c.  */
+extern void check_pure_size (void);
+extern void free_misc (Lisp_Object);
+extern void allocate_string_data (struct Lisp_String *, EMACS_INT, EMACS_INT);
+extern void malloc_warning (const char *);
+extern _Noreturn void memory_full (size_t);
+extern _Noreturn void buffer_memory_full (ptrdiff_t);
+extern bool survives_gc_p (Lisp_Object);
+extern void mark_object (Lisp_Object);
+#if defined REL_ALLOC && !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC
+extern void refill_memory_reserve (void);
+#endif
+extern const char *pending_malloc_warning;
+extern Lisp_Object zero_vector;
+extern Lisp_Object *stack_base;
+extern EMACS_INT consing_since_gc;
+extern EMACS_INT gc_relative_threshold;
+extern EMACS_INT memory_full_cons_threshold;
+extern Lisp_Object list1 (Lisp_Object);
+extern Lisp_Object list2 (Lisp_Object, Lisp_Object);
+extern Lisp_Object list3 (Lisp_Object, Lisp_Object, Lisp_Object);
+extern Lisp_Object list4 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
+extern Lisp_Object list5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
+                         Lisp_Object);
+enum constype {CONSTYPE_HEAP, CONSTYPE_PURE};
+extern Lisp_Object listn (enum constype, ptrdiff_t, Lisp_Object, ...);
+
+/* Build a frequently used 2/3/4-integer lists.  */
+
+INLINE Lisp_Object
+list2i (EMACS_INT x, EMACS_INT y)
+{
+  return list2 (make_number (x), make_number (y));
+}
+
+INLINE Lisp_Object
+list3i (EMACS_INT x, EMACS_INT y, EMACS_INT w)
+{
+  return list3 (make_number (x), make_number (y), make_number (w));
+}
+
+INLINE Lisp_Object
+list4i (EMACS_INT x, EMACS_INT y, EMACS_INT w, EMACS_INT h)
+{
+  return list4 (make_number (x), make_number (y),
+               make_number (w), make_number (h));
+}
+
+extern Lisp_Object make_uninit_bool_vector (EMACS_INT);
+extern Lisp_Object bool_vector_fill (Lisp_Object, Lisp_Object);
+extern _Noreturn void string_overflow (void);
+extern Lisp_Object make_string (const char *, ptrdiff_t);
+extern Lisp_Object make_formatted_string (char *, const char *, ...)
+  ATTRIBUTE_FORMAT_PRINTF (2, 3);
+extern Lisp_Object make_unibyte_string (const char *, ptrdiff_t);
+
+/* Make unibyte string from C string when the length isn't known.  */
+
+INLINE Lisp_Object
+build_unibyte_string (const char *str)
+{
+  return make_unibyte_string (str, strlen (str));
+}
+
+extern Lisp_Object make_multibyte_string (const char *, ptrdiff_t, ptrdiff_t);
+extern Lisp_Object make_event_array (ptrdiff_t, Lisp_Object *);
+extern Lisp_Object make_uninit_string (EMACS_INT);
+extern Lisp_Object make_uninit_multibyte_string (EMACS_INT, EMACS_INT);
+extern Lisp_Object make_string_from_bytes (const char *, ptrdiff_t, ptrdiff_t);
+extern Lisp_Object make_specified_string (const char *,
+                                         ptrdiff_t, ptrdiff_t, bool);
+extern Lisp_Object make_pure_string (const char *, ptrdiff_t, ptrdiff_t, bool);
+extern Lisp_Object make_pure_c_string (const char *, ptrdiff_t);
+
+/* Make a string allocated in pure space, use STR as string data.  */
+
+INLINE Lisp_Object
+build_pure_c_string (const char *str)
+{
+  return make_pure_c_string (str, strlen (str));
+}
+
+/* Make a string from the data at STR, treating it as multibyte if the
+   data warrants.  */
+
+INLINE Lisp_Object
+build_string (const char *str)
+{
+  return make_string (str, strlen (str));
+}
+
+extern Lisp_Object pure_cons (Lisp_Object, Lisp_Object);
+extern void make_byte_code (struct Lisp_Vector *);
+extern struct Lisp_Vector *allocate_vector (EMACS_INT);
+
+/* Make an uninitialized vector for SIZE objects.  NOTE: you must
+   be sure that GC cannot happen until the vector is completely
+   initialized.  E.g. the following code is likely to crash:
+
+   v = make_uninit_vector (3);
+   ASET (v, 0, obj0);
+   ASET (v, 1, Ffunction_can_gc ());
+   ASET (v, 2, obj1);  */
+
+INLINE Lisp_Object
+make_uninit_vector (ptrdiff_t size)
+{
+  Lisp_Object v;
+  struct Lisp_Vector *p;
+
+  p = allocate_vector (size);
+  XSETVECTOR (v, p);
+  return v;
+}
+
+/* Like above, but special for sub char-tables.  */
+
+INLINE Lisp_Object
+make_uninit_sub_char_table (int depth, int min_char)
+{
+  int slots = SUB_CHAR_TABLE_OFFSET + chartab_size[depth];
+  Lisp_Object v = make_uninit_vector (slots);
+
+  XSETPVECTYPE (XVECTOR (v), PVEC_SUB_CHAR_TABLE);
+  XSUB_CHAR_TABLE (v)->depth = depth;
+  XSUB_CHAR_TABLE (v)->min_char = min_char;
+  return v;
+}
+
+extern struct Lisp_Vector *allocate_pseudovector (int, int, int,
+                                                 enum pvec_type);
+
+/* Allocate partially initialized pseudovector where all Lisp_Object
+   slots are set to Qnil but the rest (if any) is left uninitialized.  */
+
+#define ALLOCATE_PSEUDOVECTOR(type, field, tag)                               \
+  ((type *) allocate_pseudovector (VECSIZE (type),                    \
+                                  PSEUDOVECSIZE (type, field),        \
+                                  PSEUDOVECSIZE (type, field), tag))
+
+/* Allocate fully initialized pseudovector where all Lisp_Object
+   slots are set to Qnil and the rest (if any) is zeroed.  */
+
+#define ALLOCATE_ZEROED_PSEUDOVECTOR(type, field, tag)                \
+  ((type *) allocate_pseudovector (VECSIZE (type),                    \
+                                  PSEUDOVECSIZE (type, field),        \
+                                  VECSIZE (type), tag))
+
+extern bool gc_in_progress;
+extern bool abort_on_gc;
+extern Lisp_Object make_float (double);
+extern void display_malloc_warning (void);
+extern ptrdiff_t inhibit_garbage_collection (void);
+extern Lisp_Object make_save_int_int_int (ptrdiff_t, ptrdiff_t, ptrdiff_t);
+extern Lisp_Object make_save_obj_obj_obj_obj (Lisp_Object, Lisp_Object,
+                                             Lisp_Object, Lisp_Object);
+extern Lisp_Object make_save_ptr (void *);
+extern Lisp_Object make_save_ptr_int (void *, ptrdiff_t);
+extern Lisp_Object make_save_ptr_ptr (void *, void *);
+extern Lisp_Object make_save_funcptr_ptr_obj (void (*) (void), void *,
+                                             Lisp_Object);
+extern Lisp_Object make_save_memory (Lisp_Object *, ptrdiff_t);
+extern void free_save_value (Lisp_Object);
+extern Lisp_Object build_overlay (Lisp_Object, Lisp_Object, Lisp_Object);
+extern void free_marker (Lisp_Object);
+extern void free_cons (struct Lisp_Cons *);
+extern void init_alloc_once (void);
+extern void init_alloc (void);
+extern void syms_of_alloc (void);
+extern struct buffer * allocate_buffer (void);
+extern int valid_lisp_object_p (Lisp_Object);
+extern int relocatable_string_data_p (const char *);
+#ifdef GC_CHECK_CONS_LIST
+extern void check_cons_list (void);
+#else
+INLINE void (check_cons_list) (void) { lisp_h_check_cons_list (); }
+#endif
+
+#ifdef REL_ALLOC
+/* Defined in ralloc.c.  */
+extern void *r_alloc (void **, size_t) ATTRIBUTE_ALLOC_SIZE ((2));
+extern void r_alloc_free (void **);
+extern void *r_re_alloc (void **, size_t) ATTRIBUTE_ALLOC_SIZE ((2));
+extern void r_alloc_reset_variable (void **, void **);
+extern void r_alloc_inhibit_buffer_relocation (int);
+#endif
+
+/* Defined in chartab.c.  */
+extern Lisp_Object copy_char_table (Lisp_Object);
+extern Lisp_Object char_table_ref_and_range (Lisp_Object, int,
+                                             int *, int *);
+extern void char_table_set_range (Lisp_Object, int, int, Lisp_Object);
+extern void map_char_table (void (*) (Lisp_Object, Lisp_Object,
+                            Lisp_Object),
+                            Lisp_Object, Lisp_Object, Lisp_Object);
+extern void map_char_table_for_charset (void (*c_function) (Lisp_Object, 
Lisp_Object),
+                                       Lisp_Object, Lisp_Object,
+                                       Lisp_Object, struct charset *,
+                                       unsigned, unsigned);
+extern Lisp_Object uniprop_table (Lisp_Object);
+extern void syms_of_chartab (void);
+
+/* Defined in print.c.  */
+extern Lisp_Object Vprin1_to_string_buffer;
+extern void debug_print (Lisp_Object) EXTERNALLY_VISIBLE;
+extern void temp_output_buffer_setup (const char *);
+extern int print_level;
+extern void write_string (const char *);
+extern void print_error_message (Lisp_Object, Lisp_Object, const char *,
+                                Lisp_Object);
+extern Lisp_Object internal_with_output_to_temp_buffer
+        (const char *, Lisp_Object (*) (Lisp_Object), Lisp_Object);
+#define FLOAT_TO_STRING_BUFSIZE 350
+extern int float_to_string (char *, double);
+extern void init_print_once (void);
+extern void syms_of_print (void);
+
+/* Defined in doprnt.c.  */
+extern ptrdiff_t doprnt (char *, ptrdiff_t, const char *, const char *,
+                        va_list);
+extern ptrdiff_t esprintf (char *, char const *, ...)
+  ATTRIBUTE_FORMAT_PRINTF (2, 3);
+extern ptrdiff_t exprintf (char **, ptrdiff_t *, char const *, ptrdiff_t,
+                          char const *, ...)
+  ATTRIBUTE_FORMAT_PRINTF (5, 6);
+extern ptrdiff_t evxprintf (char **, ptrdiff_t *, char const *, ptrdiff_t,
+                           char const *, va_list)
+  ATTRIBUTE_FORMAT_PRINTF (5, 0);
+
+/* Defined in lread.c.  */
+extern Lisp_Object check_obarray (Lisp_Object);
+extern Lisp_Object intern_1 (const char *, ptrdiff_t);
+extern Lisp_Object intern_c_string_1 (const char *, ptrdiff_t);
+extern Lisp_Object intern_driver (Lisp_Object, Lisp_Object, Lisp_Object);
+extern void init_symbol (Lisp_Object, Lisp_Object);
+extern Lisp_Object oblookup (Lisp_Object, const char *, ptrdiff_t, ptrdiff_t);
+INLINE void
+LOADHIST_ATTACH (Lisp_Object x)
+{
+  if (initialized)
+    Vcurrent_load_list = Fcons (x, Vcurrent_load_list);
+}
+extern int openp (Lisp_Object, Lisp_Object, Lisp_Object,
+                  Lisp_Object *, Lisp_Object, bool);
+extern Lisp_Object string_to_number (char const *, int, bool);
+extern void map_obarray (Lisp_Object, void (*) (Lisp_Object, Lisp_Object),
+                         Lisp_Object);
+extern void dir_warning (const char *, Lisp_Object);
+extern void init_obarray (void);
+extern void init_lread (void);
+extern void syms_of_lread (void);
+
+INLINE Lisp_Object
+intern (const char *str)
+{
+  return intern_1 (str, strlen (str));
+}
+
+INLINE Lisp_Object
+intern_c_string (const char *str)
+{
+  return intern_c_string_1 (str, strlen (str));
+}
+
+/* Defined in eval.c.  */
+extern EMACS_INT lisp_eval_depth;
+extern Lisp_Object Vautoload_queue;
+extern Lisp_Object Vrun_hooks;
+extern Lisp_Object Vsignaling_function;
+extern Lisp_Object inhibit_lisp_code;
+extern struct handler *handlerlist;
+
+/* To run a normal hook, use the appropriate function from the list below.
+   The calling convention:
+
+   if (!NILP (Vrun_hooks))
+     call1 (Vrun_hooks, Qmy_funny_hook);
+
+   should no longer be used.  */
+extern void run_hook (Lisp_Object);
+extern void run_hook_with_args_2 (Lisp_Object, Lisp_Object, Lisp_Object);
+extern Lisp_Object run_hook_with_args (ptrdiff_t nargs, Lisp_Object *args,
+                                      Lisp_Object (*funcall)
+                                      (ptrdiff_t nargs, Lisp_Object *args));
+extern _Noreturn void xsignal (Lisp_Object, Lisp_Object);
+extern _Noreturn void xsignal0 (Lisp_Object);
+extern _Noreturn void xsignal1 (Lisp_Object, Lisp_Object);
+extern _Noreturn void xsignal2 (Lisp_Object, Lisp_Object, Lisp_Object);
+extern _Noreturn void xsignal3 (Lisp_Object, Lisp_Object, Lisp_Object,
+                               Lisp_Object);
+extern _Noreturn void signal_error (const char *, Lisp_Object);
+extern Lisp_Object eval_sub (Lisp_Object form);
+extern Lisp_Object apply1 (Lisp_Object, Lisp_Object);
+extern Lisp_Object call0 (Lisp_Object);
+extern Lisp_Object call1 (Lisp_Object, Lisp_Object);
+extern Lisp_Object call2 (Lisp_Object, Lisp_Object, Lisp_Object);
+extern Lisp_Object call3 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
+extern Lisp_Object call4 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, 
Lisp_Object);
+extern Lisp_Object call5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, 
Lisp_Object, Lisp_Object);
+extern Lisp_Object call6 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, 
Lisp_Object, Lisp_Object, Lisp_Object);
+extern Lisp_Object call7 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, 
Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
+extern Lisp_Object internal_catch (Lisp_Object, Lisp_Object (*) (Lisp_Object), 
Lisp_Object);
+extern Lisp_Object internal_lisp_condition_case (Lisp_Object, Lisp_Object, 
Lisp_Object);
+extern Lisp_Object internal_condition_case (Lisp_Object (*) (void), 
Lisp_Object, Lisp_Object (*) (Lisp_Object));
+extern Lisp_Object internal_condition_case_1 (Lisp_Object (*) (Lisp_Object), 
Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object));
+extern Lisp_Object internal_condition_case_2 (Lisp_Object (*) (Lisp_Object, 
Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object (*) 
(Lisp_Object));
+extern Lisp_Object internal_condition_case_n
+    (Lisp_Object (*) (ptrdiff_t, Lisp_Object *), ptrdiff_t, Lisp_Object *,
+     Lisp_Object, Lisp_Object (*) (Lisp_Object, ptrdiff_t, Lisp_Object *));
+extern void specbind (Lisp_Object, Lisp_Object);
+extern void record_unwind_protect (void (*) (Lisp_Object), Lisp_Object);
+extern void record_unwind_protect_ptr (void (*) (void *), void *);
+extern void record_unwind_protect_int (void (*) (int), int);
+extern void record_unwind_protect_void (void (*) (void));
+extern void record_unwind_protect_nothing (void);
+extern void clear_unwind_protect (ptrdiff_t);
+extern void set_unwind_protect (ptrdiff_t, void (*) (Lisp_Object), 
Lisp_Object);
+extern void set_unwind_protect_ptr (ptrdiff_t, void (*) (void *), void *);
+extern Lisp_Object unbind_to (ptrdiff_t, Lisp_Object);
+extern _Noreturn void error (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2);
+extern _Noreturn void verror (const char *, va_list)
+  ATTRIBUTE_FORMAT_PRINTF (1, 0);
+extern void un_autoload (Lisp_Object);
+extern Lisp_Object call_debugger (Lisp_Object arg);
+extern void init_eval_once (void);
+extern Lisp_Object safe_call (ptrdiff_t, Lisp_Object, ...);
+extern Lisp_Object safe_call1 (Lisp_Object, Lisp_Object);
+extern Lisp_Object safe_call2 (Lisp_Object, Lisp_Object, Lisp_Object);
+extern void init_eval (void);
+extern void syms_of_eval (void);
+extern void unwind_body (Lisp_Object);
+extern ptrdiff_t record_in_backtrace (Lisp_Object, Lisp_Object *, ptrdiff_t);
+extern void mark_specpdl (void);
+extern void get_backtrace (Lisp_Object array);
+Lisp_Object backtrace_top_function (void);
+extern bool let_shadows_buffer_binding_p (struct Lisp_Symbol *symbol);
+extern bool let_shadows_global_binding_p (Lisp_Object symbol);
+
+
+/* Defined in editfns.c.  */
+extern void insert1 (Lisp_Object);
+extern Lisp_Object format2 (const char *, Lisp_Object, Lisp_Object);
+extern Lisp_Object save_excursion_save (void);
+extern Lisp_Object save_restriction_save (void);
+extern void save_excursion_restore (Lisp_Object);
+extern void save_restriction_restore (Lisp_Object);
+extern _Noreturn void time_overflow (void);
+extern Lisp_Object make_buffer_string (ptrdiff_t, ptrdiff_t, bool);
+extern Lisp_Object make_buffer_string_both (ptrdiff_t, ptrdiff_t, ptrdiff_t,
+                                           ptrdiff_t, bool);
+extern void init_editfns (void);
+extern void syms_of_editfns (void);
+
+/* Defined in buffer.c.  */
+extern bool mouse_face_overlay_overlaps (Lisp_Object);
+extern _Noreturn void nsberror (Lisp_Object);
+extern void adjust_overlays_for_insert (ptrdiff_t, ptrdiff_t);
+extern void adjust_overlays_for_delete (ptrdiff_t, ptrdiff_t);
+extern void fix_start_end_in_overlays (ptrdiff_t, ptrdiff_t);
+extern void report_overlay_modification (Lisp_Object, Lisp_Object, bool,
+                                         Lisp_Object, Lisp_Object, 
Lisp_Object);
+extern bool overlay_touches_p (ptrdiff_t);
+extern Lisp_Object other_buffer_safely (Lisp_Object);
+extern Lisp_Object get_truename_buffer (Lisp_Object);
+extern void init_buffer_once (void);
+extern void init_buffer (int);
+extern void syms_of_buffer (void);
+extern void keys_of_buffer (void);
+
+/* Defined in marker.c.  */
+
+extern ptrdiff_t marker_position (Lisp_Object);
+extern ptrdiff_t marker_byte_position (Lisp_Object);
+extern void clear_charpos_cache (struct buffer *);
+extern ptrdiff_t buf_charpos_to_bytepos (struct buffer *, ptrdiff_t);
+extern ptrdiff_t buf_bytepos_to_charpos (struct buffer *, ptrdiff_t);
+extern void unchain_marker (struct Lisp_Marker *marker);
+extern Lisp_Object set_marker_restricted (Lisp_Object, Lisp_Object, 
Lisp_Object);
+extern Lisp_Object set_marker_both (Lisp_Object, Lisp_Object, ptrdiff_t, 
ptrdiff_t);
+extern Lisp_Object set_marker_restricted_both (Lisp_Object, Lisp_Object,
+                                               ptrdiff_t, ptrdiff_t);
+extern Lisp_Object build_marker (struct buffer *, ptrdiff_t, ptrdiff_t);
+extern void syms_of_marker (void);
+
+/* Defined in fileio.c.  */
+
+extern Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object);
+extern Lisp_Object write_region (Lisp_Object, Lisp_Object, Lisp_Object,
+                                Lisp_Object, Lisp_Object, Lisp_Object,
+                                Lisp_Object, int);
+extern void close_file_unwind (int);
+extern void fclose_unwind (void *);
+extern void restore_point_unwind (Lisp_Object);
+extern _Noreturn void report_file_errno (const char *, Lisp_Object, int);
+extern _Noreturn void report_file_error (const char *, Lisp_Object);
+extern bool internal_delete_file (Lisp_Object);
+extern Lisp_Object emacs_readlinkat (int, const char *);
+extern bool file_directory_p (const char *);
+extern bool file_accessible_directory_p (Lisp_Object);
+extern void init_fileio (void);
+extern void syms_of_fileio (void);
+extern Lisp_Object make_temp_name (Lisp_Object, bool);
+
+/* Defined in search.c.  */
+extern void shrink_regexp_cache (void);
+extern void restore_search_regs (void);
+extern void record_unwind_save_match_data (void);
+struct re_registers;
+extern struct re_pattern_buffer *compile_pattern (Lisp_Object,
+                                                 struct re_registers *,
+                                                 Lisp_Object, bool, bool);
+extern ptrdiff_t fast_string_match_internal (Lisp_Object, Lisp_Object,
+                                            Lisp_Object);
+
+INLINE ptrdiff_t
+fast_string_match (Lisp_Object regexp, Lisp_Object string)
+{
+  return fast_string_match_internal (regexp, string, Qnil);
+}
+
+INLINE ptrdiff_t
+fast_string_match_ignore_case (Lisp_Object regexp, Lisp_Object string)
+{
+  return fast_string_match_internal (regexp, string, Vascii_canon_table);
+}
+
+extern ptrdiff_t fast_c_string_match_ignore_case (Lisp_Object, const char *,
+                                                 ptrdiff_t);
+extern ptrdiff_t fast_looking_at (Lisp_Object, ptrdiff_t, ptrdiff_t,
+                                  ptrdiff_t, ptrdiff_t, Lisp_Object);
+extern ptrdiff_t find_newline (ptrdiff_t, ptrdiff_t, ptrdiff_t, ptrdiff_t,
+                              ptrdiff_t, ptrdiff_t *, ptrdiff_t *, bool);
+extern ptrdiff_t scan_newline (ptrdiff_t, ptrdiff_t, ptrdiff_t, ptrdiff_t,
+                              ptrdiff_t, bool);
+extern ptrdiff_t scan_newline_from_point (ptrdiff_t, ptrdiff_t *, ptrdiff_t *);
+extern ptrdiff_t find_newline_no_quit (ptrdiff_t, ptrdiff_t,
+                                      ptrdiff_t, ptrdiff_t *);
+extern ptrdiff_t find_before_next_newline (ptrdiff_t, ptrdiff_t,
+                                          ptrdiff_t, ptrdiff_t *);
+extern void syms_of_search (void);
+extern void clear_regexp_cache (void);
+
+/* Defined in minibuf.c.  */
+
+extern Lisp_Object Vminibuffer_list;
+extern Lisp_Object last_minibuf_string;
+extern Lisp_Object get_minibuffer (EMACS_INT);
+extern void init_minibuf_once (void);
+extern void syms_of_minibuf (void);
+
+/* Defined in callint.c.  */
+
+extern void syms_of_callint (void);
+
+/* Defined in casefiddle.c.  */
+
+extern void syms_of_casefiddle (void);
+extern void keys_of_casefiddle (void);
+
+/* Defined in casetab.c.  */
+
+extern void init_casetab_once (void);
+extern void syms_of_casetab (void);
+
+/* Defined in keyboard.c.  */
+
+extern Lisp_Object echo_message_buffer;
+extern struct kboard *echo_kboard;
+extern void cancel_echoing (void);
+extern Lisp_Object last_undo_boundary;
+extern bool input_pending;
+#ifdef HAVE_STACK_OVERFLOW_HANDLING
+extern sigjmp_buf return_to_command_loop;
+#endif
+extern Lisp_Object menu_bar_items (Lisp_Object);
+extern Lisp_Object tool_bar_items (Lisp_Object, int *);
+extern void discard_mouse_events (void);
+#ifdef USABLE_SIGIO
+void handle_input_available_signal (int);
+#endif
+extern Lisp_Object pending_funcalls;
+extern bool detect_input_pending (void);
+extern bool detect_input_pending_ignore_squeezables (void);
+extern bool detect_input_pending_run_timers (bool);
+extern void safe_run_hooks (Lisp_Object);
+extern void cmd_error_internal (Lisp_Object, const char *);
+extern Lisp_Object command_loop_1 (void);
+extern Lisp_Object read_menu_command (void);
+extern Lisp_Object recursive_edit_1 (void);
+extern void record_auto_save (void);
+extern void force_auto_save_soon (void);
+extern void init_keyboard (void);
+extern void syms_of_keyboard (void);
+extern void keys_of_keyboard (void);
+
+/* Defined in indent.c.  */
+extern ptrdiff_t current_column (void);
+extern void invalidate_current_column (void);
+extern bool indented_beyond_p (ptrdiff_t, ptrdiff_t, EMACS_INT);
+extern void syms_of_indent (void);
+
+/* Defined in frame.c.  */
+extern void store_frame_param (struct frame *, Lisp_Object, Lisp_Object);
+extern void store_in_alist (Lisp_Object *, Lisp_Object, Lisp_Object);
+extern Lisp_Object do_switch_frame (Lisp_Object, int, int, Lisp_Object);
+extern Lisp_Object get_frame_param (struct frame *, Lisp_Object);
+extern void frames_discard_buffer (Lisp_Object);
+extern void syms_of_frame (void);
+
+/* Defined in emacs.c.  */
+extern char **initial_argv;
+extern int initial_argc;
+#if defined (HAVE_X_WINDOWS) || defined (HAVE_NS)
+extern bool display_arg;
+#endif
+extern Lisp_Object decode_env_path (const char *, const char *, bool);
+extern Lisp_Object empty_unibyte_string, empty_multibyte_string;
+extern _Noreturn void terminate_due_to_signal (int, int);
+#ifdef WINDOWSNT
+extern Lisp_Object Vlibrary_cache;
+#endif
+#if HAVE_SETLOCALE
+void fixup_locale (void);
+void synchronize_system_messages_locale (void);
+void synchronize_system_time_locale (void);
+#else
+INLINE void fixup_locale (void) {}
+INLINE void synchronize_system_messages_locale (void) {}
+INLINE void synchronize_system_time_locale (void) {}
+#endif
+extern void shut_down_emacs (int, Lisp_Object);
+
+/* True means don't do interactive redisplay and don't change tty modes.  */
+extern bool noninteractive;
+
+/* True means remove site-lisp directories from load-path.  */
+extern bool no_site_lisp;
+
+/* Pipe used to send exit notification to the daemon parent at
+   startup.  On Windows, we use a kernel event instead.  */
+#ifndef WINDOWSNT
+extern int daemon_pipe[2];
+#define IS_DAEMON (daemon_pipe[1] != 0)
+#define DAEMON_RUNNING (daemon_pipe[1] >= 0)
+#else  /* WINDOWSNT */
+extern void *w32_daemon_event;
+#define IS_DAEMON (w32_daemon_event != NULL)
+#define DAEMON_RUNNING (w32_daemon_event != INVALID_HANDLE_VALUE)
+#endif
+
+/* True if handling a fatal error already.  */
+extern bool fatal_error_in_progress;
+
+/* True means don't do use window-system-specific display code.  */
+extern bool inhibit_window_system;
+/* True means that a filter or a sentinel is running.  */
+extern bool running_asynch_code;
+
+/* Defined in process.c.  */
+extern void kill_buffer_processes (Lisp_Object);
+extern int wait_reading_process_output (intmax_t, int, int, bool, Lisp_Object,
+                                       struct Lisp_Process *, int);
+/* Max value for the first argument of wait_reading_process_output.  */
+#if __GNUC__ == 3 || (__GNUC__ == 4 && __GNUC_MINOR__ <= 5)
+/* Work around a bug in GCC 3.4.2, known to be fixed in GCC 4.6.3.
+   The bug merely causes a bogus warning, but the warning is annoying.  */
+# define WAIT_READING_MAX min (TYPE_MAXIMUM (time_t), INTMAX_MAX)
+#else
+# define WAIT_READING_MAX INTMAX_MAX
+#endif
+#ifdef HAVE_TIMERFD
+extern void add_timer_wait_descriptor (int);
+#endif
+extern void add_keyboard_wait_descriptor (int);
+extern void delete_keyboard_wait_descriptor (int);
+#ifdef HAVE_GPM
+extern void add_gpm_wait_descriptor (int);
+extern void delete_gpm_wait_descriptor (int);
+#endif
+extern void init_process_emacs (void);
+extern void syms_of_process (void);
+extern void setup_process_coding_systems (Lisp_Object);
+
+/* Defined in callproc.c.  */
+#ifndef DOS_NT
+ _Noreturn
+#endif
+extern int child_setup (int, int, int, char **, bool, Lisp_Object);
+extern void init_callproc_1 (void);
+extern void init_callproc (void);
+extern void set_initial_environment (void);
+extern void syms_of_callproc (void);
+
+/* Defined in doc.c.  */
+extern Lisp_Object read_doc_string (Lisp_Object);
+extern Lisp_Object get_doc_string (Lisp_Object, bool, bool);
+extern void syms_of_doc (void);
+extern int read_bytecode_char (bool);
+
+/* Defined in bytecode.c.  */
+extern void syms_of_bytecode (void);
+extern struct byte_stack *byte_stack_list;
+#if BYTE_MARK_STACK
+extern void mark_byte_stack (void);
+#endif
+extern void unmark_byte_stack (void);
+extern Lisp_Object exec_byte_code (Lisp_Object, Lisp_Object, Lisp_Object,
+                                  Lisp_Object, ptrdiff_t, Lisp_Object *);
+
+/* Defined in macros.c.  */
+extern void init_macros (void);
+extern void syms_of_macros (void);
+
+/* Defined in undo.c.  */
+extern void truncate_undo_list (struct buffer *);
+extern void record_insert (ptrdiff_t, ptrdiff_t);
+extern void record_delete (ptrdiff_t, Lisp_Object, bool);
+extern void record_first_change (void);
+extern void record_change (ptrdiff_t, ptrdiff_t);
+extern void record_property_change (ptrdiff_t, ptrdiff_t,
+                                   Lisp_Object, Lisp_Object,
+                                    Lisp_Object);
+extern void syms_of_undo (void);
+
+/* Defined in textprop.c.  */
+extern void report_interval_modification (Lisp_Object, Lisp_Object);
+
+/* Defined in menu.c.  */
+extern void syms_of_menu (void);
+
+/* Defined in xmenu.c.  */
+extern void syms_of_xmenu (void);
+
+/* Defined in termchar.h.  */
+struct tty_display_info;
+
+/* Defined in termhooks.h.  */
+struct terminal;
+
+/* Defined in sysdep.c.  */
+#ifndef HAVE_GET_CURRENT_DIR_NAME
+extern char *get_current_dir_name (void);
+#endif
+extern void stuff_char (char c);
+extern void init_foreground_group (void);
+extern void sys_subshell (void);
+extern void sys_suspend (void);
+extern void discard_tty_input (void);
+extern void init_sys_modes (struct tty_display_info *);
+extern void reset_sys_modes (struct tty_display_info *);
+extern void init_all_sys_modes (void);
+extern void reset_all_sys_modes (void);
+extern void child_setup_tty (int);
+extern void setup_pty (int);
+extern int set_window_size (int, int, int);
+extern EMACS_INT get_random (void);
+extern void seed_random (void *, ptrdiff_t);
+extern void init_random (void);
+extern void emacs_backtrace (int);
+extern _Noreturn void emacs_abort (void) NO_INLINE;
+extern int emacs_open (const char *, int, int);
+extern int emacs_pipe (int[2]);
+extern int emacs_close (int);
+extern ptrdiff_t emacs_read (int, void *, ptrdiff_t);
+extern ptrdiff_t emacs_write (int, void const *, ptrdiff_t);
+extern ptrdiff_t emacs_write_sig (int, void const *, ptrdiff_t);
+extern void emacs_perror (char const *);
+
+extern void unlock_all_files (void);
+extern void lock_file (Lisp_Object);
+extern void unlock_file (Lisp_Object);
+extern void unlock_buffer (struct buffer *);
+extern void syms_of_filelock (void);
+extern int str_collate (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
+
+/* Defined in sound.c.  */
+extern void syms_of_sound (void);
+
+/* Defined in category.c.  */
+extern void init_category_once (void);
+extern Lisp_Object char_category_set (int);
+extern void syms_of_category (void);
+
+/* Defined in ccl.c.  */
+extern void syms_of_ccl (void);
+
+/* Defined in dired.c.  */
+extern void syms_of_dired (void);
+extern Lisp_Object directory_files_internal (Lisp_Object, Lisp_Object,
+                                             Lisp_Object, Lisp_Object,
+                                             bool, Lisp_Object);
+
+/* Defined in term.c.  */
+extern int *char_ins_del_vector;
+extern void syms_of_term (void);
+extern _Noreturn void fatal (const char *msgid, ...)
+  ATTRIBUTE_FORMAT_PRINTF (1, 2);
+
+/* Defined in terminal.c.  */
+extern void syms_of_terminal (void);
+
+/* Defined in font.c.  */
+extern void syms_of_font (void);
+extern void init_font (void);
+
+#ifdef HAVE_WINDOW_SYSTEM
+/* Defined in fontset.c.  */
+extern void syms_of_fontset (void);
+#endif
+
+/* Defined in gfilenotify.c */
+#ifdef HAVE_GFILENOTIFY
+extern void globals_of_gfilenotify (void);
+extern void syms_of_gfilenotify (void);
+#endif
+
+/* Defined in inotify.c */
+#ifdef HAVE_INOTIFY
+extern void syms_of_inotify (void);
+#endif
+
+#ifdef HAVE_W32NOTIFY
+/* Defined on w32notify.c.  */
+extern void syms_of_w32notify (void);
+#endif
+
+/* Defined in xfaces.c.  */
+extern Lisp_Object Vface_alternative_font_family_alist;
+extern Lisp_Object Vface_alternative_font_registry_alist;
+extern void syms_of_xfaces (void);
+
+#ifdef HAVE_X_WINDOWS
+/* Defined in xfns.c.  */
+extern void syms_of_xfns (void);
+
+/* Defined in xsmfns.c.  */
+extern void syms_of_xsmfns (void);
+
+/* Defined in xselect.c.  */
+extern void syms_of_xselect (void);
+
+/* Defined in xterm.c.  */
+extern void init_xterm (void);
+extern void syms_of_xterm (void);
+#endif /* HAVE_X_WINDOWS */
+
+#ifdef HAVE_WINDOW_SYSTEM
+/* Defined in xterm.c, nsterm.m, w32term.c.  */
+extern char *x_get_keysym_name (int);
+#endif /* HAVE_WINDOW_SYSTEM */
+
+#ifdef HAVE_LIBXML2
+/* Defined in xml.c.  */
+extern void syms_of_xml (void);
+extern void xml_cleanup_parser (void);
+#endif
+
+#ifdef HAVE_ZLIB
+/* Defined in decompress.c.  */
+extern void syms_of_decompress (void);
+#endif
+
+#ifdef HAVE_DBUS
+/* Defined in dbusbind.c.  */
+void init_dbusbind (void);
+void syms_of_dbusbind (void);
+#endif
+
+
+/* Defined in profiler.c.  */
+extern bool profiler_memory_running;
+extern void malloc_probe (size_t);
+extern void syms_of_profiler (void);
+
+
+#ifdef DOS_NT
+/* Defined in msdos.c, w32.c.  */
+extern char *emacs_root_dir (void);
+#endif /* DOS_NT */
+
+/* Defined in lastfile.c.  */
+extern char my_edata[];
+extern char my_endbss[];
+extern char *my_endbss_static;
+
+/* True means ^G can quit instantly.  */
+extern bool immediate_quit;
+
+extern void *xmalloc (size_t) ATTRIBUTE_MALLOC_SIZE ((1));
+extern void *xzalloc (size_t) ATTRIBUTE_MALLOC_SIZE ((1));
+extern void *xrealloc (void *, size_t) ATTRIBUTE_ALLOC_SIZE ((2));
+extern void xfree (void *);
+extern void *xnmalloc (ptrdiff_t, ptrdiff_t) ATTRIBUTE_MALLOC_SIZE ((1,2));
+extern void *xnrealloc (void *, ptrdiff_t, ptrdiff_t)
+  ATTRIBUTE_ALLOC_SIZE ((2,3));
+extern void *xpalloc (void *, ptrdiff_t *, ptrdiff_t, ptrdiff_t, ptrdiff_t);
+
+extern char *xstrdup (const char *) ATTRIBUTE_MALLOC;
+extern char *xlispstrdup (Lisp_Object) ATTRIBUTE_MALLOC;
+extern void dupstring (char **, char const *);
+
+/* Make DEST a copy of STRING's data.  Return a pointer to DEST's terminating
+   null byte.  This is like stpcpy, except the source is a Lisp string.  */
+
+INLINE char *
+lispstpcpy (char *dest, Lisp_Object string)
+{
+  ptrdiff_t len = SBYTES (string);
+  memcpy (dest, SDATA (string), len + 1);
+  return dest + len;
+}
+
+extern void xputenv (const char *);
+
+extern char *egetenv_internal (const char *, ptrdiff_t);
+
+INLINE char *
+egetenv (const char *var)
+{
+  /* When VAR is a string literal, strlen can be optimized away.  */
+  return egetenv_internal (var, strlen (var));
+}
+
+/* Set up the name of the machine we're running on.  */
+extern void init_system_name (void);
+
+/* Return the absolute value of X.  X should be a signed integer
+   expression without side effects, and X's absolute value should not
+   exceed the maximum for its promoted type.  This is called 'eabs'
+   because 'abs' is reserved by the C standard.  */
+#define eabs(x)         ((x) < 0 ? -(x) : (x))
+
+/* Return a fixnum or float, depending on whether VAL fits in a Lisp
+   fixnum.  */
+
+#define make_fixnum_or_float(val) \
+   (FIXNUM_OVERFLOW_P (val) ? make_float (val) : make_number (val))
+
+/* SAFE_ALLOCA normally allocates memory on the stack, but if size is
+   larger than MAX_ALLOCA, use xmalloc to avoid overflowing the stack.  */
+
+enum MAX_ALLOCA { MAX_ALLOCA = 16 * 1024 };
+
+extern void *record_xmalloc (size_t) ATTRIBUTE_ALLOC_SIZE ((1));
+
+#define USE_SAFE_ALLOCA                        \
+  ptrdiff_t sa_avail = MAX_ALLOCA;     \
+  ptrdiff_t sa_count = SPECPDL_INDEX (); bool sa_must_free = false
+
+#define AVAIL_ALLOCA(size) (sa_avail -= (size), alloca (size))
+
+/* SAFE_ALLOCA allocates a simple buffer.  */
+
+#define SAFE_ALLOCA(size) ((size) <= sa_avail                          \
+                          ? AVAIL_ALLOCA (size)                        \
+                          : (sa_must_free = true, record_xmalloc (size)))
+
+/* SAFE_NALLOCA sets BUF to a newly allocated array of MULTIPLIER *
+   NITEMS items, each of the same type as *BUF.  MULTIPLIER must
+   positive.  The code is tuned for MULTIPLIER being a constant.  */
+
+#define SAFE_NALLOCA(buf, multiplier, nitems)                   \
+  do {                                                          \
+    if ((nitems) <= sa_avail / sizeof *(buf) / (multiplier))    \
+      (buf) = AVAIL_ALLOCA (sizeof *(buf) * (multiplier) * (nitems)); \
+    else                                                        \
+      {                                                                 \
+       (buf) = xnmalloc (nitems, sizeof *(buf) * (multiplier)); \
+       sa_must_free = true;                                     \
+       record_unwind_protect_ptr (xfree, buf);                  \
+      }                                                                 \
+  } while (false)
+
+/* SAFE_ALLOCA_STRING allocates a C copy of a Lisp string.  */
+
+#define SAFE_ALLOCA_STRING(ptr, string)                        \
+  do {                                                 \
+    (ptr) = SAFE_ALLOCA (SBYTES (string) + 1);         \
+    memcpy (ptr, SDATA (string), SBYTES (string) + 1); \
+  } while (false)
+
+/* SAFE_FREE frees xmalloced memory and enables GC as needed.  */
+
+#define SAFE_FREE()                    \
+  do {                                 \
+    if (sa_must_free) {                        \
+      sa_must_free = false;            \
+      unbind_to (sa_count, Qnil);      \
+    }                                  \
+  } while (false)
+
+
+/* Return floor (NBYTES / WORD_SIZE).  */
+
+INLINE ptrdiff_t
+lisp_word_count (ptrdiff_t nbytes)
+{
+  if (-1 >> 1 == -1)
+    switch (word_size)
+      {
+      case 2: return nbytes >> 1;
+      case 4: return nbytes >> 2;
+      case 8: return nbytes >> 3;
+      case 16: return nbytes >> 4;
+      }
+  return nbytes / word_size - (nbytes % word_size < 0);
+}
+
+/* SAFE_ALLOCA_LISP allocates an array of Lisp_Objects.  */
+
+#define SAFE_ALLOCA_LISP(buf, nelt)                           \
+  do {                                                        \
+    if ((nelt) <= lisp_word_count (sa_avail))                 \
+      (buf) = AVAIL_ALLOCA ((nelt) * word_size);              \
+    else if ((nelt) <= min (PTRDIFF_MAX, SIZE_MAX) / word_size) \
+      {                                                               \
+       Lisp_Object arg_;                                      \
+       (buf) = xmalloc ((nelt) * word_size);                  \
+       arg_ = make_save_memory (buf, nelt);                   \
+       sa_must_free = true;                                   \
+       record_unwind_protect (free_save_value, arg_);         \
+      }                                                               \
+    else                                                      \
+      memory_full (SIZE_MAX);                                 \
+  } while (false)
+
+
+/* If USE_STACK_LISP_OBJECTS, define macros that and functions that allocate
+   block-scoped conses and strings.  These objects are not
+   managed by the garbage collector, so they are dangerous: passing them
+   out of their scope (e.g., to user code) results in undefined behavior.
+   Conversely, they have better performance because GC is not involved.
+
+   This feature is experimental and requires careful debugging.
+   Build with CPPFLAGS='-DUSE_STACK_LISP_OBJECTS=0' to disable it.  */
+
+#ifndef USE_STACK_LISP_OBJECTS
+# define USE_STACK_LISP_OBJECTS true
+#endif
+
+/* USE_STACK_LISP_OBJECTS requires GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS.  */
+
+#if GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS
+# undef USE_STACK_LISP_OBJECTS
+# define USE_STACK_LISP_OBJECTS false
+#endif
+
+#ifdef GC_CHECK_STRING_BYTES
+enum { defined_GC_CHECK_STRING_BYTES = true };
+#else
+enum { defined_GC_CHECK_STRING_BYTES = false };
+#endif
+
+/* Struct inside unions that are typically no larger and aligned enough.  */
+
+union Aligned_Cons
+{
+  struct Lisp_Cons s;
+  double d; intmax_t i; void *p;
+};
+
+union Aligned_String
+{
+  struct Lisp_String s;
+  double d; intmax_t i; void *p;
+};
+
+/* True for stack-based cons and string implementations, respectively.
+   Use stack-based strings only if stack-based cons also works.
+   Otherwise, STACK_CONS would create heap-based cons cells that
+   could point to stack-based strings, which is a no-no.  */
+
+enum
+  {
+    USE_STACK_CONS = (USE_STACK_LISP_OBJECTS
+                     && alignof (union Aligned_Cons) % GCALIGNMENT == 0),
+    USE_STACK_STRING = (USE_STACK_CONS
+                       && !defined_GC_CHECK_STRING_BYTES
+                       && alignof (union Aligned_String) % GCALIGNMENT == 0)
+  };
+
+/* Auxiliary macros used for auto allocation of Lisp objects.  Please
+   use these only in macros like AUTO_CONS that declare a local
+   variable whose lifetime will be clear to the programmer.  */
+#define STACK_CONS(a, b) \
+  make_lisp_ptr (&(union Aligned_Cons) { { a, { b } } }.s, Lisp_Cons)
+#define AUTO_CONS_EXPR(a, b) \
+  (USE_STACK_CONS ? STACK_CONS (a, b) : Fcons (a, b))
+
+/* Declare NAME as an auto Lisp cons or short list if possible, a
+   GC-based one otherwise.  This is in the sense of the C keyword
+   'auto'; i.e., the object has the lifetime of the containing block.
+   The resulting object should not be made visible to user Lisp code.  */
+
+#define AUTO_CONS(name, a, b) Lisp_Object name = AUTO_CONS_EXPR (a, b)
+#define AUTO_LIST1(name, a)                                            \
+  Lisp_Object name = (USE_STACK_CONS ? STACK_CONS (a, Qnil) : list1 (a))
+#define AUTO_LIST2(name, a, b)                                         \
+  Lisp_Object name = (USE_STACK_CONS                                   \
+                     ? STACK_CONS (a, STACK_CONS (b, Qnil))            \
+                     : list2 (a, b))
+#define AUTO_LIST3(name, a, b, c)                                      \
+  Lisp_Object name = (USE_STACK_CONS                                   \
+                     ? STACK_CONS (a, STACK_CONS (b, STACK_CONS (c, Qnil))) \
+                     : list3 (a, b, c))
+#define AUTO_LIST4(name, a, b, c, d)                                   \
+    Lisp_Object name                                                   \
+      = (USE_STACK_CONS                                                        
\
+        ? STACK_CONS (a, STACK_CONS (b, STACK_CONS (c,                 \
+                                                    STACK_CONS (d, Qnil)))) \
+        : list4 (a, b, c, d))
+
+/* Check whether stack-allocated strings are ASCII-only.  */
+
+#if defined (ENABLE_CHECKING) && USE_STACK_LISP_OBJECTS
+extern const char *verify_ascii (const char *);
+#else
+# define verify_ascii(str) (str)
+#endif
+
+/* Declare NAME as an auto Lisp string if possible, a GC-based one if not.
+   Take its value from STR.  STR is not necessarily copied and should
+   contain only ASCII characters.  The resulting Lisp string should
+   not be modified or made visible to user code.  */
+
+#define AUTO_STRING(name, str)                                         \
+  Lisp_Object name =                                                   \
+    (USE_STACK_STRING                                                  \
+     ? (make_lisp_ptr                                                  \
+       ((&(union Aligned_String)                                       \
+         {{strlen (str), -1, 0, (unsigned char *) verify_ascii (str)}}.s), \
+         Lisp_String))                                                 \
+     : build_string (verify_ascii (str)))
+
+/* Loop over all tails of a list, checking for cycles.
+   FIXME: Make tortoise and n internal declarations.
+   FIXME: Unroll the loop body so we don't need `n'.  */
+#define FOR_EACH_TAIL(hare, list, tortoise, n) \
+  for ((tortoise) = (hare) = (list), (n) = true;               \
+       CONSP (hare);                                           \
+       (hare = XCDR (hare), (n) = !(n),                                \
+       ((n)                                                    \
+        ? (EQ (hare, tortoise)                                 \
+           ? xsignal1 (Qcircular_list, list)                   \
+           : (void) 0)                                         \
+        /* Move tortoise before the next iteration, in case */ \
+        /* the next iteration does an Fsetcdr.  */             \
+        : (void) ((tortoise) = XCDR (tortoise)))))
+
+/* Do a `for' loop over alist values.  */
+
+#define FOR_EACH_ALIST_VALUE(head_var, list_var, value_var)            \
+  for ((list_var) = (head_var);                                                
\
+       (CONSP (list_var) && ((value_var) = XCDR (XCAR (list_var)), true)); \
+       (list_var) = XCDR (list_var))
+
+/* Check whether it's time for GC, and run it if so.  */
+
+INLINE void
+maybe_gc (void)
+{
+  if ((consing_since_gc > gc_cons_threshold
+       && consing_since_gc > gc_relative_threshold)
+      || (!NILP (Vmemory_full)
+         && consing_since_gc > memory_full_cons_threshold))
+    Fgarbage_collect ();
+}
+
+INLINE bool
+functionp (Lisp_Object object)
+{
+  if (SYMBOLP (object) && !NILP (Ffboundp (object)))
+    {
+      object = Findirect_function (object, Qt);
+
+      if (CONSP (object) && EQ (XCAR (object), Qautoload))
+       {
+         /* Autoloaded symbols are functions, except if they load
+            macros or keymaps.  */
+         int i;
+         for (i = 0; i < 4 && CONSP (object); i++)
+           object = XCDR (object);
+
+         return ! (CONSP (object) && !NILP (XCAR (object)));
+       }
+    }
+
+  if (SUBRP (object))
+    return XSUBR (object)->max_args != UNEVALLED;
+  else if (COMPILEDP (object))
+    return true;
+  else if (CONSP (object))
+    {
+      Lisp_Object car = XCAR (object);
+      return EQ (car, Qlambda) || EQ (car, Qclosure);
+    }
+  else
+    return false;
+}
+
+INLINE_HEADER_END
+
+#endif /* EMACS_LISP_H */
diff --git a/test/etags/c-src/emacs/src/regex.h 
b/test/etags/c-src/emacs/src/regex.h
new file mode 100644
index 0000000..3dfecf0
--- /dev/null
+++ b/test/etags/c-src/emacs/src/regex.h
@@ -0,0 +1,630 @@
+/* Definitions for data structures and routines for the regular
+   expression library, version 0.12.
+
+   Copyright (C) 1985, 1989-1993, 1995, 2000-2015 Free Software
+   Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _REGEX_H
+#define _REGEX_H 1
+
+/* Allow the use in C++ code.  */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* POSIX says that <sys/types.h> must be included (by the caller) before
+   <regex.h>.  */
+
+#if !defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE && defined VMS
+/* VMS doesn't have `size_t' in <sys/types.h>, even though POSIX says it
+   should be there.  */
+# include <stddef.h>
+#endif
+
+/* The following bits are used to determine the regexp syntax we
+   recognize.  The set/not-set meanings where historically chosen so
+   that Emacs syntax had the value 0.
+   The bits are given in alphabetical order, and
+   the definitions shifted by one from the previous bit; thus, when we
+   add or remove a bit, only one other definition need change.  */
+typedef unsigned long reg_syntax_t;
+
+/* If this bit is not set, then \ inside a bracket expression is literal.
+   If set, then such a \ quotes the following character.  */
+#define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1)
+
+/* If this bit is not set, then + and ? are operators, and \+ and \? are
+     literals.
+   If set, then \+ and \? are operators and + and ? are literals.  */
+#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
+
+/* If this bit is set, then character classes are supported.  They are:
+     [:alpha:], [:upper:], [:lower:],  [:digit:], [:alnum:], [:xdigit:],
+     [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
+   If not set, then character classes are not supported.  */
+#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
+
+/* If this bit is set, then ^ and $ are always anchors (outside bracket
+     expressions, of course).
+   If this bit is not set, then it depends:
+        ^  is an anchor if it is at the beginning of a regular
+           expression or after an open-group or an alternation operator;
+        $  is an anchor if it is at the end of a regular expression, or
+           before a close-group or an alternation operator.
+
+   This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
+   POSIX draft 11.2 says that * etc. in leading positions is undefined.
+   We already implemented a previous draft which made those constructs
+   invalid, though, so we haven't changed the code back.  */
+#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
+
+/* If this bit is set, then special characters are always special
+     regardless of where they are in the pattern.
+   If this bit is not set, then special characters are special only in
+     some contexts; otherwise they are ordinary.  Specifically,
+     * + ? and intervals are only special when not after the beginning,
+     open-group, or alternation operator.  */
+#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
+
+/* If this bit is set, then *, +, ?, and { cannot be first in an re or
+     immediately after an alternation or begin-group operator.  */
+#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
+
+/* If this bit is set, then . matches newline.
+   If not set, then it doesn't.  */
+#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
+
+/* If this bit is set, then . doesn't match NUL.
+   If not set, then it does.  */
+#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
+
+/* If this bit is set, nonmatching lists [^...] do not match newline.
+   If not set, they do.  */
+#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
+
+/* If this bit is set, either \{...\} or {...} defines an
+     interval, depending on RE_NO_BK_BRACES.
+   If not set, \{, \}, {, and } are literals.  */
+#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
+
+/* If this bit is set, +, ? and | aren't recognized as operators.
+   If not set, they are.  */
+#define RE_LIMITED_OPS (RE_INTERVALS << 1)
+
+/* If this bit is set, newline is an alternation operator.
+   If not set, newline is literal.  */
+#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
+
+/* If this bit is set, then `{...}' defines an interval, and \{ and \}
+     are literals.
+  If not set, then `\{...\}' defines an interval.  */
+#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
+
+/* If this bit is set, (...) defines a group, and \( and \) are literals.
+   If not set, \(...\) defines a group, and ( and ) are literals.  */
+#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
+
+/* If this bit is set, then \<digit> matches <digit>.
+   If not set, then \<digit> is a back-reference.  */
+#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
+
+/* If this bit is set, then | is an alternation operator, and \| is literal.
+   If not set, then \| is an alternation operator, and | is literal.  */
+#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
+
+/* If this bit is set, then an ending range point collating higher
+     than the starting range point, as in [z-a], is invalid.
+   If not set, then when ending range point collates higher than the
+     starting range point, the range is ignored.  */
+#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
+
+/* If this bit is set, then an unmatched ) is ordinary.
+   If not set, then an unmatched ) is invalid.  */
+#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
+
+/* If this bit is set, succeed as soon as we match the whole pattern,
+   without further backtracking.  */
+#define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
+
+/* If this bit is set, do not process the GNU regex operators.
+   If not set, then the GNU regex operators are recognized. */
+#define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1)
+
+/* If this bit is set, then *?, +? and ?? match non greedily. */
+#define RE_FRUGAL (RE_NO_GNU_OPS << 1)
+
+/* If this bit is set, then (?:...) is treated as a shy group.  */
+#define RE_SHY_GROUPS (RE_FRUGAL << 1)
+
+/* If this bit is set, ^ and $ only match at beg/end of buffer.  */
+#define RE_NO_NEWLINE_ANCHOR (RE_SHY_GROUPS << 1)
+
+/* If this bit is set, turn on internal regex debugging.
+   If not set, and debugging was on, turn it off.
+   This only works if regex.c is compiled -DDEBUG.
+   We define this bit always, so that all that's needed to turn on
+   debugging is to recompile regex.c; the calling code can always have
+   this bit set, and it won't affect anything in the normal case. */
+#define RE_DEBUG (RE_NO_NEWLINE_ANCHOR << 1)
+
+/* This global variable defines the particular regexp syntax to use (for
+   some interfaces).  When a regexp is compiled, the syntax used is
+   stored in the pattern buffer, so changing this does not affect
+   already-compiled regexps.  */
+extern reg_syntax_t re_syntax_options;
+
+#ifdef emacs
+/* In Emacs, this is the string or buffer in which we
+   are matching.  It is used for looking up syntax properties.  */
+extern Lisp_Object re_match_object;
+#endif
+
+/* Roughly the maximum number of failure points on the stack.  */
+extern size_t re_max_failures;
+
+
+/* Define combinations of the above bits for the standard possibilities.
+   (The [[[ comments delimit what gets put into the Texinfo file, so
+   don't delete them!)  */
+/* [[[begin syntaxes]]] */
+#define RE_SYNTAX_EMACS                                                        
\
+  (RE_CHAR_CLASSES | RE_INTERVALS | RE_SHY_GROUPS | RE_FRUGAL)
+
+#define RE_SYNTAX_AWK                                                  \
+  (RE_BACKSLASH_ESCAPE_IN_LISTS   | RE_DOT_NOT_NULL                    \
+   | RE_NO_BK_PARENS              | RE_NO_BK_REFS                      \
+   | RE_NO_BK_VBAR                | RE_NO_EMPTY_RANGES                 \
+   | RE_DOT_NEWLINE              | RE_CONTEXT_INDEP_ANCHORS            \
+   | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS)
+
+#define RE_SYNTAX_GNU_AWK                                              \
+  ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG)        
\
+   & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS))
+
+#define RE_SYNTAX_POSIX_AWK                                            \
+  (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS             \
+   | RE_INTERVALS          | RE_NO_GNU_OPS)
+
+#define RE_SYNTAX_GREP                                                 \
+  (RE_BK_PLUS_QM              | RE_CHAR_CLASSES                                
\
+   | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS                           \
+   | RE_NEWLINE_ALT)
+
+#define RE_SYNTAX_EGREP                                                        
\
+  (RE_CHAR_CLASSES        | RE_CONTEXT_INDEP_ANCHORS                   \
+   | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE                   \
+   | RE_NEWLINE_ALT       | RE_NO_BK_PARENS                            \
+   | RE_NO_BK_VBAR)
+
+#define RE_SYNTAX_POSIX_EGREP                                          \
+  (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES)
+
+/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff.  */
+#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
+
+#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
+
+/* Syntax bits common to both basic and extended POSIX regex syntax.  */
+#define _RE_SYNTAX_POSIX_COMMON                                                
\
+  (RE_CHAR_CLASSES | RE_DOT_NEWLINE      | RE_DOT_NOT_NULL             \
+   | RE_INTERVALS  | RE_NO_EMPTY_RANGES)
+
+#define RE_SYNTAX_POSIX_BASIC                                          \
+  (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM)
+
+/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
+   RE_LIMITED_OPS, i.e., \? \+ \| are not recognized.  Actually, this
+   isn't minimal, since other operators, such as \`, aren't disabled.  */
+#define RE_SYNTAX_POSIX_MINIMAL_BASIC                                  \
+  (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
+
+#define RE_SYNTAX_POSIX_EXTENDED                                       \
+  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                 \
+   | RE_CONTEXT_INDEP_OPS   | RE_NO_BK_BRACES                          \
+   | RE_NO_BK_PARENS        | RE_NO_BK_VBAR                            \
+   | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD)
+
+/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is
+   removed and RE_NO_BK_REFS is added.  */
+#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED                               \
+  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                 \
+   | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES                          \
+   | RE_NO_BK_PARENS        | RE_NO_BK_REFS                            \
+   | RE_NO_BK_VBAR         | RE_UNMATCHED_RIGHT_PAREN_ORD)
+/* [[[end syntaxes]]] */
+
+/* Maximum number of duplicates an interval can allow.  Some systems
+   (erroneously) define this in other header files, but we want our
+   value, so remove any previous define.  */
+#ifdef RE_DUP_MAX
+# undef RE_DUP_MAX
+#endif
+/* If sizeof(int) == 2, then ((1 << 15) - 1) overflows.  */
+#define RE_DUP_MAX (0x7fff)
+
+
+/* POSIX `cflags' bits (i.e., information for `regcomp').  */
+
+/* If this bit is set, then use extended regular expression syntax.
+   If not set, then use basic regular expression syntax.  */
+#define REG_EXTENDED 1
+
+/* If this bit is set, then ignore case when matching.
+   If not set, then case is significant.  */
+#define REG_ICASE (REG_EXTENDED << 1)
+
+/* If this bit is set, then anchors do not match at newline
+     characters in the string.
+   If not set, then anchors do match at newlines.  */
+#define REG_NEWLINE (REG_ICASE << 1)
+
+/* If this bit is set, then report only success or fail in regexec.
+   If not set, then returns differ between not matching and errors.  */
+#define REG_NOSUB (REG_NEWLINE << 1)
+
+
+/* POSIX `eflags' bits (i.e., information for regexec).  */
+
+/* If this bit is set, then the beginning-of-line operator doesn't match
+     the beginning of the string (presumably because it's not the
+     beginning of a line).
+   If not set, then the beginning-of-line operator does match the
+     beginning of the string.  */
+#define REG_NOTBOL 1
+
+/* Like REG_NOTBOL, except for the end-of-line.  */
+#define REG_NOTEOL (1 << 1)
+
+
+/* If any error codes are removed, changed, or added, update the
+   `re_error_msg' table in regex.c.  */
+typedef enum
+{
+#ifdef _XOPEN_SOURCE
+  REG_ENOSYS = -1,     /* This will never happen for this implementation.  */
+#endif
+
+  REG_NOERROR = 0,     /* Success.  */
+  REG_NOMATCH,         /* Didn't find a match (for regexec).  */
+
+  /* POSIX regcomp return error codes.  (In the order listed in the
+     standard.)  */
+  REG_BADPAT,          /* Invalid pattern.  */
+  REG_ECOLLATE,                /* Not implemented.  */
+  REG_ECTYPE,          /* Invalid character class name.  */
+  REG_EESCAPE,         /* Trailing backslash.  */
+  REG_ESUBREG,         /* Invalid back reference.  */
+  REG_EBRACK,          /* Unmatched left bracket.  */
+  REG_EPAREN,          /* Parenthesis imbalance.  */
+  REG_EBRACE,          /* Unmatched \{.  */
+  REG_BADBR,           /* Invalid contents of \{\}.  */
+  REG_ERANGE,          /* Invalid range end.  */
+  REG_ESPACE,          /* Ran out of memory.  */
+  REG_BADRPT,          /* No preceding re for repetition op.  */
+
+  /* Error codes we've added.  */
+  REG_EEND,            /* Premature end.  */
+  REG_ESIZE,           /* Compiled pattern bigger than 2^16 bytes.  */
+  REG_ERPAREN,         /* Unmatched ) or \); not returned from regcomp.  */
+  REG_ERANGEX          /* Range striding over charsets.  */
+} reg_errcode_t;
+
+/* This data structure represents a compiled pattern.  Before calling
+   the pattern compiler, the fields `buffer', `allocated', `fastmap',
+   `translate', and `no_sub' can be set.  After the pattern has been
+   compiled, the `re_nsub' field is available.  All other fields are
+   private to the regex routines.  */
+
+#ifndef RE_TRANSLATE_TYPE
+# define RE_TRANSLATE_TYPE char *
+#endif
+
+struct re_pattern_buffer
+{
+/* [[[begin pattern_buffer]]] */
+       /* Space that holds the compiled pattern.  It is declared as
+          `unsigned char *' because its elements are
+           sometimes used as array indexes.  */
+  unsigned char *buffer;
+
+       /* Number of bytes to which `buffer' points.  */
+  size_t allocated;
+
+       /* Number of bytes actually used in `buffer'.  */
+  size_t used;
+
+        /* Syntax setting with which the pattern was compiled.  */
+  reg_syntax_t syntax;
+
+        /* Pointer to a fastmap, if any, otherwise zero.  re_search uses
+           the fastmap, if there is one, to skip over impossible
+           starting points for matches.  */
+  char *fastmap;
+
+        /* Either a translate table to apply to all characters before
+           comparing them, or zero for no translation.  The translation
+           is applied to a pattern when it is compiled and to a string
+           when it is matched.  */
+  RE_TRANSLATE_TYPE translate;
+
+       /* Number of subexpressions found by the compiler.  */
+  size_t re_nsub;
+
+        /* Zero if this pattern cannot match the empty string, one else.
+           Well, in truth it's used only in `re_search_2', to see
+           whether or not we should use the fastmap, so we don't set
+           this absolutely perfectly; see `re_compile_fastmap'.  */
+  unsigned can_be_null : 1;
+
+        /* If REGS_UNALLOCATED, allocate space in the `regs' structure
+             for `max (RE_NREGS, re_nsub + 1)' groups.
+           If REGS_REALLOCATE, reallocate space if necessary.
+           If REGS_FIXED, use what's there.  */
+#define REGS_UNALLOCATED 0
+#define REGS_REALLOCATE 1
+#define REGS_FIXED 2
+  unsigned regs_allocated : 2;
+
+        /* Set to zero when `regex_compile' compiles a pattern; set to one
+           by `re_compile_fastmap' if it updates the fastmap.  */
+  unsigned fastmap_accurate : 1;
+
+        /* If set, `re_match_2' does not return information about
+           subexpressions.  */
+  unsigned no_sub : 1;
+
+        /* If set, a beginning-of-line anchor doesn't match at the
+           beginning of the string.  */
+  unsigned not_bol : 1;
+
+        /* Similarly for an end-of-line anchor.  */
+  unsigned not_eol : 1;
+
+  /* If true, the compilation of the pattern had to look up the syntax table,
+     so the compiled pattern is only valid for the current syntax table.  */
+  unsigned used_syntax : 1;
+
+#ifdef emacs
+  /* If true, multi-byte form in the regexp pattern should be
+     recognized as a multibyte character.  */
+  unsigned multibyte : 1;
+
+  /* If true, multi-byte form in the target of match should be
+     recognized as a multibyte character.  */
+  unsigned target_multibyte : 1;
+
+  /* Charset of unibyte characters at compiling time. */
+  int charset_unibyte;
+#endif
+
+/* [[[end pattern_buffer]]] */
+};
+
+typedef struct re_pattern_buffer regex_t;
+
+/* Type for byte offsets within the string.  POSIX mandates this to be an int,
+   but the Open Group has signaled its intention to change the requirement to
+   be that regoff_t be at least as wide as ptrdiff_t and ssize_t.  Current
+   gnulib sources also use ssize_t, and we need this for supporting buffers and
+   strings > 2GB on 64-bit hosts.  */
+typedef ssize_t regoff_t;
+
+
+/* This is the structure we store register match data in.  See
+   regex.texinfo for a full description of what registers match.  */
+struct re_registers
+{
+  unsigned num_regs;
+  regoff_t *start;
+  regoff_t *end;
+};
+
+
+/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
+   `re_match_2' returns information about at least this many registers
+   the first time a `regs' structure is passed.  */
+#ifndef RE_NREGS
+# define RE_NREGS 30
+#endif
+
+
+/* POSIX specification for registers.  Aside from the different names than
+   `re_registers', POSIX uses an array of structures, instead of a
+   structure of arrays.  */
+typedef struct
+{
+  regoff_t rm_so;  /* Byte offset from string's start to substring's start.  */
+  regoff_t rm_eo;  /* Byte offset from string's start to substring's end.  */
+} regmatch_t;
+
+/* Declarations for routines.  */
+
+/* Sets the current default syntax to SYNTAX, and return the old syntax.
+   You can also simply assign to the `re_syntax_options' variable.  */
+extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax);
+
+/* Compile the regular expression PATTERN, with length LENGTH
+   and syntax given by the global `re_syntax_options', into the buffer
+   BUFFER.  Return NULL if successful, and an error string if not.  */
+extern const char *re_compile_pattern (const char *__pattern, size_t __length,
+                                      struct re_pattern_buffer *__buffer);
+
+
+/* Compile a fastmap for the compiled pattern in BUFFER; used to
+   accelerate searches.  Return 0 if successful and -2 if was an
+   internal error.  */
+extern int re_compile_fastmap (struct re_pattern_buffer *__buffer);
+
+
+/* Search in the string STRING (with length LENGTH) for the pattern
+   compiled into BUFFER.  Start searching at position START, for RANGE
+   characters.  Return the starting position of the match, -1 for no
+   match, or -2 for an internal error.  Also return register
+   information in REGS (if REGS and BUFFER->no_sub are nonzero).  */
+extern regoff_t re_search (struct re_pattern_buffer *__buffer,
+                          const char *__string, size_t __length,
+                          ssize_t __start, ssize_t __range,
+                          struct re_registers *__regs);
+
+
+/* Like `re_search', but search in the concatenation of STRING1 and
+   STRING2.  Also, stop searching at index START + STOP.  */
+extern regoff_t re_search_2 (struct re_pattern_buffer *__buffer,
+                            const char *__string1, size_t __length1,
+                            const char *__string2, size_t __length2,
+                            ssize_t __start, ssize_t __range,
+                            struct re_registers *__regs,
+                            ssize_t __stop);
+
+
+/* Like `re_search', but return how many characters in STRING the regexp
+   in BUFFER matched, starting at position START.  */
+extern regoff_t re_match (struct re_pattern_buffer *__buffer,
+                         const char *__string, size_t __length,
+                         ssize_t __start, struct re_registers *__regs);
+
+
+/* Relates to `re_match' as `re_search_2' relates to `re_search'.  */
+extern regoff_t re_match_2 (struct re_pattern_buffer *__buffer,
+                           const char *__string1, size_t __length1,
+                           const char *__string2, size_t __length2,
+                           ssize_t __start, struct re_registers *__regs,
+                           ssize_t __stop);
+
+
+/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
+   ENDS.  Subsequent matches using BUFFER and REGS will use this memory
+   for recording register information.  STARTS and ENDS must be
+   allocated with malloc, and must each be at least `NUM_REGS * sizeof
+   (regoff_t)' bytes long.
+
+   If NUM_REGS == 0, then subsequent matches should allocate their own
+   register data.
+
+   Unless this function is called, the first search or match using
+   PATTERN_BUFFER will allocate its own register data, without
+   freeing the old data.  */
+extern void re_set_registers (struct re_pattern_buffer *__buffer,
+                             struct re_registers *__regs,
+                             unsigned __num_regs,
+                             regoff_t *__starts, regoff_t *__ends);
+
+#if defined _REGEX_RE_COMP || defined _LIBC
+# ifndef _CRAY
+/* 4.2 bsd compatibility.  */
+extern char *re_comp (const char *);
+extern int re_exec (const char *);
+# endif
+#endif
+
+/* GCC 2.95 and later have "__restrict"; C99 compilers have
+   "restrict", and "configure" may have defined "restrict".
+   Other compilers use __restrict, __restrict__, and _Restrict, and
+   'configure' might #define 'restrict' to those words, so pick a
+   different name.  */
+#ifndef _Restrict_
+# if 199901L <= __STDC_VERSION__
+#  define _Restrict_ restrict
+# elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)
+#  define _Restrict_ __restrict
+# else
+#  define _Restrict_
+# endif
+#endif
+/* gcc 3.1 and up support the [restrict] syntax.  Don't trust
+   sys/cdefs.h's definition of __restrict_arr, though, as it
+   mishandles gcc -ansi -pedantic.  */
+#ifndef _Restrict_arr_
+# if ((199901L <= __STDC_VERSION__                                     \
+       || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__))    \
+          && !defined __STRICT_ANSI__))                                        
\
+      && !defined __GNUG__)
+#  define _Restrict_arr_ _Restrict_
+# else
+#  define _Restrict_arr_
+# endif
+#endif
+
+/* POSIX compatibility.  */
+extern reg_errcode_t regcomp (regex_t *_Restrict_ __preg,
+                             const char *_Restrict_ __pattern,
+                             int __cflags);
+
+extern reg_errcode_t regexec (const regex_t *_Restrict_ __preg,
+                             const char *_Restrict_ __string, size_t __nmatch,
+                             regmatch_t __pmatch[_Restrict_arr_],
+                             int __eflags);
+
+extern size_t regerror (int __errcode, const regex_t * __preg,
+                       char *__errbuf, size_t __errbuf_size);
+
+extern void regfree (regex_t *__preg);
+
+
+#ifdef __cplusplus
+}
+#endif /* C++ */
+
+/* For platform which support the ISO C amendment 1 functionality we
+   support user defined character classes.  */
+#if WIDE_CHAR_SUPPORT
+/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.  */
+# include <wchar.h>
+# include <wctype.h>
+#endif
+
+#if WIDE_CHAR_SUPPORT
+/* The GNU C library provides support for user-defined character classes
+   and the functions from ISO C amendment 1.  */
+# ifdef CHARCLASS_NAME_MAX
+#  define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
+# else
+/* This shouldn't happen but some implementation might still have this
+   problem.  Use a reasonable default value.  */
+#  define CHAR_CLASS_MAX_LENGTH 256
+# endif
+typedef wctype_t re_wctype_t;
+typedef wchar_t re_wchar_t;
+# define re_wctype wctype
+# define re_iswctype iswctype
+# define re_wctype_to_bit(cc) 0
+#else
+# define CHAR_CLASS_MAX_LENGTH  9 /* Namely, `multibyte'.  */
+# define btowc(c) c
+
+/* Character classes.  */
+typedef enum { RECC_ERROR = 0,
+              RECC_ALNUM, RECC_ALPHA, RECC_WORD,
+              RECC_GRAPH, RECC_PRINT,
+              RECC_LOWER, RECC_UPPER,
+              RECC_PUNCT, RECC_CNTRL,
+              RECC_DIGIT, RECC_XDIGIT,
+              RECC_BLANK, RECC_SPACE,
+              RECC_MULTIBYTE, RECC_NONASCII,
+              RECC_ASCII, RECC_UNIBYTE
+} re_wctype_t;
+
+extern char re_iswctype (int ch,    re_wctype_t cc);
+extern re_wctype_t re_wctype (const unsigned char* str);
+
+typedef int re_wchar_t;
+
+extern void re_set_whitespace_regexp (const char *regexp);
+
+#endif /* not WIDE_CHAR_SUPPORT */
+
+#endif /* regex.h */
+
diff --git a/lib-src/etags.c b/test/etags/c-src/etags.c
similarity index 99%
copy from lib-src/etags.c
copy to test/etags/c-src/etags.c
index b1361db..f243821 100644
--- a/lib-src/etags.c
+++ b/test/etags/c-src/etags.c
@@ -2862,7 +2862,10 @@ consider_token (char *str, int len, int c, int *c_extp,
      case st_none:
        if (constantypedefs
           && structdef == snone
-          && structtype == st_C_enum && bracelev > structbracelev)
+          && structtype == st_C_enum && bracelev > structbracelev
+          /* Don't tag tokens in expressions that assign values to enum
+             constants.  */
+          && fvdef != vignore)
         return true;           /* enum constant */
        switch (fvdef)
         {
@@ -3176,7 +3179,19 @@ C_entries (int c_ext, FILE *inf)
                      cpptoken = false;
                  }
              if (cpptoken)
-               definedef = dsharpseen;
+               {
+                 definedef = dsharpseen;
+                 /* This is needed for tagging enum values: when there are
+                    preprocessor conditionals inside the enum, we need to
+                    reset the value of fvdef so that the next enum value is
+                    tagged even though the one before it did not end in a
+                    comma.  */
+                 if (fvdef == vignore && instruct && parlev == 0)
+                   {
+                     if (strneq (cp, "#if", 3) || strneq (cp, "#el", 3))
+                       fvdef = fvnone;
+                   }
+               }
            } /* if (definedef == dnone) */
          continue;
        case '[':
@@ -3507,7 +3522,10 @@ C_entries (int c_ext, FILE *inf)
            case fstartlist:
            case finlist:
            case fignore:
+             break;
            case vignore:
+             if (instruct && parlev == 0)
+               fvdef = fvnone;
              break;
            case fdefunname:
              fvdef = fignore;
diff --git a/test/etags/c-src/exit.c b/test/etags/c-src/exit.c
new file mode 100644
index 0000000..b8cd22b
--- /dev/null
+++ b/test/etags/c-src/exit.c
@@ -0,0 +1,77 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include "exit.h"
+
+#ifdef HAVE_GNU_LD
+CONST struct
+  {
+    size_t n;
+    void EXFUN((*fn[1]), (NOARGS));
+  } __libc_atexit;
+#endif
+
+/* Call all functions registered with `atexit' and `on_exit',
+   in the reverse of the order in which they were registered
+   perform stdio cleanup, and terminate program execution with STATUS.  */
+__NORETURN
+void
+DEFUN(exit, (status), int status)
+{
+  register CONST struct exit_function_list *l;
+
+  for (l = __exit_funcs; l != NULL; l = l->next)
+    {
+      register size_t i = l->idx;
+      while (i-- > 0)
+       {
+         CONST struct exit_function *CONST f = &l->fns[i];
+         switch (f->flavor)
+           {
+           case ef_free:
+             break;
+           case ef_on:
+             (*f->func.on.fn)(status, f->func.on.arg);
+             break;
+           case ef_at:
+             (*f->func.at)();
+             break;
+           }
+       }
+    }
+
+#ifdef HAVE_GNU_LD
+  {
+    void EXFUN((*CONST *fn), (NOARGS));
+    for (fn = __libc_atexit.fn; *fn != NULL; ++fn)
+      (**fn) ();
+  }
+#else
+  {
+    extern void EXFUN(_cleanup, (NOARGS));
+    _cleanup();
+  }
+#endif
+
+  _exit(status);
+}
+
diff --git a/test/etags/c-src/exit.strange_suffix 
b/test/etags/c-src/exit.strange_suffix
new file mode 100644
index 0000000..b8cd22b
--- /dev/null
+++ b/test/etags/c-src/exit.strange_suffix
@@ -0,0 +1,77 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include "exit.h"
+
+#ifdef HAVE_GNU_LD
+CONST struct
+  {
+    size_t n;
+    void EXFUN((*fn[1]), (NOARGS));
+  } __libc_atexit;
+#endif
+
+/* Call all functions registered with `atexit' and `on_exit',
+   in the reverse of the order in which they were registered
+   perform stdio cleanup, and terminate program execution with STATUS.  */
+__NORETURN
+void
+DEFUN(exit, (status), int status)
+{
+  register CONST struct exit_function_list *l;
+
+  for (l = __exit_funcs; l != NULL; l = l->next)
+    {
+      register size_t i = l->idx;
+      while (i-- > 0)
+       {
+         CONST struct exit_function *CONST f = &l->fns[i];
+         switch (f->flavor)
+           {
+           case ef_free:
+             break;
+           case ef_on:
+             (*f->func.on.fn)(status, f->func.on.arg);
+             break;
+           case ef_at:
+             (*f->func.at)();
+             break;
+           }
+       }
+    }
+
+#ifdef HAVE_GNU_LD
+  {
+    void EXFUN((*CONST *fn), (NOARGS));
+    for (fn = __libc_atexit.fn; *fn != NULL; ++fn)
+      (**fn) ();
+  }
+#else
+  {
+    extern void EXFUN(_cleanup, (NOARGS));
+    _cleanup();
+  }
+#endif
+
+  _exit(status);
+}
+
diff --git a/test/etags/c-src/fail.c b/test/etags/c-src/fail.c
new file mode 100644
index 0000000..3248278
--- /dev/null
+++ b/test/etags/c-src/fail.c
@@ -0,0 +1 @@
+void (*prt_call())();
diff --git a/test/etags/c-src/getopt.h b/test/etags/c-src/getopt.h
new file mode 100644
index 0000000..93a5cf7
--- /dev/null
+++ b/test/etags/c-src/getopt.h
@@ -0,0 +1,125 @@
+/* Declarations for getopt.
+   Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any
+   later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#ifndef _GETOPT_H
+#define _GETOPT_H 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* For communication from `getopt' to the caller.
+   When `getopt' finds an option that takes an argument,
+   the argument value is returned here.
+   Also, when `ordering' is RETURN_IN_ORDER,
+   each non-option ARGV-element is returned here.  */
+
+extern char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+   This is used for communication to and from the caller
+   and for communication between successive calls to `getopt'.
+
+   On entry to `getopt', zero means this is the first call; initialize.
+
+   When `getopt' returns EOF, this is the index of the first of the
+   non-option elements that the caller should itself scan.
+
+   Otherwise, `optind' communicates from one call to the next
+   how much of ARGV has been scanned so far.  */
+
+extern int optind;
+
+/* Callers store zero here to inhibit the error message `getopt' prints
+   for unrecognized options.  */
+
+extern int opterr;
+
+/* Describe the long-named options requested by the application.
+   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
+   of `struct option' terminated by an element containing a name which is
+   zero.
+
+   The field `has_arg' is:
+   no_argument         (or 0) if the option does not take an argument,
+   required_argument   (or 1) if the option requires an argument,
+   optional_argument   (or 2) if the option takes an optional argument.
+
+   If the field `flag' is not NULL, it points to a variable that is set
+   to the value given in the field `val' when the option is found, but
+   left unchanged if the option is not found.
+
+   To have a long-named option do something other than set an `int' to
+   a compiled-in constant, such as set a value from `optarg', set the
+   option's `flag' field to zero and its `val' field to a nonzero
+   value (the equivalent single-letter option character, if there is
+   one).  For long options that have a zero `flag' field, `getopt'
+   returns the contents of the `val' field.  */
+
+struct option
+{
+#if    __STDC__
+  const char *name;
+#else
+  char *name;
+#endif
+  /* has_arg can't be an enum because some compilers complain about
+     type mismatches in all the code that assumes it is an int.  */
+  int has_arg;
+  int *flag;
+  int val;
+};
+
+/* Names for the values of the `has_arg' field of `struct option'.  */
+
+#define        no_argument             0
+#define required_argument      1
+#define optional_argument      2
+
+#if __STDC__
+#if defined(__GNU_LIBRARY__)
+/* Many other libraries have conflicting prototypes for getopt, with
+   differences in the consts, in stdlib.h.  To avoid compilation
+   errors, only prototype getopt for the GNU C library.  */
+extern int getopt (int argc, char *const *argv, const char *shortopts);
+#else /* not __GNU_LIBRARY__ */
+extern int getopt ();
+#endif /* not __GNU_LIBRARY__ */
+extern int getopt_long (int argc, char *const *argv, const char *shortopts,
+                       const struct option *longopts, int *longind);
+extern int getopt_long_only (int argc, char *const *argv,
+                            const char *shortopts,
+                            const struct option *longopts, int *longind);
+
+/* Internal only.  Users should not call this directly.  */
+extern int _getopt_internal (int argc, char *const *argv,
+                            const char *shortopts,
+                            const struct option *longopts, int *longind,
+                            int long_only);
+#else /* not __STDC__ */
+extern int getopt ();
+extern int getopt_long ();
+extern int getopt_long_only ();
+
+extern int _getopt_internal ();
+#endif /* not __STDC__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GETOPT_H */
diff --git a/test/etags/c-src/h.h b/test/etags/c-src/h.h
new file mode 100644
index 0000000..f86c00d
--- /dev/null
+++ b/test/etags/c-src/h.h
@@ -0,0 +1,119 @@
+typedef enum
+{
+   ELEM_I/**< Comment Element i
+              Second comment line. */
+} Fails_t;
+typedef void Lang_function ();
+void Asm_labels ();
+typedef struct tpcmd
+{
+#define ggg hhh
+  union
+  {
+  } arg;
+}
+tpcmd;
+typedef struct foobar2_ {
+    fu   int (*funcptr) (void *ptr);
+    long foo;
+    char bar;
+} foobar2;
+typedef enum
+{
+    DEVICE_SWP,
+    DEVICE_LAST
+} bsp_DevId;
+typedef union {
+  struct constant_args {
+    unsigned int burst;
+  } constant;
+} args;
+typedef int *regset;
+typedef int INT;
+typedef union abc
+{
+  int def;
+} ghi1;
+typedef union abc {
+  int def;
+} ghi2;
+typedef struct a {
+} b;
+#define c() d
+typedef struct an_extern_linkage *an_extern_linkage_ptr;
+typedef struct an_extern_linkage {
+  a_name_linkage_kind
+               kind;
+                       /* The kind of external linkage ("C++" or "C"). */
+  a_byte_boolean
+               is_explicit;
+                       /* TRUE if the external linkage requirement is
+                          explicitly specified in the source; FALSE for the
+                          default set for the translation unit as a whole. */
+#ifdef CL_CHANGES
+  a_byte_boolean is_curly_brace_form;
+#endif
+} an_extern_linkage;
+typedef struct pollfd   pfdset[FD_SETSIZE];
+typedef union rtunion_def
+  {
+    int rtint;
+    char *rtstr;
+    struct rtx_def *rtx;
+  } womboid ;
+typedef union rtunion_def
+
+{
+
+  int rtint;
+  char *rtstr;
+  struct rtx_def *rtxp;
+  struct rtx_def rtxnp;
+
+}
+
+womboid
+
+;
+
+
+/* Leave the next two lines in that order.  They exercise an old bug. */
+enum {dog, cat} animals;
+typedef void (_CALLBACK_ *signal_handler)(int);
+typedef void (_CALLBACK_ *signal_handler1)(int);
+/* comment */ #define ANSIC
+ #define ANSIC
+ #else
+typedef void (proc) ();
+typedef void OperatorFun(int opId);
+typedef int f(int a,
+              int b);
+struct my_struct {
+};
+typedef struct my_struct my_typedef;
+typedef RETSIGTYPE (*signal_handler_t) (int);
+#if 0
+  Date 04 May 87 235311 PDT (Mon)
+  Date: 04 May 87 23:53:11 PDT (Mon)
+#endif
+typedef unsigned char unchar;
+typedef int X, Y, Z;
+typedef mio mao;
+extern void ab();
+typedef struct a { } b;
+typedef struct b
+{
+} c;
+int    (*oldhup)();
+request (*oldhup) ();
+int extvar;
+#define tag1
+#define aaaaaa \
+bbbbbb
+#define bbbbbb\
+cccccc
+#define cccccccccc
+#define enter_critical_section         do { int pri = spl7();
+#define exit_critical_to_previous      splarg (pri); } while (0)
+#define UNDEFINED
+struct re_pattern_buffer { unsigned char *buffer; };
diff --git a/test/etags/c-src/machsyscalls.c b/test/etags/c-src/machsyscalls.c
new file mode 100644
index 0000000..44930c3
--- /dev/null
+++ b/test/etags/c-src/machsyscalls.c
@@ -0,0 +1,10 @@
+/* Aliases for basic Mach system calls:
+   mach_task_self -> __mach_task_self, etc.  */
+
+#include <gnu-stabs.h>
+
+#define        SYSCALL(name, number, type, args, typed_args) \
+  function_alias (name, __##name, type, args, \
+                 name typed_args)
+
+#include "mach_syscalls.h"
diff --git a/test/etags/c-src/machsyscalls.h b/test/etags/c-src/machsyscalls.h
new file mode 100644
index 0000000..8b33dc4
--- /dev/null
+++ b/test/etags/c-src/machsyscalls.h
@@ -0,0 +1,31 @@
+SYSCALL (mach_msg_trap, -25,
+        mach_msg_return_t,
+        (msg, option, send_size,
+         rcv_size, rcv_name, timeout, notify),
+        (mach_msg_header_t *msg,
+         mach_msg_option_t option,
+         mach_msg_size_t send_size,
+         mach_msg_size_t rcv_size,
+         mach_port_t rcv_name,
+         mach_msg_timeout_t timeout,
+         mach_port_t notify))
+
+SYSCALL (mach_reply_port, -26,
+        mach_port_t,
+        (),
+        (void))
+
+SYSCALL (mach_thread_self, -27,
+        mach_port_t,
+        (),
+        (void))
+
+SYSCALL (mach_task_self, -28,
+        mach_port_t,
+        (),
+        (void))
+
+SYSCALL (mach_host_self, -29,
+        mach_port_t,
+        (),
+        (void))
diff --git a/test/etags/c-src/sysdep.h b/test/etags/c-src/sysdep.h
new file mode 100644
index 0000000..298a0e4
--- /dev/null
+++ b/test/etags/c-src/sysdep.h
@@ -0,0 +1,57 @@
+/* Copyright (C) 1992, 1993 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include <sysdeps/unix/sysdep.h>
+
+#define        ENTRY(name)                                                     
      \
+  .globl _##name;                                                            \
+  .align 2;                                                                  \
+  _##name##:
+
+#define        PSEUDO(name, syscall_name, args)                                
      \
+  .text;                                                                     \
+  .globl syscall_error;                                                        
      \
+  ENTRY (name)                                                               \
+    XCHG_##args
+    movl $SYS_##syscall_name, %eax;                                          \
+    int $0x80;                                                               \
+    test %eax, %eax;                                                         \
+    jl syscall_error;                                                        \
+    XCHG_##args
+
+/* Linux takes system call arguments in registers:
+       1: %ebx
+       2: %ecx
+       3: %edx
+       4: %esi
+       5: %edi
+   We put the arguments into registers from the stack,
+   and save the registers, by using the 386 `xchg' instruction
+   to swap the values in both directions.  */
+
+#define        XCHG_0  /* No arguments to frob.  */
+#define        XCHG_1  xchg 8(%esp), %ebx; XCHG_0
+#define        XCHG_2  xchg 12(%esp), %ecx; XCHG_1
+#define        XCHG_3  xchg 16(%esp), %edx; XCHG_2
+#define        XCHG_4  xchg 20(%esp), %esi; XCHG_3
+#define        XCHG_5  xchg 24(%esp), %edi; XCHG_3
+
+#define        r0              %eax    /* Normal return-value register.  */
+#define        r1              %edx    /* Secondary return-value register.  */
+#define scratch        %ecx    /* Call-clobbered register for random use.  */
+#define MOVE(x,y)      movl x, y
diff --git a/test/etags/c-src/tab.c b/test/etags/c-src/tab.c
new file mode 100644
index 0000000..b25d55c
--- /dev/null
+++ b/test/etags/c-src/tab.c
@@ -0,0 +1,112 @@
+/*
+** tab.c for  in
+**
+** Made by Pierric
+** Login   <address@hidden>
+**
+** Started on  Thu Jan 24 18:36:47 2002 Pierric
+** Last update Mon Sep 23 18:02:02 2002 Pierric
+*/
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include "my_malloc.h"
+
+static int             count_words(char *str, char delim)
+{
+  int                   count;
+
+  count = 0;
+  while (*str)
+    {
+      if (*str != delim)
+       {
+         count++;
+         if (!strchr(str + 1, delim))
+           return (count);
+         str = strchr(str + 1, delim);
+       }
+      else
+       str++;
+    }
+  return (count);
+}
+
+static char            *get_word(char **str, char delim)
+{
+  char                 *tmp;
+  char                 *new;
+
+  while (**str == delim)
+    (*str)++;
+  if (**str == 0)
+    return (NULL);
+  tmp = strchr(*str, delim);
+  if (!tmp)
+    {
+      new = strdup(*str);
+      while (**str)
+       (*str)++;
+      return (new);
+    }
+  my_malloc(new, tmp - *str + 1);
+  new[tmp - *str] = '\0';
+  strncpy(new, *str, tmp - *str);
+  *str = tmp;
+  return (new);
+}
+
+void                   tab_free(char **tab)
+{
+  int                   index;
+
+  if (!tab)
+    return;
+  for (index = 0; tab[index]; index++)
+    free(tab[index]);
+  free(tab);
+}
+
+char                   **tab_fill(char *str, char delim)
+{
+  int                   count;
+  char                  **tab;
+  int                   index;
+
+  if (!str)
+    return (NULL);
+  count = count_words(str, delim);
+  if (!count)
+    return (NULL);
+  my_malloc(tab, (count + 1) * sizeof(char *));
+  for (index = 0; (tab[index] = get_word(&str, delim)); index++)
+    ;
+  return (tab);
+}
+
+/*
+**             Deletes the first element of a wordtab, shifting the other
+**     elements. The size of the malloced area stays the same, though
+*/
+int                    tab_delete_first(char **tab)
+{
+  int                   i;
+
+  if (!tab[0])
+    return (-1);
+  free(tab[0]);
+  for (i = 0; tab[i]; i++)
+    tab[i] = tab[i + 1];
+  return (0);
+}
+
+int                    tab_count_words(char **tab)
+{
+  int                   count;
+
+  if (!tab)
+    return (0);
+  for (count = 0; tab[count]; count++)
+    ;
+  return (count);
+}
diff --git a/test/etags/c-src/torture.c b/test/etags/c-src/torture.c
new file mode 100644
index 0000000..77c3763
--- /dev/null
+++ b/test/etags/c-src/torture.c
@@ -0,0 +1,107 @@
+/* Date: Thu, 05 Aug 1993 20:28:03 +0200
+   From: "Tom R.Hageman" <address@hidden>
+   Subject: more etags torture;-) [etags 7.3 patch#3]
+   To: address@hidden
+
+   Hi,
+
+   This test file illustrates some more problems with etags (7.3):
+ 
+
+   1. parentheses are confusing,
+   2. preprocessor directives can disrupt other state machines. */
+
+/* A small torture test for etags. */
+
+/* The classic parenthesis nightmare, based on signal(). */
+void
+(*tag1 (sig, handler)) ()
+  int sig;
+  void (*handler) ();
+{
+  (*handler)(sig);
+  return handler;
+}
+
+#define notag2 void
+/* The classic, with user-defined return type. */
+notag2
+(*tag2 (sig, handler)) ()
+  int sig;
+  void (*handler) ();
+{
+  (*handler)(sig);
+  return handler;
+}
+
+/* The classic, in ANSI C style. */
+void
+(*tag3 (int sig, void (*handler) (int))) (int)
+{
+  (*handler)(sig);
+  return handler;
+}
+
+#define notag4 void
+/* The classic, with user-defined return type, in ANSI C style. */
+notag4
+(*tag4 (int sig, void (*handler) (int))) (int)
+{
+  (*handler)(sig);
+  return handler;
+}
+
+
+/* A less tortuous example. */
+void
+tag5 (handler, arg)
+void (*handler)();
+void *arg;
+{
+  (*handler)(arg);
+}
+
+/* A less tortuous example, in ANSI C style. */
+void
+tag6 (void (*handler) (void *), void *arg)
+{
+  (*handler)(arg);
+}
+
+
+/* Interfering preprocessing torture */
+
+int pp1(
+#if (__STDC__)
+       int
+#endif
+       bar)
+#if (!__STDC__)
+     int bar;
+#endif
+{
+  return bar;
+}
+
+int
+pp2
+#if __STDC__
+  (int bar)
+#else
+  (bar)
+    int bar;
+#endif
+{
+  return bar;
+}
+
+int
+#if __STDC__
+pp3(int bar)
+#else
+pp3(bar)
+  int bar;
+#endif
+{
+  return bar;
+}
diff --git a/test/etags/cp-src/MDiagArray2.h b/test/etags/cp-src/MDiagArray2.h
new file mode 100644
index 0000000..78ee5e1
--- /dev/null
+++ b/test/etags/cp-src/MDiagArray2.h
@@ -0,0 +1,163 @@
+// Template array classes with like-type math ops
+/*
+
+Copyright (C) 1996 John W. Eaton
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, write to the Free
+Software Foundation, 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+*/
+
+#if defined (__GNUG__)
+#pragma interface
+#endif
+
+#if !defined (octave_MDiagArray2_h)
+#define octave_MDiagArray2_h 1
+
+#include "DiagArray2.h"
+#include "MArray2.h"
+
+#if defined (LTGT)
+#undef LTGT
+#endif
+
+#if !defined (CXX_NEW_FRIEND_TEMPLATE_DECL)
+#define LTGT
+#else
+
+#define LTGT <>
+
+template <class T>
+class MDiagArray2;
+
+template <typename T> MDiagArray2<T>&
+operator += (MDiagArray2<T>& a, const MDiagArray2<T>& b);
+
+template <typename T> MDiagArray2<T>&
+operator -= (MDiagArray2<T>& a, const MDiagArray2<T>& b);
+
+template <typename T> MDiagArray2<T> 
+operator * (const MDiagArray2<T>& a, const T& s);
+
+template <typename T> MDiagArray2<T> 
+operator / (const MDiagArray2<T>& a, const T& s);
+
+template <typename T> MDiagArray2<T> 
+operator * (const T& s, const MDiagArray2<T>& a);
+
+template <typename T> MDiagArray2<T>
+operator + (const MDiagArray2<T>& a, const MDiagArray2<T>& b); 
+
+template <typename T> MDiagArray2<T>
+operator - (const MDiagArray2<T>& a, const MDiagArray2<T>& b);
+
+template <typename T> MDiagArray2<T>
+product (const MDiagArray2<T>& a, const MDiagArray2<T>& b);
+
+template <typename T> MDiagArray2<T> 
+operator - (const MDiagArray2<T>& a);
+#endif
+
+// Two dimensional diagonal array with math ops.
+
+template <class T>
+class MDiagArray2 : public DiagArray2<T>
+{
+protected:
+
+  MDiagArray2 (T *d, int r, int c) : DiagArray2<T> (d, r, c) { }
+
+public:
+  
+  MDiagArray2 (void) : DiagArray2<T> () { }
+  MDiagArray2 (int r, int c) : DiagArray2<T> (r, c) { }
+  MDiagArray2 (int r, int c, const T& val) : DiagArray2<T> (r, c, val) { }
+  MDiagArray2 (const Array<T>& a) : DiagArray2<T> (a) { }
+  MDiagArray2 (const DiagArray2<T>& a) : DiagArray2<T> (a) { }
+  MDiagArray2 (const MDiagArray2<T>& a) : DiagArray2<T> (a) { }
+
+  ~MDiagArray2 (void) { }
+
+  MDiagArray2<T>& operator = (const MDiagArray2<T>& a)
+    {
+      DiagArray2<T>::operator = (a);
+      return *this;
+    }
+
+  operator MArray2<T> () const
+    {
+      MArray2<T> retval (nr, nc,  T (0));
+
+      int len = nr < nc ? nr : nc;
+
+      for (int i = 0; i < len; i++)
+       retval.xelem (i, i) = xelem (i, i);
+
+      return retval;
+    }
+
+  // element by element MDiagArray2 by MDiagArray2 ops
+
+  friend MDiagArray2<T>&
+  operator += LTGT (MDiagArray2<T>& a, const MDiagArray2<T>& b);
+
+  friend MDiagArray2<T>&
+  operator -= LTGT (MDiagArray2<T>& a, const MDiagArray2<T>& b);
+
+  // element by element MDiagArray2 by scalar ops
+
+  friend MDiagArray2<T> operator * LTGT (const MDiagArray2<T>& a, const T& s);
+  friend MDiagArray2<T> operator / LTGT (const MDiagArray2<T>& a, const T& s);
+
+  // element by element scalar by MDiagArray2 ops
+
+  friend MDiagArray2<T> operator * LTGT (const T& s, const MDiagArray2<T>& a);
+
+  // element by element MDiagArray2 by MDiagArray2 ops
+
+  friend MDiagArray2<T>
+  operator + LTGT (const MDiagArray2<T>& a, const MDiagArray2<T>& b); 
+
+  friend MDiagArray2<T>
+  operator - LTGT (const MDiagArray2<T>& a, const MDiagArray2<T>& b);
+
+  friend MDiagArray2<T>
+  product LTGT (const MDiagArray2<T>& a, const MDiagArray2<T>& b);
+
+  friend MDiagArray2<T> operator - LTGT (const MDiagArray2<T>& a);
+};
+
+#undef LTGT
+
+#define INSTANTIATE_MDIAGARRAY_FRIENDS(T) \
+  template MDiagArray2<T>& operator += (MDiagArray2<T>& a, const 
MDiagArray2<T>& b); \
+  template MDiagArray2<T>& operator -= (MDiagArray2<T>& a, const 
MDiagArray2<T>& b); \
+  template MDiagArray2<T> operator * (const MDiagArray2<T>& a, const T& s); \
+  template MDiagArray2<T> operator / (const MDiagArray2<T>& a, const T& s); \
+  template MDiagArray2<T> operator * (const T& s, const MDiagArray2<T>& a); \
+  template MDiagArray2<T> operator + (const MDiagArray2<T>& a, const 
MDiagArray2<T>& b); \
+  template MDiagArray2<T> operator - (const MDiagArray2<T>& a, const 
MDiagArray2<T>& b); \
+  template MDiagArray2<T> product (const MDiagArray2<T>& a, const 
MDiagArray2<T>& b); \
+  template MDiagArray2<T> operator - (const MDiagArray2<T>& a);
+
+#endif
+
+/*
+;;; Local Variables: ***
+;;; mode: C++ ***
+;;; End: ***
+*/
diff --git a/test/etags/cp-src/Pctest.h b/test/etags/cp-src/Pctest.h
new file mode 100644
index 0000000..52d68aa
--- /dev/null
+++ b/test/etags/cp-src/Pctest.h
@@ -0,0 +1,99 @@
+// -*- c++ -*-
+//
+// $Id: Pctest.h,v 1.14 2000/01/19 17:14:42 bmah Exp $
+//
+// Pctest.h
+// Bruce A. Mah <address@hidden>
+//
+// This work was first produced by an employee of Sandia National
+// Laboratories under a contract with the U.S. Department of Energy.
+// Sandia National Laboratories dedicates whatever right, title or
+// interest it may have in this software to the public. Although no
+// license from Sandia is needed to copy and use this software,
+// copying and using the software might infringe the rights of
+// others. This software is provided as-is. SANDIA DISCLAIMS ANY
+// WARRANTY OF ANY KIND, EXPRESS OR IMPLIED.
+//
+// Header for virtual base class of tests.  A particular protocol (e.g.
+// IPv4, IPv6) will override the methods of this base class
+// with protocol-specific implementations.
+//
+//
+
+#ifndef PCTEST_H
+#define PCTEST_H
+
+#include <stdio.h>
+
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <string.h>
+#endif /* STDC_HEADERS */
+
+#if HAVE_UNISTD_H
+#include <sys/types.h>
+#endif /* HAVE_UNISTD_H */
+
+#include <sys/socket.h>
+#include <sys/time.h>
+
+#include "pc.h"
+// #include "TestRecord.h"
+class TestRecord;
+
+// Action codes.  ICMPv4 and ICMPv6 have different values for their type
+// and code fields.  The Pctest abstracts these differences.
+typedef enum {
+    PctestActionValid,         // store valid measurement (e.g. ICMP
+                               // time exceeded)
+    PctestActionValidLasthop,  // store valid measurement, this is last hop
+                               // (e.g. ICMP port unreachable)
+    PctestActionFiltered,      // packets filtered, give up (e.g.
+                               // ICMP prohibited)
+    PctestActionAbort          // huh?  we haven't a clue
+} PctestActionType;
+
+class Pctest {
+
+  public:
+    Pctest() {
+       initialized = 0;
+       TimeSyscall(syscallTime);
+
+       IF_DEBUG(3, fprintf(stderr, "syscallTime.tv_usec = %ld\n", 
syscallTime.tv_usec));
+    }
+    virtual ~Pctest() { };
+
+    // Get gettimeofday() system call overhead.
+    virtual void TimeSyscall(struct timeval &diff);
+
+    // Get random payload buffer
+    virtual char *GeneratePayload(int size);
+
+    // Set target host for our tests (resolve if necessary)
+    virtual int SetTargetName(char *target) = 0;
+
+    // Get target host name and address
+    virtual char *GetTargetName() { return targetName; };
+    virtual char *GetPrintableAddress() = 0;
+    virtual char *GetPrintableAddress(void *a) = 0;
+    virtual char *GetName(void *a) = 0;
+    virtual char *GetAddressFamily() = 0;
+
+    // Perform a test and return statistics
+    virtual int Test(TestRecord &tr) = 0;
+    virtual PctestActionType GetAction(TestRecord &tr) = 0;
+    virtual PctestActionType GetAction(TestRecord *tr) {
+       return this->GetAction(*tr);
+    };
+
+    virtual int GetMinSize() = 0;
+
+  protected:
+    int initialized;           // initialization flag
+    char *targetName;          // target hostname
+    struct timeval syscallTime;        // estimated overhead for gettimeofday()
+
+};
+
+#endif /* PCTEST_H */
diff --git a/test/etags/cp-src/Range.h b/test/etags/cp-src/Range.h
new file mode 100644
index 0000000..b8cbab4
--- /dev/null
+++ b/test/etags/cp-src/Range.h
@@ -0,0 +1,96 @@
+/*
+
+Copyright (C) 1996 John W. Eaton
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, write to the Free
+Software Foundation, 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+*/
+
+#if !defined (octave_Range_h)
+#define octave_Range_h 1
+
+#if defined (__GNUG__)
+#pragma interface
+#endif
+
+class istream;
+class ostream;
+class Matrix;
+
+class
+Range
+{
+ public:
+
+  Range (void)
+    : rng_base (-1), rng_limit (-1), rng_inc (-1), rng_nelem (-1) { }
+
+  Range (const Range& r)
+    : rng_base (r.rng_base), rng_limit (r.rng_limit), rng_inc (r.rng_inc),
+      rng_nelem (r.rng_nelem) { }
+
+  Range (double b, double l)
+    : rng_base (b), rng_limit (l), rng_inc (1),
+      rng_nelem (nelem_internal ()) { }
+
+  Range (double b, double l, double i)
+    : rng_base (b), rng_limit (l), rng_inc (i),
+      rng_nelem (nelem_internal ()) { }
+
+  double base (void) const { return rng_base;  }
+  double limit (void) const { return rng_limit; }
+  double inc (void) const { return rng_inc;   }
+  int nelem (void) const { return rng_nelem; }
+
+  bool all_elements_are_ints (void) const;
+
+  Matrix matrix_value (void) const;
+
+  double min (void) const;
+  double max (void) const;
+
+  void sort (void);
+
+  void set_base (double b) { rng_base = b;  }
+  void set_limit (double l) { rng_limit = l; }
+  void set_inc (double i) { rng_inc = i;   }
+
+  friend ostream& operator << (ostream& os, const Range& r);
+  friend istream& operator >> (istream& is, Range& r);
+
+  void print_range (void);
+
+ private:
+
+  double rng_base;
+  double rng_limit;
+  double rng_inc;
+
+  int rng_nelem;
+
+  int nelem_internal (void) const;
+};
+
+extern Range operator - (const Range& r);
+
+#endif
+
+/*
+;;; Local Variables: ***
+;;; mode: C++ ***
+;;; End: ***
+*/
diff --git a/test/etags/cp-src/abstract.C b/test/etags/cp-src/abstract.C
new file mode 100644
index 0000000..82aded4
--- /dev/null
+++ b/test/etags/cp-src/abstract.C
@@ -0,0 +1,4840 @@
+/*****************************************************************************
+
+  Copyright (c) 1992 Consorzio Pisa Ricerche.
+  Authors: Caneve Maurizio, Salvatori Elena
+
+  This software was produced under the ESPRIT/LOTOSPHERE
+  project. All rights reserved.
+
+*****************************************************************************/
+
+/*                                                             */
+/*     @(#)abstract.c  4.46  2/1/93                            */
+/*                                                             */
+
+#include <defs.h>
+#include <adatat.h>
+#include <abstract.h>
+#include <editor.h>
+#include <graphics.h>
+#include <sheet.h>
+#include <folder.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#ifdef DEBUG
+ #include <stream.h>
+#endif
+
+/*                                                             */
+/*     implementation of class Half_Container                  */
+/*                                                             */
+
+Half_Container::Half_Container(ID_List *g_l)
+{
+gate_list = g_l;
+type = HALFCONTAINER;
+selectable = FALSE;
+visible = g_l->GetVisible();
+
+Set_Unparser(new Gl_Half_Container(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Half_Container::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "HalfContainer" << x << " " << y << "\n";
+ cout << "HalfContainer" << h << " " << w << "\n";
+#endif
+if(father->GetTextual())
+   gate_list->SetPosition(x,y);
+ else gate_list->SetPosition(x + ROUND_CORNER,y - ROUND_CORNER);
+}
+
+void Half_Container::SetDimensions(void)
+{
+gate_list->SetDimensions();
+
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     
+     if(father->GetTextual())
+       {
+       h = Tree_Node::inUseFont()->Height();
+       w = gate_list->Get_W(); 
+       }
+      else {
+           h = gate_list->Get_H() + ROUND_CORNER + VBORDER;
+           w = gate_list->Get_W() + 2 * ROUND_CORNER;
+           }
+     }
+aligline = round(h/2.0);
+}
+
+void Half_Container::SetFather(Tree_Node *f)
+{
+father = f;
+gate_list->SetFather(this);
+}
+
+void Half_Container::SetCollapsed(char t)
+{
+collapsed = t;
+gate_list->SetCollapsed(t);
+}
+
+
+/*                                                             */
+/*     implementation of class Specification methods           */
+/*                                                             */
+
+Specification::Specification(Comment_List *c_l, ID_Place *id, ID_List *g_i_l, 
+                            Id_Decl_List *i_d_l, Comment_List *c_l1, 
Definition *d,
+                             Tree_Node *f, Data_List *data_l)
+{
+Gl_Sheet *sh;
+type = SPECIFICATION;
+selectable = FALSE;
+com_list = c_l;
+com_list1 = c_l1;
+ident = id;
+gate_list = g_i_l;
+id_decl_list = i_d_l;
+def = d;
+func = f;
+dt_list = data_l; 
+Set_Unparser(new Gl_Specification(this));
+sh = (glow->Get_Folder())->Current();
+sh->Add(Get_Unparser());
+sh->SetRoot(this);
+}
+
+void Specification::SetPosition(Coord xx, Coord yy)
+{
+Coord x1,y1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Specification" << x << " " << y << "\n";
+ cout << "Specification" << h << " " << w << "\n";
+#endif
+com_list->SetPosition(x,y);
+
+y1 = (com_list->Get_H() == 0)?y :y - com_list->Get_H() - SEPARATOR;
+com_list1->SetPosition(x,y1);
+
+x1 = x + round((w - gate_list->Get_W()) / 2.0);
+y1 = (com_list1->Get_H() == 0)?y1 :y1 - com_list1->Get_H() - SEPARATOR;
+gate_list->SetPosition(x1,y1);
+
+y = y1 - gate_list->Get_H();
+
+x1 = x + round((w - ident->Get_W()) / 2.0);
+y1 = y - VBORDER;
+ident->SetPosition(x1,y1);
+yl1 = y1 - ident->Get_H() - VBORDER;
+
+x1 = x + round((w - id_decl_list->Get_W()) / 2.0);
+y1 = yl1 - VBORDER;
+id_decl_list->SetPosition(x1,y1);
+
+yl2 = y1 - id_decl_list->Get_H() - VBORDER;
+
+y1 = (id_decl_list->Get_H() == 0)? yl2 + 2 * VBORDER - BORDER
+                                  : yl2 - BORDER;
+x1 = x + round((w - def->Get_W()) / 2.0);
+def->SetPosition(x1,y1);
+
+if(func->GetType() == EXIT && func->Get_W() != 0)
+   yl3 = y1 - def->Get_H() - BORDER;
+ else yl3 = 0;
+x1 = x + round((w - func->Get_W()) / 2.0);
+if(func->GetType() == EXIT)
+  ((Exit *)func)->SetPosition(x1,y - h + func->Get_H(),x + w,y - h + 
func->Get_H());
+ else func->SetPosition(x + w, y - h + func->Get_H());
+}
+
+void Specification::SetDimensions(void)
+{
+com_list->SetDimensions();
+com_list1->SetDimensions();
+ident->SetDimensions();
+gate_list->SetDimensions();
+id_decl_list->SetDimensions();
+func->SetDimensions();
+def->SetDimensions();
+w = Max4(gate_list->Get_W(),ident->Get_W(),id_decl_list->Get_W(),def->Get_W());
+w = Max(w, func->Get_W());
+w += 2 * BORDER;
+
+h = ident->Get_H()+id_decl_list->Get_H()+def->Get_H();
+h = (func->GetType() == EXIT && func->Get_W() != 0)? h + func->Get_H(): h;
+h = (id_decl_list->Get_H() == 0)? h + 2 * VBORDER + 2 * BORDER
+                          : h + 4 * VBORDER + 2 * BORDER;
+MaxX = com_list->Get_W();
+MaxX = Max(MaxX, w + EXIT_S);
+MaxY = h + gate_list->Get_H(); /* we have also to take in account the gate 
list      */
+if(com_list->Get_H() != 0)
+  MaxY = MaxY + com_list->Get_H() + SEPARATOR;          /* there are also some 
comments         */
+}
+
+void Specification::SetFather(Tree_Node *f)
+{
+father = f;
+com_list->SetFather(this);
+com_list1->SetFather(this);
+ident->SetFather(this);
+gate_list->SetFather(this);
+id_decl_list->SetFather(this);
+def->SetFather(this);
+func->SetFather(this);
+if(dt_list != NULL)
+  dt_list->SetFather(this);
+}
+
+void Specification::SetPath(int& np, int& nd)
+{
+char buff[PATH_LENGHT];
+np = np + 1;
+sprintf(buff,"of %s",ident->GetIdent());
+def->SetPath(buff, 1, np, nd);
+if(dt_list != NULL)
+  dt_list->SetPath(buff, 0, np, nd);
+}
+
+Coord Specification::GetMaxX()
+{ return(MaxX);}
+
+Coord Specification::GetMaxY()
+{ return(MaxY);}
+
+/*                                                             */
+/*     implementation of class Process methods                 */
+/*                                                             */
+
+Process::Process(Comment_List *c_l, ID_Place *id, ID_List *g_i_l, Id_Decl_List 
*i_d_l,
+                            Definition *d, Tree_Node *f)
+{
+Gl_Sheet *sh;
+type = PROCESS;
+selectable = FALSE;
+nesting = 0;
+com_list = c_l;
+ident = id;
+gate_list = g_i_l;
+id_decl_list = i_d_l;
+def = d;
+func = f;
+Set_Unparser(new Gl_Process(this));
+
+sh = (glow->Get_Folder())->Current();
+sh->Add(Get_Unparser());
+sh->SetRoot(this);
+}
+
+void Process::SetPosition(Coord xx, Coord yy)
+{
+Coord x1,y1;
+x = xx;
+ypath = yy;
+y = yy - SEPARATOR - ident->Get_H();                   /* it is equal to the 
height of the path */
+#ifdef DEBUG
+ cout << "Process" << x << " " << y << "\n";
+ cout << "Process" << h << " " << w << "\n";
+#endif
+
+com_list->SetPosition(x,y);
+
+x1 = x + round((w - gate_list->Get_W()) / 2.0);
+y1 = (com_list->Get_H() == 0)?y :y - com_list->Get_H() - SEPARATOR;
+gate_list->SetPosition(x1,y1);
+
+y = y1 - gate_list->Get_H();
+
+x1 = x + round((w - ident->Get_W()) / 2.0);
+y1 = y - VBORDER;
+ident->SetPosition(x1,y1);
+yl1 = y1 - ident->Get_H() - VBORDER;
+
+x1 = x + round((w - id_decl_list->Get_W()) / 2.0);
+y1 = yl1 - VBORDER;
+id_decl_list->SetPosition(x1,y1);
+
+if(id_decl_list->Get_H() != 0)
+  {
+  yl2 = y1 - id_decl_list->Get_H() - VBORDER;
+  y1 = yl2 - BORDER;
+  }
+ else {
+      yl2 = 0;
+      y1 = yl1 - BORDER;
+      }
+x1 = x + round((w - def->Get_W()) / 2.0);
+def->SetPosition(x1,y1);
+
+if(func->GetType() == EXIT && func->Get_W() != 0)
+   yl3 = y1 - def->Get_H() - BORDER;
+ else yl3 = 0;
+x1 = x + round((w - func->Get_W()) / 2.0);
+if(func->GetType() == EXIT)
+  ((Exit *)func)->SetPosition(x1,y - h + func->Get_H(),x + w,y - h + 
func->Get_H());
+ else func->SetPosition(x + w, y - h + func->Get_H());
+}
+
+void Process::SetDimensions(void)
+{
+com_list->SetDimensions();
+ident->SetDimensions();
+gate_list->SetDimensions();
+id_decl_list->SetDimensions();
+func->SetDimensions();
+def->SetDimensions();
+w = Max4(gate_list->Get_W(),ident->Get_W(),id_decl_list->Get_W(),def->Get_W());
+w = Max(w, func->Get_W());
+w += 2 * BORDER;
+
+h = ident->Get_H()+id_decl_list->Get_H()+def->Get_H();
+h = (func->GetType() == EXIT && func->Get_W() != 0)? h + func->Get_H(): h;
+h = (id_decl_list->Get_H() == 0)? h + 2 * VBORDER + 2 * BORDER
+                          : h + 4 * VBORDER + 2 * BORDER;
+MaxX = Max(com_list->Get_W(),Tree_Node::inUseFont()->Width(((Proc_List 
*)GetFather())->GetPath()));
+MaxX = Max(MaxX,w + EXIT_S);
+MaxY = h + SEPARATOR + ident->Get_H() + gate_list->Get_H(); /* we have also to 
take in account         */
+                                                            /* the path and 
the gate list      */
+if(com_list->Get_H() != 0)
+  MaxY = MaxY + com_list->Get_H() + SEPARATOR;         /* there are also some 
comments         */
+}
+
+void Process::SetFather(Tree_Node *f)
+{
+father = f;
+com_list->SetFather(this);
+ident->SetFather(this);
+gate_list->SetFather(this);
+id_decl_list->SetFather(this);
+func->SetFather(this);
+def->SetFather(this);
+}
+
+void Process::SetPath(char *p, char n, int& np, int& nd)
+{
+char buff[PATH_LENGHT];
+nesting = n;
+np = np + 1;
+sprintf(buff,"of %s %s",ident->GetIdent(), p);
+def->SetPath(buff, nesting + 1, np, nd);
+}
+
+Coord Process::GetMaxX()
+{return(MaxX);}
+
+Coord Process::GetMaxY()
+{return(MaxY);}
+
+/*                                                             */
+/*     implementation of class Choice methods                  */
+/*                                                             */
+
+
+Choice::Choice(Tree_Node *b1, Tree_Node *b2)
+{
+type = CHOICE;
+alignement = glow->GetAligs(CHOICE);
+bex1 = b1;
+bex2 = b2;
+
+Set_Unparser(new Gl_Choice(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Choice::SetPosition(Coord xx, Coord yy)
+{
+Coord x1,y1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Choice" << x << " " << y << "\n";
+ cout << "Choice" << h << " " << w << "\n";
+#endif
+if(textual)
+   {                   
+   SetTerminalPos();
+   x1 = xl + Tree_Node::inUseFont()->Width("[] ");
+   bex1->SetPosition(x1,y - border);
+   bex2->SetPosition(x1, yl);
+   }
+ else {                /* graphical            */
+      if(alignement == HOR)
+         {
+         if(!havebox)
+            x1 = x;
+          else x1 = x + BORDER;
+         y1 = round(y - (h - bex1->Get_H())/2.0);
+         bex1->SetPosition(x1,y1);
+         xl = x1 + bex1->Get_W() + BORDER;
+         x1 = xl + BORDER;
+         y1 = round(y - (h - bex2->Get_H())/2.0);
+         bex2->SetPosition(x1,y1);
+         }
+        else {
+             if(!havebox)
+               y1 = y;
+              else y1 = y - BORDER;
+             x1 = round(x + (w - bex1->Get_W())/2.0);
+             bex1->SetPosition(x1,y1);
+             xl = y1 - bex1->Get_H() - BORDER;
+             y1 = xl - BORDER;
+             x1 = round(x + (w - bex2->Get_W())/2.0);
+             bex2->SetPosition(x1,y1);
+             }
+       }
+delta = (!havebox && (father->GetType() != CHOICE))?
+           (father->GetType() == DEFINITION)?
+               round((father->GetFather()->Get_W() - w)/2.0)
+            : round((father->Get_W() - w)/2.0)
+         : BORDER;
+}
+
+void Choice::SetDimensions(void)
+{
+bex1->SetDimensions();
+bex2->SetDimensions();
+border = 0;
+
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:   if(textual)
+                          {
+                          w = Tree_Node::inUseFont()->Width("<Bex>");
+                          h = Tree_Node::inUseFont()->Height();
+                          if(!(father->GetTextual()) && (father->GetType() <= 
PARALLEL ))
+                            {border = VBORDER; w += 2 * VBORDER; h += 2 * 
VBORDER; }
+                          }
+                        else {
+                              w = 
round((Tree_Node::inUseFont()->Width("Bex"))*20.0/9.0);
+                             h = 
round((Tree_Node::inUseFont()->Width("Bex"))*14.0/9.0);
+                             }
+                       break; 
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED: 
+        if(textual)
+           {
+           h = Get_Textual_H(); w = Get_Textual_W();
+           if(!(father->GetTextual()) && (father->GetType() <= PARALLEL))
+              {border = VBORDER; w += 2 * VBORDER; h += 2 * VBORDER; }
+           }
+          else {       /* graphical            */
+              if(alignement == HOR)
+                  {
+                 w = bex1->Get_W() + bex2->Get_W() + 2 * BORDER;
+                 h = Max(bex1->Get_H(), bex2->Get_H());
+                 }
+               else {  
+                    h = bex1->Get_H() + bex2->Get_H() + 2 * BORDER;
+                    w = Max(bex1->Get_W(), bex2->Get_W());
+                    }
+              if(havebox)
+                {w += 2 * BORDER; h += 2 * BORDER;}
+                else {
+                     if((bex1->GetType() == CHOICE) && (bex1->Collapsed() != 
COLLAPSED_VIS))
+                       {
+                      if(alignement == HOR)
+                         ((Choice *)bex1)->ChangeH(h);
+                        else ((Choice *)bex1)->ChangeW(w);
+                      }
+                     if((bex2->GetType() == CHOICE) && (bex2->Collapsed() != 
COLLAPSED_VIS))
+                       {
+                      if(alignement == HOR)
+                         ((Choice *)bex2)->ChangeH(h);
+                        else ((Choice *)bex2)->ChangeW(w);
+                      }
+                     }
+               }
+        break;
+  }
+aligline = round(h/2.0);
+}
+
+void Choice::ChangeH(int nh)
+{
+int bh;                /* it will be the forced height for the second choice 
son       */
+if(!(GetTextual()))
+  {
+  h = nh;
+  bh = h - ((Choice *)bex1)->Get_H();
+  if(alignement == HOR)
+    {
+    if((bex1->GetType() == CHOICE) && (bex1->Collapsed() != COLLAPSED_VIS))
+       ((Choice *)bex1)->ChangeH(h);
+    if((bex2->GetType() == CHOICE) && (bex2->Collapsed() != COLLAPSED_VIS))
+       ((Choice *)bex2)->ChangeH(h);
+    }
+   else {
+        if((bex1->GetType() == CHOICE) && (bex1->Collapsed() != COLLAPSED_VIS))
+           ((Choice *)bex1)->ChangeW(w);
+         else  bh = bh - 2 * BORDER;
+        if((bex2->GetType() == CHOICE) && (bex2->Collapsed() != COLLAPSED_VIS))
+           {
+           ((Choice *)bex2)->ChangeW(w);
+           ((Choice *)bex2)->ChangeH(bh); /* we have to remember the forced    
*/
+                                         /* height, even if the alignwement is 
*/
+                                         /* now vertical                       
        */
+           }
+        }
+  }
+}
+
+void Choice::ChangeW(int nw)
+{
+int bw;
+if(!(GetTextual()))
+  {
+  w = nw;
+  bw =  w - ((Choice *)bex1)->Get_W();
+  if(alignement != HOR)
+     {
+     if((bex1->GetType() == CHOICE) && (bex1->Collapsed() != COLLAPSED_VIS))
+        ((Choice *)bex1)->ChangeW(w);
+     if((bex2->GetType() == CHOICE) && (bex2->Collapsed() != COLLAPSED_VIS))
+        ((Choice *)bex2)->ChangeW(w);
+     }
+   else {
+        if((bex1->GetType() == CHOICE) && (bex1->Collapsed() != COLLAPSED_VIS))
+           ((Choice *)bex1)->ChangeH(h);
+         else bw = bw - 2 * BORDER;
+        if((bex2->GetType() == CHOICE) && (bex2->Collapsed() != COLLAPSED_VIS))
+           {
+           ((Choice *)bex2)->ChangeH(h);
+           ((Choice *)bex2)->ChangeW(bw);
+           }
+        }
+  }
+}
+
+void Choice::SetFather(Tree_Node *f)
+{
+char ft;
+ft = (f->GetType() == PARALLEL)? ((Parallel *)f)->GetOperType(): f->GetType();
+havebox = HaveBox(CHOICE,ft);
+father = f;
+bex1->SetFather(this);
+bex2->SetFather(this);
+}
+
+void Choice::SetTextual(char t, char s)
+{
+textual = t;
+selectable = (!t | s);
+bex1->SetTextual(t);
+bex2->SetTextual(t);
+}
+
+void Choice::SetCollapsed(char t)
+{
+collapsed = t;
+if(t)
+  t = COLLAPSED_INV;
+bex1->SetCollapsed(t);
+bex2->SetCollapsed(t);
+}
+
+int Choice::Get_Textual_H()
+{
+if((father->GetType() == CHOICE) && father->GetTextual())
+   return(bex1->Get_H() + bex2->Get_H() + VBORDER);
+ else return(bex1->Get_H() + bex2->Get_H() + 2 * VBORDER
+                + Tree_Node::inUseFont()->Height());
+}
+
+int Choice::Get_Textual_W()
+{
+int b;
+b = Max(bex1->Get_W(), bex2->Get_W());
+if((father->GetType() == CHOICE) && father->GetTextual())
+   return(b);
+ else return(Tree_Node::inUseFont()->Width("[] ") + b);
+}
+
+void Choice::SetTerminalPos()
+{
+
+xl=yl=yl1=0;
+if((father->GetType() == CHOICE) &&
+    father->GetTextual())      /* xl, yl is the position of [] */
+       {
+       xl = x - Tree_Node::inUseFont()->Width("[] ") + border;
+       yl = y - bex1->Get_H() - VBORDER - border;
+       }
+   else {                              /* x,y is the position of ( */
+       xl = x + border;
+       yl = y - bex1->Get_H() - VBORDER - border;
+       yl1 = yl - bex2->Get_H() - VBORDER;
+       }
+}
+
+
+/*                                                             */
+/*     implementation of class stop methods                    */
+/*                                                             */
+
+Stop::Stop()
+{
+type = STOP;
+Set_Unparser(new Gl_Stop(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Stop::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+cout << "Stop" << x << " " << y << "\n";
+cout << "Stop" << h << " " << w << "\n";
+#endif
+}
+
+void Stop::SetDimensions(void)
+{
+border = 0;
+
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:   if(textual)
+                          {
+                          w = Tree_Node::inUseFont()->Width("<Bex>");
+                          h = Tree_Node::inUseFont()->Height();
+                          if(!(father->GetTextual()) && (father->GetType() <= 
PARALLEL))
+                             {border = VBORDER; w += 2 * VBORDER; h += 2 * 
VBORDER; }
+                          }
+                        else {
+                             w = 
round((Tree_Node::inUseFont()->Width("Bex"))*20.0/9.0);
+                             h = 
round((Tree_Node::inUseFont()->Width("Bex"))*14.0/9.0);
+                             }
+                       break; 
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     
+      if(textual)
+       {
+       w = Tree_Node::inUseFont()->Width("stop");
+       h = Tree_Node::inUseFont()->Height();
+       if(!(father->GetTextual()) && (father->GetType() <= PARALLEL))
+         {border = VBORDER; w += 2 * VBORDER; h += 2 * VBORDER; }
+       }
+       else {
+           w = 2 * STOP_R;
+           h = 2 * STOP_R;
+           if(havebox)
+             {w += 2 * BORDER; h += 2 * BORDER;}
+           }
+       break;
+ }
+aligline = round(h/2.0);
+}
+
+void Stop::SetFather(Tree_Node *f)
+{
+char ft;
+ft = (f->GetType() == PARALLEL)? ((Parallel *)f)->GetOperType(): f->GetType();
+havebox = HaveBox(STOP,ft);
+father = f;
+}
+
+void Stop::SetTextual(char t, char s)
+{ textual = t; selectable = (!t | s); }
+
+void Stop::SetCollapsed(char t)
+{
+collapsed = t;
+if(t)
+  t = COLLAPSED_INV;
+}
+
+
+/*                                                             */
+/*     implementation of class Exit methods                    */
+/*                                                             */
+
+Exit::Exit(ID_List *sl)
+{
+type = EXIT;
+selectable = FALSE;
+sort_list = sl;
+Set_Unparser(new Gl_Exit(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Exit::SetPosition(Coord x1, Coord y1, Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+sort_list->SetPosition(x1,y1 - VBORDER);
+#ifdef DEBUG
+ cout << "Exit" << x << " " << y << "\n";
+ cout << "Exit" << h << " " << w << "\n";
+#endif
+}
+
+void Exit::SetDimensions(void)
+{
+sort_list->SetDimensions();
+w = sort_list->Get_W();
+h = (sort_list->Get_H() == 0)? EXIT_S: sort_list->Get_H() + 2 * VBORDER;
+aligline = round(h/2.0);
+}
+
+void Exit::SetFather(Tree_Node *f)
+{father = f;
+}
+
+/*                                                             */
+/*     implementation of class Exit_Bex methods                */
+/*                                                             */
+
+Exit_Bex::Exit_Bex(Exit_Entry_List *l)
+{
+type = EXIT;
+alignement = glow->GetAligs(EXIT);
+entry_list = l;
+
+Set_Unparser(new Gl_Exit_Bex(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Exit_Bex::SetPosition(Coord xx, Coord yy)
+{
+Coord x1, y1;
+x = xx;
+y = yy;
+if(textual)
+   {
+   x1 = x + border;
+   y1 = y - border;
+   if(entry_list->GetVisible())
+      {
+      Xopen = x1 + Tree_Node::inUseFont()->Width("exit");
+      entry_list->SetPosition(Xopen + Tree_Node::inUseFont()->Width(" (") ,y1);
+      Xclose = Xopen + Tree_Node::inUseFont()->Width(" (") + 
entry_list->Get_W();
+      }
+    else entry_list->SetPosition(x1 + Tree_Node::inUseFont()->Width("exit") 
,y);
+   }
+ else if(havebox)
+        entry_list->SetPosition(x + 2 * BORDER,y - VBORDER - BORDER);
+       else entry_list->SetPosition(x + BORDER,y - VBORDER);
+
+#ifdef DEBUG
+ cout << "Exit_Bex" << x << " " << y << "\n";
+ cout << "Exit_Bex" << h << " " << w << "\n";
+#endif
+}
+
+void Exit_Bex::SetDimensions(void)
+{
+entry_list->SetDimensions();
+border = 0;
+
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:   if(textual)
+                          {
+                          w = Tree_Node::inUseFont()->Width("<Bex>");
+                          h = Tree_Node::inUseFont()->Height();
+                          if(!(father->GetTextual()) && (father->GetType() <= 
PARALLEL))
+                             {border = VBORDER; w += 2 * VBORDER; h += 2 * 
VBORDER; }
+                          }
+                        else {
+                             w = 
round((Tree_Node::inUseFont()->Width("Bex"))*20.0/9.0);
+                             h = 
round((Tree_Node::inUseFont()->Width("Bex"))*14.0/9.0);
+                             }
+                       aligline = round(h/2.0);
+                       break; 
+ case COLLAPSED_INV:   w = 0; h = 0; aligline = 0;
+                       break;
+ case NOCOLLAPSED:
+         if(textual)
+            {
+            w = (entry_list->Get_W() == 0)? 
Tree_Node::inUseFont()->Width("exit")
+                    : entry_list->Get_W() + 
Tree_Node::inUseFont()->Width("exit")
+                     + Tree_Node::inUseFont()->Width(" (") + 
Tree_Node::inUseFont()->Width(")");
+            h = Tree_Node::inUseFont()->Height();
+            if(!(father->GetTextual()) && (father->GetType() <= PARALLEL))
+               {border = VBORDER; w += 2 * VBORDER; h += 2 * VBORDER; }
+            aligline = round(h/2.0);
+            }
+          else {
+               if(alignement == HOR)
+                   {
+                  w = (entry_list->Get_W() == 0)? EXIT_S
+                      : entry_list->Get_W() + 2 * BORDER + EXIT_S;
+                  h = (entry_list->Get_H() == 0)? EXIT_S
+                      : Max(entry_list->Get_H() + 2 * VBORDER,EXIT_S);
+                  aligline = round(h/2.0);
+                  if(havebox)
+                    {w += 2 * BORDER; h += 2 * BORDER; aligline += BORDER;}
+                   }
+                else {
+                     w = (entry_list->Get_W() == 0)? EXIT_S
+                         : Max(entry_list->Get_W() + 2 * BORDER,EXIT_S);
+                     h = (entry_list->Get_H() == 0)? EXIT_S
+                         : entry_list->Get_H() + 2 * VBORDER + EXIT_S;
+                     aligline = (entry_list->Get_H() == 0)? round(EXIT_S/2.0)
+                                : round((h - EXIT_S)/2.0);
+                     if(havebox)
+                        {w += 2 * BORDER; h += 2 * BORDER; aligline += BORDER;}
+                      }
+               }
+ }
+}
+
+void Exit_Bex::SetFather(Tree_Node *f)
+{
+char ft;
+ft = (f->GetType() == PARALLEL)? ((Parallel *)f)->GetOperType(): f->GetType();
+havebox = HaveBox(EXIT,ft);
+father = f; 
+entry_list->SetFather(this);
+}
+
+void Exit_Bex::SetTextual(char t, char s)
+{
+textual = t; 
+selectable = (!t | s);
+entry_list->SetTextual(t);
+}
+
+void Exit_Bex::SetCollapsed(char t)
+{
+collapsed = t;
+if(t)
+  t = COLLAPSED_INV;
+entry_list->SetCollapsed(t);
+}
+
+/*                                                             */
+/*     implementation of class NoExit methods                  */
+/*                                                             */
+
+NoExit::NoExit()
+{
+type = NOEXIT;
+selectable = FALSE;
+
+Set_Unparser(new Gl_NoExit(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void NoExit::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "NoExit" << x << " " << y << "\n";
+ cout << "NoExit" << h << " " << w << "\n";
+#endif
+}
+
+void NoExit::SetDimensions(void)
+{
+w = NO_EXIT_S;
+h = NO_EXIT_S;
+aligline = round(h/2.0);
+}
+
+void NoExit::SetFather(Tree_Node *f)
+{father = f;
+}
+
+
+/*                                                             */
+/*     implementation of class ID_Place methods                */
+/*                                                             */
+
+ID_Place::ID_Place()
+{
+type = IDPLACE;
+visible = FALSE;
+textual = TRUE;
+RBubble = NORMAL;
+selectable = FALSE;
+str = new char[2];
+str[0] = ' '; str[1] = '\0';
+
+Set_Unparser(new Gl_Identifier(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void ID_Place::SetIdent(char *identifier)
+{
+int i;
+visible = TRUE;
+
+delete str;
+str = new char[strlen(identifier) + 1];
+for(i=0; i<= strlen(identifier); i++)
+  *(str+i) = *(identifier+i);
+}
+
+void ID_Place::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "IDPlace" << x << " " << y << "\n";
+ cout << "IDPlace" << h << " " << w << "\n";
+ cout << "IDPlace" << visible << " " << collapsed << "\n";
+#endif
+}
+
+void ID_Place::SetDimensions(void)
+{
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED: 
+               switch(RBubble)
+                {
+                case NORMAL:   w = Tree_Node::inUseFont()->Width(str);
+                               h = Tree_Node::inUseFont()->Height();
+                               break;
+                case ROUND:    w = Max(Tree_Node::inUseFont()->Width(str) + 
+                                        2 * ROUND_CORNER, SMALL_DIL);
+                               h = Tree_Node::inUseFont()->Height() + 
+                                         SYNCR_L + SMALL_PEN;
+                               break;
+                case ELLIPSE:
+                case F_ELLIPSE: w = Tree_Node::inUseFont()->Width(str) + 2 * 
ROUND_CORNER;
+                                h = Tree_Node::inUseFont()->Height() + 2 * 
ROUND_CORNER;
+                                break;
+                case D_ELLIPSE: w = Tree_Node::inUseFont()->Width(str) + 2 * 
ROUND_CORNER;
+                                h = Tree_Node::inUseFont()->Height() + 2 * 
ROUND_CORNER 
+                                        + 2 *MAX_VIEWS;
+                                break; 
+               }
+ }
+aligline = round(h/2.0);
+}
+
+void ID_Place::SetFather(Tree_Node *f)
+{ father = f;
+}
+
+ID_Place::~ID_Place()
+{ delete str; }
+
+void ID_Place::SetVisible(char v)
+{ 
+if (strcmp(str, " ") != 0)
+       visible = v;
+}
+
+void ID_Place::ClearID(void)
+{
+visible = FALSE;
+delete str;
+str = new char[2];
+str[0] = ' '; str[1] = '\0';
+}
+
+/*                                                             */
+/*     implementation of class ID_List methods                 */
+/*                                                             */
+
+ID_List::ID_List(ID_Place *el, ID_List *nxt)
+{
+type = IDLIST;
+elem = el;
+next = nxt;
+alignement = HOR;
+textual = TRUE;
+selectable = FALSE;
+visible = elem->GetVisible();
+
+Set_Unparser(new Gl_Id_List(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void ID_List::SetPosition(Coord xx, Coord yy)
+{
+Coord x1,y1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "IDList" << x << " " << y << "\n";
+ cout << "IDList" << h << " " << w << "\n";
+ cout << "IDList" << visible << " " << collapsed << "\n";
+#endif
+if (elem != NULL)
+ {
+ y1 = y;
+ x1 = (alignement == HOR) ? x : x - round(elem->Get_W()/2.0);
+                /* x is the central axis for the Vertical list*/
+ elem->SetPosition(x1,y1);
+ if (next != NULL)
+ {
+  if (elem->GetRBubble() == NORMAL)
+      {
+      x1 = (alignement == VER) ? x:  
+               x1 + elem->Get_W() + Tree_Node::inUseFont()->Width(", ");
+      y1 = (alignement == VER) ? y1 - elem->Get_H() - VBORDER : y;
+      }
+   else
+     x1 = x + elem->Get_W() + ROUND_CORNER;
+ next->SetPosition(x1,y1);
+ }
+
+}
+}
+
+void ID_List::SetDimensions(void)
+{
+elem->SetDimensions();
+if(next!=NULL)
+   next->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     if (elem->GetRBubble() == NORMAL)
+                               {
+                               if (alignement == HOR)
+                                {h = Tree_Node::inUseFont()->Height();
+                                w = (next == NULL || next->next == NULL)
+                                   ? elem->Get_W() : elem->Get_W() + 
+                                   next->Get_W() + 
Tree_Node::inUseFont()->Width(", ");
+                                }
+                               else /*op_id_list only*/
+                                {
+                                h = (next == NULL || next->next == NULL)
+                                   ? elem->Get_H() : elem->Get_H() + 
+                                   next->Get_H() + VBORDER;
+                                w = (next == NULL || next->next == NULL)
+                                   ? elem->Get_W() : Max(elem->Get_W(), 
+                                   next->Get_W());
+                                }
+                               
+                               }
+                          else {
+                                h =  elem->Get_H();    
+                                w = (next == NULL || next->next == NULL)
+                                    ? elem->Get_W() : elem->Get_W() + 
+                                    next->Get_W() + ROUND_CORNER;
+                               }       
+ }
+aligline = round(h/2.0);
+}
+
+void ID_List::SetFather(Tree_Node *f)
+{
+father = f;
+if(elem != NULL)
+  elem->SetFather(this);
+if(next != NULL)
+  next->SetFather(this);
+}
+
+void ID_List::SetCollapsed(char t)
+{
+collapsed = t;
+if(elem != NULL)
+  elem->SetCollapsed(t);
+if(next != NULL)
+  next->SetCollapsed(t);
+}
+
+void ID_List::HideMe(void)
+{
+visible = FALSE;
+if(elem != NULL)
+  elem->SetVisible(FALSE);
+if(next != NULL)
+  next->HideMe();
+}
+
+void ID_List::SetRBubble(char r)
+{
+if(elem != NULL)
+  elem->SetRBubble(r);
+if(next != NULL)
+  next->SetRBubble(r);
+}
+
+void ID_List::SetAlignement(char a)
+{
+alignement = a;
+if(elem != NULL)
+  elem->SetAlignement(a);
+if(next != NULL)
+  next->SetAlignement(a);
+}
+
+int ID_List::GetCardinality(int c)
+{
+int card;
+card = c;
+if(elem->GetVisible())
+        card ++;
+if(next != NULL)
+  card = next->GetCardinality(card);
+return(card);
+}
+
+void ID_List::SetVisible(char v)
+{
+if(elem != NULL)
+  elem->SetVisible(v);  
+visible = elem->GetVisible();       /*ID_List is set to visible only if elem 
is 
+                                       not a placeholder */
+if(next != NULL)
+  next->SetVisible(v);
+}
+
+void ID_List::BuildSigSorts(char bubble, SignatureSorts **head, char type, 
Oper *op)
+{
+if((elem != NULL) && elem->GetVisible())
+ {
+ if(*head != NULL)
+    (*head)->Append(bubble, elem, type, op);
+   else {
+       *head = new SignatureSorts(bubble, elem, NULL);
+       switch(type)
+         {
+        case '0': break;
+         case '1': (*head)->cost = op;
+                  break;
+         case '2': (*head)->op_in_l = new OperSig(op, NULL);
+                  break;
+         case '3': (*head)->op_out_l = new OperSig(op, NULL);
+        }      
+       }
+ }
+if(next != NULL)
+ next->BuildSigSorts(bubble, head, type, op);
+}
+
+void ID_List::ClearIDs(void)
+{
+visible = FALSE;
+if(elem != NULL)
+  elem->ClearID();
+if(next != NULL)
+  next->ClearIDs();
+}
+
+/*                                                             */
+/*     implementation of class Id_Decl methods                 */
+/*                                                             */
+
+Id_Decl::Id_Decl(ID_List *l, ID_Place *s)
+{
+type = IDDECL;
+textual = TRUE;
+selectable = FALSE;
+id_list = l;
+sort_id = s;
+if(l == NULL)
+  id_list = new ID_List(new ID_Place(),NULL);
+if(s == NULL)
+  sort_id = new ID_Place();
+visible = (id_list->GetVisible() && sort_id->GetVisible());
+
+Set_Unparser(new Gl_Id_Decl(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Id_Decl::SetPosition(Coord xx, Coord yy)
+{
+Coord x1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "IDDecl" << x << " " << y << "\n";
+ cout << "IDDecl" << h << " " << w << "\n";
+#endif
+if(id_list != NULL)
+ {
+ id_list->SetPosition(x,y);
+ x1 = x + id_list->Get_W() + Tree_Node::inUseFont()->Width(": ");
+ if(sort_id != NULL)
+   sort_id->SetPosition(x1,y);
+ }
+}
+
+void Id_Decl::SetDimensions(void)
+{
+id_list->SetDimensions();
+sort_id->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     h = Tree_Node::inUseFont()->Height();
+                       w = (visible)? id_list->Get_W()+sort_id->Get_W()
+                                                      
+Tree_Node::inUseFont()->Width(": ")
+                                    : 0;
+ }
+aligline = round(h/2.0);
+}
+
+void Id_Decl::SetFather(Tree_Node *f)
+{
+father = f;
+if(id_list != NULL)
+  id_list->SetFather(this);
+if(sort_id != NULL)
+  sort_id->SetFather(this);
+}
+
+void Id_Decl::SetCollapsed(char t)
+{
+collapsed = t;
+if(id_list != NULL)
+  id_list->SetCollapsed(t);
+if(sort_id != NULL)
+  sort_id->SetCollapsed(t);
+}
+
+
+/*                                                             */
+/*     implementation of class Id_Decl_List methods            */
+/*                                                             */
+
+Id_Decl_List::Id_Decl_List(Id_Decl *el, Id_Decl_List *nxt)
+{
+type = IDDECLLIST;
+textual = TRUE;
+selectable = FALSE;
+elem = el;
+next = nxt;
+visible = elem->GetVisible();
+
+Set_Unparser(new Gl_Id_Decl_List(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Id_Decl_List::SetPosition(Coord xx, Coord yy)
+{
+Coord x1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "IDDeclList" << x << " " << y << "\n";
+ cout << "IDDeclList" << h << " " << w << "\n";
+#endif
+if(elem != NULL)
+ {
+ elem->SetPosition(x,y);
+ x1 = x + elem->Get_W() + Tree_Node::inUseFont()->Width(", ");
+ if(next != NULL)
+   next->SetPosition(x1,y);
+ }
+}
+
+void Id_Decl_List::SetDimensions(void)
+{
+elem->SetDimensions();
+if(next!=NULL)
+   next->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     h = Tree_Node::inUseFont()->Height();
+                       w = (next == NULL || next->next == NULL)? elem->Get_W()
+                             : elem->Get_W() + next->Get_W() + 
Tree_Node::inUseFont()->Width(", ");
+ }
+aligline = round(h/2.0);
+}
+
+void Id_Decl_List::SetFather(Tree_Node *f)
+{
+father = f;
+if(elem != NULL)
+  elem->SetFather(this);
+if(next != NULL)
+  next->SetFather(this);
+}
+
+void Id_Decl_List::SetCollapsed(char t)
+{
+collapsed = t;
+if(elem != NULL)
+  elem->SetCollapsed(t);
+if(next != NULL)
+  next->SetCollapsed(t);
+}
+
+
+
+/*                                                             */
+/*     implementation of class Comment methods                 */
+/*                                                             */
+
+Comment::Comment()
+{
+type = COMMENT;
+textual = TRUE;
+visible = FALSE;
+selectable = FALSE;
+comm = new char[2];
+comm[0] = ' '; comm[1] = '\0';
+
+Set_Unparser(new Gl_Comment(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Comment::SetComment(char *comment)
+{
+visible = TRUE;
+delete comm;
+comm = new char[strlen(comment)+7];
+sprintf(comm, "(* %s *)",comment);
+if(glow->ShowComments())
+  {
+  w = Tree_Node::inUseFont()->Width(comm);
+  h = Tree_Node::inUseFont()->Height();
+  }
+ else {
+      w = 0;
+      h = 0;
+      };
+((glow->Get_Folder())->Current())->YesComments();
+}
+
+void Comment::SetFather(Tree_Node *f)
+{father = f;
+}
+
+void Comment::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Comment" << x << " " << y << "\n";
+ cout << "Comment" << h << " " << w << "\n";
+#endif
+}
+
+void Comment::SetDimensions(void)
+{
+if(visible && glow->ShowComments())
+  {
+  w = Tree_Node::inUseFont()->Width(comm);
+  h = Tree_Node::inUseFont()->Height();
+  }
+ else {
+      w = 0;
+      h = 0;
+      };
+aligline = round(h/2.0);
+}
+
+Comment::~Comment()
+{ delete comm; }
+
+/*                                                             */
+/*     implementation of class Comment_List methods            */
+/*                                                             */
+
+Comment_List::Comment_List(Comment *el, Comment_List *nxt)
+{
+type = COMMENTLIST;
+textual = TRUE;
+visible = TRUE;
+selectable = FALSE;
+elem = el;
+next = nxt;
+}
+
+void Comment_List::SetPosition(Coord xx, Coord yy)
+{
+Coord y1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "CommentList" << x << " " << y << "\n";
+ cout << "CommentList" << h << " " << w << "\n";
+#endif
+if(elem != NULL)
+ {
+ elem->SetPosition(x,y);
+ y1 = y - elem->Get_H();
+ if(next != NULL)
+   next->SetPosition(x,y1);
+ }
+}
+
+void Comment_List::SetDimensions(void)
+{
+elem->SetDimensions();
+if(next!=NULL)
+   next->SetDimensions();
+h = (next != NULL)? elem->Get_H() + next->Get_H()
+                 : elem->Get_H();
+w = (next != NULL)? Max(elem->Get_W(), next->Get_W())
+                 : elem->Get_W();
+aligline = round(h/2.0);
+}
+
+void Comment_List::SetFather(Tree_Node *f)
+{
+father = f;
+if(elem != NULL)
+  elem->SetFather(this);
+if(next != NULL)
+   next->SetFather(this);
+}
+
+
+/*                                                             */
+/*     implementation of class Parallel methods                */
+/*                                                             */
+
+Parallel::Parallel(Tree_Node *b1, Tree_Node *op, Tree_Node *b2)
+{
+type = PARALLEL;
+bex1 = b1;
+bex2 = b2;
+oper = op;
+
+Set_Unparser(new Gl_Parallel(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Parallel::SetPosition(Coord xx, Coord yy)
+{
+Coord x1,y1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Parallel" << x << " " << y << "\n";
+ cout << "Parallel" << h << " " << w << "\n";
+ cout << "Parallel" << visible << " " << collapsed << "\n";
+#endif
+
+if(textual)
+   {                   
+   SetTerminalPos();
+   x1 = (oper->GetType() == GEN_PARAL)? xl + Tree_Node::inUseFont()->Width("   
 ")
+                                       : xl + oper->Get_W();
+   bex1->SetPosition(x1, y - border);
+   oper->SetPosition(xl, yl);
+   if(oper->GetType() == GEN_PARAL)
+       bex2->SetPosition(x1, yl - oper->Get_H() - VBORDER);    
+    else bex2->SetPosition(x1, yl);    
+   }
+ else {
+      if(alignement == HOR)
+         {
+         if(!havebox)
+            x1 = x;
+          else x1 = x + BORDER;
+         y1 = y - aligline + bex1->GetAligLine();
+         bex1->SetPosition(x1,y1);
+         x1 = x1 + bex1->Get_W();
+         y1 = y - aligline + oper->GetAligLine();
+         oper->SetPosition(x1,y1);
+        x1 = x1 + oper->Get_W();
+         y1 = y - aligline + bex2->GetAligLine();
+         bex2->SetPosition(x1,y1);
+         }
+        else {
+             if(!havebox)
+                y1 = y;
+              else y1 = y - BORDER;
+             x1 = round(x + (w - bex1->Get_W())/2.0);
+             bex1->SetPosition(x1,y1);
+             y1 = y1 - bex1->Get_H();
+             x1 = round(x + (w - oper->Get_W())/2.0);
+             oper->SetPosition(x1,y1);
+            y1 = y1 - oper->Get_H();
+             x1 = round(x + (w - bex2->Get_W())/2.0);
+             bex2->SetPosition(x1,y1);
+             }
+       }
+delta = (father->GetType() == DEFINITION)?
+            round((father->GetFather()->Get_W() - w)/2.0)
+         : BORDER;
+}
+
+void Parallel::SetDimensions(void)
+{
+bex1->SetDimensions();
+bex2->SetDimensions();
+oper->SetDimensions();
+border = 0;
+
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:   if(textual)
+                          {
+                          w = Tree_Node::inUseFont()->Width("<Bex>");
+                          h = Tree_Node::inUseFont()->Height();
+                          if(!(father->GetTextual()) && (father->GetType() <= 
PARALLEL))
+                             {border = VBORDER; w += 2 * VBORDER; h += 2 * 
VBORDER; }
+                          }
+                        else {
+                             w = 
round((Tree_Node::inUseFont()->Width("Bex"))*20.0/9.0);
+                             h = 
round((Tree_Node::inUseFont()->Width("Bex"))*14.0/9.0);
+                             }
+                       aligline = round(h/2.0);
+                       break; 
+ case COLLAPSED_INV:   w = 0; h = 0; aligline = 0;
+                       break;
+ case NOCOLLAPSED: 
+     if(textual)
+       {
+       h = Get_Textual_H(); w = Get_Textual_W();
+       if(!(father->GetTextual()) && (father->GetType() <= PARALLEL))
+          {border = VBORDER; w += 2 * VBORDER; h += 2 * VBORDER; }
+       aligline = round(h/2.0);
+       }
+      else {
+          if(alignement == HOR)
+              {
+             w = bex1->Get_W() + oper->Get_W() + bex2->Get_W();
+
+             aligline = Max(bex1->GetAligLine(),oper->GetAligLine());
+             aligline = Max(aligline,bex2->GetAligLine());
+             if(bex1->Get_H() - bex1->GetAligLine() >
+                 oper->Get_H() - oper->GetAligLine())
+                h = bex1->Get_H() - bex1->GetAligLine();
+              else h = oper->Get_H() - oper->GetAligLine();
+             if(bex2->Get_H() - bex2->GetAligLine() > h)
+               h = bex2->Get_H() - bex2->GetAligLine();
+             h += aligline;
+             if(havebox)
+               {w += 2 * BORDER; h += 2 * BORDER; aligline += BORDER;}
+             }
+           else {
+                h = bex1->Get_H() + oper->Get_H() + bex2->Get_H();
+                w = Max(bex1->Get_W(), bex2->Get_W());
+                 w = Max(w, oper->Get_W());
+                if(havebox)
+                  {h += 2 * BORDER; w += 2 * BORDER;}
+                aligline = round(h/2.0);
+                }
+           }
+ }
+}
+
+void Parallel::SetTextual(char t, char s)
+{
+textual = t;
+selectable = (!t | s);
+bex1->SetTextual(t);
+oper->SetTextual(t);
+bex2->SetTextual(t);
+}
+
+int Parallel::Get_Textual_W()
+{
+int b;
+b = Max(bex1->Get_W(), bex2->Get_W());
+if(oper->GetType() == GEN_PARAL)
+   {
+   b += Tree_Node::inUseFont()->Width("    ");
+   b = Max(oper->Get_W(), b); return(b);
+   }
+ else 
+      if((father->GetType() == PARALLEL) && (((Parallel 
*)father)->GetOperType() == oper->GetType()) 
+         && father->GetTextual())
+         return(b);
+       else return(oper->Get_W() + b); 
+}
+
+int Parallel::Get_Textual_H()
+{
+if(oper->GetType() == GEN_PARAL)
+    return(bex1->Get_H() + bex2->Get_H() + oper->Get_H() +  3 *VBORDER
+           + Tree_Node::inUseFont()->Height());
+ else if((father->GetType() == PARALLEL) && (((Parallel 
*)father)->GetOperType() == oper->GetType())
+         &&  father->GetTextual())
+          return(bex1->Get_H() + bex2->Get_H() + VBORDER);
+       else return(bex1->Get_H() + bex2->Get_H() + 2 *VBORDER + 
Tree_Node::inUseFont()->Height());
+}
+
+void Parallel::SetTerminalPos()
+{
+xl=yl=yl1=0;
+
+yl =  y - bex1->Get_H() - VBORDER - border;
+if(oper->GetType() == GEN_PARAL)
+  {
+  xl = x + border;
+  yl1 =  yl - oper->Get_H() - bex2->Get_H() - 2 * VBORDER;
+  }
+ else 
+      if((father->GetType() == PARALLEL) && (((Parallel 
*)father)->GetOperType() == oper->GetType())
+          && father->GetTextual())
+           xl = x - oper->Get_W() + border;
+       else {
+            xl = x + border;
+            yl1 =  yl - bex2->Get_H() - VBORDER;
+            }
+}
+
+void Parallel::SetFather(Tree_Node *f)
+{
+char ft;
+ft = (f->GetType() == PARALLEL)? ((Parallel *)f)->GetOperType(): f->GetType();
+havebox = HaveBox(oper->GetType(),ft);
+father = f;
+bex1->SetFather(this);
+oper->SetFather(this);
+bex2->SetFather(this);
+}
+
+void Parallel::SetCollapsed(char t)
+{
+collapsed = t;
+if(t)
+  t = COLLAPSED_INV;
+bex1->SetCollapsed(t);
+oper->SetCollapsed(t);
+bex2->SetCollapsed(t);
+}
+
+/*                                                             */
+/*     implementation of class Ident_Eq methods                */
+/*                                                             */
+
+Ident_Eq::Ident_Eq(Id_Decl *idd, Value_Expr *ex)
+{
+type = IDEQ;
+textual = TRUE;
+selectable = FALSE;
+iddecl = idd;
+expr = ex;
+if(idd == NULL)
+  iddecl = new Id_Decl(NULL,NULL);
+if(ex == NULL)
+  expr = new Value_Expr;
+visible = (iddecl->GetVisible() && expr->GetVisible());
+
+Set_Unparser(new Gl_Ident_Eq(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Ident_Eq::SetPosition(Coord xx, Coord yy)
+{
+Coord x1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "IdentEq" << x << " " << y << "\n";
+ cout << "IdentEq" << h << " " << w << "\n";
+#endif
+
+iddecl->SetPosition(x,y);
+x1 = x + iddecl->Get_W() + Tree_Node::inUseFont()->Width(" = ");
+expr->SetPosition(x1,y);
+}
+
+void Ident_Eq::SetDimensions(void)
+{
+iddecl->SetDimensions();
+expr->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     w = iddecl->Get_W() + expr->Get_W() + 
Tree_Node::inUseFont()->Width(" = ");
+                       h = Tree_Node::inUseFont()->Height();
+ }
+aligline = round(h/2.0);
+}
+
+void Ident_Eq::SetFather(Tree_Node *f)
+{
+father = f;
+iddecl->SetFather(this);
+expr->SetFather(this);
+}
+
+void Ident_Eq::SetCollapsed(char t)
+{
+collapsed = t;
+iddecl->SetCollapsed(t);
+expr->SetCollapsed(t);
+}
+
+
+/*                                                             */
+/*     implementation of class Ident_Eq_List methods           */
+/*                                                             */
+
+Ident_Eq_List::Ident_Eq_List(Ident_Eq *el, Ident_Eq_List *nxt)
+{
+type = IDEQLIST;
+textual = TRUE;
+selectable = FALSE;
+elem = el;
+next = nxt;
+visible = elem->GetVisible();
+
+Set_Unparser(new Gl_Ident_Eq_List(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Ident_Eq_List::SetPosition(Coord xx, Coord yy)
+{
+Coord x1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "IdentEqList" << x << " " << y << "\n";
+ cout << "IdentEqList" << h << " " << w << "\n";
+#endif
+if(elem != NULL)
+ {
+ elem->SetPosition(x,y);
+ x1 = x + elem->Get_W() + Tree_Node::inUseFont()->Width(", ");
+ if(next != NULL)
+   next->SetPosition(x1,y);
+ }
+}
+
+void Ident_Eq_List::SetDimensions(void)
+{
+elem->SetDimensions();
+if(next!=NULL)
+   next->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     h = Tree_Node::inUseFont()->Height();
+                       w = (next == NULL || next->next == NULL)? elem->Get_W()
+                            : elem->Get_W() + next->Get_W() + 
Tree_Node::inUseFont()->Width(", ");
+ }
+aligline = round(h/2.0);
+}
+
+void Ident_Eq_List::SetCollapsed(char t)
+{
+collapsed = t;
+if(elem != NULL)
+  elem->SetCollapsed(t);
+if(next != NULL)
+  next->SetCollapsed(t);
+}
+
+void Ident_Eq_List::SetFather(Tree_Node *f)
+{
+father = f;
+if(elem != NULL)
+  elem->SetFather(this);
+if(next != NULL)
+  next->SetFather(this);
+}
+
+/*                                                             */
+/*     implementation of class Local_Def methods               */
+/*                                                             */
+
+Local_Def::Local_Def(Ident_Eq_List *e_l, Tree_Node *b)
+{
+type = LOCALDEF;
+equa_list = e_l;
+bex = b;
+
+Set_Unparser(new Gl_Local_Def(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Local_Def::SetPosition(Coord xx, Coord yy)
+{
+Coord x1,y1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Local_Def" << x << " " << y << "\n";
+ cout << "Local_Def" << h << " " << w << "\n";
+#endif
+
+if (textual)
+       {                                       /* x is the position og LET */
+       x1 = x + Tree_Node::inUseFont()->Width("let ") + border;
+       equa_list->SetPosition(x1, y - border);
+       yl = x1 + equa_list->Get_W();           /*yl is the position of IN */
+       x1 = x + SMALL_BORDER + border;
+       y1 = y - equa_list->Get_H() - VBORDER - border;
+       bex->SetPosition(x1,y1);
+       }
+     else {
+       x1 = x + BORDER;
+       y1 = y - VBORDER;
+       equa_list->SetPosition(x1,y1);
+       yl = y1 - equa_list->Get_H() - VBORDER;
+       y1 = yl - BORDER;
+       x1 = x + round((w - bex->Get_W())/2.0);
+       bex->SetPosition(x1,y1);
+       }
+}
+
+void Local_Def::SetDimensions(void)
+{
+bex->SetDimensions();
+equa_list->SetDimensions();
+border = 0;
+
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:    if(textual)
+                           {
+                          w = Tree_Node::inUseFont()->Width("<Bex>");
+                           h = Tree_Node::inUseFont()->Height();
+                           if(!(father->GetTextual()) && (father->GetType() <= 
PARALLEL))
+                              {border = VBORDER; w += 2 * VBORDER; h += 2 * 
VBORDER; }
+                          }
+                         else {
+                             w = 
round((Tree_Node::inUseFont()->Width("Bex"))*20.0/9.0);
+                              h = 
round((Tree_Node::inUseFont()->Width("Bex"))*14.0/9.0);
+                             }
+                        break;
+ case COLLAPSED_INV:    w = 0; h = 0;
+                        break;
+ case NOCOLLAPSED:
+       if(textual)
+         {
+         h = equa_list->Get_H() + VBORDER + bex->Get_H();
+         w = Max(equa_list->Get_W() + Tree_Node::inUseFont()->Width("let ") + 
+                  Tree_Node::inUseFont()->Width(" in "), bex->Get_W() + 
SMALL_BORDER);
+          if(!(father->GetTextual()) && (father->GetType() <= PARALLEL))
+            {border = VBORDER; w += 2 * VBORDER; h += 2 * VBORDER; }
+          }
+        else {
+             w = Max(bex->Get_W(), equa_list->Get_W());
+              w += 2 * BORDER;
+              h = bex->Get_H() + equa_list->Get_H() + 2 * (VBORDER + BORDER);
+              }
+       break;
+ }
+aligline = round(h/2.0);
+}
+
+void Local_Def::SetFather(Tree_Node *f)
+{
+father = f;
+equa_list->SetFather(this);
+bex->SetFather(this);
+}
+       
+void Local_Def::SetCollapsed(char t)
+{
+collapsed = t;
+if(t)
+  t = COLLAPSED_INV;
+equa_list->SetCollapsed(t);
+bex->SetCollapsed(t);
+}
+
+void Local_Def::SetTextual(char t, char s)
+{
+textual = t;
+selectable = (!t | s);
+bex->SetTextual(t);
+}
+
+
+/*                                                             */
+/*     implementation of class Hide methods                    */
+/*                                                             */
+
+Hide::Hide(ID_List *g_l, Tree_Node *b)
+{
+type = HIDE;
+alignement = VER;
+gate_list = g_l;
+bex = b;
+
+Set_Unparser(new Gl_Hide(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Hide::SetPosition(Coord xx, Coord yy)
+{
+Coord x1,y1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Hide" << x << " " << y << "\n";
+ cout << "Hide" << h << " " << w << "\n";
+#endif
+
+if (textual)
+       {                                       /* x is the position of Hide */
+       x1 = x + Tree_Node::inUseFont()->Width("hide ") + border;
+       gate_list->SetPosition(x1, y - border);
+       yl = x1 + gate_list->Get_W();           /* position of IN */ 
+       x1 = x + SMALL_BORDER + border;
+       y1 = y - gate_list->Get_H() - VBORDER - border;
+       bex->SetPosition(x1, y1);
+       }
+     else {
+       x1 = x + HIDE_W + BORDER;
+       y1 = y - VBORDER;
+       gate_list->SetPosition(x1,y1);
+       yl = y1 - gate_list->Get_H() - VBORDER;
+       y1 = yl - BORDER;
+       x1 = x + BORDER;
+       bex->SetPosition(x1,y1);
+       }
+}
+
+void Hide::SetDimensions(void)
+{
+int foo;
+
+bex->SetDimensions();
+gate_list->SetDimensions();
+border = 0;
+
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:   if(textual)
+                          {
+                          w = Tree_Node::inUseFont()->Width("<Bex>");
+                          h = Tree_Node::inUseFont()->Height();
+                          if(!(father->GetTextual()) && (father->GetType() <= 
PARALLEL))
+                             {border = VBORDER; w += 2 * VBORDER; h += 2 * 
VBORDER; }
+                          }
+                        else {
+                             w = 
round((Tree_Node::inUseFont()->Width("Bex"))*20.0/9.0);
+                             h = 
round((Tree_Node::inUseFont()->Width("Bex"))*14.0/9.0);
+                             }
+                       break; 
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:
+      if(textual == TRUE)
+       {
+       h = gate_list->Get_H() + VBORDER + bex->Get_H();
+       foo = Tree_Node::inUseFont()->Width("hide ") + gate_list->Get_W() +
+               Tree_Node::inUseFont()->Width(" in ");
+       w = Max(foo, bex->Get_W() + SMALL_BORDER);
+       if(!(father->GetTextual()) && (father->GetType() <= PARALLEL))
+         {border = VBORDER; w += 2 * VBORDER; h += 2 * VBORDER; }
+       }
+     else {
+       w = Max(bex->Get_W(), HIDE_W + gate_list->Get_W());
+       w += 2 * BORDER;
+       h = bex->Get_H() + gate_list->Get_H() + 2 * (VBORDER + BORDER);
+       }
+ }
+aligline = round(h/2.0);
+}
+
+void Hide::SetFather(Tree_Node *f)
+{
+father = f;
+gate_list->SetFather(this);
+bex->SetFather(this);
+}
+
+void Hide::SetCollapsed(char t)
+{
+collapsed = t;
+if(t)
+  t = COLLAPSED_INV;
+gate_list->SetCollapsed(t);
+bex->SetCollapsed(t);
+}
+
+
+void Hide::SetTextual(char t, char s)
+{
+textual = t;
+selectable = (!t | s);
+bex->SetTextual(t);
+}
+
+/*                                                             */
+/*     implementation of class Interl methods          */
+/*                                                             */
+
+Interl::Interl()
+{
+type = INTERL;
+alignement = glow->GetAligs(INTERL);
+selectable = FALSE;
+
+Set_Unparser(new Gl_Interl(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Interl::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Interl" << x << " " << y << "\n";
+ cout << "Interl" << h << " " << w << "\n";
+ cout << "Interl" << visible << " " << collapsed << "\n";
+#endif
+}
+
+void Interl::SetDimensions(void)
+{
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:
+       if(textual)
+         {
+         w = Tree_Node::inUseFont()->Width("||| ");
+         h = Tree_Node::inUseFont()->Height();
+         }
+         else {
+             if(father->GetAlignement() == HOR)
+                 {
+                w = 2 * BORDER;
+                h = 0;
+                }
+               else {
+                   w = 0;
+                   h = 2 * BORDER;
+                   }
+             }
+ }
+aligline = round(h/2.0);
+}
+
+void Interl::SetFather(Tree_Node *f)
+{
+father = f;
+father->UpdateAlig(INTERL);
+}
+
+/*                                                             */
+/*     implementation of class Syncr methods           */
+/*                                                             */
+
+Syncr::Syncr()
+{
+type = SYNCR;
+alignement = glow->GetAligs(SYNCR);
+selectable = FALSE;
+
+Set_Unparser(new Gl_Syncr(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Syncr::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Syncr" << x << " " << y << "\n";
+ cout << "Syncr" << h << " " << w << "\n";
+#endif
+}
+
+void Syncr::SetDimensions(void)
+{
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:
+       if(textual)
+         {
+         w = Tree_Node::inUseFont()->Width("|| ");
+         h = Tree_Node::inUseFont()->Height();
+         }
+        else {
+             if(father->GetAlignement() == HOR)
+              {
+              w = 2 * (SYNCR_R + SYNCR_L);
+              h = 2 * SYNCR_R;
+              }
+             else {
+                  w = 2 * SYNCR_R;
+                  h = 2 * (SYNCR_R + SYNCR_L);
+                  }
+            }
+ }
+aligline = round(h/2.0);
+}
+
+void Syncr::SetFather(Tree_Node *f)
+{
+father = f;
+father->UpdateAlig(SYNCR);
+}
+
+/*                                                              */
+/*      implementation of class Enable methods                  */
+/*                                                              */
+
+
+Enable::Enable(Tree_Node *b1, ID_List *g_i_l, Tree_Node *b2)
+{
+type = ENABLE;
+alignement = glow->GetAligs(ENABLE);
+bex1 = b1;
+gate_id_list = g_i_l;
+bex2 = b2;
+
+Set_Unparser(new Gl_Enable(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Enable::SetPosition(Coord xx, Coord yy)
+{
+Coord x1,y1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Enable" << x << " " << y << "\n";
+ cout << "Enable" << h << " " << w << "\n";
+#endif
+
+if(textual)
+   {
+   SetTerminalPos();
+   bex1->SetPosition(xl, y - border);
+   if(gate_id_list->GetVisible())
+      {
+      gate_id_list->SetPosition(xl + Tree_Node::inUseFont()->Width("accept 
"),yid);
+      bex2->SetPosition(xl, yid - gate_id_list->Get_H() - VBORDER);
+      }
+    else bex2->SetPosition(xl, yid);   
+   }
+  else {
+       if(alignement == HOR)
+          {
+         if(havebox)
+           x1 = x + BORDER;
+          else x1 = x;
+         y1 = y - aligline + bex1->GetAligLine();
+         bex1->SetPosition(x1,y1);
+
+         if(havebox)
+           xl = x + bex1->Get_W() + BORDER;
+          else xl = x + bex1->Get_W();
+         yl1 = y - aligline;
+
+         xid = xl + ENAB_L;
+         yid = yl1 + round(gate_id_list->Get_H()/2.0) + VBORDER;
+         gate_id_list->SetPosition(xid + BORDER,yid - VBORDER);
+
+         yl2 = (gate_id_list->Get_W() != 0)? 
+               xid + gate_id_list->Get_W() + 2 * BORDER
+                 : xid;
+         x1 = yl2 + ENAB_L + ENAB_S;
+         y1 = y - aligline + bex2->GetAligLine();
+         bex2->SetPosition(x1,y1);
+          }
+        else {
+            xl = x + round(w/2.0);
+            x1 = x + round((w - bex1->Get_W())/2.0);
+            if(havebox)
+               y1 = y - BORDER;
+             else y1 = y;
+            bex1->SetPosition(x1,y1);
+            yl1 = y1 - bex1->Get_H();
+            xid = x + round((w - gate_id_list->Get_W())/2.0) - BORDER;
+            yid = yl1 - ENAB_L;
+            gate_id_list->SetPosition(xid + BORDER,yid - VBORDER);
+            yl2 = (gate_id_list->Get_H() != 0)? 
+                  yid - gate_id_list->Get_H() - 2 * VBORDER
+                    : yid - gate_id_list->Get_H();
+            x1 = x + round((w - bex2->Get_W())/2.0);
+            y1 = yl2 - ENAB_L - ENAB_S;
+            bex2->SetPosition(x1,y1);
+             }
+       }
+}
+
+void Enable::SetDimensions(void)
+{
+bex1->SetDimensions();
+gate_id_list->SetDimensions();
+bex2->SetDimensions();
+border = 0;
+
+switch(collapsed) 
+ {
+ case COLLAPSED_VIS:   if(textual)
+                          {
+                          w = Tree_Node::inUseFont()->Width("<Bex>");
+                          h = Tree_Node::inUseFont()->Height();
+                          if(!(father->GetTextual()) && (father->GetType() <= 
PARALLEL))
+                             {border = VBORDER; w += 2 * VBORDER; h += 2 * 
VBORDER; }
+                          }
+                        else {
+                             w = 
round((Tree_Node::inUseFont()->Width("Bex"))*20.0/9.0);
+                             h = 
round((Tree_Node::inUseFont()->Width("Bex"))*14.0/9.0);
+                             }
+                       aligline = round(h/2.0);
+                       break; 
+ case COLLAPSED_INV:   w = 0; h = 0; aligline = 0;
+                       break;
+ case NOCOLLAPSED:
+     if(textual)
+       {
+        h = bex1->Get_H() + bex2->Get_H() + 2*VBORDER + 
Tree_Node::inUseFont()->Height();
+       w = Get_Textual_W();
+        if(gate_id_list->GetVisible())
+        h += VBORDER + Tree_Node::inUseFont()->Height();
+       if(!(father->GetTextual()) && (father->GetType() <= PARALLEL))
+         {border = VBORDER; w += 2 * VBORDER; h += 2 * VBORDER; }
+       aligline = round(h/2.0);
+       }
+       else {
+            if(alignement == HOR)
+               {
+              int b1,b2;
+              aligline = 
Max((round(ENAB_S/2.0)),(round(gate_id_list->Get_H()/2.0) + VBORDER));
+              aligline = Max(aligline,bex1->GetAligLine());
+              aligline = Max(aligline,bex2->GetAligLine());
+
+              if((gate_id_list->Get_H() - gate_id_list->GetAligLine()) >
+                 round(ENAB_S/2.0))
+                  b1 = gate_id_list->Get_H() - gate_id_list->GetAligLine();
+               else b1 =  round(ENAB_S/2.0);
+              if((bex1->Get_H() - bex1->GetAligLine()) > 
+                 (bex2->Get_H() - bex1->GetAligLine()))
+                 b2 = bex1->Get_H() - bex1->GetAligLine();
+               else b2 = bex2->Get_H() - bex1->GetAligLine();
+              if(b1 > b2)
+                h = aligline + b1;
+               else h = aligline + b2;
+              w = bex1->Get_W() + gate_id_list->Get_W() + bex2->Get_W();
+              w += (gate_id_list->Get_W() == 0)? 2 * ENAB_L + ENAB_S
+                                   : 2 * ENAB_L + ENAB_S + 2 * BORDER;
+              if(havebox)
+                {w += 2 * BORDER; h += 2 * BORDER; aligline += BORDER;}
+                }
+             else {
+                 w = Max4(bex1->Get_W(), gate_id_list->Get_W() + 2*BORDER, 
+                          bex2->Get_W(), ENAB_S);
+                 h = bex1->Get_H() + gate_id_list->Get_H() + bex2->Get_H();
+                 h += (gate_id_list == 0)? 2 * ENAB_L + ENAB_S
+                                      : 2 * ENAB_L + ENAB_S + 2 * VBORDER;
+                 aligline = round(h/2.0);
+                 if(havebox)
+                   {w += 2 * BORDER; h += 2 * BORDER;}
+                  }
+           }
+ }
+}
+
+void Enable::SetTextual(char t, char s)
+{
+textual = t;
+selectable = (!t | s);
+bex1->SetTextual(t);
+bex2->SetTextual(t);
+}
+
+void Enable::SetTerminalPos()
+
+/* x, y are the coordinate of (                                        */
+/* xid, yid are the coordinate of >>                           */
+/* xl, yl1 are the coordinate of accept                        */
+/* xl2, yl2 are the coordinate of in                           */
+{
+xid = x + border;
+yid = y - bex1->Get_H() - VBORDER - border;
+xl =  xid + Tree_Node::inUseFont()->Width(">> ");
+if(gate_id_list->GetVisible())
+  {
+  yl1 = yid;
+  xl2 = xl + Tree_Node::inUseFont()->Width("accept ") + gate_id_list->Get_W();
+  yl2 = yid;
+  Yclose = yid - gate_id_list->Get_H() -  bex2->Get_H() - 2 * VBORDER;
+  }
+ else Yclose = yid - bex2->Get_H() - VBORDER;
+}
+
+int Enable::Get_Textual_W()
+{
+int b;
+b = (gate_id_list->GetVisible())? Max(bex2->Get_W(), gate_id_list->Get_W() + 
+               Tree_Node::inUseFont()->Width("accept  in "))
+    : bex2->Get_W();
+b = Max(bex1->Get_W(), b);
+return(Tree_Node::inUseFont()->Width(">> ") + b);
+
+}
+
+int Enable::Get_Textual_H()
+{ return(bex1->Get_H() + bex2->Get_H() + 2*VBORDER + 
Tree_Node::inUseFont()->Height()); }
+
+void Enable::SetFather(Tree_Node *f)
+{
+char ft;
+ft = (f->GetType() == PARALLEL)? ((Parallel *)f)->GetOperType(): f->GetType();
+if(gate_id_list->GetVisible())
+   havebox = HaveBox(9,ft);
+ else havebox = HaveBox(ENABLE,ft);
+father = f;
+bex1->SetFather(this);
+gate_id_list->SetFather(this);
+bex2->SetFather(this);
+}
+
+void Enable::SetCollapsed(char t)
+{
+collapsed = t;
+if(t)
+  t = COLLAPSED_INV;
+bex1->SetCollapsed(t);
+gate_id_list->SetCollapsed(t);
+bex2->SetCollapsed(t);
+}
+
+
+/*                                                              */
+/*      implementation of class Disable methods                 */
+/*                                                              */
+
+
+Disable::Disable(Tree_Node *b1, Tree_Node *b2)
+{
+type = DISABLE;
+alignement = glow->GetAligs(DISABLE);
+bex1 = b1;
+bex2 = b2;
+
+Set_Unparser(new Gl_Disable(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Disable::SetPosition(Coord xx, Coord yy)
+{
+Coord x1,y1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Disable" << x << " " << y << "\n";
+ cout << "Disable" << h << " " << w << "\n";
+#endif
+if(textual)
+   {
+   SetTerminalPos();
+   x1 = xl + Tree_Node::inUseFont()->Width("[> ");
+   bex1->SetPosition(x1, y - border);
+   bex2->SetPosition(x1, yl);
+   }
+ else {
+      if(alignement == HOR)
+         {
+        if(havebox)
+            x1 = x + BORDER;
+          else x1 = x;
+        y1 = y - aligline + bex1->GetAligLine();
+        bex1->SetPosition(x1,y1);
+
+        x1 = x1 + bex1->Get_W() + SMALL_PEN + SYNCR_L + 2 * SYNCR_R;
+        y1 = y - aligline + bex2->GetAligLine();
+        bex2->SetPosition(x1,y1);
+        if(havebox)
+          xl = x + bex1->Get_W() + BORDER;
+         else xl = x + bex1->Get_W();
+        yl = y - aligline +  SYNCR_R;
+        }
+       else {
+           if(havebox)
+              y1 = y - BORDER;
+             else y1 = y;
+           x1 = round(x + (w - bex1->Get_W())/2.0);
+           bex1->SetPosition(x1,y1);
+           yl = y1 - bex1->Get_H() - SMALL_PEN - SYNCR_L - 2 * SYNCR_R;
+           xl = round(x + (w - bex2->Get_W())/2.0);
+           bex2->SetPosition(xl,yl);
+           xl = x + round(w/2) - SYNCR_R;
+           if(havebox)
+              yl = y - bex1->Get_H() - BORDER;
+            else yl = y - bex1->Get_H();
+            }
+      }
+
+}
+
+void Disable::SetDimensions(void)
+{
+bex1->SetDimensions();
+bex2->SetDimensions();
+border = 0;
+
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:   if(textual)
+                          {
+                          w = Tree_Node::inUseFont()->Width("<Bex>");
+                          h = Tree_Node::inUseFont()->Height();
+                          if(!(father->GetTextual()) && (father->GetType() <= 
PARALLEL))
+                             {border = VBORDER; w += 2 * VBORDER; h += 2 * 
VBORDER; }
+                          }
+                        else {
+                             w = 
round((Tree_Node::inUseFont()->Width("Bex"))*20.0/9.0);
+                             h = 
round((Tree_Node::inUseFont()->Width("Bex"))*14.0/9.0);
+                             }
+                       aligline = round(h/2.0);
+                       break; 
+ case COLLAPSED_INV:   w = 0; h = 0; aligline = 0;
+                       break;
+ case NOCOLLAPSED:
+       if(textual)
+          {
+          h = Get_Textual_H();
+          w = Get_Textual_W(); 
+          if(!(father->GetTextual()) && (father->GetType() <= PARALLEL))
+             {border = VBORDER; w += 2 * VBORDER; h += 2 * VBORDER; }
+          aligline = round(h/2.0);
+          }
+         else {
+             if(alignement == HOR)
+                 {
+                int b1;
+                w = bex1->Get_W() + bex2->Get_W();
+                w += SYNCR_L + 2 * SYNCR_R + SMALL_PEN;
+
+                aligline = Max(bex1->GetAligLine(), bex2->GetAligLine());
+                if((bex1->Get_H() - bex1->GetAligLine()) >
+                   (bex2->Get_H() - bex2->GetAligLine()))
+                   b1 = bex1->Get_H() - bex1->GetAligLine();
+                 else  b1 = bex2->Get_H() - bex2->GetAligLine();
+                h = aligline + b1;
+                if(havebox)
+                  {w += 2 * BORDER; h += 2 * BORDER; aligline += BORDER;}
+                 }
+               else {
+                   h = bex1->Get_H() + bex2->Get_H();
+                   h += SYNCR_L + 2 * SYNCR_R + SMALL_PEN;
+                   w = Max(bex1->Get_W(), bex2->Get_W());
+                   aligline = bex1->GetAligLine();
+                   if(havebox)
+                     {w += 2 * BORDER; h += 2 * BORDER; aligline += BORDER;}
+                   }
+             }
+ }
+}
+
+void Disable::SetFather(Tree_Node *f)
+{
+char ft;
+ft = (f->GetType() == PARALLEL)? ((Parallel *)f)->GetOperType(): f->GetType();
+havebox = HaveBox(DISABLE,ft);
+father = f;
+bex1->SetFather(this);
+bex2->SetFather(this);
+}
+
+void Disable::SetCollapsed(char t)
+{
+collapsed = t;
+if(t)
+  t = COLLAPSED_INV;
+bex1->SetCollapsed(t);
+bex2->SetCollapsed(t);
+}
+
+void Disable::SetTextual(char t, char s)
+{
+textual = t;
+selectable = (!t | s);
+bex1->SetTextual(t);
+bex2->SetTextual(t);
+}
+
+void Disable::SetTerminalPos()
+{
+
+if(father->GetType() == DISABLE && 
+   father->GetTextual())        /* xl, yl is the position of [> */
+   {
+   xl = x - Tree_Node::inUseFont()->Width("[> ") + border;
+   yl = y - bex1->Get_H() - VBORDER - border;
+   }
+  else {                               /* x,y is the position of ( */
+       xl = x + border;
+       yl = y - bex1->Get_H() - VBORDER - border;
+       yl2 = yl - bex2->Get_H() - VBORDER;
+       }
+}
+
+int Disable::Get_Textual_W()
+{
+int b;
+b = Max(bex1->Get_W(), bex2->Get_W());
+if((father->GetType() == DISABLE) && father->GetTextual())
+   return(b);
+return(Tree_Node::inUseFont()->Width("[> ") + b);
+}
+
+int Disable::Get_Textual_H()
+{
+if(father->GetType() == DISABLE && father->GetTextual())
+   return(bex1->Get_H() + bex2->Get_H() + VBORDER);
+ else return(bex1->Get_H() + bex2->Get_H() + 2 * VBORDER + 
Tree_Node::inUseFont()->Height());
+}
+
+/*                                                              */
+/*      implementation of class Gen_Paral methods               */
+/*                                                              */
+
+
+Gen_Paral::Gen_Paral(ID_List *g_i_l)
+{
+type = GEN_PARAL;
+alignement = glow->GetAligs(GEN_PARAL);
+selectable = FALSE;
+gate_id_list = g_i_l;
+visible = g_i_l->GetVisible();
+
+Set_Unparser(new Gl_Gen_Paral(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+
+}
+
+void Gen_Paral::SetPosition(Coord xx, Coord yy)
+{
+Coord x1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Gen_Paral" << x << " " << y << "\n";
+ cout << "Gen_Paral" << h << " " << w << "\n";
+#endif
+
+if(textual)
+   {                   /* x is the position of |[ */
+   x1 = x + Tree_Node::inUseFont()->Width(" |[");      
+   gate_id_list->SetPosition(x1, y);
+   Xclose = x1 + gate_id_list->Get_W();        /* position of ]| */
+   }
+ else {
+      if(father->GetType() == PAR)
+          gate_id_list->SetPosition(x + ROUND_CORNER, y  - ROUND_CORNER);
+       else {
+            if(father->GetAlignement() == HOR)
+               gate_id_list->SetPosition(x + SYNCR_L + ROUND_CORNER,y 
-ROUND_CORNER);
+             else gate_id_list->SetPosition(x + ROUND_CORNER,y-SYNCR_L - 
ROUND_CORNER);
+            }
+       }
+}
+
+void Gen_Paral::SetDimensions(void)
+{
+gate_id_list->SetDimensions();
+border = 0;
+
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:   if(textual)
+                          {
+                          w = Tree_Node::inUseFont()->Width("<Bex>");
+                          h = Tree_Node::inUseFont()->Height();
+                          if(!(father->GetTextual()) && (father->GetType() <= 
PARALLEL))
+                             {border = VBORDER; w += 2 * VBORDER; h += 2 * 
VBORDER; }
+                          }
+                        else {
+                             w = 
round((Tree_Node::inUseFont()->Width("Bex"))*20.0/9.0);
+                             h = 
round((Tree_Node::inUseFont()->Width("Bex"))*14.0/9.0);
+                             }
+                       break; 
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:
+       if(textual)
+          {
+          h = Tree_Node::inUseFont()->Height();
+          w = Tree_Node::inUseFont()->Width(" |[") + gate_id_list->Get_W() +
+                Tree_Node::inUseFont()->Width("]| ");
+          }
+         else {
+             if(father->GetType() == PAR)
+               {
+               h = gate_id_list->Get_H() + 2 * ROUND_CORNER;
+               w = gate_id_list->Get_W() + 2 * ROUND_CORNER;
+               }
+              else {
+                    if(father->GetAlignement() == HOR)
+                       {
+                      h = gate_id_list->Get_H() + 2 * ROUND_CORNER;
+                      w = gate_id_list->Get_W() + 2 * ROUND_CORNER + 2 * 
SYNCR_L;
+                       }
+                     else {
+                         h = gate_id_list->Get_H() + 2 * ROUND_CORNER + 2 * 
SYNCR_L;
+                         w = gate_id_list->Get_W() + 2 * ROUND_CORNER;
+                          }
+                   }
+             }
+ }
+aligline = round(h/2.0);
+}
+
+void Gen_Paral::SetFather(Tree_Node *f)
+{
+father = f;
+father->UpdateAlig(GEN_PARAL);
+gate_id_list->SetFather(this);
+}
+
+void Gen_Paral::SetCollapsed(char t)
+{
+collapsed = t; 
+gate_id_list->SetCollapsed(t);
+}
+
+
+/*                                                              */
+/*      implementation of class Action_Pref methods             */
+/*                                                              */
+
+
+Action_Pref::Action_Pref(Tree_Node *a_d, Tree_Node *b)
+{
+type = ACTION_PREF;
+alignement = glow->GetAligs(ACTION_PREF);
+action_den = a_d;
+bex = b;
+
+Set_Unparser(new Gl_Action_Pref(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Action_Pref::SetPosition(Coord xx, Coord yy)
+{
+Coord x1,y1;
+
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Action_Pref" << x << " " << y << "\n";
+ cout << "Action_Pref" << h << " " << w << "\n";
+#endif
+
+if(textual)
+   {
+   action_den->SetPosition(x + border, y - border);
+    y1 = y - action_den->Get_H() - VBORDER - border;
+   x1 = x + SMALL_BORDER + border;
+   bex->SetPosition(x1, y1);
+   }
+ else {
+      if(alignement == HOR)
+         {
+         y1 = y - aligline + action_den->GetAligLine();
+        if(havebox)
+           {
+          action_den->SetPosition(x + BORDER,y1);
+          x1 = x + action_den->Get_W() + BORDER;
+          }
+          else 
+           {
+          action_den->SetPosition(x,y1);
+          x1 = x + action_den->Get_W();
+          }
+         y1 = y - aligline + bex->GetAligLine();
+        bex->SetPosition(x1,y1);
+         }
+       else {
+            x1 = round(x + (w - action_den->Get_W())/2.0);
+           if(havebox)
+             y1 = y - BORDER;
+            else y1 = y;
+           action_den->SetPosition(x1,y1);
+           x1 = round(x + (w - bex->Get_W())/2.0);
+           y1 = y1 - action_den->Get_H();
+           bex->SetPosition(x1,y1);
+            }
+       }
+
+}
+
+void Action_Pref::SetDimensions(void)
+{
+action_den->SetDimensions();
+bex->SetDimensions();
+border = 0;
+
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:   if(textual)
+                          {
+                          w = Tree_Node::inUseFont()->Width("<Bex>");
+                          h = Tree_Node::inUseFont()->Height();
+                          if(!(father->GetTextual()) && (father->GetType() <= 
PARALLEL))
+                             {border = VBORDER; w += 2 * VBORDER; h += 2 * 
VBORDER; }
+                          }
+                        else {
+                             w = 
round((Tree_Node::inUseFont()->Width("Bex"))*20.0/9.0);
+                             h = 
round((Tree_Node::inUseFont()->Width("Bex"))*14.0/9.0);
+                             }
+                       aligline = round(h/2.0);
+                       break; 
+ case COLLAPSED_INV:   w = 0; h = 0; aligline = 0;
+                       break;
+ case NOCOLLAPSED:
+       if(textual)
+          {
+          h = action_den->Get_H() + bex->Get_H() + VBORDER;
+          w = Max(action_den->Get_W(), bex->Get_W() + SMALL_BORDER);
+          if(!(father->GetTextual()) && (father->GetType() <= PARALLEL))
+             {border = VBORDER; w += 2 * VBORDER; h += 2 * VBORDER; }
+          aligline = round(h/2.0);
+          }
+         else {
+              if(alignement == HOR)
+                 {
+                w = action_den->Get_W() + bex->Get_W();
+                aligline = Max(action_den->GetAligLine(),bex->GetAligLine());
+                if((action_den->Get_H() - action_den->GetAligLine()) >
+                     (bex->Get_H() - bex->GetAligLine()))
+                   h = aligline + action_den->Get_H() - 
action_den->GetAligLine();
+                  else  h = aligline + bex->Get_H() - bex->GetAligLine();
+                if(havebox)
+                  {w += 2 * BORDER; h += 2 * BORDER; aligline += BORDER;}
+                 }
+               else {
+                   h = action_den->Get_H() + bex->Get_H();
+                   w = Max(action_den->Get_W(), bex->Get_W());
+                   aligline = action_den->GetAligLine();
+                   if(havebox)
+                     {w += 2 * BORDER; h += 2 * BORDER; aligline += BORDER;}
+                    }
+             }
+ }
+}
+
+void Action_Pref::SetFather(Tree_Node *f)
+{
+char ft;
+ft = (f->GetType() == PARALLEL)? ((Parallel *)f)->GetOperType(): f->GetType();
+havebox = HaveBox(ACTION_PREF,ft);
+father = f;
+action_den->SetFather(this);
+bex->SetFather(this);
+}
+
+void Action_Pref::SetCollapsed(char t)
+{
+collapsed = t;
+if(t)
+  t = COLLAPSED_INV;
+action_den->SetCollapsed(t);
+bex->SetCollapsed(t);
+}
+
+void Action_Pref::SetTextual(char t, char s)
+{
+textual = t;
+selectable = (!t | s);
+action_den->SetTextual(t);
+bex->SetTextual(t);
+}
+
+
+/*                                                              */
+/*      implementation of class Internal methods                */
+/*                                                              */
+
+
+Internal::Internal()
+{
+type = INTERNAL;
+selectable = FALSE;
+visible = TRUE;
+
+Set_Unparser(new Gl_Internal(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+
+}
+
+void Internal::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Internal" << x << " " << y << "\n";
+ cout << "Internal" << h << " " << w << "\n";
+#endif
+}
+
+void Internal::SetDimensions(void)
+{
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     
+        if(textual)
+          {
+          h = Tree_Node::inUseFont()->Height();
+          w = Tree_Node::inUseFont()->Width("i ; ");
+          }
+         else {
+              if(father->GetAlignement() == HOR)
+                 {
+                h = INT_EV_H;
+                w = INT_EV_W + INT_EV_L + SMALL_PEN;
+                 }
+               else {
+                   h = INT_EV_H + INT_EV_L + SMALL_PEN;
+                   w = INT_EV_W;
+                    }
+             }
+ }
+aligline = round(h/2.0);
+}
+
+void Internal::SetFather(Tree_Node *f)
+{ father = f;
+}
+
+
+/*                                                              */
+/*      implementation of class Communication methods           */
+/*                                                              */
+
+
+Communication::Communication(ID_Place *i, Tree_Node *ex_op)
+{
+type = COMMUNICATION;
+selectable = FALSE;
+gate_identifier = i;
+experiment_option = ex_op;
+
+Set_Unparser(new Gl_Communication(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Communication::SetPosition(Coord xx, Coord yy)
+{
+int dum;
+Coord x1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Communication" << x << " " << y << "\n";
+ cout << "Communication" << h << " " << w << "\n";
+#endif
+
+if(textual)
+   {
+   gate_identifier->SetPosition(x, y);
+   dum = x + gate_identifier->Get_W() + Tree_Node::inUseFont()->Width(" ");
+   experiment_option->SetPosition(dum, y) ;
+   yl = dum + experiment_option->Get_W();      /*position of ; */
+   }
+ else {
+      if(father->GetAlignement() == HOR)
+         {
+         int w1;
+         w1 = w - SMALL_PEN - INT_EV_L;
+         if(experiment_option->GetType() == EXPERIMENT &&
+          ((Experiment *)experiment_option)->GetGuard()->Get_W() == w1) 
+          {
+          dum = round((w1 - (gate_identifier->Get_W() +
+                     experiment_option->Get_W() + ROUND_CORNER))/2.0);
+          x1 = x + dum;
+          }
+         else x1 = x + ROUND_CORNER; 
+        gate_identifier->SetPosition(x1, y - ROUND_CORNER);
+       yl = y - round(gate_identifier->Get_H()/2) - ROUND_CORNER;
+       xl = x + w1;
+        if(experiment_option->GetType() == EXPERIMENT)
+          {
+          dum =round((w1 -
+                ((Experiment *)experiment_option)->GetGuard()->Get_W())/2.0);
+          x1 = x1 + gate_identifier->Get_W() + ROUND_CORNER;
+         experiment_option->SetPosition(x1, y - ROUND_CORNER);
+         ((Experiment *)experiment_option)->GetGuard()->SetPosition(x + dum,
+                                       y - gate_identifier->Get_H() - 2 * 
ROUND_CORNER);
+         }
+        }
+      else {
+           if(experiment_option->GetType() == EXPERIMENT &&
+             ((Experiment *)experiment_option)->GetGuard()->Get_W() == w) 
+           {
+           dum = round((w - (gate_identifier->Get_W() +
+                experiment_option->Get_W() + ROUND_CORNER))/2.0);
+           x1 = x + dum;
+           }
+          else x1 = x + ROUND_CORNER; 
+         gate_identifier->SetPosition(x1, y - ROUND_CORNER);
+          yl = y - gate_identifier->Get_H() - 2 * ROUND_CORNER;
+          xl = x + round(w/2.0);
+         if(experiment_option->GetType() == EXPERIMENT)
+           {
+           dum =round((w -
+                ((Experiment *)experiment_option)->GetGuard()->Get_W())/2.0);
+           x1 = x1 + gate_identifier->Get_W() + ROUND_CORNER;
+           experiment_option->SetPosition(x1, y - ROUND_CORNER);
+           ((Experiment *)experiment_option)->GetGuard()->SetPosition(x + dum,
+                                       y - gate_identifier->Get_H() - 2 * 
ROUND_CORNER);
+           yl -= ((Experiment *)experiment_option)->GetGuard()->Get_H();
+           }
+          }
+        }
+}
+
+void Communication::SetDimensions(void)
+{
+gate_identifier->SetDimensions();
+experiment_option->SetDimensions();
+
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0; aligline = 0;
+                       break;
+ case NOCOLLAPSED:
+       if(textual)
+         {
+         h = Tree_Node::inUseFont()->Height();
+         w = gate_identifier->Get_W() + experiment_option->Get_W() +
+               Tree_Node::inUseFont()->Width(" ") + 
Tree_Node::inUseFont()->Width(" ; ");
+         aligline = round(h/2.0);
+         }
+         else {
+             hr  = gate_identifier->Get_H() + 2 * ROUND_CORNER;
+              if(father->GetAlignement() == HOR)
+                 h = gate_identifier->Get_H() + 2 * ROUND_CORNER;
+              else h = gate_identifier->Get_H() + 2 * ROUND_CORNER  + 
SMALL_PEN + INT_EV_L;
+             w = gate_identifier->Get_W() + 2 * ROUND_CORNER;
+             if(experiment_option->GetType() == EXPERIMENT)
+               {
+               w += experiment_option->Get_W() + ROUND_CORNER;
+               if(((Experiment *)experiment_option)->GetGuard()->Get_W() > w)
+                  w = ((Experiment *)experiment_option)->GetGuard()->Get_W();
+               h += ((Experiment *)experiment_option)->GetGuard()->Get_H();
+               }
+               if(father->GetAlignement() == HOR)
+                w += SMALL_PEN + INT_EV_L;
+              aligline = round(gate_identifier->Get_H()/2.0) + ROUND_CORNER;
+               }
+ }
+}
+
+void Communication::SetFather(Tree_Node *f)
+{
+father = f;
+gate_identifier->SetFather(this);
+experiment_option->SetFather(this);
+}
+
+void Communication::SetCollapsed(char t)
+{
+collapsed = t;
+gate_identifier->SetCollapsed(t);
+experiment_option->SetCollapsed(t);
+}
+
+void Communication::SetTextual(char t, char)
+{
+textual = t;
+experiment_option->SetTextual(t);
+}
+
+
+/*                                                              */
+/*      implementation of class NoGuard methods                */
+/*                                                              */
+
+
+NoGuard::NoGuard()
+{
+type = NO_GUARD;
+visible = FALSE;
+selectable = FALSE;
+w = 0; h = 0;
+aligline = 0;
+
+Set_Unparser(new Gl_NoGuard(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+
+}
+
+void NoGuard::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "NoGuard" << x << " " << y << "\n";
+ cout << "NoGuard" << h << " " << w << "\n";
+#endif
+}
+
+void NoGuard::SetDimensions(void)
+{ }
+
+void NoGuard::SetFather(Tree_Node *f)
+{ father = f; }
+
+
+/*                                                              */
+/*      implementation of class Guard methods           */
+/*                                                              */
+
+
+Guard::Guard(Equality *eq)
+{
+type = GUARD;
+visible = TRUE;
+selectable = FALSE;
+equality = eq;
+
+Set_Unparser(new Gl_Guard(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+
+}
+
+void Guard::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Guard" << x << " " << y << "\n";
+ cout << "Guard" << h << " " << w << "\n";
+#endif
+if (textual)
+       equality->SetPosition(x + Tree_Node::inUseFont()->Width(" ["), y);
+      else
+       equality->SetPosition(x+BORDER, y - VBORDER);
+}
+
+void Guard::SetDimensions(void)
+{
+equality->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     
+      if(textual)
+       {
+       h = Tree_Node::inUseFont()->Height();
+       w = equality->Get_W() + Tree_Node::inUseFont()->Width(" [") + 
Tree_Node::inUseFont()->Width("]");
+       }
+       else {
+           h = equality->Get_H() + 2 * VBORDER;
+           w = equality->Get_W() + 2 * BORDER;
+           }
+ }
+aligline = round(h/2.0);
+}
+
+void Guard::SetFather(Tree_Node *f)
+{
+father = f;
+equality->SetFather(this);
+}
+
+void Guard::SetCollapsed(char t)
+{
+collapsed = t;
+equality->SetCollapsed(t);
+}
+
+
+/*                                                              */
+/*      implementation of class NoExperiment methods            */
+/*                                                              */
+
+
+NoExperiment::NoExperiment()
+{
+type = NO_EXPERIMENT;
+visible = FALSE;
+selectable = FALSE;
+w = 0; h = 0;
+aligline = 0;
+
+Set_Unparser(new Gl_NoExperiment(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+
+}
+
+void NoExperiment::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "NoExperiment" << x << " " << y << "\n";
+ cout << "NoExperiment" << h << " " << w << "\n";
+#endif
+}
+
+void NoExperiment::SetDimensions(void)
+{ }
+
+void NoExperiment::SetFather(Tree_Node *f)
+{ father = f; }
+
+
+/*                                                              */
+/*      implementation of class Experiment methods              */
+/*                                                              */
+
+
+Experiment::Experiment(Exper_Off_List *e_of_l, Tree_Node *g_op)
+{
+type = EXPERIMENT;
+visible = TRUE;
+selectable = FALSE;
+exp_offer_list = e_of_l;
+guard_option = g_op;
+
+Set_Unparser(new Gl_Experiment(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+
+}
+
+void Experiment::SetPosition(Coord xx, Coord yy)
+{
+
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Experiment" << x << " " << y << "\n";
+ cout << "Experiment" << h << " " << w << "\n";
+#endif
+if (textual)
+       {
+       exp_offer_list->SetPosition(x , y); 
+       guard_option->SetPosition(x + exp_offer_list->Get_W(), y);
+       }
+      else
+       exp_offer_list->SetPosition(x + ROUND_CORNER, y);
+}
+
+void Experiment::SetDimensions(void)
+{
+exp_offer_list->SetDimensions();
+guard_option->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     if (textual)
+       {
+       h = Tree_Node::inUseFont()->Height();
+       w = exp_offer_list->Get_W() + guard_option->Get_W();
+       }
+      else {
+          h = exp_offer_list->Get_H();
+          w = exp_offer_list->Get_W() + ROUND_CORNER; 
+          }
+ }
+aligline = round(h/2.0);
+}
+
+void Experiment::SetFather(Tree_Node *f)
+{
+father = f;
+exp_offer_list->SetFather(this);
+guard_option->SetFather(this);
+}
+
+void Experiment::SetCollapsed(char t)
+{
+collapsed = t;
+exp_offer_list->SetCollapsed(t);
+guard_option->SetCollapsed(t);
+}
+
+
+void Experiment::SetTextual(char t, char)
+{
+textual = t;
+guard_option->SetTextual(t);
+}
+
+/*                                                             */
+/*     implementation of class Proc_Inst methods               */
+/*                                                             */
+
+Proc_Inst::Proc_Inst(ID_Place *id, ID_List *g_i_l, Value_Expr_List *v_l)
+{
+Gl_Sheet *sh;
+type = PROCINST;
+visible = TRUE;
+
+ident = id;
+gate_list = g_i_l;
+value_expr_list = v_l;
+
+Set_Unparser(new Gl_Proc_Inst(this));
+sh = (glow->Get_Folder())->Current();
+sh->Add(Get_Unparser());
+sh->SetRoot(this);
+}
+
+void Proc_Inst::SetPosition(Coord xx, Coord yy)
+{
+Coord x1,y1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Proc Inst" << x << " " << y << "\n";
+ cout << "Proc Inst" << h << " " << w << "\n";
+#endif
+
+if ( textual)
+       {
+       ident->SetPosition(x + border,y - border);
+       yp = yl1 = x + ident->Get_W() + border;  /* yp position of [*/  
+       if (gate_list->GetVisible())
+               {
+               x1 = yp + Tree_Node::inUseFont()->Width(" [");
+               gate_list->SetPosition(x1, y - border);
+               yl1 = x1 + gate_list->Get_W();       /* yl1 position of ] */
+               }
+       if (value_expr_list->GetVisible())
+               {
+               Xopen = yl1 + Tree_Node::inUseFont()->Width("] "); /*position 
of ( */
+               x1 = Xopen + Tree_Node::inUseFont()->Width(" (");
+               value_expr_list->SetPosition(x1, y - border);
+               Xclose = x1 + value_expr_list->Get_W(); /*poistion of )*/
+               }
+       }
+
+       else {
+         x1 = x + round((w - gate_list->Get_W()) / 2.0);
+         gate_list->SetPosition(x1,y);
+
+         x1 = x + round((w - ident->Get_W()) / 2.0);
+         yp = y - gate_list->Get_H();
+         y1 = yp  - VBORDER;
+         ident->SetPosition(x1,y1);
+         yl1 = y1 - ident->Get_H() - VBORDER; 
+         x1 = x + round((w - value_expr_list->Get_W()) / 2.0);
+         y1 = yl1  - VBORDER;
+         value_expr_list->SetPosition(x1,y1);
+         }
+
+}
+
+void Proc_Inst::SetDimensions(void)
+{
+ident->SetDimensions();
+gate_list->SetDimensions();
+value_expr_list->SetDimensions();
+border = 0;
+
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:   if(textual)
+                          {
+                          w = Tree_Node::inUseFont()->Width("<Bex>");
+                          h = Tree_Node::inUseFont()->Height();
+                          if(!(father->GetTextual()) && (father->GetType() <= 
PARALLEL))
+                             {border = VBORDER; w += 2 * VBORDER; h += 2 * 
VBORDER; }
+                          }
+                        else {
+                             w = 
round((Tree_Node::inUseFont()->Width("Bex"))*20.0/9.0);
+                             h = 
round((Tree_Node::inUseFont()->Width("Bex"))*14.0/9.0);
+                             }
+                       aligline = round(h/2.0);
+                       break; 
+ case COLLAPSED_INV:   w = 0; h = 0; aligline = 0;
+                       break;
+ case NOCOLLAPSED:     
+     if(textual)
+       {
+       h = Tree_Node::inUseFont()->Height();
+       w = ident->Get_W() + gate_list->Get_W() + value_expr_list->Get_W(); 
+       w += (gate_list->GetVisible())? Tree_Node::inUseFont()->Width(" [") + 
+               Tree_Node::inUseFont()->Width("] "):0; 
+       w += (value_expr_list->GetVisible())? Tree_Node::inUseFont()->Width(" 
(") + 
+               Tree_Node::inUseFont()->Width(") "):0; 
+       if(!(father->GetTextual()) && (father->GetType() <= PARALLEL))
+         {border = VBORDER; w += 2 * VBORDER; h += 2 * VBORDER; }
+       aligline = round(h/2.0);
+       }
+       else {
+         w = Max(ident->Get_W(),value_expr_list->Get_W());
+         w = Max(w, gate_list->Get_W());
+         w += 2 * BORDER;
+         if(value_expr_list->Get_H() != 0)
+           hp = ident->Get_H() + value_expr_list->Get_H() + 4 * VBORDER;
+          else hp = ident->Get_H() + 2 * VBORDER;
+         h = hp + gate_list->Get_H();
+         aligline = gate_list->Get_H() + round(ident->Get_H()/2.0) + VBORDER;
+         }
+ }
+}
+
+void Proc_Inst::SetFather(Tree_Node *f)
+{
+father = f;
+ident->SetFather(this);
+gate_list->SetFather(this);
+value_expr_list->SetFather(this);
+}
+
+void Proc_Inst::SetCollapsed(char t)
+{
+collapsed = t;
+if(t)
+  t = COLLAPSED_INV;
+ident->SetCollapsed(t);
+gate_list->SetCollapsed(t);
+value_expr_list->SetCollapsed(t);
+}
+
+void Proc_Inst::SetTextual(char t, char s)
+{
+textual = t;
+selectable = (!t | s);
+gate_list->SetTextual(t);
+}
+
+
+/*                                                             */ 
+/*     implementation of class Value_Expr methods              */ 
+/*                                                             */ 
+
+Value_Expr::Value_Expr() 
+{ 
+type = VALEXPR; 
+textual = TRUE;
+visible = FALSE; 
+selectable = FALSE;
+w = 0; h = 0;
+aligline = 0;
+
+Set_Unparser(new Gl_Value_Expr(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Value_Expr::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "ValueExpr" << x << " " << y << "\n";
+ cout << "ValueExpr" << h << " " << w << "\n";
+ cout << "ValueExpr" << visible << " " << collapsed << "\n";
+#endif
+}
+
+void Value_Expr::SetDimensions(void)
+{ }
+
+void Value_Expr::SetFather(Tree_Node *f)
+{ father = f; }
+
+
+/*                                                             */
+/*     implementation of class Value_Expr_List methods         */
+/*                                                             */
+
+Value_Expr_List::Value_Expr_List(Tree_Node *el, Value_Expr_List *nxt)
+{
+type = VALUEEXPRLIST;
+textual = TRUE;
+selectable = FALSE;
+elem = el;
+next = nxt;
+visible = elem->GetVisible();
+
+Set_Unparser(new Gl_Value_Expr_List(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Value_Expr_List::SetPosition(Coord xx, Coord yy)
+{
+Coord x1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "ValueExprList" << x << " " << y << "\n";
+ cout << "ValueExprList" << h << " " << w << "\n";
+#endif
+if(elem != NULL)
+ {
+ elem->SetPosition(x,y);
+ x1 = x + elem->Get_W() + Tree_Node::inUseFont()->Width(", ");
+ if(next != NULL)
+   next->SetPosition(x1,y);
+ }
+}
+
+void Value_Expr_List::SetDimensions(void)
+{
+elem->SetDimensions();
+if(next!=NULL)
+   next->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     h = Tree_Node::inUseFont()->Height();
+                       w = (next == NULL || next->next == NULL)? elem->Get_W()
+                               : elem->Get_W() + next->Get_W() + 
Tree_Node::inUseFont()->Width(", ");
+ }
+aligline = round(h/2.0);
+}
+
+void Value_Expr_List::SetFather(Tree_Node *f)
+{
+father = f;
+if(elem != NULL)
+  elem->SetFather(this);
+if(next != NULL)
+  next->SetFather(this);
+}
+
+void Value_Expr_List::SetCollapsed(char t)
+{
+collapsed = t;
+if(elem != NULL)
+  elem->SetCollapsed(t);
+if(next != NULL)
+  next->SetCollapsed(t);
+}
+
+
+/*                                                             */
+/*     implementation of class Sum_Ident methods                       */
+/*                                                             */
+
+
+Sum_Ident::Sum_Ident(Id_Decl_List *i_d_l, Tree_Node *b)
+{
+type = SUM_IDENT;
+visible = TRUE;
+alignement = VER;
+ident_decl_list = i_d_l;
+bex = b;
+
+Set_Unparser(new Gl_Sum_Ident(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Sum_Ident::SetPosition(Coord xx, Coord yy)
+{
+Coord x1,y1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Sum_Ident" << x << " " << y << "\n";
+ cout << "Sum_Ident" << h << " " << w << "\n";
+#endif
+if (textual)
+       {               
+       SetTerminalPos();
+       x1 = Xch + Tree_Node::inUseFont()->Width("choice ");
+       y1 = Ych;
+        ident_decl_list->SetPosition(x1, y1);
+       x1 = x + SMALL_BORDER;
+       y1 = y - ident_decl_list->Get_H() - VBORDER - border;
+       bex->SetPosition(x1, y1);
+       }
+     else {
+       x1 = x + round((w - ident_decl_list->Get_W() - 
+                       2 * LINE_SPACE)/2.0) + BORDER;
+       y1 = y - 2 * VBORDER;
+       ident_decl_list->SetPosition(x1, y1);
+       yl = y1 - 2 * VBORDER - ident_decl_list->Get_H();
+       x1 = x + round((w - bex->Get_W())/2.0);
+       y1 = yl - BORDER; 
+       bex->SetPosition(x1,y1);
+       }
+}
+
+void Sum_Ident::SetDimensions(void)
+
+{
+ident_decl_list->SetDimensions();
+bex->SetDimensions();
+border = 0;
+
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:   if(textual)
+                          {
+                          w = Tree_Node::inUseFont()->Width("<Bex>");
+                          h = Tree_Node::inUseFont()->Height();
+                          if(!(father->GetTextual()) && (father->GetType() <= 
PARALLEL))
+                             {border = VBORDER; w += 2 * VBORDER; h += 2 * 
VBORDER; }
+                          }
+                        else {
+                             w = 
round((Tree_Node::inUseFont()->Width("Bex"))*20.0/9.0);
+                             h = 
round((Tree_Node::inUseFont()->Width("Bex"))*14.0/9.0);
+                             }
+                       break; 
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     
+     if(textual)
+       {
+       h = ident_decl_list->Get_H() + bex->Get_H() +
+                Tree_Node::inUseFont()->Height() + 2 * VBORDER;
+       w = Max4(Tree_Node::inUseFont()->Width("(choice ") +
+                 ident_decl_list->Get_W() + Tree_Node::inUseFont()->Width(" 
[]"),
+                bex->Get_W() + SMALL_BORDER, 
Tree_Node::inUseFont()->Width(")"), 0);
+        if(!(father->GetTextual()) && (father->GetType() <= PARALLEL))
+           {border = VBORDER; w += 2 * VBORDER; h += 2 * VBORDER; }
+       }
+      else {
+          w = Max(ident_decl_list->Get_W() + 2 * LINE_SPACE, bex->Get_W());
+          w += 2*BORDER;
+           h = ident_decl_list->Get_H() + bex->Get_H() + 4*VBORDER + 2*BORDER; 
+           }
+ }
+aligline = round(h/2.0);
+}
+
+void Sum_Ident::SetFather(Tree_Node *f)
+{
+father = f;
+ident_decl_list->SetFather(this);
+bex->SetFather(this);
+}
+
+void Sum_Ident::SetCollapsed(char t)
+{
+collapsed = t;
+if(t)
+  t = COLLAPSED_INV;
+ident_decl_list->SetCollapsed(t);
+bex->SetCollapsed(t);
+}
+
+void Sum_Ident::SetTextual(char t, char s)
+{
+textual = t;
+selectable = (!t | s);
+bex->SetTextual(t);
+}
+
+void Sum_Ident::SetTerminalPos()
+
+/* x, y is the position of (                                   */
+/* Xch, Ych is the position of choice                          */
+/* xl, yl is the position of []                                        */
+/* Xclose, Yclose is the position of )                         */
+{
+Ych = yl = y - border;
+
+Xch = x + Tree_Node::inUseFont()->Width("(") + border; 
+xl = Xch + Tree_Node::inUseFont()->Width("choice ") + ident_decl_list->Get_W();
+Xclose = x + border;
+Yclose = y - ident_decl_list->Get_H() - bex->Get_H() - 2 * VBORDER - border;
+}
+
+
+/*                                                             */
+/*     implementation of class Value methods                   */
+/*                                                             */
+
+Value::Value(ID_Place *i, ID_Place *s)
+{
+type = VALUE;
+textual = TRUE;
+visible = TRUE;
+selectable = FALSE;
+ident = i;
+sort_id = s;
+if(glow->ShowOfSort())
+   sort_id->SetVisible(TRUE);
+ else sort_id->SetVisible(FALSE);
+
+Set_Unparser(new Gl_Value(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+((glow->Get_Folder())->Current())->YesOfSort();
+}
+
+void Value::SetPosition(Coord xx, Coord yy)
+{
+Coord x1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Value" << x << " " << y << "\n";
+ cout << "Value" << h << " " << w << "\n";
+#endif
+ident->SetPosition(x,y);
+x1 = x + ident->Get_W() + Tree_Node::inUseFont()->Width(" of ");
+sort_id->SetPosition(x1,y);
+}
+
+void Value::SetDimensions(void)
+{
+ident->SetDimensions();
+sort_id->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     h = Tree_Node::inUseFont()->Height();
+                       if(glow->ShowOfSort())
+                          {
+                          sort_id->SetVisible(TRUE);
+                          w = ident->Get_W() + sort_id->Get_W() + 
Tree_Node::inUseFont()->Width(" of ");
+                          }
+                        else {
+                             w = ident->Get_W();
+                             sort_id->SetVisible(FALSE);
+                             }
+ }
+aligline = round(h/2.0);
+}
+
+void Value::SetFather(Tree_Node *f)
+{
+father = f;
+ident->SetFather(this);
+sort_id->SetFather(this);
+}
+
+void Value::SetCollapsed(char t)
+{
+collapsed = t;
+ident->SetCollapsed(t);
+sort_id->SetCollapsed(t);
+}
+
+
+
+/*                                                             */
+/*     implementation of class Term methods                    */
+/*                                                             */
+
+Term::Term(ID_Place *op, Value_Expr_List *el, ID_Place *s)
+{
+type = TERM;
+textual = TRUE;
+visible = TRUE;
+selectable = FALSE;
+op_ident = op;
+expr_list = el;
+sort_id = s;
+visible = TRUE;
+
+if(glow->ShowOfSort())
+   sort_id->SetVisible(TRUE);
+ else sort_id->SetVisible(FALSE);
+
+Set_Unparser(new Gl_Term(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+((glow->Get_Folder())->Current())->YesOfSort();
+}
+
+void Term::SetPosition(Coord xx, Coord yy)
+{
+Coord x1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Term" << x << " " << y << "\n";
+ cout << "Term" << h << " " << w << "\n";
+#endif
+op_ident->SetPosition(x,y);
+if(expr_list->Get_W() == 0)
+  {
+  x1 = x + op_ident->Get_W();
+  expr_list->SetPosition(x1,y);
+  x1 = x1 + Tree_Node::inUseFont()->Width(" of ");
+  sort_id->SetPosition(x1,y);
+  }
+ else {
+      x1 = x + op_ident->Get_W() + Tree_Node::inUseFont()->Width("(");
+      expr_list->SetPosition(x1,y);
+      x1 = x1 + expr_list->Get_W() + Tree_Node::inUseFont()->Width(") of ");
+      sort_id->SetPosition(x1,y);
+      }
+}
+
+void Term::SetDimensions(void)
+{
+op_ident->SetDimensions();
+expr_list->SetDimensions();
+sort_id->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     h = Tree_Node::inUseFont()->Height();
+                       if(glow->ShowOfSort())
+                          {
+                          sort_id->SetVisible(TRUE);
+                          w = op_ident->Get_W() + sort_id->Get_W() + 
Tree_Node::inUseFont()->Width(" of ");
+                          }
+                        else {
+                             w = op_ident->Get_W();
+                             sort_id->SetVisible(FALSE);
+                             }
+                       w = (expr_list->Get_W() == 0)?w : w + 
expr_list->Get_W() + 
+                                         2 * 
Tree_Node::inUseFont()->Width(")");
+ }
+aligline = round(h/2.0);
+}
+
+void Term::SetFather(Tree_Node *f)
+{
+father = f;
+op_ident->SetFather(this);
+expr_list->SetFather(this);
+sort_id->SetFather(this);
+}
+
+void Term::SetCollapsed(char t)
+{
+collapsed = t;
+op_ident->SetCollapsed(t);
+expr_list->SetCollapsed(t);
+sort_id->SetCollapsed(t);
+}
+
+
+
+/*                                                             */ 
+/*     implementation of class Exit_Entry methods              */ 
+/*                                                             */ 
+
+Exit_Entry::Exit_Entry() 
+{ 
+type = EXITENTRY; 
+textual = TRUE;
+visible = FALSE; 
+selectable = FALSE;
+w = 0; h = 0;
+aligline = 0;
+
+Set_Unparser(new Gl_Exit_Entry(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Exit_Entry::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "ValueExpr" << x << " " << y << "\n";
+ cout << "ValueExpr" << h << " " << w << "\n";
+ cout << "ValueExpr" << visible << " " << collapsed << "\n";
+#endif
+}
+
+void Exit_Entry::SetDimensions(void)
+{ }
+
+void Exit_Entry::SetFather(Tree_Node *f)
+{ father = f; }
+
+
+/*                                                             */
+/*     implementation of class Exit_Entry_List methods         */
+/*                                                             */
+
+Exit_Entry_List::Exit_Entry_List(Tree_Node *el, Exit_Entry_List *nxt)
+{
+type = EXITENTRYLIST;
+selectable = FALSE;
+elem = el;
+next = nxt;
+visible = elem->GetVisible();
+
+Set_Unparser(new Gl_Exit_Entry_List(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Exit_Entry_List::SetPosition(Coord xx, Coord yy)
+{
+Coord x1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "ExitEntryList" << x << " " << y << "\n";
+ cout << "ExitEntryList" << h << " " << w << "\n";
+ cout << "ExitEntryList" << visible << " " << collapsed << "\n";
+#endif
+if(elem != NULL)
+ {
+ elem->SetPosition(x,y);
+ x1 = x + elem->Get_W() + Tree_Node::inUseFont()->Width(", ");
+ if(next != NULL)
+   next->SetPosition(x1,y);
+ }
+}
+
+void Exit_Entry_List::SetDimensions(void)
+{
+elem->SetDimensions();
+if(next!=NULL)
+   next->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     h = Tree_Node::inUseFont()->Height();
+                        w = (next == NULL || next->next == NULL)? elem->Get_W()
+                           : elem->Get_W() + next->Get_W() + 
Tree_Node::inUseFont()->Width(", ");
+ }
+aligline = round(h/2.0);
+}
+
+void Exit_Entry_List::SetFather(Tree_Node *f)
+{
+father = f;
+if(elem != NULL)
+  elem->SetFather(this);
+if(next != NULL)
+  next->SetFather(this);
+}
+
+void Exit_Entry_List::SetCollapsed(char t)
+{
+collapsed = t;
+if(elem != NULL)
+  elem->SetCollapsed(t);
+if(next != NULL)
+  next->SetCollapsed(t);
+}
+
+
+
+/*                                                             */
+/*     implementation of class Sum_Gate methods                        */
+/*                                                             */
+
+Sum_Gate::Sum_Gate(Gate_Decl_List *g_d_l, Tree_Node *b)
+{
+type = SUM_GATE;
+visible = TRUE;
+alignement = VER;
+gate_decl_list = g_d_l;
+bex = b;
+Set_Unparser(new Gl_Sum_Gate(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Sum_Gate::SetPosition(Coord xx, Coord yy)
+{
+Coord x1,y1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Sum_Gate" << x << " " << y << "\n";
+ cout << "Sum_Gate" << h << " " << w << "\n";
+#endif
+
+if (textual)
+       {               
+       SetTerminalPos();
+       x1 = Xch + Tree_Node::inUseFont()->Width("choice ");
+       y1 = Ych;
+        gate_decl_list->SetPosition(x1, y1);
+       x1 = x + SMALL_BORDER + border;
+       y1 = y - gate_decl_list->Get_H() - VBORDER - border;
+       bex->SetPosition(x1, y1);
+       }
+     else {
+       x1 = x + round((w - gate_decl_list->Get_W() - 2 * LINE_SPACE)/2.0) 
+                       + BORDER;
+       y1 = y - 2 * VBORDER;
+
+       gate_decl_list->SetPosition(x1, y1);
+
+       yl = y1 - 2 * VBORDER - gate_decl_list->Get_H();
+
+       y1 = yl - BORDER; 
+       x1 = x + round((w - bex->Get_W())/2.0);
+       bex->SetPosition(x1,y1);
+       }
+
+}
+
+void Sum_Gate::SetDimensions(void)
+{
+gate_decl_list->SetDimensions();
+bex->SetDimensions();
+border = 0;
+
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:   if(textual)
+                          {
+                          w = Tree_Node::inUseFont()->Width("<Bex>");
+                          h = Tree_Node::inUseFont()->Height();
+                          if(!(father->GetTextual()) && (father->GetType() <= 
PARALLEL))
+                             {border = VBORDER; w += 2 * VBORDER; h += 2 * 
VBORDER; }
+                          }
+                        else {
+                             w = 
round((Tree_Node::inUseFont()->Width("Bex"))*20.0/9.0);
+                             h = 
round((Tree_Node::inUseFont()->Width("Bex"))*14.0/9.0);
+                             }
+                       break; 
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     
+     if(textual)
+       {
+       h = gate_decl_list->Get_H() + bex->Get_H() +
+                Tree_Node::inUseFont()->Height() + 2 * VBORDER;
+       w = Max4(Tree_Node::inUseFont()->Width("(choice ") +
+               gate_decl_list->Get_W() + Tree_Node::inUseFont()->Width(" []"),
+               bex->Get_W() + SMALL_BORDER, 
Tree_Node::inUseFont()->Width(")"), 0);
+        if(!(father->GetTextual()) && (father->GetType() <= PARALLEL))
+           {border = VBORDER; w += 2 * VBORDER; h += 2 * VBORDER; }
+       }
+     else {
+         w =  Max(gate_decl_list->Get_W() + 2 * LINE_SPACE, bex->Get_W());
+         w += 2*BORDER;
+         h = gate_decl_list->Get_H() + bex->Get_H() + 4*VBORDER + 2*BORDER; 
+         }
+ }
+aligline = round(h/2.0);
+}
+
+void Sum_Gate::SetFather(Tree_Node *f)
+{
+father = f;
+gate_decl_list->SetFather(this);
+bex->SetFather(this);
+}
+
+void Sum_Gate::SetCollapsed(char t)
+{
+collapsed = t;
+if(t)
+  t = COLLAPSED_INV;
+gate_decl_list->SetCollapsed(t);
+bex->SetCollapsed(t);
+}
+
+void Sum_Gate::SetTextual(char t, char s)
+{
+textual = t;
+selectable = (!t | s);
+bex->SetTextual(t);
+}
+
+void Sum_Gate::SetTerminalPos()
+
+/* x, y is the position of (                                    */
+/* Xch, Ych is the position of choice                           */
+/* xl, yl is the position of []                                 */
+/* Xclose, Yclose is the position of )                          */
+{
+Ych = yl = y;
+
+Xch = x + Tree_Node::inUseFont()->Width("(") + border;
+xl = Xch + Tree_Node::inUseFont()->Width("choice ") + gate_decl_list->Get_W();
+Xclose = x + border;
+Yclose = y - gate_decl_list->Get_H() - bex->Get_H() - 2 * VBORDER - border;
+}
+
+
+
+/*                                                             */
+/*     implementation of class Gate_Decl methods                       */
+/*                                                             */
+
+Gate_Decl::Gate_Decl(ID_List *g_id_l1, ID_List *g_id_l2)
+{
+type = GATE_DECL;
+textual = TRUE;
+selectable = FALSE;
+gate_id_list1 = g_id_l1;
+gate_id_list2 = g_id_l2;
+
+if(g_id_l1 == NULL)
+  gate_id_list1 = new ID_List(new ID_Place(),NULL);
+if(g_id_l2 == NULL)
+  gate_id_list2 = new ID_List(new ID_Place(), NULL);
+visible = (gate_id_list1->GetVisible() && gate_id_list2->GetVisible());
+
+Set_Unparser(new Gl_Gate_Decl(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Gate_Decl::SetPosition(Coord xx, Coord yy)
+{
+Coord x1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Gate_Decl" << x << " " << y << "\n";
+ cout << "Gate_Decl" << h << " " << w << "\n";
+#endif
+if(gate_id_list1 != NULL)
+ {
+ gate_id_list1->SetPosition(x,y);
+ x1 = x + gate_id_list1->Get_W() + Tree_Node::inUseFont()->Width(" in [");
+ if(gate_id_list2 != NULL)
+   gate_id_list2->SetPosition(x1,y);
+ }
+}
+
+void Gate_Decl::SetDimensions(void)
+{
+gate_id_list1->SetDimensions();
+gate_id_list2->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     h = Tree_Node::inUseFont()->Height();
+                       w = (visible)? gate_id_list1->Get_W() + 
gate_id_list2->Get_W()
+                               + Tree_Node::inUseFont()->Width("in []  ") : 0;
+ }
+aligline = round(h/2.0);
+}
+
+void Gate_Decl::SetFather(Tree_Node *f)
+{
+father = f;
+if(gate_id_list1 != NULL)
+  gate_id_list1->SetFather(this);
+if(gate_id_list2 != NULL)
+  gate_id_list2->SetFather(this);
+}
+
+void Gate_Decl::SetCollapsed(char t)
+{
+collapsed = t;
+if(gate_id_list1 != NULL)
+  gate_id_list1->SetCollapsed(t);
+if(gate_id_list2 != NULL)
+  gate_id_list2->SetCollapsed(t);
+}
+
+
+/*                                                             */
+/*     implementation of class Gate_Decl_List methods          */
+/*                                                             */
+
+Gate_Decl_List::Gate_Decl_List(Gate_Decl *el, Gate_Decl_List *nxt)
+{
+type = GATE_DECL_LIST;
+textual = TRUE;
+selectable = FALSE;
+elem = el;
+next = nxt;
+visible = elem->GetVisible();
+
+Set_Unparser(new Gl_Gate_Decl_List(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Gate_Decl_List::SetPosition(Coord xx, Coord yy)
+{
+Coord x1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Gate_Decl_List" << x << " " << y << "\n";
+ cout << "Gate_Decl_List" << h << " " << w << "\n";
+#endif
+if(elem != NULL)
+ {
+ elem->SetPosition(x,y);
+ x1 = x + elem->Get_W() + Tree_Node::inUseFont()->Width(", ");
+ if(next != NULL)
+   next->SetPosition(x1,y);
+ }
+}
+
+void Gate_Decl_List::SetDimensions(void)
+{
+elem->SetDimensions();
+if(next!=NULL)
+   next->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     h = Tree_Node::inUseFont()->Height();
+                       w = (next == NULL || next->next == NULL)? elem->Get_W()
+                            : elem->Get_W() + next->Get_W() + 
Tree_Node::inUseFont()->Width(", ");
+ }
+aligline = round(h/2.0);
+}
+
+void Gate_Decl_List::SetFather(Tree_Node *f)
+{
+father = f;
+if(elem != NULL)
+  elem->SetFather(this);
+if(next != NULL)
+  next->SetFather(this);
+}
+
+void Gate_Decl_List::SetCollapsed(char t)
+{
+collapsed = t;
+if(elem != NULL)
+  elem->SetCollapsed(t);
+if(next != NULL)
+  next->SetCollapsed(t);
+}
+
+
+
+/*                                                             */
+/*     implementation of class Par methods                     */
+/*                                                             */
+
+Par::Par(Gate_Decl_List *g_d_l, Tree_Node *op, Tree_Node *b)
+{
+type = PAR;
+visible = TRUE;
+alignement = VER;
+gate_decl_list = g_d_l;
+bex = b;
+oper = op;
+if (textual)
+ oper->SetVisible(TRUE);
+  else {
+       oper->SetVisible(FALSE);
+       if(oper->GetType() == GEN_PARAL)
+            oper->SetVisible(TRUE);
+       }
+
+Set_Unparser(new Gl_Par(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Par::SetPosition(Coord xx, Coord yy)
+{
+Coord x1,y1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Par" << x << " " << y << "\n";
+ cout << "Par" << h << " " << w << "\n";
+#endif
+
+if (textual)
+       {                       
+       x1 = x + Tree_Node::inUseFont()->Width("(par ") + border;
+       gate_decl_list->SetPosition(x1, y - border);
+       x1 = x1 + gate_decl_list->Get_W();
+       oper->SetPosition(x1, y - border);
+       y1 = y - gate_decl_list->Get_H() - VBORDER - border;
+       x1 = x + SMALL_BORDER + border;
+       bex->SetPosition(x1, y1);
+       xl = x + border;
+       yl = y1 - bex->Get_H() - VBORDER;
+       }
+     else {
+       if(oper->GetType() == GEN_PARAL)
+         {
+         x1 = x + SMALL_BORDER;
+         y1 = y - ROUND_CORNER;
+         oper->SetPosition(x1,y1);
+         x1 = x1 + oper->Get_W() + BORDER; 
+         y1 = y1 - ROUND_CORNER;
+         gate_decl_list->SetPosition(x1,y1); 
+         yl = y1 - gate_decl_list->Get_H() - 2 * ROUND_CORNER;
+         y1 = yl - BORDER;
+         x1 = x + round((w - bex->Get_W())/2.0);
+         bex->SetPosition(x1,y1);
+         }
+        else {
+             x1 = x + round((w - gate_decl_list->Get_W() - 2 * 
LINE_SPACE)/2.0)                                + BORDER;
+             y1 = y - 2 * VBORDER;
+             gate_decl_list->SetPosition(x1, y1);
+             yl = y1 - 2 * VBORDER - gate_decl_list->Get_H();
+             x1 = x + round((w - bex->Get_W())/2.0);
+             y1 = yl - BORDER; 
+             bex->SetPosition(x1,y1);
+             }
+       }
+}
+
+void Par::SetDimensions(void)
+{
+bex->SetDimensions();
+oper->SetDimensions();
+gate_decl_list->SetDimensions();
+border = 0;
+
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:   if(textual)
+                          {
+                          w = Tree_Node::inUseFont()->Width("<Bex>");
+                          h = Tree_Node::inUseFont()->Height();
+                          if(!(father->GetTextual()) && (father->GetType() <= 
PARALLEL))
+                             {border = VBORDER; w += 2 * VBORDER; h += 2 * 
VBORDER; }
+                          }
+                        else {
+                             w = 
round((Tree_Node::inUseFont()->Width("Bex"))*20.0/9.0);
+                             h = 
round((Tree_Node::inUseFont()->Width("Bex"))*14.0/9.0);
+                             }
+                       break; 
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     
+     if(textual)
+       {
+       h = gate_decl_list->Get_H() + bex->Get_H() + 
Tree_Node::inUseFont()->Height() +
+              2 * VBORDER; 
+       w = Max4(Tree_Node::inUseFont()->Width("(par ") + 
gate_decl_list->Get_W() +
+                oper->Get_W(), bex->Get_W(),
+               Tree_Node::inUseFont()->Width(")"), 0);
+       if(!(father->GetTextual()) && (father->GetType() <= PARALLEL))
+         {border = VBORDER; w += 2 * VBORDER; h += 2 * VBORDER; }
+       }
+      else {
+          if(oper->GetType() == GEN_PARAL)
+            {
+            w = Max(bex->Get_W(), oper->Get_W() + gate_decl_list->Get_W() 
+                                     + 2 * BORDER + SMALL_BORDER);
+            h = gate_decl_list->Get_H() + bex->Get_H() + 2*BORDER + 
+                       4*ROUND_CORNER; 
+            }
+           else {
+                w =  Max(gate_decl_list->Get_W() + 2 * LINE_SPACE, 
bex->Get_W());
+                w += 2*BORDER;
+                h = gate_decl_list->Get_H() + bex->Get_H() + 4*VBORDER + 
2*BORDER; 
+                 }
+       }
+ }
+aligline = round(h/2.0);
+}
+
+void Par::SetFather(Tree_Node *f)
+{
+father = f;
+gate_decl_list->SetFather(this);
+bex->SetFather(this);
+oper->SetFather(this);
+}
+
+void Par::SetCollapsed(char t)
+{
+collapsed = t;
+if(t)
+  t = COLLAPSED_INV;
+gate_decl_list->SetCollapsed(t);
+bex->SetCollapsed(t);
+oper->SetCollapsed(t);
+}
+
+
+void Par::SetTextual(char t, char s)
+{
+textual = t;
+selectable = (!t | s);
+gate_decl_list->SetTextual(t);
+bex->SetTextual(t);
+oper->SetTextual(t);
+}
+
+/*                                                             */
+/*     implementation of class Sort_Id_Exit methods            */
+/*                                                             */
+
+Sort_Id_Exit::Sort_Id_Exit(ID_Place *s)
+{
+type = SORTIDEXIT;
+textual = TRUE;
+selectable = FALSE;
+sort_id = s;
+visible = TRUE;
+
+Set_Unparser(new Gl_Sort_Id_Exit(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Sort_Id_Exit::SetPosition(Coord xx, Coord yy)
+{
+Coord x1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Sort_Id_Exit" << x << " " << y << "\n";
+ cout << "Sort_Id_Exit" << h << " " << w << "\n";
+#endif
+x1 = x + Tree_Node::inUseFont()->Width("any ");
+sort_id->SetPosition(x1,y);
+}
+
+void Sort_Id_Exit::SetDimensions(void)
+{
+sort_id->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     h = Tree_Node::inUseFont()->Height();
+                       w = sort_id->Get_W() + 
Tree_Node::inUseFont()->Width("any ");
+ }
+aligline = round(h/2.0);
+}
+
+void Sort_Id_Exit::SetFather(Tree_Node *f)
+{
+father = f;
+sort_id->SetFather(this);
+}
+
+void Sort_Id_Exit::SetCollapsed(char t)
+{
+collapsed = t;
+sort_id->SetCollapsed(t);
+}
+
+
+/*                                                              */
+/*      implementation of class Equality methods               */
+/*                                                              */
+
+Equality::Equality()
+{
+type = EQUALITY;
+textual = TRUE;
+selectable = FALSE;
+visible = FALSE;
+express1 = NULL;
+express2 = NULL;
+
+Set_Unparser(new Gl_Equality(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+Equality::Equality(Tree_Node *ex1, Tree_Node *ex2)
+{
+type = EQUALITY;
+textual = TRUE;
+visible = TRUE;
+selectable = FALSE;
+express1 = ex1;
+express2 = ex2;
+
+Set_Unparser(new Gl_Equality(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Equality::SetPosition(Coord xx, Coord yy)
+{
+Coord x1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Equality" << x << " " << y << "\n";
+ cout << "Equality" << h << " " << w << "\n";
+#endif
+if(visible)
+  {
+  express1->SetPosition(x, y);
+  x1 = x + express1->Get_W() + Tree_Node::inUseFont()->Width(" = ");
+  express2->SetPosition(x1, y);
+  }
+}
+
+void Equality::SetDimensions(void)
+{
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     
+     if(visible)
+       {
+       express1->SetDimensions();
+       express2->SetDimensions();
+       h = express1->Get_H();
+       w = express1->Get_W() + express2->Get_W() + 
Tree_Node::inUseFont()->Width(" = ");
+       }
+      else { h = 0; w = 0; }
+ }
+aligline = round(h/2.0);
+}
+
+void Equality::SetFather(Tree_Node *f)
+{
+father = f;
+if(visible)
+   {
+   express1->SetFather(this);
+   express2->SetFather(this);
+   }
+}
+
+void Equality::SetCollapsed(char t)
+{
+collapsed = t;
+express1->SetCollapsed(t);
+express2->SetCollapsed(t);
+}
+
+
+
+/*                                                              */
+/*      implementation of class Guarded methods                */
+/*                                                              */
+
+
+Guarded::Guarded(Equality *eq, Tree_Node *b)
+{
+type = GUARDED;
+visible = TRUE;
+alignement = VER;
+equality = eq;
+bex = b;
+
+Set_Unparser(new Gl_Guarded(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Guarded::SetPosition(Coord xx, Coord yy)
+{
+Coord x1, y1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Guarded" << x << " " << y << "\n";
+ cout << "Guarded" << h << " " << w << "\n";
+#endif
+if (textual)
+       {
+       x1 = x + Tree_Node::inUseFont()->Width("[") + border;
+       equality->SetPosition(x1, y - border);
+       Xclose = x1 + equality->Get_W();        /*position of ] -> */
+       y1 = y - equality->Get_H() - VBORDER - border;
+       x1 = x + SMALL_BORDER + border;
+       bex->SetPosition(x1, y1);
+       }
+     else {    
+       y1 = y - VBORDER;
+       x1 = x + round((w - equality->Get_W())/2.0);
+       equality->SetPosition(x1, y1);
+       y1 = y1 - equality->Get_H() -  VBORDER - BORDER;
+       x1 = x + round((w - bex->Get_W())/2.0);
+       bex->SetPosition(x1, y1);
+       }
+}
+
+void Guarded::SetDimensions(void)
+{
+equality->SetDimensions();
+bex->SetDimensions();
+border = 0;
+
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:   if(textual)
+                          {
+                          w = Tree_Node::inUseFont()->Width("<Bex>");
+                          h = Tree_Node::inUseFont()->Height();
+                          if(!(father->GetTextual()) && (father->GetType() <= 
PARALLEL))
+                             {border = VBORDER; w += 2 * VBORDER; h += 2 * 
VBORDER; }
+                          }
+                        else {
+                             w = 
round((Tree_Node::inUseFont()->Width("Bex"))*20.0/9.0);
+                             h = 
round((Tree_Node::inUseFont()->Width("Bex"))*14.0/9.0);
+                             }
+                       break; 
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     
+     if(textual)
+       {
+       h = equality->Get_H() + bex->Get_H() + VBORDER;
+
+       w = Max(equality->Get_W() + Tree_Node::inUseFont()->Width("[") +
+                    Tree_Node::inUseFont()->Width("] -> "), bex->Get_W());
+       if(!(father->GetTextual()) && (father->GetType() <= PARALLEL))
+         {border = VBORDER; w += 2 * VBORDER; h += 2 * VBORDER; }
+       }
+      else {
+          h = equality->Get_H() + bex->Get_H() + 2 * VBORDER + 2 * BORDER;
+          w = Max(equality->Get_W(), bex->Get_W() + 2 * BORDER);
+          w +=  2 * BORDER;
+          }
+ }
+aligline = round(h/2.0);
+}
+
+void Guarded::SetFather(Tree_Node *f)
+{
+father = f;
+equality->SetFather(this);
+bex->SetFather(this);
+}
+
+void Guarded::SetCollapsed(char t)
+{
+collapsed = t;
+if(t)
+  t = COLLAPSED_INV;
+equality->SetCollapsed(t);
+bex->SetCollapsed(t);
+}
+
+
+void Guarded::SetTextual(char t, char s)
+{
+textual = t;
+selectable = (!t | s);
+bex->SetTextual(t);
+}
+
+/*                                                              */
+/*      implementation of class Exper_Off methods               */
+/*                                                              */
+
+Exper_Off::Exper_Off()
+{
+type = EXPER_OFF;
+textual = TRUE;
+visible = FALSE;
+selectable = FALSE;
+w = 0; h = 0;
+aligline = 0;
+
+Set_Unparser(new Gl_Exper_Off(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Exper_Off::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "ExperOffer" << x << " " << y << "\n";
+ cout << "ExperOffer" << h << " " << w << "\n";
+#endif
+}
+
+void Exper_Off::SetDimensions(void)
+{ }
+
+void Exper_Off::SetFather(Tree_Node *f)
+{ father = f; }
+
+
+/*                                                              */
+/*      implementation of class Exper_Off_List methods          */
+/*                                                              */
+
+Exper_Off_List::Exper_Off_List(Exper_Off *el, Exper_Off_List *nxt)
+{
+type = EXPER_OFF_L;
+textual = TRUE;
+selectable = FALSE;
+elem = el;
+next = nxt;
+visible = elem->GetVisible();
+
+Set_Unparser(new Gl_Exper_Off_List(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+}
+
+void Exper_Off_List::SetPosition(Coord xx, Coord yy)
+{
+Coord x1;
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Exper_Off_List" << x << " " << y << "\n";
+ cout << "Exper_Off_List" << h << " " << w << "\n";
+#endif
+if(elem != NULL)
+ {
+ elem->SetPosition(x,y);
+ x1 = x + elem->Get_W() + Tree_Node::inUseFont()->Width(", ");
+ if(next != NULL)
+   next->SetPosition(x1,y);
+ }
+}
+
+void Exper_Off_List::SetDimensions(void)
+{
+elem->SetDimensions();
+if(next!=NULL)
+   next->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     h = Tree_Node::inUseFont()->Height();
+                       w = (next == NULL || next->next == NULL)? elem->Get_W()
+                            : elem->Get_W() + next->Get_W() + 
Tree_Node::inUseFont()->Width(", ");
+ }
+aligline = round(h/2.0);
+}
+
+void Exper_Off_List::SetFather(Tree_Node *f)
+{
+father = f;
+if(elem != NULL)
+  elem->SetFather(this);
+if(next != NULL)
+  next->SetFather(this);
+}
+
+void Exper_Off_List::SetCollapsed(char t)
+{
+collapsed = t;
+if(elem != NULL)
+  elem->SetCollapsed(t);
+if(next != NULL)
+  next->SetCollapsed(t);
+}
+
+
+/*                                                              */
+/*      implementation of class Exclam methods               */
+/*                                                              */
+
+
+Exclam::Exclam(Tree_Node *v_e)
+{
+type = EXCLAM;
+textual = TRUE;
+selectable = FALSE;
+value_exp = v_e;
+visible = TRUE;
+
+Set_Unparser(new Gl_Exclam(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+
+}
+
+void Exclam::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Exclam" << x << " " << y << "\n";
+ cout << "Exclam" << h << " " << w << "\n";
+#endif
+
+value_exp->SetPosition(x + Tree_Node::inUseFont()->Width("!"),y);
+}
+
+void Exclam::SetDimensions(void)
+{
+value_exp->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     h = value_exp->Get_H();
+                       w = value_exp->Get_W() + 
Tree_Node::inUseFont()->Width("!");
+ }
+aligline = round(h/2.0);
+}
+
+void Exclam::SetFather(Tree_Node *f)
+{
+father = f;
+value_exp->SetFather(this);
+}
+
+void Exclam::SetCollapsed(char t)
+{
+collapsed = t;
+value_exp->SetCollapsed(t);
+}
+
+
+/*                                                              */
+/*      implementation of class Query methods               */
+/*                                                              */
+
+
+Query::Query(Id_Decl *i_d)
+{
+type = QUERY;
+textual = TRUE;
+selectable = FALSE;
+id_decl = i_d;
+visible = TRUE;
+
+Set_Unparser(new Gl_Query(this));
+((glow->Get_Folder())->Current())->Add(Get_Unparser());
+
+}
+
+void Query::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Query" << x << " " << y << "\n";
+ cout << "Query" << h << " " << w << "\n";
+#endif
+
+id_decl->SetPosition(x + Tree_Node::inUseFont()->Width("?"),y );
+}
+
+void Query::SetDimensions(void)
+{
+id_decl->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     h = id_decl->Get_H();
+                       w = id_decl->Get_W() + 
Tree_Node::inUseFont()->Width("?");
+ }
+aligline = round(h/2.0);
+}
+
+void Query::SetFather(Tree_Node *f)
+{
+father = f;
+id_decl->SetFather(this);
+}
+
+void Query::SetCollapsed(char t)
+{
+collapsed = t;
+id_decl->SetCollapsed(t);
+}
+
+
+/*                                                              */
+/*      implementation of class Definition                      */
+/*                                                              */
+
+Definition::Definition(Tree_Node *b, Proc_List *p, Data_List *d)
+{
+selectable = FALSE;
+bex = b;
+process_list = p;
+data_list = d;
+
+type = DEFINITION;
+visible = TRUE;
+
+}
+
+void Definition::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "Definition" << x << " " << y << "\n";
+ cout << "Definition" << h << " " << w << "\n";
+#endif
+bex->SetPosition(x, y);
+}
+
+void Definition::SetDimensions(void)
+{
+bex->SetDimensions();
+switch(collapsed)
+ {
+ case COLLAPSED_VIS:
+ case COLLAPSED_INV:   w = 0; h = 0;
+                       break;
+ case NOCOLLAPSED:     h = bex->Get_H();
+                       w = bex->Get_W();
+ }
+aligline = round(h/2.0);
+}
+
+void Definition::SetFather(Tree_Node *f)
+{
+father = f;
+bex->SetFather(this);
+if(process_list != NULL)
+   process_list->SetFather(this);
+if(data_list != NULL)
+   data_list->SetFather(this);
+}
+
+
+void Definition::SetPath(char *p, char n, int& np, int& nd)
+{
+strcpy(path,p);
+if(process_list != NULL)
+  process_list->SetPath(path, n, np, nd);
+if(data_list != NULL)
+  data_list->SetPath(path, n, np, nd);
+}
+
+/*                                                             */
+/*     implementation of class Proc_List methods               */
+/*                                                             */
+
+Proc_List::Proc_List(Process *el, Proc_List *nxt)
+{
+type = PROCLIST;
+selectable = FALSE;
+elem = el;
+next = nxt;
+visible = TRUE;
+}
+
+void Proc_List::SetPosition(Coord xx, Coord yy)
+{
+x = xx;
+y = yy;
+#ifdef DEBUG
+ cout << "ProcList" << x << " " << y << "\n";
+ cout << "ProcList" << h << " " << w << "\n";
+#endif
+}
+
+void Proc_List::SetDimensions(void)
+{
+h = 0; w = 0; 
+aligline = round(h/2.0);
+}
+
+void Proc_List::SetFather(Tree_Node *f)
+{
+father = f;
+if(elem != NULL)
+  elem->SetFather(this);
+if(next != NULL)
+  next->SetFather(this);
+}
+
+void Proc_List::SetPath(char *p, char n, int& np, int& nd)
+{
+if(elem != NULL)
+  elem->SetPath(p, n, np, nd);
+if(next != NULL)
+  next->SetPath(p, n, np, nd);
+}
+
+char *Proc_List::GetPath()
+{
+if(father->GetType() == PROCLIST)
+  return(((Proc_List *)father)->GetPath());
+
+if(father->GetType() == DEFINITION)
+  return(((Definition *)father)->GetPath());
+ else return(" ");
+}
diff --git a/test/etags/cp-src/abstract.H b/test/etags/cp-src/abstract.H
new file mode 100644
index 0000000..05d71cb
--- /dev/null
+++ b/test/etags/cp-src/abstract.H
@@ -0,0 +1,993 @@
+/*****************************************************************************
+
+  Copyright (c) 1992 Consorzio Pisa Ricerche.
+  Authors: Caneve Maurizio, Salvatori Elena
+
+  This software was produced under the ESPRIT/LOTOSPHERE
+  project. All rights reserved.
+
+*****************************************************************************/
+
+/*                                                                     */
+/*      @(#)abstract.h 4.31  2/1/93                                    */
+/*                                                                     */
+
+#ifndef abstract_hh
+#define abstract_hh
+
+#include <tree.h>
+#include <adatat.h>
+
+class SignatureSorts;
+
+class ID_Place: public Tree_Node
+{
+       char *str;
+       char RBubble;   
+
+friend class Gl_Identifier;
+
+public:
+ ID_Place();
+ void  SetIdent(char *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetVisible(char);
+ void SetFather(Tree_Node *);
+ void ClearID(void);
+ virtual ~ID_Place();
+
+/* inline functions            */
+ char *GetIdent() {return(str);};
+ void SetRBubble(char r) { RBubble = r; };
+ char GetRBubble(void) { return(RBubble); };
+}; /* end of class ID_Place    */
+
+
+class ID_List: public Tree_Node
+{
+       ID_Place *elem;
+       ID_List *next;
+
+friend class Gl_Id_List;
+friend class Oper;
+
+public:
+
+ ID_List(ID_Place *, ID_List *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ ID_Place *GetElem();
+ void HideMe(void);
+ void SetCollapsed(char);
+ void SetRBubble(char);
+ void BuildSigSorts(char, SignatureSorts **, char, Oper *);
+ void SetVisible(char);
+ void SetAlignement(char);
+ void ClearIDs(void);
+ int GetCardinality(int);
+}; /* end of class ID_List     */
+
+
+class Id_Decl: public Tree_Node
+{
+       ID_List *id_list;
+       ID_Place *sort_id;
+
+friend class Gl_Id_Decl;
+
+public:
+ Id_Decl(ID_List *, ID_Place *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Id_Decl */
+
+
+class Id_Decl_List: public Tree_Node
+{
+       Id_Decl *elem;
+       Id_Decl_List *next;
+
+friend class Gl_Id_Decl_List;
+
+public:
+ Id_Decl_List(Id_Decl *, Id_Decl_List *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Id_Decl_List        */
+
+
+class Comment: public Tree_Node
+{
+       char *comm;
+
+friend class Gl_Comment;
+
+public:
+ Comment();
+ Comment(Tree_Node*, Coord , Coord);
+ void SetComment(char *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ virtual ~Comment();
+}; /* end of class Comment     */
+
+
+class Comment_List: public Tree_Node
+{
+       Comment *elem;
+       Comment_List *next;
+
+public:
+ Comment_List(Comment *, Comment_List *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+}; /* end of class Comment_List        */
+
+
+class Value_Expr: public Tree_Node
+{
+
+friend class Gl_Value_Expr;
+
+public:
+ Value_Expr();
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+
+}; /* end of class Value_Expr  */
+
+
+class Value_Expr_List: public Tree_Node
+{
+       Tree_Node *elem;
+       Value_Expr_List *next;
+
+friend class Gl_Value_Expr_List;
+
+public:
+ Value_Expr_List(Tree_Node *, Value_Expr_List *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Value_Expr_List     */
+
+
+class Exit_Entry: public Tree_Node
+{
+
+friend class Gl_Exit_Entry;
+
+public:
+ Exit_Entry();
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+
+}; /* end of class Exit_Entry  */
+
+
+class Exit_Entry_List: public Tree_Node
+{
+       Tree_Node *elem;
+       Exit_Entry_List *next;
+
+friend class Gl_Exit_Entry_List;
+
+public:
+ Exit_Entry_List(Tree_Node *, Exit_Entry_List *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Exit_Entry_List     */
+
+
+class Exper_Off: public Tree_Node
+{
+
+public:
+ Exper_Off();
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+
+}; /* end of class Exper_Off */
+
+
+class Exper_Off_List: public Tree_Node
+{
+        Exper_Off *elem;
+        Exper_Off_List *next;
+
+friend class Gl_Exper_Off_List;
+
+public:
+ Exper_Off_List(Exper_Off *, Exper_Off_List *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Exper_Off_List      */
+
+
+class Gate_Decl: public Tree_Node
+{
+       ID_List *gate_id_list1;
+       ID_List *gate_id_list2;
+
+friend class Gl_Gate_Decl;
+
+public:
+ Gate_Decl(ID_List *, ID_List *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Gate_Decl */
+
+
+class Gate_Decl_List: public Tree_Node
+{
+       Gate_Decl *elem;
+       Gate_Decl_List *next;
+
+friend class Gl_Gate_Decl_List;
+
+public:
+ Gate_Decl_List(Gate_Decl *, Gate_Decl_List *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Gate_Decl_List */
+
+
+class Ident_Eq: public Tree_Node
+{
+        Id_Decl *iddecl;
+        Value_Expr *expr;
+
+friend class Gl_Ident_Eq;
+
+public:
+ Ident_Eq(Id_Decl *,  Value_Expr *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Ident_Eq      */
+
+
+class Ident_Eq_List: public Tree_Node
+{
+        Ident_Eq *elem;
+        Ident_Eq_List *next;
+
+friend class Gl_Ident_Eq_List;
+
+public:
+ Ident_Eq_List(Ident_Eq *, Ident_Eq_List *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Ident_Eq_List      */
+
+
+class Half_Container: public Tree_Node
+{
+       ID_List *gate_list;
+
+friend class Gl_Half_Container;
+
+public:
+ Half_Container(ID_List *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Half_Container      */
+
+
+
+/*                                                             */
+/*     Process Definitions                                     */
+/*                                                             */
+
+
+class Specification: public Tree_Node
+{
+class Definition;
+
+        Comment_List *com_list;
+       ID_Place *ident;
+       ID_List *gate_list;
+       Id_Decl_List *id_decl_list;
+        Comment_List *com_list1;
+       Tree_Node *func;
+       Data_List *dt_list;
+       Definition *def;
+       Coord yl1,yl2,yl3;
+       Coord MaxX, MaxY;
+
+friend class Gl_Specification;
+
+public:
+ Specification(Comment_List *, ID_Place *, ID_List *, Id_Decl_List *,
+              Comment_List *, Definition *, Tree_Node *, Data_List *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetPath(int&, int&);
+ Coord GetMaxX();
+ Coord GetMaxY();
+}; /* end of class Specification       */
+
+
+class Process: public Tree_Node
+{
+        Comment_List *com_list;
+       ID_Place *ident;
+       ID_List *gate_list;
+       Id_Decl_List *id_decl_list;
+       Definition *def;
+       Tree_Node *func;
+       char nesting;
+       Coord yl1,yl2,yl3,ypath;
+       Coord MaxX, MaxY;
+
+friend class Gl_Process;
+
+public:
+ Process(Comment_List *, ID_Place *, ID_List *,Id_Decl_List  *, Definition *, 
Tree_Node *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetPath(char *, char, int&, int&);
+ void NewBex(Tree_Node *);
+
+ Coord GetMaxY();
+ Coord GetMaxX();
+
+/* inline functions            */
+ char GetNesting() {return(nesting);};
+}; /* end of class Process     */
+
+
+class Proc_List: public Tree_Node
+{
+        Process *elem;
+        Proc_List *next;
+
+public:
+ Proc_List(Process *, Proc_List *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetPath(char *, char, int&, int&);
+ char *GetPath();
+}; /* end of class Proc_List      */
+
+
+class Definition: public Tree_Node
+{
+        Tree_Node *bex;
+        Proc_List *process_list;
+        Data_List *data_list;
+       char path[PATH_LENGHT];
+
+public:
+ Definition(Tree_Node *, Proc_List *, Data_List *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetPath(char *, char, int&, int&);
+
+/* inline functions            */
+ char *GetPath() { return(path);};
+}; /* end of class Definition      */
+
+
+
+/*                                                             */
+/*     Functionalities                                         */
+/*                                                             */
+
+
+class Exit: public Tree_Node
+{
+       ID_List *sort_list;
+
+friend class Gl_Exit;
+
+public:
+ Exit(ID_List *);
+ void SetPosition(Coord, Coord, Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+}; /*end of class Exit */
+
+
+class NoExit: public Tree_Node
+{
+
+friend class Gl_NoExit;
+
+public:
+ NoExit();
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+}; /*end of class NoExit */
+
+
+
+/*                                                             */
+/*     Value Expressions                                       */
+/*                                                             */
+
+
+class Value: public Tree_Node
+{
+       ID_Place *ident;
+       ID_Place *sort_id;
+
+friend class Gl_Value;
+
+public:
+ Value(ID_Place *, ID_Place *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Value */
+
+
+class Term: public Tree_Node
+{
+       ID_Place *op_ident;
+       Value_Expr_List *expr_list;
+       ID_Place *sort_id;
+
+friend class Gl_Term;
+
+public:
+ Term(ID_Place *, Value_Expr_List *, ID_Place *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Term */
+
+
+class Equality: public Tree_Node
+{
+        Tree_Node *express1;
+        Tree_Node *express2;
+
+friend class Gl_Equality;
+
+public:
+ Equality();
+ Equality(Tree_Node *, Tree_Node *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Equality        */
+
+
+class Sort_Id_Exit: public Tree_Node
+{
+       ID_Place *sort_id;
+
+friend class Gl_Sort_Id_Exit;
+
+public:
+ Sort_Id_Exit(ID_Place *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Sort_id_Exit */
+
+
+
+/*                                                             */
+/*     Guard Options                                           */
+/*                                                             */
+
+
+class NoGuard: public Tree_Node
+{
+
+friend class Gl_NoGuard;
+
+public:
+ NoGuard();
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+}; /* end of class NoGuard      */
+
+
+class Guard: public Tree_Node
+{
+        Equality *equality;
+
+friend class Gl_Guard;
+
+public:
+ Guard(Equality *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Guard        */
+
+
+
+/*                                                             */
+/*     Experiment Offers                                       */
+/*                                                             */
+
+
+class NoExperiment: public Tree_Node
+{
+
+friend class Gl_NoExperiment;
+
+public:
+ NoExperiment();
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+}; /* end of class NoExperiment */
+
+
+class Experiment: public Tree_Node
+{
+        Exper_Off_List *exp_offer_list;
+        Tree_Node *guard_option;
+
+friend class Gl_Experiment;
+
+public:
+ Experiment(Exper_Off_List *, Tree_Node *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetTextual(char, char = FALSE);
+ void SetCollapsed(char);
+
+/* inline functions            */
+ Tree_Node *GetGuard(void) { return(guard_option); };
+}; /* end of class Experiment   */
+
+
+class Exclam: public Tree_Node
+{
+        Tree_Node *value_exp;
+
+friend class Gl_Exclam;
+
+public:
+ Exclam(Tree_Node *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Exclam      */
+
+
+class Query: public Tree_Node
+{
+        Id_Decl *id_decl;
+
+friend class Gl_Query;
+
+public:
+ Query(Id_Decl *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+}; /* end of class Query      */
+
+
+
+/*                                                             */
+/*     Action Denotations                                      */
+/*                                                             */
+
+
+class Internal: public Tree_Node
+{
+
+friend class Gl_Internal;
+
+public:
+ Internal();
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+}; /* end of class Internal     */
+
+
+class Communication: public Tree_Node
+{
+       ID_Place *gate_identifier;
+        Tree_Node *experiment_option;
+        Coord xl, yl;
+        int hr;
+
+friend class Gl_Communication;
+
+public:
+ Communication(ID_Place *, Tree_Node *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetTextual(char, char = FALSE);
+ void SetCollapsed(char);
+}; /* end of class Communication        */
+
+
+
+/*                                                             */
+/*     Parallel Operators                                      */
+/*                                                             */
+
+
+class Gen_Paral: public Tree_Node
+{
+        ID_List *gate_id_list;
+       Coord Xclose;
+       char border;
+
+friend class Gl_Gen_Paral;
+
+public:
+ Gen_Paral(ID_List *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetCollapsed(char);
+
+/* inline functions            */
+ void HideGate() { ((ID_List *)gate_id_list)->HideMe(); };
+}; /* end of class Gen_Paral    */
+
+
+class Interl: public Tree_Node
+{
+
+friend class Gl_Interl;
+
+public:
+ Interl();
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+}; /* end of class Interl      */
+
+
+class Syncr: public Tree_Node
+{
+
+friend class Gl_Syncr;
+
+public:
+ Syncr();
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+}; /* end of class Syncr       */
+
+
+
+/*                                                             */
+/*     Bejhviour Expressions                                   */
+/*                                                             */
+
+
+class Action_Pref: public Tree_Node
+{
+        Tree_Node *action_den;
+        Tree_Node *bex;
+       char havebox;
+       char border;
+
+friend class Gl_Action_Pref;
+
+public:
+ Action_Pref(Tree_Node *, Tree_Node *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetTextual(char, char = FALSE);
+ void SetCollapsed(char);
+}; /* end of class Action_Pref  */
+
+
+class Enable: public Tree_Node
+{
+        Tree_Node *bex1, *bex2;
+       ID_List *gate_id_list;
+        Coord xl, yl1, xl2, yl2, xid, yid, Yclose;
+       char havebox;
+       char border;
+
+friend class Gl_Enable;
+
+public:
+ Enable(Tree_Node *, ID_List *, Tree_Node *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetTextual(char, char = FALSE);
+ int Get_Textual_H(void);
+ int Get_Textual_W(void);
+ void SetTerminalPos(void);
+ void SetCollapsed(char);
+}; /* end of class Enable       */
+
+
+class Disable: public Tree_Node
+{
+        Tree_Node *bex1, *bex2;
+        Coord xl, yl, yl2;
+       char havebox;
+       char border;
+
+friend class Gl_Disable;
+
+public:
+ Disable(Tree_Node *, Tree_Node *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetTextual(char, char = FALSE);
+ int Get_Textual_H(void);
+ int Get_Textual_W(void);
+ void SetTerminalPos(void);
+ void SetCollapsed(char);
+}; /* end of class Disable      */
+
+
+class Choice: public Tree_Node
+{
+       Tree_Node *bex1, *bex2;
+       Coord xl, yl, yl1;
+       char havebox;
+       int delta;
+       char border;
+
+friend class Gl_Choice;
+
+public:
+ Choice(Tree_Node *, Tree_Node *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetTextual(char, char = FALSE);
+ void SetCollapsed(char);
+ int Get_Textual_H(void);
+ int Get_Textual_W(void);
+ void SetTerminalPos(void);
+ void ChangeH(int);
+ void ChangeW(int);
+}; /* end of class Choice      */
+
+
+class Stop: public Tree_Node
+{
+       char havebox;
+       char border;
+
+friend class Gl_Stop;
+
+public:
+ Stop();
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetTextual(char, char = FALSE);
+ void SetCollapsed(char);
+}; /* end of class Stop        */
+
+
+class Exit_Bex: public Tree_Node
+{
+       Exit_Entry_List *entry_list; 
+       Coord Xopen, Xclose;
+       char havebox;
+       char border;
+
+friend class Gl_Exit_Bex;
+
+public:
+ Exit_Bex(Exit_Entry_List *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetTextual(char, char = FALSE);
+ void SetCollapsed(char);
+}; /*end of class Exit_Bex */
+
+
+class Hide: public Tree_Node
+{
+       ID_List *gate_list;
+       Tree_Node *bex;
+       char border;
+       Coord yl;
+
+friend class Gl_Hide;
+
+public:
+ Hide(ID_List *, Tree_Node *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetTextual(char, char = FALSE);
+ void SetCollapsed(char);
+}; /* end of class Hide        */
+
+
+class Guarded: public Tree_Node
+{
+        Equality *equality;
+        Tree_Node *bex;
+       Coord Xclose;
+       char border;
+
+friend class Gl_Guarded;
+
+public:
+ Guarded(Equality *, Tree_Node *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetTextual(char, char = FALSE);
+ void SetCollapsed(char);
+}; /* end of class Guarded        */
+
+
+class Proc_Inst: public Tree_Node
+{
+       ID_List *gate_list;
+       ID_Place *ident;
+       Value_Expr_List *value_expr_list;
+       Coord yp, yl1, Xopen, Xclose;
+       int hp;
+       char border;
+
+friend class Gl_Proc_Inst;
+
+public:
+  Proc_Inst(ID_Place *, ID_List *, Value_Expr_List *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetTextual(char, char = FALSE);
+ void SetCollapsed(char);
+};  /* end of class Proc_inst  */
+
+
+class Parallel: public Tree_Node
+{
+       Tree_Node *bex1, *bex2, *oper;
+       Coord xl, yl, yl1;
+       char havebox;
+       int delta;
+       char border;
+
+friend class Gl_Parallel;
+
+public:
+ Parallel(Tree_Node *, Tree_Node *, Tree_Node *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetTextual(char, char = FALSE);
+ int Get_Textual_W(void);
+ int Get_Textual_H(void);
+ void SetTerminalPos(void);
+ void SetCollapsed(char);
+
+/* inline functions            */
+ char GetOperType(void) { return(oper->GetType());};
+}; /* end of class Parallel    */
+
+
+class Local_Def: public Tree_Node
+{
+       Ident_Eq_List *equa_list;
+       Tree_Node *bex;
+       Coord yl;
+       char border;
+
+friend class Gl_Local_Def;
+
+public:
+ Local_Def(Ident_Eq_List *, Tree_Node *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetTextual(char, char = FALSE);
+ void SetCollapsed(char);
+}; /* end of class Local_Def   */
+
+
+class Par: public Tree_Node
+{
+       Gate_Decl_List *gate_decl_list;
+       Tree_Node *oper, *bex;
+       Coord xl, yl;
+       char border;
+
+friend class Gl_Par;
+
+public:
+ Par(Gate_Decl_List *, Tree_Node *, Tree_Node *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetTextual(char, char = FALSE);
+ void SetCollapsed(char);
+}; /* end of class Par */
+
+
+class Sum_Gate: public Tree_Node
+{
+       Gate_Decl_List *gate_decl_list;
+       Tree_Node *bex;
+       Coord xl, yl, Xch, Ych, Xclose, Yclose;
+       char border;
+
+friend class Gl_Sum_Gate;
+
+public:
+ Sum_Gate(Gate_Decl_List *, Tree_Node *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetTextual(char, char = FALSE);
+ void SetTerminalPos(void);
+ void SetCollapsed(char);
+}; /* end of class Sum_Gate    */
+
+
+class Sum_Ident: public Tree_Node
+{
+       Id_Decl_List *ident_decl_list;
+       Tree_Node *bex;
+       Coord xl, yl, Xch, Ych, Xclose, Yclose;
+       char border;
+
+friend class Gl_Sum_Ident;
+
+public:
+ Sum_Ident(Id_Decl_List *, Tree_Node *);
+ void SetPosition(Coord, Coord);
+ void SetDimensions(void);
+ void SetFather(Tree_Node *);
+ void SetTextual(char, char = FALSE);
+ void SetTerminalPos(void);
+ void SetCollapsed(char);
+}; /* end of class Sum_Ident   */
+
+
+
+#endif
diff --git a/test/etags/cp-src/burton.cpp b/test/etags/cp-src/burton.cpp
new file mode 100644
index 0000000..d86ad75
--- /dev/null
+++ b/test/etags/cp-src/burton.cpp
@@ -0,0 +1,14 @@
+::dummy::dummy test::dummy1(void)
+{
+  return ::dummy::dummy;
+}
+
+::dummy::dummy test::dummy2(::CORBA::Long dummy)
+{
+  return ::dummy::dummy;
+}
+
+::dummy::dummy test::dummy3(char* name, ::CORBA::Long dummy)
+{
+  return ::dummy::dummy;
+}
diff --git a/test/etags/cp-src/c.C b/test/etags/cp-src/c.C
new file mode 100644
index 0000000..2c5f7e0
--- /dev/null
+++ b/test/etags/cp-src/c.C
@@ -0,0 +1,156 @@
+template <typename ipc3dIslandHierarchy, typename ipc3dChannelType, unsigned 
numOfChannels, typename ipc3dLinkControl, typename ipc3dLinkControlSetup>
+class CMultiChannelCSC19_3D
+{
+private:
+        ipc3dLinkControlSetup setup;
+        
ipc3dCSC19<ipc3dIslandHierarchy,ipcMultiChannel<ipc3dChannelType,numOfChannels>,ipcMultiChannel<ipc3dChannelType,numOfChannels>,ipc3dLinkControl>
 mcCSC;
+        advTimer cscInitTime;
+        advTimer cscSegmentationTime;
+        advTimer outputTime;
+public:
+        void execute(CPluginCSCState& p, int w, int h, int d, const 
ipcMultiChannel<ipc3dChannelType,numOfChannels>* orgImage, 
ipcMultiChannel<ipc3dChannelType,numOfChannels>* regionImage, unsigned int* 
mapImage, ipc3dBlockCompressedLabelImage* compressedMapImage=NULL)
+        {
+                if (orgImage!=NULL)
+                {
+                                  //do something
+                }
+        }
+
+class foo {
+  int const_func() const;
+  int b;
+  int non_const_func2(void);
+};
+static void my_function1(int var1) const;
+int main (void) { my_function0(0); my_function1(1); return; }
+double base (void) const { return rng_base;  }
+
+template <typename T> MDiagArray2<T>&
+operator += (MDiagArray2<T>& a, const MDiagArray2<T>& b);
+
+class TestRecord;
+typedef struct s1 {
+   int counter;
+} t1;
+struct s2 {
+   int counter;
+};
+typedef struct s2 t2;
+class A {
+  enum { rosso, giallo, verde } colori;
+  const A& operator+(const A&);
+};
+const A& A::operator+(const A&) { }
+void operator+(int, int) {}
+void operator -(int, int) {}
+void operator int(int, int) {}
+
+A<int>* f() {}
+int f(A<int> x) {}
+int A<int>::f(A<int>* x) {}
+A<float,B<int> > A<B<float>,int>::f(A<int>* x) {}
+template <class C, int n> class AT { C t[n]; };
+class AU { T x; };
+class B<int> { void f() {} };
+const A::B::T& abt = abc;
+class A { class B { int f(); }; };
+class A {
+  int get_data() const;
+  A operator+(A& a) {};
+};
+is_muldiv_operation(pc)
+{
+}
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+domain foo {
+     void f() {}
+};
+
+void A::A() {}
+struct A { A(); }
+struct B { B(); };
+void B::B() {}
+void BE_Node::BE_Node() {}
+class BE_Node {};
+
+struct foo {
+  int x;
+};
+
+#ifdef __cplusplus
+}
+#endif
+class test {
+  int f(){return 0;};          // first comment
+                               // second comment
+  int ff(){return 1;};
+  int g(){return 2;};
+}
+class  AST_Root : public virtual AST_Module
+{
+};
+
+class  AST_Root;                       // The root of an AST 112,3888
+// etags finds
+
+AST_ConcreteType::AST_ConcreteType(AST_Decl::NodeType nt, UTL_ScopedName *n,
+                                    UTL_StrList *p)
+                : AST_Decl(nt, n, p)
+{
+}
+
+// and
+
+AST_Array::AST_Array(UTL_ScopedName *n, unsigned long nd, UTL_ExprList *ds)
+        : pd_n_dims(nd), pd_base_type(NULL),
+          AST_Decl(AST_Decl::NT_array, n, NULL)
+{
+}
+
+// as definitions of AST_Decl.
+class {
+     void f() {}
+};
+struct A {
+    ~A();
+};
+A::~A() {}
+
+struct B {
+    ~B() {};
+};
+
+enum {dog, cat} animals;
+struct {int teats;} cow;
+
+class Boo {
+    enum {dog, cat} animals;
+    struct {int treats;} cow;
+    int i,a,b;
+    foo() {
+        cout << "hi";
+    }
+
+    Boo(int _i, int _a, int _b) : i(_i), a(_a), b(_b) {}
+    Boo(Boo);
+};
+
+Boo::Boo(Boo) :
+    i(i),
+    a(a),
+    b(b)
+{}
+
+/* extern "C" grot: */
+extern "C" {
+typedef int should_see_this_one_enclosed_in_extern_C;
+}
+
+/* Typedefs: */
+typedef int (*should_see_this_function_pointer) (
+       void *but_not_this_argument);
+
+typedef int should_see_this_array_type[but_not_this_subscript];
diff --git a/test/etags/cp-src/cfront.H b/test/etags/cp-src/cfront.H
new file mode 100644
index 0000000..2d79186
--- /dev/null
+++ b/test/etags/cp-src/cfront.H
@@ -0,0 +1,836 @@
+/*ident        "@(#)cfront:src/cfront.h        1.13" */
+/***********************************************************************
+
+       C++ source for cfront, the C++ compiler front-end
+       written in the computer science research center of Bell Labs
+
+       Copyright (c) 1984 AT&T, Inc. All Rights Reserved
+       THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T, INC.
+
+       When reading cfront code please remember that C++ was not available
+       when it was originally written. Out of necessity cfront is written
+       in a style that takes advantage of only few of C++'s features.
+
+cfront.h:
+
+       Here is all the class definitions for cfront, and most of the externs
+
+***********************************************************************/
+
+/*     WARNING:
+       This program relies on non-initialized class members being ZERO.
+       This will be true as long as they are allocated using the "new" operator
+*/
+
+#include "token.h"
+#include "typedef.h"
+
+extern bit old_fct_accepted;   /* if set:
+                                       old style function definitions are 
legal,
+                                       implicit declarations are legal
+                               */
+extern bit fct_void;           /* if set:
+                                       int f(); ... f(1); gives a warning per 
file
+                                       undeclared(); gives a warning per file
+                                  if not:
+                                       int f(); ... f(1); is an error
+                                       undeclared(); is an error               
                                                (currently only a warning)
+                                       
+                               */
+
+#ifndef GRAM
+extern char* prog_name;                // compiler name and version
+extern int inline_restr;       // inline expansion restrictions 
+extern bit emode;              // print_mode error
+#endif
+
+extern Pname name_free;                // free lists
+extern Pexpr expr_free;
+extern Pstmt stmt_free;
+
+               /* "spy" counters: */
+extern int Nspy;
+extern int Nfile, Nline, Ntoken, Nname, Nfree_store, Nalloc, Nfree;
+extern int Nn, Nbt, Nt, Ne, Ns, Nstr, Nc, Nl;
+extern int NFn, NFtn, NFpv, NFbt, NFf, NFs, NFc, NFe, NFl;
+
+extern TOK     lex();
+extern Pname   syn();
+
+extern void    init_print();   // stage initializers
+extern void    init_lex();
+extern void    int_syn();
+extern void    ext(int);
+
+extern char*   make_name(TOK);
+
+struct loc             // a source file location
+{
+       short   file;   // index into file_name[], or zero
+       short   line;
+#ifndef GRAM
+       void    put(FILE*);
+       void    putline();
+#endif
+};
+
+extern Loc curloc;
+extern int curr_file;
+
+struct ea {    // fudge portable printf-like formatting for error()
+       union {
+               void* p;
+               int i;
+       };
+
+       ea(void* pp) { p = pp; }
+       ea(int ii)   { i = ii; }
+       ea() {}
+       ea(int i)       { x; }
+};
+
+extern ea* ea0;
+
+overload error;
+int error(const char*, ea& = *ea0, ea& = *ea0, ea& = *ea0, ea& = *ea0);
+int error(loc*, const char*, ea& = *ea0, ea& = *ea0, ea& = *ea0, ea& = *ea0);
+int error(int, const char*, ea& = *ea0, ea& = *ea0, ea& = *ea0, ea& = *ea0);
+int error(int, loc*, const char*, ea& = *ea0, ea& = *ea0, ea& = *ea0, ea& = 
*ea0);
+
+#ifndef GRAM
+extern int error_count;
+extern bit debug;
+extern int vtbl_opt;
+extern FILE* out_file;
+extern FILE* in_file;
+extern char scan_started;
+extern bit warn;
+#endif
+
+extern int br_level;
+extern int bl_level;
+extern Ptable ktbl;            // keywords and typedef names
+extern Ptable gtbl;            // global names
+extern char* oper_name(TOK);
+extern Pclass ccl;
+extern Pbase defa_type;
+extern Pbase moe_type;
+
+#ifndef GRAM
+extern Pstmt Cstmt;            // current statement, or 0
+extern Pname Cdcl;             // name currently being declared, or 0
+extern void put_dcl_context();
+
+extern Ptable any_tbl;         // table of undefined struct members
+extern Pbase any_type;
+#endif
+
+extern Pbase int_type;
+extern Pbase char_type;
+extern Pbase short_type;
+extern Pbase long_type;
+extern Pbase uint_type;
+extern Pbase float_type;
+extern Pbase double_type;
+extern Pbase void_type;
+
+#ifndef GRAM
+extern Pbase uchar_type;
+extern Pbase ushort_type;
+extern Pbase ulong_type;
+extern Ptype Pchar_type;
+extern Ptype Pint_type;
+extern Ptype Pfctvec_type;
+extern Ptype Pfctchar_type;
+extern Ptype Pvoid_type;
+extern Pbase zero_type;
+
+extern int byte_offset;
+extern int bit_offset;
+extern int max_align;
+extern int stack_size;
+extern int enum_count;
+extern int const_save;
+#endif
+
+extern Pexpr dummy;    /* the empty expression */
+extern Pexpr zero;
+extern Pexpr one;
+extern Pname sta_name; /* qualifier for unary :: */
+
+#define DEL(p) if (p && (p->permanent==0)) p->del()
+#define PERM(p) p->permanent=1
+#define UNPERM(p) p->permanent=0
+
+struct node {
+       TOK     base;
+       TOK     n_key;  /* for names in table: class */
+       bit     permanent;
+};
+
+#ifndef GRAM
+extern Pclass Ebase, Epriv;    /* lookc return values */
+#endif
+
+struct table : node {
+/*     a table is a node only to give it a "base" for debugging */
+       char    init_stat;      /* ==0 if block(s) of table not simplified,
+                                  ==1 if simplified but had no initializers,
+                                  ==2 if simplified and had initializers.
+                               */
+       short   size;
+       short   hashsize;
+       short   free_slot;      /* next free slot in entries */
+       Pname*  entries;
+       short*  hashtbl;
+       Pstmt   real_block;     /* the last block the user wrote,
+                                  not one of the ones cfront created
+                               */
+       Ptable  next;           /* table for enclosing scope */
+       Pname   t_name;         /* name of the table */
+
+       table(short, Ptable, Pname);
+
+       Pname   look(char*, TOK);
+       Pname   insert(Pname, TOK);
+#ifndef GRAM
+       void    grow(int);
+       void    set_scope(Ptable t)     { next = t; };
+       void    set_name(Pname n)       { t_name = n; };
+       Pname   get_mem(int);
+       int     max()                   { return free_slot-1; };
+       void    dcl_print(TOK,TOK);
+       Pname   lookc(char*, TOK);
+       Pexpr   find_name(Pname, bit, Pexpr);
+       void    del();
+#endif
+};
+
+#ifndef GRAM
+extern bit Nold;
+extern bit vec_const, fct_const;
+#endif
+
+extern void restore();
+extern void set_scope(Pname);
+extern Plist modified_tn;
+extern Pbase start_cl(TOK, Pname, Pname);
+extern void end_cl();
+extern Pbase end_enum(Pname, Pname);
+
+/************ types : basic types, aggregates, declarators ************/
+
+#ifndef GRAM
+extern bit new_type;
+extern Pname cl_obj_vec;
+extern Pname eobj;
+#endif
+
+
+#define DEFINED 01     /* definition fed through ?::dcl() */
+#define SIMPLIFIED 02  /* in ?::simpl() */
+#define DEF_SEEN 04    /* definition seen, but not processed */
+                       /*   used for class members in norm.c */
+#define IN_ERROR 010
+
+struct type : node {
+       bit     defined;        /* flags DEF_SEEN, DEFINED, SIMPLIFIED, IN_ERROR
+                                       not used systematically yet
+                               */
+       char*   signature(char*);
+#ifndef GRAM
+       void    print();
+       void    dcl_print(Pname);
+       void    base_print();
+       void    del();
+
+       Pname   is_cl_obj();    /* sets cl_obj_vec */
+       int     is_ref();
+       void    dcl(Ptable);
+       int     tsizeof();
+       bit     tconst();
+       TOK     set_const(bit);
+       int     align();
+       TOK     kind(TOK,TOK);
+       TOK     integral(TOK oo)        { return kind(oo,I); };
+       TOK     numeric(TOK oo)         { return kind(oo,N); };
+       TOK     num_ptr(TOK oo)         { return kind(oo,P); };
+       bit     vec_type();
+       bit     check(Ptype, TOK);
+       Ptype   deref();
+       Pptr    addrof();
+#endif
+};
+
+struct enumdef : type {        /* ENUM */
+       bit     e_body;
+       short   no_of_enumerators;
+       Pname   mem;
+               enumdef(Pname n)        { base=ENUM; mem=n; };
+#ifndef GRAM
+       void    print();
+       void    dcl_print(Pname);
+       void    dcl(Pname, Ptable);
+       void    simpl();
+#endif
+};
+
+struct classdef : type {       /* CLASS */
+       bit     pubbase;
+       bit     c_body;         /* print definition only once */
+       TOK     csu;            /* CLASS, STRUCT, UNION, or ANON */
+       char    obj_align;
+       char    bit_ass;        // 1 if no member has operator=()
+       char    virt_count;     /* number of virtual functions
+                                  incl. virtuals in base classes */
+       Pname   clbase;         // base class
+       char*   string;         /* name of class */
+       Pname   mem_list;
+       Ptable  memtbl;
+       int     obj_size;
+       int     real_size;      /* obj_size - alignment waste */
+       Plist   friend_list;
+       Pname   pubdef;
+       Plist   tn_list;        // list of member names hiding type names
+       Pclass  in_class;       /* enclosing class, or 0 */
+       Ptype   this_type;
+       Pname*  virt_init;      /* vector of jump table initializers */
+       Pname   itor;           /* constructor X(X&) */
+       Pname   conv;           /* operator T() chain */
+
+       classdef(TOK);
+       TOK     is_simple()     { return (csu==CLASS)?0:csu; };
+#ifndef GRAM
+       void    print();
+       void    dcl_print(Pname);
+       void    simpl();
+
+       void    print_members();
+       void    dcl(Pname, Ptable);
+       bit     has_friend(Pname);
+       bit     baseof(Pname);
+       bit     baseof(Pclass);
+       Pname   has_oper(TOK);
+       Pname   has_ctor()      { return memtbl->look("_ctor",0); }
+       Pname   has_dtor()      { return memtbl->look("_dtor",0); }
+       Pname   has_itor()      { return itor; }
+       Pname   has_ictor();
+#endif
+};
+
+
+
+struct basetype : type
+       /*      ZTYPE CHAR SHORT INT LONG FLOAT DOUBLE
+               FIELD EOBJ COBJ TYPE ANY
+       */
+       /*      used for gathering all the attributes
+               for a list of declarators
+
+               ZTYPE is the (generic) type of ZERO
+               ANY is the generic type of an undeclared name
+       */
+{
+       bit     b_unsigned;
+       bit     b_const;
+       bit     b_typedef;
+       bit     b_inline;
+       bit     b_virtual;
+       bit     b_short;
+       bit     b_long;
+       char    b_bits;         /* number of bits in field */
+       char    b_offset;       // bit offset of field
+       TOK     b_sto;          /* AUTO STATIC EXTERN REGISTER 0 */
+       Pname   b_name;         /* name of non-basic type */
+       Ptable  b_table;        /* memtbl for b_name, or 0 */
+       Pexpr   b_field;        /* field size expression for a field */
+       Pname   b_xname;        /* extra name */
+       Ptype   b_fieldtype;
+
+       basetype(TOK, Pname);
+
+       Pbase   type_adj(TOK);
+       Pbase   base_adj(Pbase);
+       Pbase   name_adj(Pname);
+       Pname   aggr();
+       void    normalize();
+#ifndef GRAM
+       Pbase   check(Pname);
+       void    dcl_print();
+       Pbase   arit_conv(Pbase);
+#endif
+};
+
+
+struct fct : type              // FCT
+{
+       TOK     nargs;
+       TOK     nargs_known;    // KNOWN, ELLIPSIS, or 0
+       char    f_virtual;      // 1+index in virtual table, or 0
+       char    f_inline;       // 1 if inline, 2 if being expanded, else 0 
+       Ptype   returns;
+       Pname   argtype;
+       Ptype   s_returns;
+       Pname   f_this;
+       Pclass  memof;          // member of class memof
+       Pblock  body;
+       Pname   f_init;         // base/member initializers
+                               // null name => base class init;
+                               // ids => member classes (with ctors)
+       Pexpr   b_init;         // base class initializer
+                               // ctor call after fct.dcl()
+//     int     frame_size;
+       Pexpr   f_expr;         // body expanded into an expression
+       Pexpr   last_expanded;
+       Pname   f_result;       // extra second argument of type X&
+
+       fct(Ptype, Pname, TOK);
+
+       void    argdcl(Pname,Pname);
+#ifndef GRAM
+       Ptype   normalize(Ptype);
+       void    dcl_print();
+       void    dcl(Pname);
+       Pexpr   base_init(Pname, Pexpr, Ptable);
+       Pexpr   mem_init(Pname, Pexpr, Ptable);
+       bit     declared() { return nargs_known; };
+       void    simpl();
+       Pexpr   expand(Pname,Ptable,Pexpr);
+#endif
+};
+
+
+struct name_list {
+       Pname   f;
+       Plist   l;
+       name_list(Pname ff, Plist ll) { f=ff; l=ll; };
+};
+
+#ifndef GRAM
+struct gen : type {            // OVERLOAD
+       Plist   fct_list;
+       char*   string;
+               gen(char*);
+       Pname   add(Pname, int);
+       Pname   find(Pfct, bit);
+};
+#endif
+
+struct pvtyp : type {
+       Ptype typ;
+};
+
+struct vec : pvtyp             // VEC
+                               // typ [ dim ]
+{
+       Pexpr   dim;
+       int     size;   
+
+       vec(Ptype t, Pexpr e) { Nt++; base=VEC; typ=t; dim=e; };
+#ifndef GRAM
+       Ptype   normalize(Ptype);
+#endif
+};
+
+struct ptr : pvtyp             // PTR, RPTR i.e. reference
+{
+       Pclass  memof;          // pointer to member of memof: memof::*
+       bit     rdo;            // "*const"
+
+       ptr(TOK b, Ptype t, bit r = 0) { Nt++; base=b; typ=t; rdo=r; };
+#ifndef GRAM
+       Ptype   normalize(Ptype);
+#endif
+};
+
+#ifndef GRAM
+inline Pptr type::addrof() { return new ptr(PTR,this,0); }
+
+extern bit vrp_equiv;
+#endif
+
+
+/****************************** constants ********************************/
+
+               /* STRING ZERO ICON FCON CCON ID */
+               /* IVAL FVAL LVAL */
+
+/***************************** expressions ********************************/
+
+#ifndef GRAM
+extern Pexpr next_elem();
+extern void new_list(Pexpr);
+extern void list_check(Pname, Ptype, Pexpr);
+extern Pexpr ref_init(Pptr,Pexpr,Ptable);
+extern Pexpr class_init(Pexpr,Ptype,Pexpr,Ptable);
+extern Pexpr check_cond(Pexpr, TOK, Ptable);
+#endif
+
+struct expr : node     /* PLUS, MINUS, etc. */
+       /* IMPORTANT:   all expressions are of sizeof(expr) */
+       /*      DEREF           =>      *e1 (e2==0) OR e1[e2]
+               UMINUS          =>      -e2
+               INCR (e1==0)    =>      ++e2
+               INCR (e2==0)    =>      e1++
+               CM              =>      e1 , e2
+               ILIST           =>      LC e1 RC   (an initializer list)
+               a Pexpr may denote a name
+       */
+{
+       union {
+               Ptype   tp;
+               int     syn_class;
+       };
+       union {
+               Pexpr   e1;
+               char*   string;
+               int     i1;
+       };
+       union {
+               Pexpr   e2;
+               Pexpr   n_initializer;
+               char*   string2;
+       };
+       union {                 /* used by the derived classes */
+               Ptype   tp2;
+               Pname   fct_name;
+               Pexpr   cond;
+               Pname   mem;
+               Ptype   as_type;
+               Ptable  n_table;
+               Pin     il;
+       };
+
+       expr(TOK, Pexpr, Pexpr);
+       ~expr();
+#ifndef GRAM
+       void    del();
+       void    print();
+       Pexpr   typ(Ptable);
+       int     eval();
+       int     lval(TOK);
+       Ptype   fct_call(Ptable);
+       Pexpr   address();
+       Pexpr   contents();
+       void    simpl();
+       Pexpr   expand();
+       bit     not_simple();
+       Pexpr   try_to_overload(Ptable);
+       Pexpr   docast(Ptable);
+       Pexpr   dovalue(Ptable);
+       Pexpr   donew(Ptable);
+       void    simpl_new();
+       void    simpl_delete();
+#endif
+};
+
+struct texpr : expr {          // NEW CAST VALUE
+       texpr(TOK bb, Ptype tt, Pexpr ee) : (bb,ee,0) {this=0; tp2=tt;}
+};
+
+struct ival : expr {           // NEW CAST VALUE
+       ival(int ii) : (IVAL,0,0) {this=0; i1 = ii;}
+};
+
+struct call : expr {           // CALL
+       call(Pexpr aa, Pexpr bb) : (CALL,aa,bb) { this=0; }
+#ifndef GRAM
+       void    simpl();
+       Pexpr   expand(Ptable);
+#endif
+};
+
+struct qexpr : expr {          // QUEST        cond ? e1 : e2
+       qexpr(Pexpr ee, Pexpr ee1, Pexpr ee2) : (QUEST,ee1,ee2) { this=0; 
cond=ee; }
+};
+
+struct ref : expr {            // REF DOT      e1->mem OR e1.mem
+       ref(TOK ba, Pexpr a, Pname b) : (ba,a,0) { this=0; mem=b; }
+};
+
+struct text_expr : expr        {       // TEXT
+       text_expr(char* a, char* b) : (TEXT,0,0) { string=a; string2=b; }
+};
+
+/************************* names (are expressions) 
****************************/
+
+struct name : expr {   // NAME TNAME and the keywords in the ktbl
+       TOK     n_oper;         // name of operator or 0
+       TOK     n_sto;          // EXTERN STATIC AUTO REGISTER ENUM 0
+       TOK     n_stclass;      // STATIC AUTO REGISTER 0
+       TOK     n_scope;        // EXTERN STATIC FCT ARG PUBLIC 0 
+       unsigned char   n_union;        // 0 or union index
+       bit     n_evaluated;    // 0 or n_val holds the value
+       bit     n_xref;         // argument of type X(X&)
+       unsigned char   lex_level;
+       TOK     n_protect;      // PROTECTED (<=>n_scope==0) or 0
+       short   n_addr_taken;
+       short   n_used;
+       short   n_assigned_to;
+       Loc     where;
+       int     n_val;          // the value of n_initializer
+                               // also used as the argument number
+                               // for inline arguments
+       int     n_offset;       // byte offset in frame or struct
+       Pname   n_list;
+       Pname   n_tbl_list;
+       union {
+               Pname   n_qualifier;    // name of containing class
+               Ptable  n_realscope;    /* for labels (always entered in
+                                          function table) the table for the
+                                          actual scope in which label occurred.
+                                       */
+       };
+
+       name(char* =0);
+       ~name();
+
+       Pname   normalize(Pbase, Pblock, bit);
+       Pname   tdef();
+       Pname   tname(TOK);
+       void    hide();
+       void    unhide()        { n_key=0; n_list=0; };
+#ifndef GRAM
+       Pname   dcl(Ptable,TOK);
+       int     no_of_names();
+       void    use()           { n_used++; };
+       void    assign();
+       void    take_addr()     { n_addr_taken++; };
+       void    check_oper(Pname);
+       void    simpl();
+       void    del();
+       void    print();
+       void    dcl_print(TOK);
+       void    field_align();
+       Pname   dofct(Ptable,TOK);
+#endif
+};
+
+#ifndef GRAM
+extern int friend_in_class;
+#endif
+
+/******************** statements *********************************/
+
+struct stmt : node {   /* BREAK CONTINUE DEFAULT */
+/*     IMPORTANT: all statement nodes have sizeof(stmt) */
+       Pstmt   s;
+       Pstmt   s_list;
+       Loc     where;
+       union {
+               Pname   d;
+               Pexpr   e2;
+               Pstmt   has_default;
+               int     case_value;
+               Ptype   ret_tp;
+       };
+       union {
+               Pexpr   e;
+               bit     own_tbl;
+               Pstmt   s2;
+       };
+       Ptable  memtbl;
+       union {
+               Pstmt   for_init;
+               Pstmt   else_stmt;
+               Pstmt   case_list;
+               bit     empty;
+       };
+
+       stmt(TOK, loc, Pstmt);
+       ~stmt();
+#ifndef GRAM
+       void    del();
+       void    print();
+       void    dcl();
+       void    reached();
+       Pstmt   simpl();
+       Pstmt   expand();
+       Pstmt   copy();
+#endif
+};
+
+#ifndef GRAM
+extern char* Neval;
+extern Pname dcl_temp(Ptable, Pname);
+extern char* temp(char*, char*, char*);
+extern Ptable scope;
+extern Ptable expand_tbl;
+extern Pname expand_fn;
+#endif
+
+struct estmt : stmt    /* SM WHILE DO SWITCH RETURN CASE */
+       /*      SM (e!=0)       =>      e;
+               in particular assignments and function calls
+               SM (e==0)       =>      ;       (the null statement)
+               CASE            =>      case e : s ;
+       */
+{
+       estmt(TOK t, loc ll, Pexpr ee, Pstmt ss) : (t,ll,ss) { this=0; e=ee; }
+};
+
+struct ifstmt : stmt   /* IF */
+       // else_stme==0 =>      if (e) s
+       // else_stmt!=0 =>      if (e) s else else_stmt
+{
+       ifstmt(loc ll, Pexpr ee, Pstmt ss1, Pstmt ss2)
+               : (IF,ll,ss1) { this=0; e=ee; else_stmt=ss2; };
+};
+
+struct lstmt : stmt    /* LABEL GOTO */
+       /*
+               d : s
+               goto d
+       */
+{
+       lstmt(TOK bb, loc ll, Pname nn, Pstmt ss) : (bb,ll,ss) { this=0; d=nn; }
+};
+
+struct forstmt : stmt {        // FOR
+       forstmt(loc ll, Pstmt fss, Pexpr ee1, Pexpr ee2, Pstmt ss)
+               : (FOR,ll,ss) { this=0; for_init=fss; e=ee1; e2=ee2; }
+};
+
+struct block : stmt {  // BLOCK        { d s }
+       block(loc ll, Pname nn, Pstmt ss) : (BLOCK,ll,ss) { this=0; d=nn; }
+#ifndef GRAM
+       void    dcl(Ptable);
+       Pstmt   simpl();
+#endif
+};
+
+#ifndef GRAM
+struct pair : public stmt {    // PAIR
+       pair(loc ll, Pstmt a, Pstmt b) : (PAIR,ll,a) { this=0; s2 = b; }
+};
+#endif
+
+struct nlist {
+       Pname   head;
+       Pname   tail;
+               nlist(Pname);
+       void    add(Pname n)    { tail->n_list = n; tail = n; };
+       void    add_list(Pname);
+};
+
+extern Pname name_unlist(nlist*);
+
+struct slist {
+       Pstmt   head;
+       Pstmt   tail;
+               slist(Pstmt s)  { Nl++; head = tail = s; };
+       void    add(Pstmt s)    { tail->s_list = s; tail = s; };
+};
+
+extern Pstmt stmt_unlist(slist*);
+
+struct elist {
+       Pexpr   head;
+       Pexpr   tail;
+               elist(Pexpr e)  { Nl++; head = tail = e; };
+       void    add(Pexpr e)    { tail->e2 = e; tail = e; };
+};
+
+extern Pexpr expr_unlist(elist*);
+
+#ifndef GRAM
+extern class dcl_context * cc;
+
+struct dcl_context {
+       Pname   c_this; /* current fct's "this" */
+       Ptype   tot;    /* type of "this" or 0 */
+       Pname   not;    /* name of "this"'s class or 0 */
+       Pclass  cot;    /* the definition of "this"'s class */
+       Ptable  ftbl;   /* current fct's symbol table */
+       Pname   nof;    /* current fct's name */
+
+       void    stack()         { cc++; *cc = *(cc-1); };
+       void    unstack()       { cc--; };
+};
+
+#define MAXCONT        20
+extern dcl_context ccvec[MAXCONT];
+#endif
+
+extern void yyerror(char*);
+extern TOK back;
+
+
+#ifndef GRAM
+extern char* line_format;
+
+extern Plist isf_list;
+extern Pstmt st_ilist;
+extern Pstmt st_dlist;
+extern Ptable sti_tbl;
+extern Ptable std_tbl;
+Pexpr try_to_coerce(Ptype, Pexpr, char*, Ptable);
+extern bit can_coerce(Ptype, Ptype);
+extern Ptype np_promote(TOK, TOK, TOK, Ptype, Ptype, TOK);
+extern void new_key(char*, TOK, TOK);
+
+extern Pname dcl_list;
+extern int over_call(Pname, Pexpr);
+extern Pname Nover;
+extern Pname Ntncheck;
+extern Pname Ncoerce;
+extern Nover_coerce;
+
+const MIA = 8;
+struct iline {
+       Pname   fct_name;       /* fct called */
+       Pin     i_next;
+       Ptable  i_table;
+       Pname   local[MIA];     /* local variable for arguments */
+       Pexpr   arg[MIA];       /* actual arguments for call */
+       Ptype   tp[MIA];        /* type of formal arguments */
+};
+
+extern Pexpr curr_expr;
+extern Pin curr_icall;
+#define FUDGE111 111
+
+extern Pstmt curr_loop;
+extern Pblock curr_block;
+extern Pstmt curr_switch;
+extern bit arg_err_suppress;
+extern loc last_line;
+
+extern no_of_undcl;
+extern no_of_badcall;
+extern Pname undcl, badcall;
+
+extern int strlen(const char*);
+extern char* strcpy(char*, const char*);
+extern int str_to_int(const char*);
+extern int c_strlen(const char* s);
+#endif
+
+extern int strcmp(const char*, const char*);
+
+#ifndef GRAM
+extern Pname vec_new_fct;
+extern Pname vec_del_fct;
+
+extern int Nstd; // standard coercion used (derived* =>base* or int=>long or 
...)
+
+extern int stcount;    // number of names generated using make_name()
+
+extern Pname find_hidden(Pname);
+Pexpr replace_temp(Pexpr,Pexpr);
+void make_res(Pfct);
+Pexpr ptr_init(Pptr,Pexpr,Ptable);     
+
+#endif
+
+extern bit fake_sizeof;        // suppress error message for ``int v[];''
+
+extern TOK lalex();
+#ifdef DEBUG
+extern fprintf(FILE*, char* ...);
+#define DB(a) fprintf a
+#else
+#define DB(a) /**/
+#endif
+
+/* end */
diff --git a/test/etags/cp-src/clheir.cpp.gz b/test/etags/cp-src/clheir.cpp.gz
new file mode 100644
index 0000000..38b08a8
Binary files /dev/null and b/test/etags/cp-src/clheir.cpp.gz differ
diff --git a/test/etags/cp-src/clheir.hpp b/test/etags/cp-src/clheir.hpp
new file mode 100644
index 0000000..a924563
--- /dev/null
+++ b/test/etags/cp-src/clheir.hpp
@@ -0,0 +1,82 @@
+/* ======================================================================= */
+/*                                 CLHEIR.H                                */
+/* ======================================================================= */
+
+// CLASS HEIRARCHY
+// Locations or Agents are both of type generic_object. Generic_objects may
+// have states, and are responsible for updating their states appropriately
+// when their step() functions are executed.
+
+extern void init_registry(void);
+extern void step_everybody(void);
+
+class generic_object
+    {
+    int where_in_registry;
+public:
+    generic_object();  // enter generic_object into ObjectRegistry
+    // We never copy generic_objects, so we don't need a copy constructor.
+    ~generic_object(void);  // delete from ObjectRegistry
+    // Simulation steps, accomodate different kinds of time
+    virtual void compute_next_state(void) { }
+    virtual void step(void) { }
+    };
+
+// =======================================================================
+
+// Locations can be regular (like a field of squares or hexagons) or
+// irregular. Regular locations have 2-D or 3-D positions represented
+// by integers. Locations are never copied; no need for copy constructors.
+
+const int max_num_directions = 6; // handles both cubes and hexagons
+
+class location: public generic_object
+    {
+    // Any kind of location needs a physical position, but for a regular
+    // location, this may be implicit, and for an irregular location, it
+    // should be custom-defined.
+
+    // Any kind of location needs a private list of neighbors, but for a
+    // regular location, this may be implicit.
+
+public:
+    location() { }
+    ~location();
+    };
+
+class irregular_location: public location
+    {
+    double x, y, z;
+public:
+    irregular_location(double xi, double yi, double zi)
+        { x = xi; y = yi; z = zi; }
+    ~irregular_location();
+    };
+
+class discrete_location: public location
+    {
+    int x, y, z;
+    class location *neighbors[max_num_directions];
+    void clear_neighbors(void);
+public:
+    discrete_location(int xi, int yi, int zi):
+        x(xi), y(yi), z(zi)
+            { clear_neighbors(); }
+    ~discrete_location(void);
+    void assign_neighbor(int direction, location *x)
+        { neighbors[direction] = x; }
+    };
+
+// =======================================================================
+
+// Agents are generic_objects with locations, who can move. Examples in
+// Pacman would be the protagonist, the monsters, and the monsters' ghosts.
+
+class agent: public generic_object
+    {
+    location *where;
+public:
+    agent();
+    ~agent();
+    void move(int);
+    };
diff --git a/test/etags/cp-src/conway.cpp b/test/etags/cp-src/conway.cpp
new file mode 100644
index 0000000..1e60014
--- /dev/null
+++ b/test/etags/cp-src/conway.cpp
@@ -0,0 +1,95 @@
+/* ======================================================================= */
+/*                                CONWAY.CPP                               */
+/* ======================================================================= */
+
+#include "assert.h"
+#include "iostream.h"
+#include "conio.h"
+#include "clheir.h"
+#include "screen.h"
+#include "conway.h"
+
+#define max(x,y)  ((x > y) ? x : y)
+#define min(x,y)  ((x > y) ? y : x)
+
+const int num_rows = min(50, NUM_ROWS);
+const int num_columns = 40;
+
+class site *field_of_play[num_rows][num_columns];
+
+int site::total_surrounding(void)
+    {
+    int i, j, imin, imax, jmin, jmax, total;
+
+    total = 0;
+    imin = max(0, x - 1);
+    imax = min(num_rows - 1, x + 1);
+    jmin = max(0, y - 1);
+    jmax = min(num_columns - 1, y + 1);
+
+    for (i = imin; i <= imax; i++)
+        for (j = jmin; j <= jmax; j++)
+            if (field_of_play[i][j]->read()) total++;
+    if (alive) total--;
+    return total;
+    }
+
+void display(void)
+    {
+    int i, j;
+
+    for (i = 0; i < num_rows; i++)
+        for (j = 0; j < num_columns; j++)
+            {
+            if (field_of_play[i][j]->read()) write_xyc(2*j, i, 'X');
+            else write_xyc(2*j, i, '.');
+            }
+    hide_cursor();
+    }
+
+void glider(int x, int y)
+    {
+    field_of_play[x - 1][y + 0]->set();
+    field_of_play[x - 1][y + 1]->set();
+    field_of_play[x + 0][y - 1]->set();
+    field_of_play[x + 0][y + 0]->set();
+    field_of_play[x + 1][y + 1]->set();
+    }
+
+void traffic_light(int x, int y)
+    {
+    field_of_play[x - 1][y]->set();
+    field_of_play[x + 0][y]->set();
+    field_of_play[x + 1][y]->set();
+    }
+
+
+void main(void)
+    {
+    int i, j, c;
+
+    init_registry();
+
+    for (i = 0; i < num_rows; i++)
+        for (j = 0; j < num_columns; j++)
+            field_of_play[i][j] = new site(i, j);
+
+start_over:
+    traffic_light(num_rows/2 - 8, num_columns/2 - 8);
+    glider(num_rows/2 + 8, num_columns/2 + 8);
+
+    clear_screen();
+    while (1)
+        {
+        display();
+        if ((c = getch()) == 'q') { clear_screen(); return; }
+        if (c == 'i')
+            {
+            for (i = 0; i < num_rows; i++)
+                for (j = 0; j < num_columns; j++)
+                    field_of_play[i][j]->clear();
+            goto start_over;
+            }
+        step_everybody();
+        }
+    }
diff --git a/test/etags/cp-src/conway.hpp b/test/etags/cp-src/conway.hpp
new file mode 100644
index 0000000..9fbb251
--- /dev/null
+++ b/test/etags/cp-src/conway.hpp
@@ -0,0 +1,23 @@
+/* ======================================================================= */
+/*                                 CONWAY.H                                */
+/* ======================================================================= */
+
+class site: public location
+    {
+    char x, y, alive, next_alive;
+    int total_surrounding(void);
+public:
+    site(int xi, int yi): x(xi), y(yi), alive(0) { }
+    ~site();
+    char read() { return alive; }
+    void set(void) { alive = 1; }
+    void clear(void) { alive = 0; }
+    void compute_next_state(void)
+        {
+        int n = total_surrounding();
+        next_alive = alive;
+        if (n < 2 || n > 3) next_alive = 0;
+        else if (n > 2) next_alive = 1;
+        }
+    void step(void) { alive = next_alive; }
+    };
diff --git a/test/etags/cp-src/fail.C b/test/etags/cp-src/fail.C
new file mode 100644
index 0000000..c602ed2
--- /dev/null
+++ b/test/etags/cp-src/fail.C
@@ -0,0 +1,52 @@
+/* Examples provided by Sam Kendall <address@hidden>, Jan 1997 */
+
+// check use of references with nested/local classes
+
+// This example causes etags 13 to abort when compiled with -DDEBUG.
+// Etags 13 cannot deal with nested structures after the first level.
+struct A {
+          struct B {
+                  struct C {
+                          int x;
+                          C(int i) {x = i;}
+                          operator int() const {return x;}
+                  };
+                  typedef C T;
+          };
+          typedef B T2;
+};
+
+
+class String;
+
+
+class A {
+       class B {
+               class C {};
+               int f() { return 5; }
+       };
+};
+
+
+int A::B::f() { return 2; }
+
+
+A::B::C abc(-37);
+
+
+main()
+{
+       if (abc != -37 || abt != -37) return 1;
+
+       class D : public A::B::C {
+       public:
+               D() : ::A::T2::T(97), x(1066) {}
+               int x;
+       } &d = D();
+
+       if (d.x != 1066 || d.A::T2::T::x != 97) return 2;
+       return 0;
+}
+
+
+template <class T>
diff --git a/test/etags/cp-src/functions.cpp b/test/etags/cp-src/functions.cpp
new file mode 100644
index 0000000..fb546ed
--- /dev/null
+++ b/test/etags/cp-src/functions.cpp
@@ -0,0 +1,239 @@
+#include "main.hpp"
+#pragma ident  "@(#)functions.cpp      1.0     98/11/12 (c) Rupak Rathore"
+
+// Constructor default argument initialises to today's values
+void Date::setDate ( int d , int m , int y ){
+       time_t t;
+       struct tm * ptm;
+       t = time ( NULL ) ;
+       if ( date != NULL )
+               delete date;
+       date = NULL;
+       if ( d == 0 && m == 0 && y == 0 ) // explicity called or default 
constructor hence leave it.
+               return;
+       if ( d < 0 && m < 0 && d < 0 ) // Special instruction to intialise to 
today's value
+               d=m=y=0;
+       date = new tm;
+       ptm=localtime ( &t ) ;
+       *date=(*ptm);
+       if ( d )
+               date->tm_mday = d;
+       if ( m )
+               date->tm_mon = m - 1; // Months are counted from January
+       if ( y > 1900 ) // Complete year specified so take into account
+               y -= 1900;
+       if ( y )
+               date->tm_year = y;
+       date->tm_sec=date->tm_min=date->tm_hour=0;
+       t = mktime ( date ) ;
+}
+
+// Addition operation ::: Warning ::: A combination of addition and 
substraction does not give a proper result
+void Date::plus ( int days , int month , int year ){
+       if ( ! set () )
+               return;
+       date->tm_mday += days ;
+       date->tm_mon += month ;
+       date->tm_year += year ;
+       mktime ( date );
+}
+
+//Substraction operation ::: Warning ::: A combination of addition and 
substraction does not give a proper result
+void Date::minus ( int days , int month , int year ){
+       if ( ! set () )
+               return;
+       date->tm_mday -= days ;
+       date->tm_mon -= month ;
+       date->tm_year -= year ;
+       mktime ( date );
+}
+
+
+void Date::shift ( void ){//Shift this date to previous working days (useful 
for benchmarks)
+       if ( ! set() )
+               return ;
+       while(isHoliday(*this)||isweekend()){
+               date->tm_mday -= 1 ;
+               mktime ( date );
+       }
+}
+
+// Assignment
+Date & Date::operator = ( Date d ){
+       if ( d.set() )
+               setDate ( d.date->tm_mday, d.date->tm_mon + 1, d.date->tm_year 
);
+       return(*this);
+}
+
+// Add number of days
+Date & Date::operator += ( int days ){
+       if ( set () ){
+               date->tm_mday += days ;
+               mktime ( date );
+       }
+       return(*this);
+}
+
+// Substract number of days
+Date & Date::operator -= ( int days ){
+       if ( set () ){
+               date->tm_mday -= days ;
+               mktime ( date );
+       }
+       return(*this);
+}
+
+// Advance one day
+Date & Date::operator ++ ( void ){
+       if ( set () ){
+               date->tm_mday += 1 ;
+               mktime ( date );
+       }
+       return(*this);
+}
+
+// Backwards one day
+Date & Date::operator -- ( void ){
+       if ( set () ){
+               date->tm_mday -= 1 ;
+               mktime ( date );
+       }
+       return(*this);
+}
+
+int Date::operator - ( Date d ){
+       long l;
+       if (( ! set() ) || (! d.set()))
+               return(0);
+       l=(mktime(date)-mktime(d.date))/(3600*24);
+       return((int)l);
+}
+
+int Date::operator < ( Date d ) {
+       return ( unidate() < d.unidate() );
+}
+
+int Date::operator > ( Date d ) {
+       return ( unidate() > d.unidate() );
+}
+
+int Date::operator == ( Date d ) {
+       return ( unidate() == d.unidate() );
+}
+
+ostream& operator <<  ( ostream &c, Date d ) {
+       if ( ! d.set() )
+               c << "Null";
+       else
+               c << d.date->tm_mday << ":" << d.date->tm_mon + 1 << ":" << 
d.date->tm_year + 1900 ;
+       return ( c );
+}
+
+// Modified to read date in yyyymmdd format.
+istream& operator >> ( istream &i, Date & dd ){
+       int d,m,y,tmp;
+       i >> tmp;
+       d=tmp%100;
+       tmp/=100;
+       m=tmp%100;
+       tmp/=100;
+       y=tmp;
+       dd.setDate(d,m,y);
+       return(i);
+}
+/*
+istream& operator >>  ( istream &i, Date &dd ) {
+       char input[11];
+       int d,m,y;
+       cout << "Enter the date ( dd-mm-yyyy ) : ";
+       i >> input ;
+       d = ( input[0] - '0' ) * 10 + ( input[1] - '0' );
+       m = ( input[3] - '0' ) * 10 + ( input[4] - '0' );
+       y = ( input[6] - '0' ) * 1000 + ( input[7] - '0' ) * 100 + ( input[8] - 
'0' ) * 10 + ( input[9] - '0' );
+       dd.setDate ( d, m, y );
+       return ( i );
+}
+*/
+
+// Check whether given year is leap or not
+bool isLeap ( int year ){
+       return ( (year%100==0) ? (year%400==0) : (year%4==0) );
+}
+
+bool isHoliday ( Date d ){
+       long int ld;
+       ld = ( d.year()*100 + d.month() )*100 + d.day();
+       for ( int i=0; i<no_of_vacations;i++)
+               if ( ld == vacation[i] )
+                       return(true);
+       return(false);
+}
+
+// Sort the given array in ascending order
+void asort(int *a, int num){
+       int i,k,mini,tmp;
+       for ( k=1; k<num; k++ ){
+               mini=k-1;
+               for ( i=k; i<num; i++ )
+                       if ( a[mini] > a[i] ) {
+                               tmp=a[i];
+                               a[i]=a[mini];
+                               a[mini]=tmp;
+                       }
+       }
+}
+
+void ReadVacation ( char *filename ) {
+       // cerr << filename;
+       ifstream vacfile(filename);
+       if ( ! vacfile.good() )
+               d_error("ReadVacation","Unable to find the vacation and 
holidays file");
+       // cerr << filename ;
+       d_silent("ReadVacation","vacation file successfully opened.");
+       no_of_vacations = 0;
+       while ( !vacfile.eof() )
+               vacfile >> vacation[no_of_vacations++];
+       --no_of_vacations;
+       d_silent("ReadVacation","Finished Reading file");
+       vacfile.close();
+}
+
+void Debug ( int lineno, int level, char* func , char* mesg ) // error_level, 
function, message
+{
+       if ( debug_level <= level )
+               cerr << PROGNAME << ": " << func << ": " << lineno << ": " << 
debug_string[level] << ": " << mesg << endl;
+       if ( level == ERROR ){
+               cerr << PROGNAME << ": Exiting because of fatal error." <<endl ;
+               exit(2);
+       }
+}
+
+int WorkingDays(Date a, Date b){
+       Date tmp;
+       int wdays=0,days=0;
+       if ( (! a.set()) || (! b.set()) )
+               return(0);
+       days=b-a+1; // Inclusive
+       tmp=a;
+       for ( int i=0;i<days;i++){
+               if((!isHoliday(tmp))&&(!tmp.isweekend()))
+                       wdays++;
+               tmp++;
+       }
+       return(wdays);
+}
+
+Date StartDay(Date a,int days){//Function to calculate the apropriate start 
day to finish in days working days
+       Date tmp;
+       int wdays=0;
+       if ( ! a.set() )
+               return (a);
+       tmp=a;
+       while(wdays<days){
+               if((!isHoliday(tmp))&&(!tmp.isweekend()))
+                       wdays++;
+               tmp--;
+       }
+       tmp++;
+       return(tmp);
+}
diff --git a/test/etags/cp-src/screen.cpp b/test/etags/cp-src/screen.cpp
new file mode 100644
index 0000000..1958a19
--- /dev/null
+++ b/test/etags/cp-src/screen.cpp
@@ -0,0 +1,62 @@
+/* ======================================================================= */
+/*                                SCREEN.CPP                               */
+/* ======================================================================= */
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "dos.h"
+
+#include "screen.h"
+
+/* ----------------------------------------------------------------------- */
+/*              Cursor Position and Screen Buffering Functions             */
+/* ----------------------------------------------------------------------- */
+
+unsigned char cursor_x, cursor_y;
+static union REGS regs;
+
+void goto_xy(unsigned char x, unsigned char y)
+    {
+    regs.h.ah = 2;
+    regs.h.bh = 0;
+    regs.h.dh = y;
+    regs.h.dl = x;
+    int86(0x10, &regs, &regs);
+    }
+
+void hide_cursor(void)
+    {
+    goto_xy(0, NUM_ROWS);
+    }
+
+void cursor_position(void)
+    {
+    regs.h.ah = 3;
+    regs.h.bh = 0;
+    int86(0x10, &regs, &regs);
+    cursor_x = regs.h.dl;
+    cursor_y = regs.h.dh;
+    }
+
+void clear_screen(void)
+    {
+    unsigned int i, j;
+    char far *p;
+
+    p = SCREEN_START;
+    for (i = 0; i < NUM_ROWS; i++)
+        for (j = 0; j < 80; j++)
+            {
+            *p++ = ' ';
+            *p++ = LIGHTGRAY;
+            }
+    }
+
+void write_xyc(int x, int y, char c)
+    {
+    char far *p;
+
+    p = SCREEN_FP(x, y);
+    *p++ = c;
+    *p = LIGHTGRAY;
+    }
diff --git a/test/etags/cp-src/screen.hpp b/test/etags/cp-src/screen.hpp
new file mode 100644
index 0000000..a7099a3
--- /dev/null
+++ b/test/etags/cp-src/screen.hpp
@@ -0,0 +1,39 @@
+/* ======================================================================= */
+/*                                 SCREEN.H                                */
+/* ======================================================================= */
+
+// This stuff is entirely non-portable MSDOS-ish code. Note the hardware
+// address below, for the standard location of the EGA video buffer.
+
+#if !defined(__COLORS)
+#define __COLORS
+
+enum COLORS {
+    BLACK,          /* dark colors */
+    BLUE,
+    GREEN,
+    CYAN,
+    RED,
+    MAGENTA,
+    BROWN,
+    LIGHTGRAY,
+    DARKGRAY,       /* light colors */
+    LIGHTBLUE,
+    LIGHTGREEN,
+    LIGHTCYAN,
+    LIGHTRED,
+    LIGHTMAGENTA,
+    YELLOW,
+    WHITE
+};
+#endif
+
+#define SCREEN_FP(x,y) \
+    ((char far *) (0xB8000000L | ((unsigned) (160 * (y) + 2 * (x)))))
+#define SCREEN_START   SCREEN_FP(0, 0)
+
+void goto_xy(unsigned char x, unsigned char y);
+void hide_cursor(void);
+void cursor_position(void);
+void clear_screen(void);
+void write_xyc(int x, int y, char c);
diff --git a/test/etags/el-src/TAGTEST.EL b/test/etags/el-src/TAGTEST.EL
new file mode 100644
index 0000000..acf0baf
--- /dev/null
+++ b/test/etags/el-src/TAGTEST.EL
@@ -0,0 +1,31 @@
+(foo::defmumble bletch beuarghh)
+;;; Ctags test file for lisp mode.
+
+;; from emacs/lisp/delsel.el:76:
+(defalias 'pending-delete-mode 'delete-selection-mode)
+
+;; compare with:
+(defalias (quote explicitly-quoted-pending-delete-mode) 'delete-selection-mode)
+
+;;
+;; Output from original ctags:
+;;
+;'pending-delete-mode  tagstest.el     /^(defalias 'pending-delete-mode 
'delete-selection-m/
+;(quote        tagstest.el     /^(defalias (quote 
explicitly-quoted-pending-delete-/
+;;
+;; Output from ctags with my patch in L-getit():
+;;
+;pending-delete-mode   tagstest.el     /^(defalias 'pending-delete-mode 
'delete-selection-m/
+;explicitly-quoted-pending-delete-mode tagstest.el     /^(defalias (quote 
explicitly-quoted-pending-delete-/
+;; Output from original etags:
+;;
+;tagstest.el,61
+;(defalias 'pending-delete-mode 4,68
+;(defalias (quote 7,141
+;;
+;; Output from patched etags:
+;;
+;tagstest.el,99
+;(defalias 'pending-delete-mode 4,68
+;(defalias (quote explicitly-quoted-pending-delete-mode)7,141
+;;
diff --git a/lisp/progmodes/etags.el 
b/test/etags/el-src/emacs/lisp/progmodes/etags.el
similarity index 100%
copy from lisp/progmodes/etags.el
copy to test/etags/el-src/emacs/lisp/progmodes/etags.el
diff --git a/test/etags/erl-src/gs_dialog.erl b/test/etags/erl-src/gs_dialog.erl
new file mode 100644
index 0000000..c04ee8b
--- /dev/null
+++ b/test/etags/erl-src/gs_dialog.erl
@@ -0,0 +1,271 @@
+-module(gs_dialog). % behaviour
+-define(VERSION, '2001.1101').
+-vsn(?VERSION).
+-author('address@hidden').
+-copyright('Copyright (c)2001 Cat`s Eye Technologies. All rights reserved.').
+
+%%% Redistribution and use in source and binary forms, with or without
+%%% modification, are permitted provided that the following conditions
+%%% are met:
+%%%
+%%%   Redistributions of source code must retain the above copyright
+%%%   notice, this list of conditions and the following disclaimer.
+%%%
+%%%   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.
+%%%
+%%%   Neither the name of Cat's Eye Technologies 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 COPYRIGHT HOLDERS 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. 
+
+-export([behaviour_info/1,
+         show/4,
+        test/0]).
+
+%%% BEGIN gs_dialog.erl %%%
+
+%%% This module specifies a common behaviour for "modal" dialog boxes
+%%% using GS.
+
+%%--------------------------------------------------------------------
+%% behaviour_info(callbacks) -> ListOfFunctionArityTuples
+%% Used by R8 to check the implementation modules for consistency
+%% with the behaviour specification, what callbacks this module needs.
+
+behaviour_info(callbacks) ->
+  [
+
+    %%----------------------------------------------------------------
+    %% Module:buttons() -> ListOfAtoms
+    %% Should return the labels used on the main (non-extra) buttons
+    %% of the dialog box.
+    %% e.g. ['OK', 'Cancel'].
+
+    {buttons, 0},
+
+    %%----------------------------------------------------------------
+    %% Module:icon() -> FileNameString | {Text, FgColour, BgColour}
+    %% Should return the the icon displayed in the dialog box.
+    %% This should either be the fully qualified filename of a 32x32 GIF
+    %% file (e.g. in the application's priv dir,) or a 3-tuple
+    %% describing a simple "circle" icon to be rendered by GS itself.
+    %% The latter option was added because some versions of Erlang for
+    %% Windows use a Tk emulation package which is not always on the
+    %% ball when it comes to correct image transparency and colour.
+    %% e.g. filename:join(code:priv_dir(?MODULE), "notify.gif")
+
+    {icon, 0},
+
+    %%----------------------------------------------------------------
+    %% Module:controls(Parent, ArgList) -> {GSControl | nil, NewArgList}
+    %% Used by the implementation to provide extra controls in the dialog
+    %% box, if any.  If not, nil should be returned instead of the control.
+    %% If many controls are added, it is recommended they are placed in a
+    %% frame, with the frame returned as the control.
+    %% The control need not have positioning information, as it will be
+    %% assigned a pack_xy option when it is placed into the Parent frame.
+    %% The list of arguments may be modified by this callback.
+    %% e.g. {nil, Args}
+
+    {controls, 2},
+
+    %%----------------------------------------------------------------
+    %% Module:on_key(ExtraControl, KeyAtom, ArgList) ->
+    %%   {button, ButtonNameAtom} | nil
+    %% Called when a key is pressed in the dialog box.  The return value
+    %% specified whether it is linked to pressing a button, or whether it
+    %% it is ignored and passed on to a further handler (if any.)
+    
+    {on_key, 3},
+
+    %%----------------------------------------------------------------
+    %% Module:on_button(ExtraControl, ButtonNameAtom, ArgList) -> Result
+    %% Called when one of the main (non-extra) buttons are pressed in
+    %% the dialog box.  Since this closes the dialog box, the implementation
+    %% module is expected to provide a final result term with this function.
+
+    {on_button, 3}, 
+
+    %%----------------------------------------------------------------
+    %% Module:on_event(ExtraControl, Event, ArgList) -> Result
+    %% Allows the implementation module to handle other GS events,
+    %% e.g. those generated by the extra controls specified.
+ 
+    {on_event, 3}
+  ].
+
+%%% Public Interface
+
+%%--------------------------------------------------------------------
+%% show(ModuleNameAtom, TitleString, MessageString, ArgList) -> Result
+%% Display a generic modal dialog box, customized by the
+%% callback functions in Module.  This should be called by
+%% the 'show' function in the Module in question.
+%% The argument list is passed back to the callback functions in the
+%% module, for retaining information pertinent to the callback module;
+%% the behaviour itself does not inspect or care about this list.
+
+show(Module, Title, Message, Args) ->
+  Screen = gs:start(),
+  Buttons = Module:buttons(),
+  NumButtons = length(Buttons),
+  application:load(?MODULE),
+  {ok, Font} = application:get_env(?MODULE, font),
+  {ok, {ScreenWidth, ScreenHeight}} =
+    application:get_env(?MODULE, screen_size),
+  {ok, {DialogWidth, DialogHeight}} =
+    application:get_env(?MODULE, dialog_size),
+  Window = gs:create(window, Screen,
+    [{width, DialogWidth}, {height, DialogHeight},
+     {x, (ScreenWidth - DialogWidth) div 2},
+     {y, (ScreenHeight - DialogHeight) div 2},
+     {title, Title},
+     {configure, true}, {keypress, true}]),
+  Frame = gs:create(frame, Window,
+    [{bw, 0},
+     {packer_x, lists:duplicate(NumButtons, {stretch, 1})},
+     {packer_y, [{stretch, 1},{stretch, 2},{stretch, 1}]}]),
+  case Module:icon() of
+    nil ->
+      Label = gs:create(label, Frame,
+        [{label, {text, Message}}, {font, Font}, {justify, center},
+         {pack_xy, {{1, NumButtons}, 1}}]);
+    {Text, Fg, Bg} ->
+      InnerFrame = gs:create(frame, Frame,
+        [{pack_xy, {{1, NumButtons}, 1}}, {bw, 0},
+        {packer_x, [{stretch, 1}, {fixed, 32}, {stretch, 8}]},
+        {packer_y, [{stretch, 1}, {fixed, 32}, {stretch, 1}]}]),
+      IconCanvas = gs:create(canvas, InnerFrame,
+        [{pack_xy, {2, 2}}]),
+      IconCircle = gs:create(oval, IconCanvas,
+        [{coords, [{0, 0}, {31, 31}]}, {fg, black}, {fill, Bg}]),
+      IconFont = {screen, bold, 24},
+      {ITW,ITH} = gs:read(IconCanvas, {font_wh, {IconFont, Text}}),
+      ITX = 16 - ITW div 2,
+      ITY = 16 - ITH div 2,
+      IconText = gs:create(text, IconCanvas,
+        [{coords, [{ITX, ITY}]}, {fg, Fg}, {text, Text}, {font, IconFont}]),
+      Label = gs:create(label, InnerFrame,
+        [{label, {text, Message}}, {font, Font}, {justify, center},
+         {pack_xy, {3, {1,3}}}]);
+    FileName when list(FileName) ->
+      InnerFrame = gs:create(frame, Frame,
+        [{pack_xy, {{1, NumButtons}, 1}}, {bw, 0},
+        {packer_x, [{stretch, 1}, {fixed, 32}, {stretch, 8}]},
+        {packer_y, [{stretch, 1}, {fixed, 32}, {stretch, 1}]}]),
+      IconCanvas = gs:create(canvas, InnerFrame,
+        [{pack_xy, {2, 2}}]),
+      Icon = gs:create(image, IconCanvas, [{coords, [{0, 0}]},
+                                           {load_gif, FileName}]),
+      Label = gs:create(label, InnerFrame,
+        [{label, {text, Message}}, {font, Font}, {justify, center},
+         {pack_xy, {3, {1,3}}}])
+  end,
+  {Extra, NewArgs} = Module:controls(Frame, Args),
+  case Extra of
+    nil -> gs:config(Frame, {packer_y, [{stretch, 2},{fixed, 0},{stretch, 
1}]});
+    _   -> gs:config(Extra, {pack_xy, {{1, NumButtons}, 2}})
+  end,
+  lists:foldl(fun(X, A) ->
+       I = gs:create(frame, Frame, [{packer_x, [{stretch, 1}, {fixed, 80}, 
{stretch, 1}]}, 
+                                    {packer_y, [{stretch, 1}, {fixed, 24}, 
{stretch, 1}]}, 
+                                    {pack_xy, {A, 3}}]),
+       gs:create(button, I, [{label, {text, atom_to_list(X)}}, {font, Font},
+                             {data, {button, X}},
+                             {pack_xy, {2, 2}}]),
+       A + 1
+       end, 1, Buttons),
+  gs:config(Frame, [{width, DialogWidth}, {height, DialogHeight}]),
+  {MessageWidth, MessageHeight} = gs:read(Frame, {font_wh, {Font, Message}}),
+  case MessageWidth of
+    N1 when N1 > trunc(DialogWidth * 0.8) ->
+        NewDialogWidth = trunc(MessageWidth * 1.2),
+        gs:config(Window,
+          [{width, NewDialogWidth},
+          {x, (ScreenWidth - NewDialogWidth) div 2}]);
+    _ -> ok
+  end,
+  case MessageHeight of
+    N2 when N2 > trunc(DialogHeight * 0.666) ->
+        NewDialogHeight = trunc(MessageHeight * 1.666),
+        gs:config(Window,
+          [{height, NewDialogHeight},
+          {y, (ScreenHeight - NewDialogHeight) div 2}]);
+    _ -> ok
+  end,
+  gs:config(Window, {map, true}),
+  dialog_loop(Module, Window, Frame, Extra, NewArgs).
+
+%%--------------------------------------------------------------------
+%% dialog_loop(Module, Window, Frame, Extra, Args) -> Result
+%% Called by show/4, handles generic events in a dialog box.
+
+dialog_loop(Module, Window, Frame, Extra, Args) ->
+  receive
+    {gs, Window, destroy, Data, EventArgs} ->
+       Module:on_button(Extra, 'Cancel', Args);
+    {gs, Window, configure, Data, [W,H | Rest]} ->
+       gs:config(Frame, [{width, W}, {height, H}]),
+       dialog_loop(Module, Window, Frame, Extra, Args);
+    {gs, Window, keypress, Data, [KeyCode | Rest]} ->
+       case Module:on_key(Extra, KeyCode, Args) of
+         {button, ButtonType} ->
+           Return = Module:on_button(Extra, ButtonType, Args),
+           gs:destroy(Window),
+           Return;
+        _ -> dialog_loop(Module, Window, Frame, Extra, Args)
+       end;
+    {gs, Button, click, {button, ButtonType}, EventArgs} ->
+       Return = Module:on_button(Extra, ButtonType, Args),
+       gs:destroy(Window),
+       Return;
+    Other -> % io:fwrite("~w~n", [Other]),
+      case Module:on_event(Extra, Other, Args) of
+         {button, ButtonType} ->
+           Return = Module:on_button(Extra, ButtonType, Args),
+           gs:destroy(Window),
+           Return;
+        _ -> dialog_loop(Module, Window, Frame, Extra, Args)
+      end
+  end.
+
+%%--------------------------------------------------------------------
+%% test() -> ResultTuple.
+%% Tests some of the common dialog boxes implemented with this behaviour.
+
+test() ->
+  A = gs_dialog_notify:show("Notification", "This is a notification dialog."),
+  B = gs_dialog_confirm:show("Confirmation",
+      "Are you sure you want to\ntake some sort of drastic action?"),
+  C = gs_dialog_question:show("Question", "Save your barcodes first?"),
+  D = gs_dialog_entry:show("Text Entry",
+      "Enter the address of this order:", "555 Twenty-third St."),
+  E = gs_dialog_list:show("Select One", "Select a game to play.",
+      ["Chess", "Checkers", "Othello", "Go", "Backgammon", "Kali", "Sink"]),
+  F = gs_dialog_color:show("Choose Colour", "Pick your favourite colour.",
+      {255, 0, 128}),
+  G = gs_dialog_notify:show("Lengthy Notification",
+      "This is an extremely long message with no line breaks.  "
+      "The dialog box should expand to display the entire message."),
+  H = gs_dialog_notify:show("Lengthy Notification",
+      "This is an extremely\nlong message with\nmany lines.\n\n"
+      "The dialog box\nshould\nexpand\nto\ndisplay\nthe\nentire\nmessage."),
+  {A,B,C,D,E,F,G,H}.
+
+%%% END of gs_dialog.erl %%%
diff --git a/test/etags/erl-src/lines.erl b/test/etags/erl-src/lines.erl
new file mode 100644
index 0000000..6ec8750
--- /dev/null
+++ b/test/etags/erl-src/lines.erl
@@ -0,0 +1,297 @@
+%%% The contents of this file are subject to the Erlang Public License,
+%%% Version 1.0, (the "License"); you may not use this file except in
+%%% compliance with the License. You may obtain a copy of the License at
+%%% http://www.erlang.org/license/EPL1_0.txt
+%%%
+%%% Software distributed under the License is distributed on an "AS IS"
+%%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%%% the License for the specific language governing rights and limitations
+%%% under the License.
+%%%
+%%% The Original Code is lines-1.0.
+%%%
+%%% The Initial Developer of the Original Code is Ericsson Telecom
+%%% AB. Portions created by Ericsson are Copyright (C), 1998, Ericsson
+%%% Telecom AB. All Rights Reserved.
+%%%
+%%% Contributor(s): ______________________________________.
+
+%%%----------------------------------------------------------------------
+%%% #0.    BASIC INFORMATION
+%%%----------------------------------------------------------------------
+%%% File:       lines.erl
+%%% Author       : Ulf Wiger <address@hidden>
+%%% Description  : Efficient array of lines (e.g. for text editor)
+%%% 
+%%% Modules used : lists
+%%% 
+%%%----------------------------------------------------------------------
+%%% Efficient array of lines (e.g. for text editor)
+%%% allows for append, as well as insert, replace, delete in any position
+%%% with reasonable access times.
+%%% Rough benchmarking indicates (on a 440MHz Ultra):
+%%%
+%%% NoOfLines  Append (uSec)   Read (uSec)     Delete (uSec)
+%%% 100                9               7               7
+%%% 1,000      14              10              11
+%%% 10,000     22              13              15
+%%% 100,000    30              16              18
+%%%
+%%% Comment on the benchmark: The times for Append and Delete are mean
+%%% times for "growing file" and "shrinking file", that is, starting from
+%%% an empty array and inserting 100,000 lines took ca 3 seconds; deleting
+%%% them took ca 1.8 seconds. The Read test involved accessing all lines
+%%% in the full array and calculating the mean time.
+%%%
+%%% The array doesn't care what goes into each position. In other words,
+%%% it can be used for any datatype -- not just lines of text.
+%%%----------------------------------------------------------------------
+
+-module(lines).
+-vsn('1.0').
+-date('00-03-13').
+-author('address@hidden').
+
+-export([new/0,
+        count/1,
+        nth/2,
+        append/2,
+        replace/3,
+        insert/3,
+        insert_after/3,
+        delete/2,
+        convert_to_list/1,
+        convert_from_list/1]).
+
+-define(BREAK, 10).    % how many lines to store in each leaf
+
+-define(dbg(Fmt, Args), ok=io:format("~p: " ++ Fmt, [?LINE|Args])).
+%% new() -> line_array()
+%%
+%% Creates a new line array.
+%%
+new() ->
+    {0, []}.
+
+%% line_count(line_array()) -> integer()
+%%
+%% Returns the number of lines stored in the array
+%%
+count({N, _}) ->
+    N.
+
+%% nth(LineNo : integer(), Array : line_array()) -> line()
+%%
+%% Returns the line in position LineNo
+%%
+nth(L, _) when L < 1 ->
+    exit({out_of_range, L});
+nth(L, {LMax, _}) when L > LMax ->
+    exit({out_of_range, L});
+nth(L, {LMax, List}) when list(List) ->
+    lists:nth(L, List);
+nth(L, {LMax, {Left = {LL, _}, Right}}) when L > LL ->
+    nth(L-LL, Right);
+nth(L, {_, {Left, _}}) ->
+    nth(L, Left).
+
+%% append(Line : line(), Array : line_array()) -> line_array().
+%%
+%% Appends Line to the end of Array.
+%% e.g. append(x, [1,2,3,4]) -> [1,2,3,4,x].
+%% Returns the modified array.
+%%
+append(Line, {L, List}) when list(List), L < ?BREAK ->
+    {L+1, List ++ [Line]};
+append(Line, {L, List}) when list(List) ->
+    {L+1, {{L, List}, {1, [Line]}}};
+append(Line, {L, {Left = {LL1, L1}, Right}}) ->
+    NewRight = append(Line, Right),
+    balance_left(L+1, Left, NewRight).
+
+%% replace(LineNo : integer(), Array : line_array(), NewLine : line()) ->
+%%     line_array().
+%%
+%% Replaces the line in position LineNo with NewLine.
+%% e.g. replace(3, [1,2,3,4], x) -> [1,2,x,4].
+%% Returns the modified array.
+%%
+replace(Lno, _, _) when Lno < 1 ->
+    exit({out_of_range, Lno});
+replace(Lno, {L, _}, NewLine) when Lno > L ->
+    exit({out_of_range, Lno});
+replace(Lno, {L, List}, NewLine) when list(List) ->
+    {L, replace_nth(Lno, List, NewLine)};
+replace(Lno, {L, {Left={LL1, L1}, Right={LL2, L2}}}, NewLine) when Lno > LL1 ->
+    NewRight = replace(Lno-LL1, Right, NewLine),
+    {L, Left, NewRight};
+replace(Lno, {L, {Left={LL1,L1}, Right={LL2,L2}}}, NewLine) ->
+    NewLeft = replace(Lno, Left, NewLine),
+    {L, NewLeft, Right}.
+
+%% insert(LineNo : integer(), Array : line_array(), NewLine) -> line_array().
+%%
+%% Inserts NewLine *before* the line in position LineNo.
+%% e.g. insert(3, [1,2,3,4], x) -> [1,2,x,3,4].
+%% Returns the modified array.
+%%
+insert(Lno, _, _) when Lno < 1 ->
+    exit({out_of_range, Lno});
+insert(Lno, {L, _}, NewLine) when Lno > L ->
+    exit({out_of_range, Lno});
+insert(Lno, {L, List}, NewLine) when list(List) ->
+    if L < ?BREAK ->
+           {L+1, insert_nth(Lno, List, NewLine)};
+       true ->
+           NewList = insert_nth(Lno, List, NewLine),
+           {L1, L2} = split_at(?BREAK, NewList),
+           NewL = L+1,
+           {NewL, {{?BREAK, L1}, {NewL-?BREAK, L2}}}
+    end;
+insert(Lno, {L, {Left={LL,_}, Right}}, NewLine) when Lno > LL ->
+    NewRight = insert(Lno-LL, Right, NewLine),
+    balance_left(L+1, Left, NewRight);
+insert(Lno, {L, {Left, Right}}, NewLine) ->
+    NewLeft = insert(Lno, Left, NewLine),
+    balance_right(L+1, NewLeft, Right).
+
+%% insert_after(LineNo : integer(), Array : line_array(), NewLine) -> 
+%%     line_array().
+%%
+%% Inserts NewLine *after* the line in position LineNo.
+%% e.g. insert(3, [1,2,3,4], x) -> [1,2,3,x,4].
+%% Returns the modified array.
+%%
+insert_after(Lno, _, _) when Lno < 1 ->
+    exit({out_of_range, Lno});
+insert_after(Lno, {L, _}, NewLine) when Lno > L ->
+    exit({out_of_range, Lno});
+insert_after(Lno, {L, List}, NewLine) when list(List) ->
+    if L < ?BREAK ->
+           {L+1, insert_after_nth(Lno, List, NewLine)};
+       true ->
+           NewList = insert_after_nth(Lno, List, NewLine),
+           {L1, L2} = split_at(?BREAK, NewList),
+           NewL = L+1,
+           {NewL, {{?BREAK, L1}, {NewL-?BREAK, L2}}}
+    end;
+insert_after(Lno, {L, {Left={LL,_}, Right}}, NewLine) when Lno > LL ->
+    NewRight = insert_after(Lno-LL, Right, NewLine),
+    balance_left(L+1, Left, NewRight);
+insert_after(Lno, {L, {Left, Right}}, NewLine) ->
+    NewLeft = insert_after(Lno, Left, NewLine),
+    balance_right(L+1, NewLeft, Right).
+
+
+%% delete(LineNo : integer(), Array : line_array()) -> line_array().
+%%
+%% Deletes the line in position LineNo.
+%% e.g. delete(3, [1,2,3,4]) -> [1,2,4].
+%% Returns the modified array.
+%%
+delete(Lno, _) when Lno < 1 ->
+    exit({out_of_range, Lno});
+delete(Lno, {N_Tot, _}) when Lno > N_Tot ->
+    exit({out_of_range, Lno});
+delete(Lno, {N, List}) when list(List) ->
+    {N-1, delete_nth(Lno, List)};
+delete(Lno, {N, {Left = {N_Left, _}, Right}}) when Lno > N_Left ->
+    case delete(Lno-N_Left, Right) of
+       {0, _} ->
+           case N-1 of N_Left -> ok end,       % Assert
+           Left;
+       NewRight ->
+           balance_right(N-1, Left, NewRight)
+    end;
+delete(Lno, {N, {Left, Right = {N_Right,_}}}) ->
+    case delete(Lno, Left) of
+       {0, _} ->
+           case N-1 of N_Right -> ok end,      % Assert
+           Right;
+       NewLeft ->
+           balance_left(N-1, NewLeft, Right)
+    end.
+
+convert_to_list({_, List}) when list(List) ->
+    List;
+convert_to_list({L, {Left, Right}}) ->
+    convert_to_list(Left) ++ convert_to_list(Right).
+
+convert_from_list(L) when list(L) ->
+    lists:foldl(fun(Ln, Lsx) ->
+                       append(Ln, Lsx)
+               end, new(), L).
+
+%%% ===========================================================
+%%% internal functions
+%%% ===========================================================
+
+replace_nth(1, [H|T], X) ->
+    [X|T];
+replace_nth(N, [H|T], X) ->
+    [H|replace_nth(N-1, T, X)].
+
+insert_nth(1, L, X) ->
+    [X|L];
+insert_nth(N, [H|T], X) ->
+    [H|insert_nth(N-1, T, X)].
+
+insert_after_nth(1, [H|T], X) ->
+    [H,X|T];
+insert_after_nth(N, [H|T], X) ->
+    [H|insert_after_nth(N-1, T, X)].
+
+delete_nth(1, [H|T]) ->
+    T;
+delete_nth(N, [H|T]) ->
+    [H|delete_nth(N-1, T)].
+
+%% split_at(Pos, List) -> {List1, List2}
+%%   split List into two after position Pos (List1 includes List[Pos])
+%%
+split_at(Pos, L) ->
+    split_at(Pos, L, []).
+
+split_at(0, L, Acc) ->
+    {lists:reverse(Acc), L};
+split_at(Pos, [H|T], Acc) ->
+    split_at(Pos-1, T, [H|Acc]).
+
+
+%% Balancing functions
+%% Since we know whether we inserted/deleted in the right or left subtree,
+%% we have explicit balancing functions for each case.
+%% We rebalance if the number of elements in one sub-subtree exceeds the
+%% sum of elements in the others.
+
+balance_left(N_Tot, 
+            Left = {N_Left, _}, 
+            Right = {N_Right, {RLeft = {N_RLeft, _}, 
+                               RRight = {N_RRight, _}}})  ->
+    NewN_Left = N_Left + N_RLeft,
+    if N_RRight > NewN_Left ->
+           NewLeft = {NewN_Left, {Left, RLeft}},
+           NewRight = RRight,
+           {N_Tot, {NewLeft, NewRight}};
+       true ->
+           {N_Tot, {Left, Right}}
+    end;
+balance_left(N_Tot, Left, Right) ->
+    {N_Tot, {Left, Right}}.
+
+balance_right(N_Tot, 
+            Left = {N_Left, {LLeft = {N_LLeft, _},
+                             LRight = {N_LRight, _}}}, 
+            Right = {N_Right, _})  ->
+    NewN_Right = N_Right + N_LRight,
+    if N_LLeft > NewN_Right ->
+           NewLeft = LLeft,
+           NewRight = {NewN_Right, {LRight, Right}},
+           {N_Tot, {NewLeft, NewRight}};
+       true ->
+           {N_Tot, {Left, Right}}
+    end;
+balance_right(N_Tot, Left, Right) ->
+    {N_Tot, {Left, Right}}.
+
+
diff --git a/test/etags/erl-src/lists.erl.gz b/test/etags/erl-src/lists.erl.gz
new file mode 100644
index 0000000..5ba2e16
Binary files /dev/null and b/test/etags/erl-src/lists.erl.gz differ
diff --git a/test/etags/f-src/entry.for b/test/etags/f-src/entry.for
new file mode 100644
index 0000000..52b8a24
--- /dev/null
+++ b/test/etags/f-src/entry.for
@@ -0,0 +1,581 @@
+C$Procedure      PRTPKG ( Declare Arguments for Error Message Routines )
+ 
+      LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL, TRACE, DFAULT, TYPE )
+ 
+C$ Abstract
+C
+C      Declare the arguments for the error message selection entry
+C      points.  DO NOT CALL THIS ROUTINE.
+C
+C$ Required_Reading
+C
+C      ERROR
+C
+C$ Keywords
+C
+C      ERROR
+C
+C$ Declarations
+ 
+       LOGICAL               SHORT
+       LOGICAL               EXPL
+       LOGICAL               LONG
+       LOGICAL               TRACE
+       LOGICAL               DFAULT
+       CHARACTER*(*)         TYPE
+ 
+       INTEGER               FILEN
+       PARAMETER           ( FILEN = 128 )
+ 
+ 
+C$ Brief_I/O
+C
+C      VARIABLE  I/O  ENTRY
+C      --------  ---  --------------------------------------------------
+C
+C      SHORT      I   SETPRT
+C      EXPL       I   SETPRT
+C      LONG       I   SETPRT
+C      TRACE      I   SETPRT
+C      DFAULT     I   SETPRT
+C      TYPE       I   MSGSEL
+C      FILEN      P   MSGSEL
+C
+C$ Detailed_Input
+C
+C      See the ENTRY points for discussions of their arguments.
+C
+C$ Detailed_Output
+C
+C      See the ENTRY points for discussions of their arguments.
+C
+C$ Parameters
+C
+C      See the ENTRY points for discussions of their parameters.
+C
+C$ Exceptions
+C
+C      This routine signals an error IF IT IS CALLED.
+C
+C$ Files
+C
+C      None.
+C
+C$ Particulars
+C
+C      DO NOT CALL THIS ROUTINE.
+C
+C      The entry points declared in this routine are:
+C
+C      SETPRT
+C      MSGSEL
+C
+C      There is no reason to call this subroutine.
+C      The purpose of this subroutine is to make the
+C      declarations required by the various entry points.
+C      This routine has no run-time function.
+C
+C$ Examples
+C
+C      None.  DO NOT CALL THIS ROUTINE.
+C
+C$ Restrictions
+C
+C      DO NOT CALL THIS ROUTINE.
+C
+C$ Literature_References
+C
+C      None.
+C
+C$ Author_and_Institution
+C
+C
+C$ Version
+C
+C-
+C         Comment section for permuted index source lines was added
+C         following the header.
+C
+C
+C-&
+ 
+C$ Index_Entries
+C
+C     None.
+C
+C-&
+ 
+ 
+ 
+C$ Revisions
+C
+C
+C-     Beta Version 1.0.1, 08-FEB-1989
+C
+C         PRTPKG, though it performs no run-time function, must
+C         still return a value, in order to comply with the Fortran
+C         standard.  So, now it does.
+C
+C-     Beta Version 1.0.1, 08-FEB-1989
+C
+C         Warnings added to discourage use of this routine.
+C         Parameter declarations moved to "Declarations" section.
+C         Two local declarations moved to the correct location.
+C-&
+ 
+ 
+ 
+C
+C     SPICELIB functions
+C
+ 
+      LOGICAL               SETPRT
+      LOGICAL               MSGSEL
+ 
+C
+C     Local variables:
+C
+      CHARACTER*(FILEN)     DEVICE
+ 
+      CHARACTER*(10)        LTYPE
+      CHARACTER*(10)        LOCTYP
+ 
+C
+C     Saved variables:
+C
+      LOGICAL               SVSHRT
+      LOGICAL               SVEXPL
+      LOGICAL               SVLONG
+      LOGICAL               SVTRAC
+      LOGICAL               SVDFLT
+ 
+      SAVE                  SVSHRT
+      SAVE                  SVEXPL
+      SAVE                  SVLONG
+      SAVE                  SVTRAC
+      SAVE                  SVDFLT
+ 
+C
+C     Initial values:
+C
+      DATA     SVSHRT   / .TRUE. /
+      DATA     SVEXPL   / .TRUE. /
+      DATA     SVLONG   / .TRUE. /
+      DATA     SVTRAC   / .TRUE. /
+      DATA     SVDFLT   / .TRUE. /
+ 
+C
+C     Executable Code:
+C
+ 
+      CALL GETDEV ( DEVICE )
+ 
+      CALL WRLINE ( DEVICE,
+     .              'PRTPKG:  You have called an entry point which' //
+     .              ' has no run-time function; this may indicate'  //
+     .              ' a program bug.  Please check the PRTPKG'      //
+     .              ' documentation.  ' )
+ 
+      CALL WRLINE ( DEVICE, 'SPICE(BOGUSENTRY)' )
+ 
+      PRTPKG = .FALSE.
+ 
+      RETURN
+ 
+ 
+ 
+ 
+ 
+ 
+C$Procedure      SETPRT ( Store Error Message Types to be Output )
+ 
+C      ENTRY  BOGUS (X, Y, Z)
+
+       ENTRY  SETPRT ( SHORT, EXPL, LONG, TRACE, DFAULT )
+ 
+C$ Abstract
+C
+C      Store (a representation of) the selection of types of error
+C      messages to be output.  DO NOT CALL THIS ROUTINE.
+C
+C$ Required_Reading
+C
+C      ERROR
+C
+C$ Keywords
+C
+C      ERROR
+C
+C$ Declarations
+C
+C      LOGICAL               SHORT
+C      LOGICAL               EXPL
+C      LOGICAL               LONG
+C      LOGICAL               TRACE
+C      LOGICAL               DFAULT
+C
+C$ Brief_I/O
+C
+C      VARIABLE  I/O  DESCRIPTION
+C      --------  ---  --------------------------------------------------
+C
+C      SHORT      I   Select output of short error message?
+C      EXPL       I   Select output of explanation of short message?
+C      LONG       I   Select output of long error message?
+C      TRACE      I   Select output of traceback?
+C      DFAULT     I   Select output of default message?
+C
+C$ Detailed_Input
+C
+C      SHORT    indicates whether the short error message is selected
+C               as one of the error messages to be output when an error
+C               is detected.  A value of .TRUE. indicates that the
+C               short error message IS selected.
+C
+C      EXPL     indicates whether the explanatory text for the short
+C               error message is selected as one of the error messages
+C               to be output when an error is detected.  A value of
+C               .TRUE. indicates that the explanatory text for the
+C               short error message IS selected.
+C
+C      LONG     indicates whether the long error message is selected
+C               as one of the error messages to be output when an error
+C               is detected.  A value of .TRUE. indicates that the
+C               long error message IS selected.
+C
+C      TRACE    indicates whether the traceback is selected
+C               as one of the error messages to be output when an error
+C               is detected.  A value of .TRUE. indicates that the
+C               traceback IS selected.
+C
+C      DFAULT   indicates whether the default message is selected
+C               as one of the error messages to be output when an error
+C               is detected.  A value of .TRUE. indicates that the
+C               default message IS selected.
+C
+C
+C$ Detailed_Output
+C
+C      None.
+C
+C$ Parameters
+C
+C      None.
+C
+C$ Exceptions
+C
+C      None.
+C
+C$ Files
+C
+C      None.
+C
+C$ Particulars
+C
+C      DO NOT CALL THIS ROUTINE.
+C
+C      The effect of this routine is an ENVIRONMENTAL one.  This
+C      routine performs no output;  it stores the error message
+C      selection provided as input.
+C
+C      Note that the actual output of error messages depends not
+C      only on the selection made using this routine, but also
+C      on the selection of the error output device (see ERRDEV)
+C      and the choice of error response action (see ERRACT). If
+C      the action is not 'IGNORE' (possible choices are
+C      'IGNORE', 'ABORT', 'DEFAULT', 'REPORT', and 'RETURN'),
+C      the selected error messages will be written to the chosen
+C      output device when an error is detected.
+C
+C$ Examples
+C
+C      1.  In this example, the short and long messages are selected.
+C
+C      C
+C      C     Select short and long error messages for output
+C      C     (We don't examine the status returned because no
+C      C     errors are detected by SETPRT):
+C      C
+C
+C            STATUS = SETPRT ( .TRUE., .FALSE., .TRUE., .FALSE.,
+C           .                  .FALSE.                          )
+C
+C
+C
+C$ Restrictions
+C
+C      DO NOT CALL THIS ROUTINE.
+C
+C$ Literature_References
+C
+C      None.
+C
+C$ Author_and_Institution
+C
+C
+C$ Version
+C
+C-
+C
+C-&
+ 
+C$ Index_Entries
+C
+C     None.
+C
+C-&
+ 
+ 
+C$ Revisions
+C
+C-
+C         Warnings added to discourage use of this routine in
+C         non-error-handling code.  Parameters section added.
+C
+C-&
+ 
+ 
+ 
+C
+C     Executable Code:
+C
+ 
+ 
+      IF   (  SHORT  )    THEN
+         SVSHRT = .TRUE.
+      ELSE
+         SVSHRT = .FALSE.
+      END IF
+ 
+ 
+ 
+      IF   (  EXPL   )    THEN
+         SVEXPL = .TRUE.
+      ELSE
+         SVEXPL = .FALSE.
+      END IF
+ 
+ 
+ 
+      IF   (  LONG   )    THEN
+         SVLONG = .TRUE.
+      ELSE
+         SVLONG = .FALSE.
+      END IF
+ 
+ 
+ 
+      IF   (  TRACE  )    THEN
+         SVTRAC = .TRUE.
+      ELSE
+         SVTRAC = .FALSE.
+      END IF
+ 
+      IF   (  DFAULT  )    THEN
+         SVDFLT = .TRUE.
+      ELSE
+         SVDFLT = .FALSE.
+      END IF
+ 
+ 
+C
+C     We assign a value to SETPRT, but this value is
+C     not meaningful...
+C
+      SETPRT = .TRUE.
+ 
+ 
+      RETURN
+ 
+ 
+ 
+ 
+C$Procedure      MSGSEL  ( Is This Message Type Selected for Output? )
+ 
+       ENTRY  MSGSEL ( TYPE )
+ 
+C$ Abstract
+C
+C      Indicate whether the specified message type has been selected
+C      for output.
+C
+C$ Required_Reading
+C
+C      ERROR
+C
+C$ Keywords
+C
+C      ERROR
+C
+C$ Declarations
+C
+C      TYPE
+C
+C$ Brief_I/O
+C
+C      VARIABLE  I/O  DESCRIPTION
+C      --------  ---  --------------------------------------------------
+C
+C      TYPE       I   Type of message whose selection status is queried.
+C      FILEN      P   Maximum length of a file name.
+C
+C      The function takes the value .TRUE. if the message type indicated
+C      by TYPE has been selected for output to the error output device.
+C
+C
+C$ Detailed_Input
+C
+C      TYPE   Refers to a type of error message.  Possible values
+C             are 'SHORT', 'EXPLAIN', 'LONG', 'DEFAULT',
+C             and 'TRACEBACK'.
+C
+C$ Detailed_Output
+C
+C      The function takes the value .TRUE. if the message type indicated
+C      by TYPE has been selected for output to the error output device.
+C
+C$ Parameters
+C
+C      FILEN  is the maximum length of a file name.
+C
+C$ Exceptions
+C
+C      Additionally, invalid values of TYPE are detected.
+C
+C      The short error message set in this case is:
+C      'SPICE(INVALIDMSGTYPE)'
+C
+C      The handling of this error is a special case; to avoid recursion
+C      problems, SIGERR is not called when the error is detected.
+C      Instead, the short and long error messages are output directly.
+C
+C
+C$ Files
+C
+C      None.
+C
+C$ Particulars
+C
+C      This routine is part of the SPICELIB error handling mechanism.
+C
+C      Note that even though a given type of message may have been
+C      selected for output, the output device and error response
+C      action must also have been selected appropriately.
+C      Use ERRDEV to choose the output device for error messages.
+C      Use ERRACT to choose the error response action.  Any action
+C      other than 'IGNORE' will result in error messages being
+C      written to the error output device when errors are detected.
+C      See ERRACT for details.
+C
+C$ Examples
+C
+C
+C      1.  We want to know if the short message has been selected
+C          for output:
+C
+C          C
+C          C     Test whether the short message has been selected:
+C          C
+C
+C                SELECT = MSGSEL ( 'SHORT' )
+C
+C
+C$ Restrictions
+C
+C      None.
+C
+C$ Literature_References
+C
+C      None.
+C
+C$ Author_and_Institution
+C
+C
+C$ Version
+C
+C
+C-&
+ 
+C$ Index_Entries
+C
+C     None.
+C
+C-&
+ 
+ 
+C$ Revisions
+C
+C
+C         Parameters section added; parameter declaration added
+C         to brief I/O section as well.
+C
+C-&
+ 
+ 
+ 
+C
+C     Executable Code:
+C
+ 
+      CALL LJUST ( TYPE,  LTYPE )
+      CALL UCASE ( LTYPE, LTYPE )
+ 
+ 
+      IF ( LTYPE  .EQ. 'SHORT' ) THEN
+ 
+         MSGSEL = SVSHRT
+ 
+      ELSE IF ( LTYPE  .EQ. 'EXPLAIN' ) THEN
+ 
+         MSGSEL = SVEXPL
+ 
+      ELSE IF ( LTYPE  .EQ. 'LONG' ) THEN
+ 
+         MSGSEL = SVLONG
+ 
+      ELSE IF ( LTYPE  .EQ. 'TRACEBACK' ) THEN
+ 
+         MSGSEL = SVTRAC
+ 
+      ELSE IF ( LTYPE  .EQ. 'DEFAULT' ) THEN
+ 
+         MSGSEL = SVDFLT
+ 
+      ELSE
+ 
+C
+C        Bad value of type!  We have a special case here; to
+C        avoid recursion, we output the messages directly,
+C        rather than call SIGERR.
+C
+ 
+         CALL GETDEV ( DEVICE )
+ 
+         CALL WRLINE ( DEVICE,  'SPICE(INVALIDMSGTYPE)' )
+ 
+         CALL WRLINE ( DEVICE, ' ' )
+ 
+         LOCTYP = TYPE
+ 
+C
+C        Note:  What looks like a typo below isn't; there's
+C        a line break after the substring 'specified' of
+C        the "word" 'specifiedwas'.
+C
+ 
+         CALL WRLINE ( DEVICE,
+ 
+     .   'MSGSEL:  An invalid error message type was supplied as'     //
+     .   ' input; the type specifiedwas:  ' // LOCTYP
+ 
+     .                )
+ 
+ 
+      END IF
+ 
+       subroutine 
+     & intensity1(efv,fv,svin,svquad,sfpv,maxp,value,jndex,k,kj,jmod,isup)
+
+       character*(*) function foo()
+
+      END
diff --git a/test/etags/f-src/entry.strange.gz 
b/test/etags/f-src/entry.strange.gz
new file mode 100644
index 0000000..5f22edc
Binary files /dev/null and b/test/etags/f-src/entry.strange.gz differ
diff --git a/test/etags/f-src/entry.strange_suffix 
b/test/etags/f-src/entry.strange_suffix
new file mode 100644
index 0000000..52b8a24
--- /dev/null
+++ b/test/etags/f-src/entry.strange_suffix
@@ -0,0 +1,581 @@
+C$Procedure      PRTPKG ( Declare Arguments for Error Message Routines )
+ 
+      LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL, TRACE, DFAULT, TYPE )
+ 
+C$ Abstract
+C
+C      Declare the arguments for the error message selection entry
+C      points.  DO NOT CALL THIS ROUTINE.
+C
+C$ Required_Reading
+C
+C      ERROR
+C
+C$ Keywords
+C
+C      ERROR
+C
+C$ Declarations
+ 
+       LOGICAL               SHORT
+       LOGICAL               EXPL
+       LOGICAL               LONG
+       LOGICAL               TRACE
+       LOGICAL               DFAULT
+       CHARACTER*(*)         TYPE
+ 
+       INTEGER               FILEN
+       PARAMETER           ( FILEN = 128 )
+ 
+ 
+C$ Brief_I/O
+C
+C      VARIABLE  I/O  ENTRY
+C      --------  ---  --------------------------------------------------
+C
+C      SHORT      I   SETPRT
+C      EXPL       I   SETPRT
+C      LONG       I   SETPRT
+C      TRACE      I   SETPRT
+C      DFAULT     I   SETPRT
+C      TYPE       I   MSGSEL
+C      FILEN      P   MSGSEL
+C
+C$ Detailed_Input
+C
+C      See the ENTRY points for discussions of their arguments.
+C
+C$ Detailed_Output
+C
+C      See the ENTRY points for discussions of their arguments.
+C
+C$ Parameters
+C
+C      See the ENTRY points for discussions of their parameters.
+C
+C$ Exceptions
+C
+C      This routine signals an error IF IT IS CALLED.
+C
+C$ Files
+C
+C      None.
+C
+C$ Particulars
+C
+C      DO NOT CALL THIS ROUTINE.
+C
+C      The entry points declared in this routine are:
+C
+C      SETPRT
+C      MSGSEL
+C
+C      There is no reason to call this subroutine.
+C      The purpose of this subroutine is to make the
+C      declarations required by the various entry points.
+C      This routine has no run-time function.
+C
+C$ Examples
+C
+C      None.  DO NOT CALL THIS ROUTINE.
+C
+C$ Restrictions
+C
+C      DO NOT CALL THIS ROUTINE.
+C
+C$ Literature_References
+C
+C      None.
+C
+C$ Author_and_Institution
+C
+C
+C$ Version
+C
+C-
+C         Comment section for permuted index source lines was added
+C         following the header.
+C
+C
+C-&
+ 
+C$ Index_Entries
+C
+C     None.
+C
+C-&
+ 
+ 
+ 
+C$ Revisions
+C
+C
+C-     Beta Version 1.0.1, 08-FEB-1989
+C
+C         PRTPKG, though it performs no run-time function, must
+C         still return a value, in order to comply with the Fortran
+C         standard.  So, now it does.
+C
+C-     Beta Version 1.0.1, 08-FEB-1989
+C
+C         Warnings added to discourage use of this routine.
+C         Parameter declarations moved to "Declarations" section.
+C         Two local declarations moved to the correct location.
+C-&
+ 
+ 
+ 
+C
+C     SPICELIB functions
+C
+ 
+      LOGICAL               SETPRT
+      LOGICAL               MSGSEL
+ 
+C
+C     Local variables:
+C
+      CHARACTER*(FILEN)     DEVICE
+ 
+      CHARACTER*(10)        LTYPE
+      CHARACTER*(10)        LOCTYP
+ 
+C
+C     Saved variables:
+C
+      LOGICAL               SVSHRT
+      LOGICAL               SVEXPL
+      LOGICAL               SVLONG
+      LOGICAL               SVTRAC
+      LOGICAL               SVDFLT
+ 
+      SAVE                  SVSHRT
+      SAVE                  SVEXPL
+      SAVE                  SVLONG
+      SAVE                  SVTRAC
+      SAVE                  SVDFLT
+ 
+C
+C     Initial values:
+C
+      DATA     SVSHRT   / .TRUE. /
+      DATA     SVEXPL   / .TRUE. /
+      DATA     SVLONG   / .TRUE. /
+      DATA     SVTRAC   / .TRUE. /
+      DATA     SVDFLT   / .TRUE. /
+ 
+C
+C     Executable Code:
+C
+ 
+      CALL GETDEV ( DEVICE )
+ 
+      CALL WRLINE ( DEVICE,
+     .              'PRTPKG:  You have called an entry point which' //
+     .              ' has no run-time function; this may indicate'  //
+     .              ' a program bug.  Please check the PRTPKG'      //
+     .              ' documentation.  ' )
+ 
+      CALL WRLINE ( DEVICE, 'SPICE(BOGUSENTRY)' )
+ 
+      PRTPKG = .FALSE.
+ 
+      RETURN
+ 
+ 
+ 
+ 
+ 
+ 
+C$Procedure      SETPRT ( Store Error Message Types to be Output )
+ 
+C      ENTRY  BOGUS (X, Y, Z)
+
+       ENTRY  SETPRT ( SHORT, EXPL, LONG, TRACE, DFAULT )
+ 
+C$ Abstract
+C
+C      Store (a representation of) the selection of types of error
+C      messages to be output.  DO NOT CALL THIS ROUTINE.
+C
+C$ Required_Reading
+C
+C      ERROR
+C
+C$ Keywords
+C
+C      ERROR
+C
+C$ Declarations
+C
+C      LOGICAL               SHORT
+C      LOGICAL               EXPL
+C      LOGICAL               LONG
+C      LOGICAL               TRACE
+C      LOGICAL               DFAULT
+C
+C$ Brief_I/O
+C
+C      VARIABLE  I/O  DESCRIPTION
+C      --------  ---  --------------------------------------------------
+C
+C      SHORT      I   Select output of short error message?
+C      EXPL       I   Select output of explanation of short message?
+C      LONG       I   Select output of long error message?
+C      TRACE      I   Select output of traceback?
+C      DFAULT     I   Select output of default message?
+C
+C$ Detailed_Input
+C
+C      SHORT    indicates whether the short error message is selected
+C               as one of the error messages to be output when an error
+C               is detected.  A value of .TRUE. indicates that the
+C               short error message IS selected.
+C
+C      EXPL     indicates whether the explanatory text for the short
+C               error message is selected as one of the error messages
+C               to be output when an error is detected.  A value of
+C               .TRUE. indicates that the explanatory text for the
+C               short error message IS selected.
+C
+C      LONG     indicates whether the long error message is selected
+C               as one of the error messages to be output when an error
+C               is detected.  A value of .TRUE. indicates that the
+C               long error message IS selected.
+C
+C      TRACE    indicates whether the traceback is selected
+C               as one of the error messages to be output when an error
+C               is detected.  A value of .TRUE. indicates that the
+C               traceback IS selected.
+C
+C      DFAULT   indicates whether the default message is selected
+C               as one of the error messages to be output when an error
+C               is detected.  A value of .TRUE. indicates that the
+C               default message IS selected.
+C
+C
+C$ Detailed_Output
+C
+C      None.
+C
+C$ Parameters
+C
+C      None.
+C
+C$ Exceptions
+C
+C      None.
+C
+C$ Files
+C
+C      None.
+C
+C$ Particulars
+C
+C      DO NOT CALL THIS ROUTINE.
+C
+C      The effect of this routine is an ENVIRONMENTAL one.  This
+C      routine performs no output;  it stores the error message
+C      selection provided as input.
+C
+C      Note that the actual output of error messages depends not
+C      only on the selection made using this routine, but also
+C      on the selection of the error output device (see ERRDEV)
+C      and the choice of error response action (see ERRACT). If
+C      the action is not 'IGNORE' (possible choices are
+C      'IGNORE', 'ABORT', 'DEFAULT', 'REPORT', and 'RETURN'),
+C      the selected error messages will be written to the chosen
+C      output device when an error is detected.
+C
+C$ Examples
+C
+C      1.  In this example, the short and long messages are selected.
+C
+C      C
+C      C     Select short and long error messages for output
+C      C     (We don't examine the status returned because no
+C      C     errors are detected by SETPRT):
+C      C
+C
+C            STATUS = SETPRT ( .TRUE., .FALSE., .TRUE., .FALSE.,
+C           .                  .FALSE.                          )
+C
+C
+C
+C$ Restrictions
+C
+C      DO NOT CALL THIS ROUTINE.
+C
+C$ Literature_References
+C
+C      None.
+C
+C$ Author_and_Institution
+C
+C
+C$ Version
+C
+C-
+C
+C-&
+ 
+C$ Index_Entries
+C
+C     None.
+C
+C-&
+ 
+ 
+C$ Revisions
+C
+C-
+C         Warnings added to discourage use of this routine in
+C         non-error-handling code.  Parameters section added.
+C
+C-&
+ 
+ 
+ 
+C
+C     Executable Code:
+C
+ 
+ 
+      IF   (  SHORT  )    THEN
+         SVSHRT = .TRUE.
+      ELSE
+         SVSHRT = .FALSE.
+      END IF
+ 
+ 
+ 
+      IF   (  EXPL   )    THEN
+         SVEXPL = .TRUE.
+      ELSE
+         SVEXPL = .FALSE.
+      END IF
+ 
+ 
+ 
+      IF   (  LONG   )    THEN
+         SVLONG = .TRUE.
+      ELSE
+         SVLONG = .FALSE.
+      END IF
+ 
+ 
+ 
+      IF   (  TRACE  )    THEN
+         SVTRAC = .TRUE.
+      ELSE
+         SVTRAC = .FALSE.
+      END IF
+ 
+      IF   (  DFAULT  )    THEN
+         SVDFLT = .TRUE.
+      ELSE
+         SVDFLT = .FALSE.
+      END IF
+ 
+ 
+C
+C     We assign a value to SETPRT, but this value is
+C     not meaningful...
+C
+      SETPRT = .TRUE.
+ 
+ 
+      RETURN
+ 
+ 
+ 
+ 
+C$Procedure      MSGSEL  ( Is This Message Type Selected for Output? )
+ 
+       ENTRY  MSGSEL ( TYPE )
+ 
+C$ Abstract
+C
+C      Indicate whether the specified message type has been selected
+C      for output.
+C
+C$ Required_Reading
+C
+C      ERROR
+C
+C$ Keywords
+C
+C      ERROR
+C
+C$ Declarations
+C
+C      TYPE
+C
+C$ Brief_I/O
+C
+C      VARIABLE  I/O  DESCRIPTION
+C      --------  ---  --------------------------------------------------
+C
+C      TYPE       I   Type of message whose selection status is queried.
+C      FILEN      P   Maximum length of a file name.
+C
+C      The function takes the value .TRUE. if the message type indicated
+C      by TYPE has been selected for output to the error output device.
+C
+C
+C$ Detailed_Input
+C
+C      TYPE   Refers to a type of error message.  Possible values
+C             are 'SHORT', 'EXPLAIN', 'LONG', 'DEFAULT',
+C             and 'TRACEBACK'.
+C
+C$ Detailed_Output
+C
+C      The function takes the value .TRUE. if the message type indicated
+C      by TYPE has been selected for output to the error output device.
+C
+C$ Parameters
+C
+C      FILEN  is the maximum length of a file name.
+C
+C$ Exceptions
+C
+C      Additionally, invalid values of TYPE are detected.
+C
+C      The short error message set in this case is:
+C      'SPICE(INVALIDMSGTYPE)'
+C
+C      The handling of this error is a special case; to avoid recursion
+C      problems, SIGERR is not called when the error is detected.
+C      Instead, the short and long error messages are output directly.
+C
+C
+C$ Files
+C
+C      None.
+C
+C$ Particulars
+C
+C      This routine is part of the SPICELIB error handling mechanism.
+C
+C      Note that even though a given type of message may have been
+C      selected for output, the output device and error response
+C      action must also have been selected appropriately.
+C      Use ERRDEV to choose the output device for error messages.
+C      Use ERRACT to choose the error response action.  Any action
+C      other than 'IGNORE' will result in error messages being
+C      written to the error output device when errors are detected.
+C      See ERRACT for details.
+C
+C$ Examples
+C
+C
+C      1.  We want to know if the short message has been selected
+C          for output:
+C
+C          C
+C          C     Test whether the short message has been selected:
+C          C
+C
+C                SELECT = MSGSEL ( 'SHORT' )
+C
+C
+C$ Restrictions
+C
+C      None.
+C
+C$ Literature_References
+C
+C      None.
+C
+C$ Author_and_Institution
+C
+C
+C$ Version
+C
+C
+C-&
+ 
+C$ Index_Entries
+C
+C     None.
+C
+C-&
+ 
+ 
+C$ Revisions
+C
+C
+C         Parameters section added; parameter declaration added
+C         to brief I/O section as well.
+C
+C-&
+ 
+ 
+ 
+C
+C     Executable Code:
+C
+ 
+      CALL LJUST ( TYPE,  LTYPE )
+      CALL UCASE ( LTYPE, LTYPE )
+ 
+ 
+      IF ( LTYPE  .EQ. 'SHORT' ) THEN
+ 
+         MSGSEL = SVSHRT
+ 
+      ELSE IF ( LTYPE  .EQ. 'EXPLAIN' ) THEN
+ 
+         MSGSEL = SVEXPL
+ 
+      ELSE IF ( LTYPE  .EQ. 'LONG' ) THEN
+ 
+         MSGSEL = SVLONG
+ 
+      ELSE IF ( LTYPE  .EQ. 'TRACEBACK' ) THEN
+ 
+         MSGSEL = SVTRAC
+ 
+      ELSE IF ( LTYPE  .EQ. 'DEFAULT' ) THEN
+ 
+         MSGSEL = SVDFLT
+ 
+      ELSE
+ 
+C
+C        Bad value of type!  We have a special case here; to
+C        avoid recursion, we output the messages directly,
+C        rather than call SIGERR.
+C
+ 
+         CALL GETDEV ( DEVICE )
+ 
+         CALL WRLINE ( DEVICE,  'SPICE(INVALIDMSGTYPE)' )
+ 
+         CALL WRLINE ( DEVICE, ' ' )
+ 
+         LOCTYP = TYPE
+ 
+C
+C        Note:  What looks like a typo below isn't; there's
+C        a line break after the substring 'specified' of
+C        the "word" 'specifiedwas'.
+C
+ 
+         CALL WRLINE ( DEVICE,
+ 
+     .   'MSGSEL:  An invalid error message type was supplied as'     //
+     .   ' input; the type specifiedwas:  ' // LOCTYP
+ 
+     .                )
+ 
+ 
+      END IF
+ 
+       subroutine 
+     & intensity1(efv,fv,svin,svquad,sfpv,maxp,value,jndex,k,kj,jmod,isup)
+
+       character*(*) function foo()
+
+      END
diff --git a/test/etags/forth-src/test-forth.fth 
b/test/etags/forth-src/test-forth.fth
new file mode 100644
index 0000000..ce4069d
--- /dev/null
+++ b/test/etags/forth-src/test-forth.fth
@@ -0,0 +1,53 @@
+\
+\ This is a file that tests Forth tags
+\
+\ You should get:
+\      a-forth-word            (twice)
+\      a-forth-constant!
+\      a-forth-value?
+\      :a-forth-dictionary-entry
+\      #a-defer-word
+\      (another-forth-word)
+\      (a-forth-constant
+\      #some-storage
+\      assemby-code-word
+
+
+\ This is a forth comment
+
+( Another forth comment )
+
+: a-forth-word ( a b c -- a*b+c )  + * ;
+
+99 constant a-forth-constant!
+55 value a-forth-value?
+create :a-forth-dictionary-entry
+0 c, 9 c, 5 c, 7 c, 999999 ,
+
+defer #a-defer-word
+
+: (another-forth-word) ( -- )
+    ." Hello world"
+;
+
+' (another-forth-word) to #a-defer-word
+
+struct
+   9   field   >field1
+   5   field   >field2
+constant (a-forth-constant
+
+
+2000 buffer: #some-storage
+
+code assemby-code-word ( dunno what it does )
+    g1 g2 mov          \ Move from here to there
+    sc2 h# 13 sc2 sllx \ shift stuff 'round
+c;
+
+\ And for the heck of it, redefine a-forth-word.
+
+: a-forth-word ( a b c -- )
+    a-forth-word dup 200 > abort" Eek.  The number is too big"
+    ." Result is " . cr
+;
diff --git a/test/etags/html-src/algrthms.html 
b/test/etags/html-src/algrthms.html
new file mode 100644
index 0000000..322dafa
--- /dev/null
+++ b/test/etags/html-src/algrthms.html
@@ -0,0 +1,519 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="Chip Fleming">
+   <meta name="GENERATOR" content="Mozilla/4.7 [en] (Win95; U) [Netscape]">
+   <title>Tutorial on Convolutional Coding with Viterbi Decoding--Description 
of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and 
Quantizing Algorithms</title>
+</head>
+<body>
+<a NAME="algorithms"></a><b><font face="Arial"><font size=+1>Description
+of the Algorithms&nbsp; (Part 1)</font></font></b>
+<p>&nbsp;The steps involved in simulating a communication channel using
+convolutional encoding and Viterbi decoding are as follows:
+<ul>
+<li>
+<a href="#genalgorithm">Generate the data</a> to be transmitted through
+the channel-result is binary data bits</li>
+
+<li>
+<a href="#conalgorithm">Convolutionally encode</a> the data-result is channel
+symbols</li>
+
+<li>
+<a href="#mapping">Map the one/zero channel symbols</a> onto an antipodal
+baseband signal, producing transmitted channel symbols</li>
+
+<li>
+<a href="#addnoise">Add noise</a> to the transmitted channel symbols-result
+is received channel symbols</li>
+
+<li>
+<a href="#quantizing">Quantize</a> the received channel levels-one bit
+quantization is called hard-decision, and two to n bit quantization is
+called soft-decision (n is usually three or four)</li>
+
+<li>
+<a href="algrthms2.html">Perform Viterbi decoding</a> on the quantized
+received channel symbols-result is again binary data bits</li>
+
+<li>
+Compare the decoded data bits to the transmitted data bits and count the
+number of errors.</li>
+</ul>
+<i>Many of you will notice that I left out the steps of modulating the
+channel symbols onto a transmitted carrier, and then demodulating the received
+carrier to recover the channel symbols. You're right, but we can accurately
+model the effects of AWGN even though we bypass those steps.</i>
+<p><a NAME="genalgorithm"></a><b><i><font face="Arial">Generating the 
Data</font></i></b>
+<p>Generating the data to be transmitted through the channel can be 
accomplished
+quite simply by using a random number generator. One that produces a uniform
+distribution of numbers on the interval 0 to a maximum value is provided
+in C: <tt>rand ()</tt>. Using this function, we can say that any value
+less than half of the maximum value is a zero; any value greater than or
+equal to half of the maximum value is a one.
+<p><a NAME="conalgorithm"></a><b><i><font face="Arial">Convolutionally
+Encoding the Data</font></i></b>
+<p>Convolutionally encoding the data is accomplished using a shift register
+and associated combinatorial logic that performs modulo-two addition. (A
+shift register is merely a chain of flip-flops wherein the output of the
+nth flip-flop is tied to the input of the (n+1)th flip-flop. Every time
+the active edge of the clock occurs, the input to the flip-flop is clocked
+through to the output, and thus the data are shifted over one stage.) The
+combinatorial logic is often in the form of cascaded exclusive-or gates.
+As a reminder, exclusive-or gates are two-input, one-output gates often
+represented by the logic symbol shown below,
+<center>
+<p><img SRC="figs/xor_gate.gif" ALT="exclusive-or gate symbol" height=64 
width=93></center>
+
+<p>that implement the following truth-table:
+<br>&nbsp;
+<br>&nbsp;
+<center><table BORDER CELLPADDING=7 WIDTH="218" >
+<tr>
+<td VALIGN=TOP WIDTH="28%">
+<center><b><tt>Input A</tt></b></center>
+</td>
+
+<td VALIGN=TOP WIDTH="27%">
+<center><b><tt>Input B</tt></b></center>
+</td>
+
+<td VALIGN=TOP WIDTH="45%">
+<center><b><tt>Output</tt></b>
+<p><b><tt>(A xor B)</tt></b></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="28%">
+<center><tt>0</tt></center>
+</td>
+
+<td VALIGN=TOP WIDTH="27%">
+<center><tt>0</tt></center>
+</td>
+
+<td VALIGN=TOP WIDTH="45%">
+<center><tt>0</tt></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="28%">
+<center><tt>0</tt></center>
+</td>
+
+<td VALIGN=TOP WIDTH="27%">
+<center><tt>1</tt></center>
+</td>
+
+<td VALIGN=TOP WIDTH="45%">
+<center><tt>1</tt></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="28%">
+<center><tt>1</tt></center>
+</td>
+
+<td VALIGN=TOP WIDTH="27%">
+<center><tt>0</tt></center>
+</td>
+
+<td VALIGN=TOP WIDTH="45%">
+<center><tt>1</tt></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="28%">
+<center><tt>1</tt></center>
+</td>
+
+<td VALIGN=TOP WIDTH="27%">
+<center><tt>1</tt></center>
+</td>
+
+<td VALIGN=TOP WIDTH="45%">
+<center><tt>0</tt></center>
+</td>
+</tr>
+</table></center>
+
+<p>The exclusive-or gate performs modulo-two addition of its inputs. When
+you cascade q two-input exclusive-or gates, with the output of the first
+one feeding one of the inputs of the second one, the output of the second
+one feeding one of the inputs of the third one, etc., the output of the
+last one in the chain is the modulo-two sum of the q + 1 inputs.
+<p>Another way to illustrate the modulo-two adder, and the way that is
+most commonly used in textbooks, is as a circle with a + symbol inside,
+thus:
+<center>
+<p><img SRC="figs/ringsum.gif" ALT="modulo-two adder symbol" height=48 
width=48></center>
+
+<p>Now that we have the two basic components of the convolutional encoder
+(flip-flops comprising the shift register and exclusive-or gates comprising
+the associated modulo-two adders) defined, let's look at a picture of a
+convolutional encoder for a rate 1/2, K = 3, m = 2 code:
+<br>&nbsp;
+<br>&nbsp;
+<br>
+<center>
+<p><img SRC="figs/ce_7_5_a.gif" ALT="rate 1/2 K = 3 (7, 5) convolutional 
encoder" height=232 width=600></center>
+
+<p>In this encoder, data bits are provided at a rate of k bits per second.
+Channel symbols are output at a rate of n = 2k symbols per second. The
+input bit is stable during the encoder cycle. The encoder cycle starts
+when an input clock edge occurs. When the input clock edge occurs, the
+output of the left-hand flip-flop is clocked into the right-hand flip-flop,
+the previous input bit is clocked into the left-hand flip-flop, and a new
+input bit becomes available. Then the outputs of the upper and lower modulo-two
+adders become stable. The output selector (SEL A/B block) cycles through
+two states-in the first state, it selects and outputs the output of the
+upper modulo-two adder; in the second state, it selects and outputs the
+output of the lower modulo-two adder.
+<p>The encoder shown above encodes the K = 3, (7, 5) convolutional code.
+The octal numbers 7 and 5 represent the code generator polynomials, which
+when read in binary (111<sub>2</sub> and 101<sub>2</sub>) correspond to
+the shift register connections to the upper and lower modulo-two adders,
+respectively. This code has been determined to be the "best" code for rate
+1/2, K = 3. It is the code I will use for the remaining discussion and
+examples, for reasons that will become readily apparent when we get into
+the Viterbi decoder algorithm.
+<p>Let's look at an example input data stream, and the corresponding output
+data stream:
+<p>Let the input sequence be 010111001010001<sub>2</sub>.
+<p>Assume that the outputs of both of the flip-flops in the shift register
+are initially cleared, i.e. their outputs are zeroes. The first clock cycle
+makes the first input bit, a zero, available to the encoder. The flip-flop
+outputs are both zeroes. The inputs to the modulo-two adders are all zeroes,
+so the output of the encoder is 00<sub>2</sub>.
+<p>The second clock cycle makes the second input bit available to the encoder.
+The left-hand flip-flop clocks in the previous bit, which was a zero, and
+the right-hand flip-flop clocks in the zero output by the left-hand flip-flop.
+The inputs to the top modulo-two adder are 100<sub>2</sub>, so the output
+is a one. The inputs to the bottom modulo-two adder are 10<sub>2</sub>,
+so the output is also a one. So the encoder outputs 11<sub>2</sub> for
+the channel symbols.
+<p>The third clock cycle makes the third input bit, a zero, available to
+the encoder. The left-hand flip-flop clocks in the previous bit, which
+was a one, and the right-hand flip-flop clocks in the zero from two bit-times
+ago. The inputs to the top modulo-two adder are 010<sub>2</sub>, so the
+output is a one. The inputs to the bottom modulo-two adder are 00<sub>2</sub>,
+so the output is zero. So the encoder outputs 10<sub>2</sub> for the channel
+symbols.
+<p>And so on. The timing diagram shown below illustrates the process:
+<br>&nbsp;
+<br>&nbsp;
+<br>
+<center>
+<p><img SRC="figs/ce_td.gif" ALT="timing diagram for rate 1/2 convolutional 
encoder" height=322 width=600></center>
+
+<p><br>
+<br>
+<br>
+<p>After all of the inputs have been presented to the encoder, the output
+sequence will be:
+<p>00 11 10 00 01 10 01 11 11 10 00 10 11 00 11<sub>2</sub>.
+<p>Notice that I have paired the encoder outputs-the first bit in each
+pair is the output of the upper modulo-two adder; the second bit in each
+pair is the output of the lower modulo-two adder.
+<p>You can see from the structure of the rate 1/2 K = 3 convolutional encoder
+and from the example given above that each input bit has an effect on three
+successive pairs of output symbols. That is an extremely important point
+and that is what gives the convolutional code its error-correcting power.
+The reason why will become evident when we get into the Viterbi decoder
+algorithm.
+<p>Now if we are only going to send the 15 data bits given above, in order
+for the last bit to affect three pairs of output symbols, we need to output
+two more pairs of symbols. This is accomplished in our example encoder
+by clocking the convolutional encoder flip-flops two ( = m) more times,
+while holding the input at zero. This is called "flushing" the encoder,
+and results in two more pairs of output symbols. The final binary output
+of the encoder is thus 00 11 10 00 01 10 01 11 11 10 00 10 11 00 11 10
+11<sub>2</sub>. If we don't perform the flushing operation, the last m
+bits of the message have less error-correction capability than the first
+through (m - 1)th bits had. This is a pretty important thing to remember
+if you're going to use this FEC technique in a burst-mode environment.
+So's the step of clearing the shift register at the beginning of each burst.
+The encoder must start in a known state and end in a known state for the
+decoder to be able to reconstruct the input data sequence properly.
+<p>Now, let's look at the encoder from another perspective. You can think
+of the encoder as a simple state machine. The example encoder has two bits
+of memory, so there are four possible states. Let's give the left-hand
+flip-flop a binary weight of 2<sup>1</sup>, and the right-hand flip-flop
+a binary weight of 2<sup>0</sup>. Initially, the encoder is in the all-zeroes
+state. If the first input bit is a zero, the encoder stays in the all zeroes
+state at the next clock edge. But if the input bit is a one, the encoder
+transitions to the 10<sub>2</sub> state at the next clock edge. Then, if
+the next input bit is zero, the encoder transitions to the 01<sub>2</sub>
+state, otherwise, it transitions to the 11<sub>2</sub> state. The following
+table gives the next state given the current state and the input, with
+the states given in binary:
+<br>&nbsp;
+<br>&nbsp;
+<center><table BORDER CELLSPACING=2 CELLPADDING=7 WIDTH="282" >
+<tr>
+<td VALIGN=TOP WIDTH="33%"><font face="Arial"><font 
size=-1>&nbsp;</font></font></td>
+
+<td VALIGN=TOP COLSPAN="2" WIDTH="67%">
+<center><a NAME="statetable"></a><b><font face="Arial"><font size=-1>Next
+State, if&nbsp;</font></font></b></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><b><font face="Arial"><font size=-1>Current 
State</font></font></b></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><b><font face="Arial"><font size=-1>Input = 
0:</font></font></b></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><b><font face="Arial"><font size=-1>Input = 
1:</font></font></b></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>00</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>00</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>10</font></font></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>01</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>00</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>10</font></font></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>10</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>01</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>11</font></font></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>11</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>01</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>11</font></font></center>
+</td>
+</tr>
+</table></center>
+
+<br>&nbsp;
+<p>The above table is often called a state transition table. We'll refer
+to it as the <tt>next state</tt> table.<tt> </tt>Now let us look at a table
+that lists the channel output symbols, given the current state and the
+input data, which we'll refer to as the <tt>output</tt> table:
+<br>&nbsp;
+<br>&nbsp;
+<center><table BORDER CELLSPACING=2 CELLPADDING=7 WIDTH="282" >
+<tr>
+<td VALIGN=TOP WIDTH="33%"></td>
+
+<td VALIGN=TOP COLSPAN="2" WIDTH="67%">
+<center><a NAME="outputtable"></a><b><font face="Arial"><font size=-1>Output
+Symbols, if</font></font></b></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><b><font face="Arial"><font size=-1>Current 
State</font></font></b></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><b><font face="Arial"><font size=-1>Input = 
0:</font></font></b></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><b><font face="Arial"><font size=-1>Input = 
1:</font></font></b></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>00</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>00</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>11</font></font></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>01</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>11</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>00</font></font></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>10</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>10</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>01</font></font></center>
+</td>
+</tr>
+
+<tr>
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>11</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>01</font></font></center>
+</td>
+
+<td VALIGN=TOP WIDTH="33%">
+<center><font face="Arial"><font size=-1>10</font></font></center>
+</td>
+</tr>
+</table></center>
+
+<br>&nbsp;
+<p>You should now see that with these two tables, you can completely describe
+the behavior of the example rate 1/2, K = 3 convolutional encoder. Note
+that both of these tables have 2<sup>(K - 1)</sup> rows, and 2<sup>k</sup>
+columns, where K is the constraint length and k is the number of bits input
+to the encoder for each cycle. These two tables will come in handy when
+we start discussing the Viterbi decoder algorithm.
+<p><a NAME="mapping"></a><b><i><font face="Arial">Mapping the Channel Symbols
+to Signal Levels</font></i></b>
+<p>Mapping the one/zero output of the convolutional encoder onto an antipodal
+baseband signaling scheme is simply a matter of translating zeroes to +1s
+and ones to -1s. This can be accomplished by performing the operation y
+= 1 - 2x on each convolutional encoder output symbol.
+<p><a NAME="addnoise"></a><b><i><font face="Arial">Adding Noise to the
+Transmitted Symbols</font></i></b>
+<p>Adding noise to the transmitted channel symbols produced by the 
convolutional
+encoder involves generating Gaussian random numbers, scaling the numbers
+according to the desired energy per symbol to noise density ratio, 
E<sub>s</sub>/N<sub>0</sub>,
+and adding the scaled Gaussian random numbers to the channel symbol values.
+<p>For the uncoded channel, E<sub>s</sub>/N<sub>0 </sub>= 
E<sub>b</sub>/N<sub>0</sub>,
+since there is one channel symbol per bit.&nbsp; However, for the coded
+channel, E<sub>s</sub>/N<sub>0 </sub>= E<sub>b</sub>/N<sub>0</sub> + 
10log<sub>10</sub>(k/n).&nbsp;
+For example, for rate 1/2 coding, E<sub>s</sub>/N<sub>0 </sub>= 
E<sub>b</sub>/N<sub>0</sub>
++ 10log<sub>10</sub>(1/2) = E<sub>b</sub>/N<sub>0</sub> - 3.01 dB.&nbsp;
+Similarly, for rate 2/3 coding, E<sub>s</sub>/N<sub>0 </sub>= 
E<sub>b</sub>/N<sub>0</sub>
++ 10log<sub>10</sub>(2/3) = E<sub>b</sub>/N<sub>0</sub> - 1.76 dB.
+<p>The Gaussian random number generator is the only interesting part of
+this task. C only provides a uniform random number generator, <tt>rand()</tt>.
+In order to obtain Gaussian random numbers, we take advantage of relationships
+between uniform, Rayleigh, and Gaussian distributions:
+<p>Given a uniform random variable U, a Rayleigh random variable R can
+be obtained by:
+<p><img SRC="figs/eqn01.gif" ALT="equation for Rayleigh random deviate given 
uniform random deviate" height=30 width=297 align=ABSCENTER>
+<p>where&nbsp;<img SRC="figs/eqn02.gif" height=24 width=24 align=ABSCENTER>is
+the variance of the Rayleigh random variable, and given R and a second
+uniform random variable V, two Gaussian random variables G and H can be
+obtained by
+<p><i>G</i> = <i>R</i> cos <i>U</i> and <i>H</i> = <i>R</i> sin <i>V</i>.
+<p>In the AWGN channel, the signal is corrupted by additive noise, n(t),
+which has the power spectrum <i>No</i>/2 watts/Hz. The variance&nbsp;<img 
SRC="figs/eqn02.gif" ALT="variance" height=24 width=24 align=ABSBOTTOM>of
+this noise is equal to&nbsp;<img SRC="figs/eqn03.gif" ALT="noise density div 
by two" height=22 width=38 align=TEXTTOP>.
+If we set the energy per symbol <i>E<sub>s</sub></i> equal to 1, 
then&nbsp;<img SRC="figs/eqn04.gif" ALT="equation relating variance to SNR" 
height=28 width=110 align=ABSBOTTOM>.
+So&nbsp;<img SRC="figs/eqn05.gif" ALT="equation for AWGN st dev given SNR" 
height=28 width=139 align=ABSCENTER>.
+<p><a NAME="quantizing"></a><b><i><font face="Arial">Quantizing the Received
+Channel Symbols</font></i></b>
+<p>An ideal Viterbi decoder would work with infinite precision, or at least
+with floating-point numbers. In practical systems, we quantize the received
+channel symbols with one or a few bits of precision in order to reduce
+the complexity of the Viterbi decoder, not to mention the circuits that
+precede it. If the received channel symbols are quantized to one-bit precision
+(&lt; 0V = 1, <u>></u> 0V = 0), the result is called hard-decision data.
+If the received channel symbols are quantized with more than one bit of
+precision, the result is called soft-decision data. A Viterbi decoder with
+soft decision data inputs quantized to three or four bits of precision
+can perform about 2 dB better than one working with hard-decision inputs.
+The usual quantization precision is three bits. More bits provide little
+additional improvement.
+<p>The selection of the quantizing levels is an important design decision
+because it can have a significant effect on the performance of the link.
+The following is a very brief explanation of one way to set those levels.
+Let's assume our received signal levels in the absence of noise are -1V
+= 1, +1V = 0. With noise, our received signal has mean +/- 1 and standard
+deviation&nbsp;<img SRC="figs/eqn05.gif" ALT="equation for AWGN st dev given 
SNR" height=28 width=139 align=ABSCENTER>.
+Let's use a uniform, three-bit quantizer having the input/output relationship
+shown in the figure below, where D is a decision level that we will calculate
+shortly:
+<center>
+<p><img SRC="figs/quantize.gif" ALT="8-level quantizer function plot" 
height=342 width=384></center>
+
+<p>The decision level, D, can be calculated according to the formula&nbsp;<img 
SRC="figs/eqn06.gif" ALT="equation for quantizer decision level" height=28 
width=228 align=ABSCENTER>,
+where E<sub>s</sub>/N<sub>0</sub> is the energy per symbol to noise density
+ratio<i>. (The above figure was redrawn from Figure 2 of Advanced Hardware
+Architecture's ANRS07-0795, "Soft Decision Thresholds and Effects on Viterbi
+Performance". See the </i><a href="fecbiblio.html">bibliography</a><i>&nbsp;
+for a link to their web pages.)</i>
+<p>Click <a href="algrthms2.html">here</a> to proceed to the description
+of the Viterbi decoding algorithm itself...
+<p>Or click on one of the links below to go to the beginning of that section:
+<p>&nbsp;<a href="tutorial.html">Introduction</a>
+<br>&nbsp;<a href="algrthms2.html">Description of the Algorithms&nbsp;
+(Part 2)</a>
+<br>&nbsp;<a href="examples.html">Simulation Source Code Examples</a>
+<br>&nbsp;<a href="simrslts.html">Example Simulation Results</a>
+<br>&nbsp;<a href="fecbiblio.html">Bibliography</a>
+<br>&nbsp;<a href="tutorial.html#specapps">About Spectrum Applications...</a>
+<br>&nbsp;
+<br>&nbsp;
+<br>
+<br>
+<center>
+<p><img SRC="figs/stripe.gif" height=6 width=600></center>
+
+</body>
+</html>
diff --git a/test/etags/html-src/index.shtml b/test/etags/html-src/index.shtml
new file mode 100644
index 0000000..24f269f
--- /dev/null
+++ b/test/etags/html-src/index.shtml
@@ -0,0 +1,70 @@
+<!--#set var="chiavi" value="
+     prima pagina principale, home page, assoli,
+     free software, open source, italia, italy, italiano" -->
+<!--#include virtual="/inc/h.shtml"-->
+<!--#include virtual="/inc/menu-generico.html"-->
+<!--#include virtual="/inc/content-begin.html"-->
+
+<H3>&nbsp;</H3>        <!-- un po' di spazio in cima -->
+
+<!--
+     La rubrica "in evidenza" va commentata se non c'� niente di serio
+     da mettere in evidenza
+ -->
+<H2>
+  In evidenza
+</H2>
+
+<ul>
+
+  <li>Assieme alla <A HREF="http://www.linux.it/";>Italian Linux
+  Society</A> sollecitiamo una <A
+  HREF="/misc/raccoltafirme.shtml">raccolta di firme</A> per
+  sostenere il <a href="/altri/cortiana.shtml">disegno di legge</a> sul
+  software libero dal titolo "<i>Norme in materia di pluralismo
+  informatico sulla adozione e la diffusione del software libero e sulla
+  portabilit� dei documenti informatici nella Pubblica
+  Amministrazione</i>" (XIV Legislatura Atto Senato n. 1188).<P>
+
+</ul>
+
+<H2>
+  Comunicati e iniziative
+</H2>
+
+<ul>
+
+  <p></p><li>
+    Combattiamo il "bollino SIAE".  Nel <A HREF="/news/">notiziario</A>
+    tutte le nostre iniziative in proposito.  Insieme al <a
+    href="http://www.lugroma.org";>LUG Roma</a> abbiamo scritto il <A
+    HREF="/bollino/">Bollino-HOWTO</A>, istruzioni passo passo su come
+    ottenere l'esenzione dal bollilno SIAE per la distribuzione di
+    software libero a titolo oneroso o gratuito.  <A
+    HREF="/altri/semenzato-pieroni.shtml">Qui</A> il disegno di legge
+    Semenzato Pieroni sul diritto d'autore.  E non � finita.
+
+  <p></p><li>
+    <a href="/altri/adeos.shtml">Salutiamo</a> l'arrivo di ADEOS, kernel
+    real-time per Linux libero da brevetti
+
+  <p></p><li>
+    <a href="/news/news020315_01.shtml">Comunicato</a> stampa di FSF Europa
+    ed Assoli in appoggio al disegno di legge per l'uso del software libero
+    nella pubblica amministrazione
+
+  <p></p><li>
+    <a href="/docs/pirateria.shtml">Posizione dell'Associazione</a> sulle
+    attuali campagna anti-"pirateria"</a>
+
+</ul>
+
+<H2>
+  Ultime notizie dall'associazione
+</H2>
+<P>
+<!--#include virtual="/news/notizie.shtml"-->
+</P>
+
+<!--#include virtual="inc/content-end.html"-->
+<!--#include virtual="inc/f.shtml"-->
diff --git a/test/etags/html-src/software.html 
b/test/etags/html-src/software.html
new file mode 100644
index 0000000..4d174c6
--- /dev/null
+++ b/test/etags/html-src/software.html
@@ -0,0 +1,241 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" 
"http://www.w3.org/TR/REC-html40";>
+<HTML LANG="en">
+<HEAD>
+  <STYLE TYPE="text/css"><!--
+    BODY { font-size: 12pt; }
+    P    { text-indent: 0; text-align: justify }
+    DD   { text-indent: 0; text-align: justify }
+  --></STYLE>
+  <TITLE>Francesco Potort� Software Page</TITLE>
+  <LINK  REV="made" HREF="mailto:address@hidden";>
+  <META NAME="description" CONTENT="Home page of Francesco Potort�.">
+  <META NAME="keywords"
+        CONTENT="Potorti Potort� Potorti' Potorti`
+                satellites MTG fracas simulator LEO MEO GEO
+                GNU emacs etags checkiso debian-bug">
+  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+</HEAD><BODY>
+
+<CENTER>
+    [<A HREFLANG="en" HREF="/home.html">home</A>]
+    | [<A HREFLANG="en" HREF="/foda/foda.html">FODA/IBEA</A>]
+    | [<A HREFLANG="en" HREF="/galileo/index.html">GaliLEO</A>]
+    | [<A HREFLANG="en" HREF="#fracas">fracas</A>]
+    | [<A HREFLANG="en" HREF="#leasqr">leasqr</A>]<BR>
+    [<A HREFLANG="en" HREF="#etags">etags</A>]
+    | [<A HREFLANG="en" HREF="#checkiso">checkiso</A>]
+    | [<A HREFLANG="en" HREF="#cgrep">cgrep</A>]
+    | [<A HREFLANG="en" HREF="#debian-bug">debian-bug</A>]
+</CENTER>
+
+<HR> <!---------------------------------------------------------------->
+
+<H4 ID="simulation">
+    <IMG SRC="/pictures/cnr-4.png" ALIGN="right"
+         ALT="CNR logo (png 3k)">
+    Software that I wrote for supporting my research activity
+</H4>
+
+
+<H5 ID="mtg">
+  MTG
+</H5>
+
+<P> The <A
+    
HREF="/curriculum/pot-abstracts.html#R05:MTG-RealTimeSystems97"><CITE>M</CITE>ulti-Application
+    <cite>t</CITE>raffic <cite>g</CITE>enerator</A> was written in 1990 to run 
on
+    a proprietary Motorola Delta SysV Unix running on 68030.  It is a
+    programmable packet traffic generator for Ethernet with a
+    <CITE>curses</CITE>-based frontend and a backend that I wrote.  MTG was
+    used to develop, test and evaluate the <A 
HREF="/foda/foda.html">FODA/IBEA</A>
+    satellite access protocol.
+
+<P> The backend of MTG
+    was a Unix device driver which took control of the timer and Lance
+    interrupts, after having programmed them at the unmaskable level.  Since I
+    had no access to the kernel sources, after having studied <CITE>Writing a
+    Unix device driver</CITE> by Egan Teixeira I had to get really well
+    acquainted with the Motorola C compiler and then to disassemble a couple of
+    kernel routines.  For anyone interested in historical programming, <A
+    HREF="ftp://fly.cnuce.cnr.it/pub/software/unix/mtg.tgz";
+    TYPE="application/octet-stream">here</A> is the code.
+
+
+<H5 ID="fracas">
+  Fracas
+</H5>
+
+<P> The <A
+    
HREF="/curriculum/pot-abstracts.html#R12:Fracas-TelCommSystems99"><CITE>Fra</CITE>med
+    <CITE>C</CITE>hannel <CITE>A</CITE>ccess <CITE>S</CITE>imulator</A> was
+    written around 1995 to study MAC protocols to access a geostationary
+    satellite channel.  It is a little more general than that, though, and can
+    be used to simulate any framed multiple access scheme.  It is a very fast,
+    extensible, non-user friendly C program that has been used for several
+    protocol studies:
+    <UL>
+    <LI> <A 
HREF="/curriculum/pot-abstracts.html#R03:FODAIBEAvsDistributed-IJSC96">
+         <i>Comparison between distributed and centralised demand
+        assignment TDMA satellite access schemes</i></A>
+
+    <LI><A HREF="/curriculum/pot-abstracts.html#R07:FODAIBEAvsCFRA-IJSC97">
+        <i>Delay analysis for interlan traffic using two suitable TDMA
+       satellite access schemes</i></A>
+
+    <LI><A HREF="/curriculum/pot-abstracts.html#R17:VnL-IJSC00">
+        <i>A multi-level satellite channel allocation algorithm for
+       real-time VBR data</i></A>
+    </UL>
+
+<P> Everyone is welcome to download the <A
+    HREF="ftp://fly.cnuce.cnr.it/pub/software/C/fracas.tgz";
+    TYPE="application/octet-stream">complete sources</A> and a <A
+    HREF="ftp://fly.cnuce.cnr.it/pub/software/C/fracas-man-0.0.pdf";
+    TYPE="application/pdf">draft manual</A>.  There is also a short <A
+    
HREF="ftp://fly.cnuce.cnr.it/pub/data/docs/Fracas-slides.pdf";>presentation</A>
+    (10 slides, 340KB).  I will be happy to assist those who would like to
+    adapt Fracas to their purposes.
+
+
+<H5 ID="galileo">
+  GaliLEO
+</H5>
+
+<P> A simulator for Low Earth Orbit satellite constellations that I contributed
+    to design and implement in Java. This is work in progress, of which I made
+    a short <A
+    
HREF="ftp://fly.cnuce.cnr.it/pub/data/docs/GaliLEO-slides.pdf";>presentation</A>
+    (10 slides, 500KB).  GaliLEO has <A HREF="http://galileo.tesa.prd.fr/";>its
+    own page</A> and a <A HREF="/galileo/index.html">local mirror</A>.
+
+
+
+<H5 ID="leasqr">
+  Leasqr
+</H5>
+
+<P> This is a package for <A HREF="http://www.octave.org/";>Octave</A>, a
+high-level language which uses a language very similar to that of Matlab.
+Leasqr uses the Levenberg-Marquardt algorithm for doing nonlinear regression.
+I found leasqr on the web, but it did not run on Octave (it was made for
+Matlab) and so I adapted it and <A
+HREF="ftp://fly.cnuce.cnr.it/pub/software/octave/leasqr/";>published</A> it.
+Since then, the original authors Richard I. Shrager, A.Jutan, Ray Muzic, and
+Sean Brennan agreed to put it under the <A
+HREF="http://www.gnu.org/licenses/gpl.html";>GPL</A>.  Matthias Jueschke tested
+the program using a non-linear optimisation <A
+HREF="http://www.itl.nist.gov/div898/strd/nls/nls_main.shtml";>test suite</A>,
+and was satisfied with the results.
+
+<P>The most current version of the leasqr is part of the optimization package
+at <a href="http://octave.sf.net";>octave-forge</a>. You should refer to the
+files leasqr.m, leasqrdemo.m and dfdp.m <a
+href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/octave/octave-forge/main/optim/";>therein</a>.
+The names of the individual files may change in the future.  Please let me know
+if that happens so I can update this page.
+
+<HR> <!---------------------------------------------------------------->
+
+<H4 ID="gnu">
+    <IMG SRC="/pictures/gnu-head-3.png" ALIGN="right"
+         ALT="small GNU Head (png 3k)">
+    Free software that I wrote for the GNU project or for my personal or work
+    interest
+</H4>
+
+
+<H5 ID="etags">
+  Etags
+</H5>
+
+<P> On behalf of the <A HREF="http://www.gnu.org/fsf/fsf.html";>Free
+    Software Foundation (FSF)</A> I currently volunteer to maintain
+    <CITE>etags</CITE>, a program that can be compiled either as a replacement
+    of the classic <CITE>ctags</CITE> Unix program or as <CITE>etags</CITE>,
+    whose output file format is used by Emacs.  The latest (unofficial) version
+    of etags is available for <A HREF="ftp://fly.cnuce.cnr.it/pub/etags.c.gz";
+    TYPE="application/octet-stream">download</A> (30&nbsp;KB).
+
+
+<H5 ID="checkiso">
+  checkiso
+</H5>
+
+<P> A Unix <A HREF="ftp://fly.cnuce.cnr.it/pub/software/unix/checkiso";
+    TYPE="application/octet-stream">shell script</A> for checking a CD against
+    the iso image from which it has been burned.  The comparison is made using
+    an MD5 signature built from the original image or from a known good CD.
+    Shows the location of the first read error detected.  Can extract a disk Id
+    from the image or the CD itself and build a local database of Ids for
+    future checking of archived CDs.  The Id contains the image length, the MD5
+    signature and the Volume ID of the disk, so it can automatically recognise
+    the CD to check.  Contains a small internal database of <A
+    HREF="http://www.debian.org/";>Debian</A> <A
+    HREF="http://cdimage.debian.org/";>CD images</A>.
+
+
+<H5 ID="cgrep">
+  cgrep
+</H5>
+
+<P> A Unix <A HREF="ftp://fly.cnuce.cnr.it/pub/software/unix/cgrep";
+    TYPE="application/octet-stream">shell script</A> that wraps around grep to
+    make it understand files compressed with gzip or bzip2.  You just use it
+    like grep.  If you rename it cegrep or cfgrep it will wrap around egrep or
+    fgrep, respectively.  Instead of renaming it, you can use a symbolic or
+    hard link.
+
+
+<H5 ID="debian-bug">
+  debian-bug.el
+</H5>
+
+<P> An Emacs add-on script in emacs lisp which simplifies
+    the task of submitting a bug report to the <A
+    HREF="http://www.debian.org/Bugs/";>Debian bug tracking system</A>.  Part of
+    the <A
+    
HREF="http://packages.debian.org/testing/utils/debbugs-el.html";>debbugs-el</A>
+    Debian package.  I handed the package over to Peter Galbraith, who is
+    maintaining it much more actively than I was.  You can download its <A
+    HREF="http://people.debian.org/~psg/debian-bug.el";
+    TYPE="application/octet-stream">latest version</A>.
+
+
+<H5 ID="tcpdump">
+  tcpdump
+</H5>
+
+<P> A Unix <A HREF="ftp://fly.cnuce.cnr.it/pub/software/unix/pottcpdump-1.3";
+    TYPE="application/octet-stream">shell wrapper</A> around
+    <CITE>tcpdump</CITE> which optionally displays the contents of the packets.
+
+
+<HR> <!---------------------------------------------------------------->
+
+<H4 ID="links">
+    Links to interesting software
+</H4>
+
+
+<DL>
+ <DT>The Error Correcting Codes (ECC) Page
+  <DD><A
+  HREF="http://www.csl.sony.co.jp/person/morelos/ecc/codes.html";>This</A> is a
+  really good list of free (in various senses) programs for coding and
+  decoding.  I keep a <A HREF="codes.html">mirror</A> of this page.
+
+ <DT>Forward error correcting codes by Phil Karn
+  <DD>Phil Karn's optimised really <A HREF="http://www.ka9q.net/code/fec/";>free
+  codes</A>.
+
+</DL>
+
+</BODY>
+
+<!--
+Local variables:
+fill-column: 79
+end:
+-->
+
+</HTML>
diff --git a/test/etags/html-src/softwarelibero.html 
b/test/etags/html-src/softwarelibero.html
new file mode 100644
index 0000000..7aa74c5
--- /dev/null
+++ b/test/etags/html-src/softwarelibero.html
@@ -0,0 +1,313 @@
+<DIV LANG="it" ALIGN="justify">
+
+<H2>
+  Cos'� il software libero?
+</H2>
+
+<P>
+  Il concetto di software libero discende naturalmente da quello di
+  libert� di scambio di idee e di informazioni.  Negli ambienti
+  scientifici, quest'ultimo principio � tenuto in alta considerazione
+  per la fecondit� che ha dimostrato; ad esso infatti � generalmente
+  attribuita molta parte dell'eccezionale ed imprevedibile crescita del
+  sapere negli ultimi tre secoli.
+</P>
+<P>
+  La libert� di scambio di idee non � tuttavia una questione puramente
+  pratica: essa � anche alla base dei concetti di libert� di pensiero e
+  di espressione.  Analogamente alle idee, il software � immateriale, e
+  pu� essere riprodotto e trasmesso facilmente.  In modo simile a quanto
+  avviene per le idee, parte essenziale del processo che sostiene la
+  crescita e l'evoluzione del software � la sua libera diffusione.  Ed
+  ogni giorno di pi�, come le idee, il software permea il tessuto
+  sociale e lo influenza, produce effetti etici, economici, politici e
+  in un senso pi� generale culturali.
+</P>
+<P>
+  Fu Richard M. Stallman, nei primi anni Ottanta, a formalizzare per la
+  prima volta il concetto di software libero.  La <A TITLE="definizione
+  di software libero secondo FSF"
+  href="http://www.it.gnu.org/philosophy/free-sw.it.html";>definizione</A>
+  di Stallman, che da subito assurse al ruolo di definizione per
+  eccellenza di software libero, assume la forma di quattro principi di
+  libert�:
+</P>
+<P>
+<DL>
+  <DT>Libert� 0, o libert� fondamentale:
+    <DD>La libert� di eseguire il programma per qualunque scopo, senza
+    vincoli sul suo utilizzo.
+
+  <DT>Libert� 1:
+    <DD>La libert� di studiare il funzionamento del programma, e
+    di adattarlo alle proprie esigenze.
+
+  <DT>Libert� 2:
+    <DD>La libert� di redistribuire copie del programma.
+
+  <DT>Libert� 3:
+    <DD>La libert� di migliorare il programma, e di distribuirne
+    i miglioramenti.
+</DL>
+</P>
+<P>
+  Il software distribuito con una licenza che rispetti questi principi �
+  detto <Q><EM>software libero</EM></Q> (in inglese <Q><EM>free
+  software</EM></Q>).  Nel 1984 Richard M. Stallman <A TITLE="storia
+  del progetto GNU"
+  HREF="http://www.it.gnu.org/gnu/thegnuproject.it.html";>diede vita al
+  progetto GNU</A>, con lo scopo di tradurre in pratica il concetto di
+  software libero, e cre� la <Q>Free Software Foundation</Q> per
+  dare supporto logistico, legale ed economico al progetto GNU.
+</P>
+
+<H3><A NAME="licenze">
+  Licenze d'uso di un programma
+</A></H3>
+
+<P>
+  La <EM>licenza d'uso</EM> � un documento legale generalmente
+  distribuito assieme a ogni programma. Essa, appoggiandosi alle norme
+  sul diritto d'autore, specifica diritti e doveri di chi riceve tale
+  programma.
+</P>
+<P>
+  Gran parte delle licenze comunemente usate sono <EM>proprietarie</EM>,
+  cio� non libere, in quanto non garantiscono le quattro libert�. Quasi
+  sempre tali licenze non consentono infatti la libera copia del
+  programma, n� la sua modifica.  Spesso, se il programma � installato
+  sul computer di casa, la licenza impedisce persino di installarlo sul
+  proprio portatile (per utilizzare il programma fuori casa); se il
+  programma � utilizzato in uno studio professionale, non consente di
+  tenerlo installato su un computer di riserva, nel caso che quello
+  principale si guasti.
+</P>
+<P>
+  La licenza del progetto GNU, la <EM>Licenza Pubblica Generica GNU (<A
+  TITLE="traduzione della licenza GNU GPL"
+  HREF="http://softwarelibero.it/gnudoc/gpl.it.txt";>GNU GPL</A>)</EM>,
+  al contrario, concede all'utente del programma tutte e quattro le
+  libert� suddette.  Inoltre si occupa anche di proteggerle: chi
+  modifichi un programma protetto da GPL e lo distribuisca con tali
+  modifiche, deve distribuirlo sotto licenza GPL.  � grazie a questo
+  tipo di protezione che la GPL � attualmente la licenza pi� usata per
+  il software libero.
+</P>
+<P>
+  Con un gioco di parole, il nome dato a questo tipo di protezione
+  � <EM>permesso d'autore</EM> (in inglese <A TITLE="definizione di
+  copyleft (inglese)" LANG="en"
+  HREF="http://www.it.gnu.org/copyleft/copyleft.html";><EM>copyleft</EM></A>):
+  � il criterio che prevede che le modifiche ad un programma possano
+  essere distribuite solo con la stessa licenza del programma originale.
+  Le licenze proprietarie usano le norme sul diritto d'autore (copyright
+  in inglese) per togliere libert� agli utenti di un programma; il
+  permesso d'autore usa le stesse norme per garantire quelle libert� e
+  per proteggerle.
+</P>
+<P>
+  La GNU GPL non � unica nel suo genere.  Diverse <A TITLE="lista di
+  licenze libere e non"
+  HREF="http://www.it.gnu.org/licenses/license-list.it.html";>altre
+  licenze</A> garantiscono le quattro libert� e si possono pertanto
+  qualificare come licenze per il software libero.  Fra queste, merita
+  una speciale menzione per la sua diffusione la <A TITLE="la licenza
+  BSD (in inglese)" LANG="en"
+  HREF="http://www.freebsd.org/copyright/license.html";>licenza BSD</A>,
+  la cui principale differenza dalla GPL � che, non essendo basata sul
+  permesso d'autore, non ha fra i propri obiettivi quello di proteggere
+  la libert� del software cui � applicata.  Chi infatti modifichi un
+  programma protetto da BSD, pu� distribuirlo con le modifiche usando
+  qualunque licenza.
+</P>
+<P>
+  Sia BSD che GPL hanno pro e contro.  La licenza GPL riflette l'idea
+  della cooperazione: se io concedo ad altri la libert� di modificare e
+  redistribuire il mio programma, costoro sono tenuti a concedere le
+  stesse libert� sulle loro modifiche.  Il problema � che alcuni vedono
+  questo vincolo come un'imposizione ingenerosa, se non addirittura una
+  restrizione insopportabile.  La licenza BSD riflette l'idea del dono
+  liberale: chiunque pu� fare ci� che meglio crede del mio programma.
+  Il problema � che questo significa che chiunque pu� redistribuire
+  anche in forma chiusa con una licenza proprietaria un programma BSD
+  modificato, impedendo cos� ai propri acquirenti di modificarlo e
+  redistribuirlo a loro volta.
+</P>
+
+<H3><A NAME="miti">
+  Sfatiamo alcuni miti
+</A></H3>
+
+<P>
+<DL>
+
+  <DT>Il software libero � gratuito
+
+    <DD>� falso: la libert� del software non ha nulla a che vedere con
+    il suo prezzo.  Bench� gran parte del software libero pi� diffuso
+    sia distribuito gratuitamente, ci sono programmatori che vivono
+    della vendita e della manutenzione dei programmi liberi da loro
+    creati.
+
+  <DT>Il software gratuito � libero
+
+    <DD>� falso.  Molti programmi proprietari vengono distribuiti
+    gratuitamente.
+
+  <DT>Il software libero � privo di copyright
+
+    <DD>� falso.  Bench� si possa rinunciare al copyright su un proprio
+    programma e renderlo cos� di pubblico dominio, la gran parte del
+    software libero � distribuito con una licenza.  Per esempio, sono
+    licenze di copyright la licenza BSD e la GNU GPL, anche se per
+    qualificare quest'ultima spesso si parla di permesso d'autore
+    (copyleft).
+
+  <DT>L'introduzione del software libero nella scuola e nella pubblica
+  amministrazione, ma anche nei paesi poveri, ridurrebbe i costi
+  relativi al software
+
+    <DD>Potrebbe essere vero, ma una seria valutazione dei costi � molto
+    difficile.  Qualunque tipo di software, se usato in ambito non
+    domestico, ha dei costi di manutenzione che sono solitamente
+    maggiori del suo prezzo di acquisto.  I motivi per sostenere l'uso
+    del software libero, specie in ambiti pubblici, riguardano anzitutto
+    la libert�, non il prezzo.
+
+<!-- Discorso inadatto ad un documento introduttivo
+  <DT>Chi scrive un programma libero lo deve pubblicare su Internet
+
+    <DD>� una falsa argomentazione spesso usata per scoraggiare
+    un'azienda dall'uso di una licenza libera per i suoi programmi.
+    Sia gli autori che gli acquirenti di un programma libero hanno il
+    diritto di distribuirlo a titolo oneroso o gratuito, ma non hanno
+    alcun obbligo in tal senso.
+-->
+
+</DL>
+</P>
+
+<H3><A NAME="oss">
+  Il movimento open source
+</A></H3>
+
+<P>
+  Nel 1998 Bruce Perens, Eric Raymond e altre personalit� nel campo del
+  software libero si convinsero che i principi di libert� associati ad
+  esso fossero malvisti nel mondo degli affari, a causa della loro
+  carica ideologica.  Decisero perci� di evitare accuratamente ogni
+  riferimento a considerazioni politiche o di principio, e di lanciare
+  una campagna di promozione del software libero che ne mettesse in luce
+  i numerosi <A TITLE="un discorso di Robert Chassell di FSF"
+  HREF="http://softwarelibero.it/altri/economia-sl.shtml";>vantaggi
+  pratici</A>, come la facilit� di adattamento, l'affidabilit�, la
+  sicurezza, la conformit� agli standard, l'indipendenza dai singoli
+  fornitori.  A tal fine scrissero la <Q><A TITLE="la definizione di
+  Open Source (in inglese)" LANG="en"
+  HREF="http://www.opensource.org/docs/definition.html";>Open Source
+  Definition</A></Q>, il documento fondamentale del movimento <A
+  TITLE="il sito di Open Source Initiative (OSI), in inglese" LANG="en"
+  HREF="http://opensource.org/";><EM>open source</EM></A>.
+</P>
+<P>
+  Il movimento open source fu un successo, e contribu� a sdoganare il
+  concetto di software libero in campo aziendale, dove era guardato con
+  sospetto o condiscendenza.  Un esempio di questo successo �
+  l'atteggiamento dell'IBM, l'azienda che ha fatto di gran lunga i
+  maggiori investimenti nel campo del software libero, la quale parla
+  esclusivamente di open source, mai di software libero.
+</P>
+<P>
+  La voluta neutralit� del movimento open source verso gli aspetti
+  etici e politici del software libero � la caratteristica sostanziale
+  che lo distingue dalla filosofia del software libero, che al contrario
+  pone l'accento sulle motivazioni ideali.  Parlare di software libero
+  piuttosto che di open source � una questione politica piuttosto che
+  pratica; i due movimenti concordano infatti sulle licenze considerate
+  accettabili, ed hanno obiettivi e mezzi comuni.
+</P>
+
+<H3><A NAME="impatto">
+  Impatto pratico del software libero
+</A></H3>
+
+<P>
+  La <A TITLE="usi commerciali del software libero, di Alessandro
+  Rubini"
+  
HREF="http://www.it.gnu.org/philosophy/software-libre-commercial-viability.it.html";>rilevanza
+  economica</A> del software libero � ancora molto ridotta, ma � in
+  fortissima crescita ormai da alcuni anni, e tutto consente di supporre
+  che tale crescita <A TITLE="prospettive del software libero, gruppo di
+  studio dell'UE"
+  HREF="http://eu.conecta.it/paper/Economics_open_source.html";>continui
+  nel prossimo futuro</A>, anche grazie ai <A TITLE="vantaggi del
+  software libero, gruppo di studio UE"
+  HREF="http://eu.conecta.it/paper/Advantages_open_source_soft.html";>vantaggi
+  tecnici ed economici</A> del software libero.
+</P>
+<P>
+  Ad oggi, il software libero � ampiamente diffuso in ambito accademico,
+  industriale e fra gli appassionati di calcolatori, soprattutto grazie
+  ai sistemi GNU/Linux.  Questi sistemi liberi sono disponibili a costi
+  molto bassi, ben inferiori a quelli di analoghi sistemi proprietari.
+  Tuttavia, a causa delle loro caratteristiche, il loro uso richiede una
+  buona cultura di base nel campo del software.
+</P>
+<P>
+  In ambito accademico viene molto apprezzata la possibilit� di
+  personalizzare ogni parte del sistema, visto che i programmi liberi
+  sono liberamente modificabili (libert� numero uno).  In ambito
+  industriale, si apprezza l'affidabilit� dei sistemi liberi, dovuta al
+  fatto che quando un utente corregge un errore in un programma
+  solitamente rende disponibile la correzione agli altri utenti (libert�
+  numero tre).  Gli appassionati di calcolatori apprezzano lo spirito di
+  condivisione esistente fra gli utenti di software libero.
+</P>
+<P>
+  Ma le implicazioni dell'uso del software libero non sono soltanto
+  tecniche ed economiche, perch� il software da tempo ormai � avviato ad
+  occupare un ruolo di primo piano nella nostra vita quotidiana, ed �
+  destinato a cambiare in maniera profonda la societ�.
+</P>
+<P>
+  � per queste ragioni che la nostra libert� futura dipender� anche
+  dalla capacit� di ognuno di noi di controllare il software.  � per
+  queste ragioni che ai tradizionali principi di libert� sessuale, di
+  culto, di movimento, di espressione deve essere affiancata la libert�
+  del software.  � per queste ragioni che la nostra libert� futura
+  dipender� anche dall'uso di software libero.
+</P>
+
+<P>
+  <EM>scritto da <A TITLE="address@hidden"
+  HREF="mailto:address@hidden";>Francesco Potort�</A> per l'<A
+  TITLE="il sito dell'Associazione Software Libero"
+  HREF="http://softwarelibero.it/";>Associazione Software
+  Libero</A></EM>
+</P>
+<HR NOSHADE>
+<P>
+  Copyright &copy; 2002 Francesco Potort�
+  <BR>
+  Ultima versione ipertestuale disponibile su <A TITLE="versione
+  stampabile"
+  
HREF="http://softwarelibero.it/documentazione/softwarelibero.html";>&lt;http://softwarelibero.it/documentazione/softwarelibero.html></A>
+</P>
+<P>
+  La copia letterale e integrale e la distribuzione sono permesse con
+  qualsiasi mezzo, a condizione che questa nota sia riprodotta.
+</P>
+
+<!--
+Local variables:
+fill-column: 72
+time-stamp-active: t
+time-stamp-time-zone: "GMT"
+time-stamp-format: "%:y-%02m-%02d"
+time-stamp-line-limit: 30
+time-stamp-start: "ultima\\s-+modifica\\s-+�\\s-+del\\s-+"
+time-stamp-end: "\\."
+End:
+-->
+
+</DIV>
diff --git a/test/etags/java-src/AWTEMul.java b/test/etags/java-src/AWTEMul.java
new file mode 100644
index 0000000..c66f16e
--- /dev/null
+++ b/test/etags/java-src/AWTEMul.java
@@ -0,0 +1,658 @@
+/*
+ * @(#)AWTEventMulticaster.java        1.10 97/01/23
+ * 
+ * Copyright (c) 1996 Sun Microsystems, Inc. All Rights Reserved.
+ * 
+ * This software is the confidential and proprietary information of Sun
+ * Microsystems, Inc. ("Confidential Information").  You shall not
+ * disclose such Confidential Information and shall use it only in
+ * accordance with the terms of the license agreement you entered into
+ * with Sun.
+ * 
+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
+ * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
+ * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
+ * THIS SOFTWARE OR ITS DERIVATIVES.
+ * 
+ * CopyrightVersion 1.1_beta
+ * 
+ */
+package java.awt;
+
+import java.awt.event.*;
+import java.util.EventListener;
+import java.io.Serializable;
+import java.io.ObjectOutputStream;
+import java.io.IOException;
+
+
+/**
+ * A class which implements efficient multi-cast event dispatching
+ * for the AWT events defined in the java.awt.event package.  This
+ * class will manage the structure of a chain of event listeners
+ * and dispatch events to those listeners.
+ *
+ * An example of how this class could be used to implement a new
+ * component which fires "action" events:
+ *
+ * <pre><code>
+ * public myComponent extends Component {
+ *     ActionListener actionListener = null;
+ *
+ *     public void addActionListener(ActionListener l) {
+ *        actionListener = AWTEventMulticaster.add(actionListener, l);
+ *     }
+ *     public void removeActionListener(ActionListener l) {
+ *        actionListener = AWTEventMulticaster.remove(actionListener, l);
+ *     }
+ *     public void processEvent(AWTEvent e) {
+ *         // when event occurs which causes "action" semantic
+ *         if (actionListener != null) {
+ *             actionListener.actionPerformed(new ActionEvent());
+ *         }         
+ * }
+ * </code></pre>
+ *
+ * @version    1.10, 23 Jan 1997
+ * @author      John Rose
+ * @author     Amy Fowler
+ */
+
+public class AWTEventMulticaster implements 
+    ComponentListener, ContainerListener, FocusListener, KeyListener,
+    MouseListener, MouseMotionListener, WindowListener,
+    ActionListener, ItemListener, AdjustmentListener,
+    TextListener {
+
+    protected EventListener a, b;
+
+    /**
+     * Creates an event multicaster instance which chains listener-a
+     * with listener-b.
+     * @param a listener-a
+     * @param b listener-b
+     */ 
+    protected AWTEventMulticaster(EventListener a, EventListener b) {
+       this.a = a; this.b = b;
+    }
+
+    /**
+     * Removes a listener from this multicaster and returns the
+     * resulting multicast listener.
+     * @param oldl the listener to be removed
+     */
+    protected EventListener remove(EventListener oldl) {
+       if (oldl == a)  return b;
+       if (oldl == b)  return a;
+       EventListener a2 = removeInternal(a, oldl);
+       EventListener b2 = removeInternal(b, oldl);
+       if (a2 == a && b2 == b) {
+           return this;        // it's not here
+       }
+       return addInternal(a2, b2);
+    }
+
+    /**
+     * Handles the componentResized event by invoking the
+     * componentResized methods on listener-a and listener-b.
+     * @param e the component event
+     */
+    public void componentResized(ComponentEvent e) {
+        ((ComponentListener)a).componentResized(e);
+        ((ComponentListener)b).componentResized(e);
+    }
+
+    /**
+     * Handles the componentMoved event by invoking the
+     * componentMoved methods on listener-a and listener-b.
+     * @param e the component event
+     */
+    public void componentMoved(ComponentEvent e) {
+        ((ComponentListener)a).componentMoved(e);
+        ((ComponentListener)b).componentMoved(e);
+    }
+
+    /**
+     * Handles the componentShown event by invoking the
+     * componentShown methods on listener-a and listener-b.
+     * @param e the component event
+     */
+    public void componentShown(ComponentEvent e) {
+        ((ComponentListener)a).componentShown(e);
+        ((ComponentListener)b).componentShown(e);
+    }
+
+    /**
+     * Handles the componentHidden event by invoking the
+     * componentHidden methods on listener-a and listener-b.
+     * @param e the component event
+     */
+    public void componentHidden(ComponentEvent e) {
+        ((ComponentListener)a).componentHidden(e);
+        ((ComponentListener)b).componentHidden(e);
+    }
+
+    /**
+     * Handles the componentAdded container event by invoking the
+     * componentAdded methods on listener-a and listener-b.
+     * @param e the component event
+     */
+    public void componentAdded(ContainerEvent e) {
+        ((ContainerListener)a).componentAdded(e);
+        ((ContainerListener)b).componentAdded(e);
+    }
+
+    /**
+     * Handles the componentRemoved container event by invoking the
+     * componentRemoved methods on listener-a and listener-b.
+     * @param e the component event
+     */
+    public void componentRemoved(ContainerEvent e) {
+        ((ContainerListener)a).componentRemoved(e);
+        ((ContainerListener)b).componentRemoved(e);
+    }
+
+    /**
+     * Handles the focusGained event by invoking the
+     * focusGained methods on listener-a and listener-b.
+     * @param e the focus event
+     */
+    public void focusGained(FocusEvent e) {
+        ((FocusListener)a).focusGained(e);
+        ((FocusListener)b).focusGained(e);
+    }
+
+    /**
+     * Handles the focusLost event by invoking the
+     * focusLost methods on listener-a and listener-b.
+     * @param e the focus event
+     */
+    public void focusLost(FocusEvent e) {
+        ((FocusListener)a).focusLost(e);
+        ((FocusListener)b).focusLost(e);
+    }
+
+    /**
+     * Handles the keyTyped event by invoking the
+     * keyTyped methods on listener-a and listener-b.
+     * @param e the key event
+     */
+    public void keyTyped(KeyEvent e) {
+        ((KeyListener)a).keyTyped(e);
+        ((KeyListener)b).keyTyped(e);
+    }
+
+    /**
+     * Handles the keyPressed event by invoking the
+     * keyPressed methods on listener-a and listener-b.
+     * @param e the key event
+     */
+    public void keyPressed(KeyEvent e) {
+        ((KeyListener)a).keyPressed(e);
+        ((KeyListener)b).keyPressed(e);
+    }
+
+    /**
+     * Handles the keyReleased event by invoking the
+     * keyReleased methods on listener-a and listener-b.
+     * @param e the key event
+     */
+    public void keyReleased(KeyEvent e) {
+        ((KeyListener)a).keyReleased(e);
+        ((KeyListener)b).keyReleased(e);
+    }
+
+    /**
+     * Handles the mouseClicked event by invoking the
+     * mouseClicked methods on listener-a and listener-b.
+     * @param e the mouse event
+     */
+    public void mouseClicked(MouseEvent e) {
+        ((MouseListener)a).mouseClicked(e);
+        ((MouseListener)b).mouseClicked(e);
+    }
+
+    /**
+     * Handles the mousePressed event by invoking the
+     * mousePressed methods on listener-a and listener-b.
+     * @param e the mouse event
+     */
+    public void mousePressed(MouseEvent e) {
+        ((MouseListener)a).mousePressed(e);
+        ((MouseListener)b).mousePressed(e);
+    }
+
+    /**
+     * Handles the mouseReleased event by invoking the
+     * mouseReleased methods on listener-a and listener-b.
+     * @param e the mouse event
+     */
+    public void mouseReleased(MouseEvent e) {
+        ((MouseListener)a).mouseReleased(e);
+        ((MouseListener)b).mouseReleased(e);
+    }
+
+    /**
+     * Handles the mouseEntered event by invoking the
+     * mouseEntered methods on listener-a and listener-b.
+     * @param e the mouse event
+     */
+    public void mouseEntered(MouseEvent e) {
+        ((MouseListener)a).mouseEntered(e);
+        ((MouseListener)b).mouseEntered(e);
+    }
+
+    /**
+     * Handles the mouseExited event by invoking the
+     * mouseExited methods on listener-a and listener-b.
+     * @param e the mouse event
+     */
+    public void mouseExited(MouseEvent e) {
+        ((MouseListener)a).mouseExited(e);
+        ((MouseListener)b).mouseExited(e);
+    }
+
+    /**
+     * Handles the mouseDragged event by invoking the
+     * mouseDragged methods on listener-a and listener-b.
+     * @param e the mouse event
+     */
+    public void mouseDragged(MouseEvent e) {
+        ((MouseMotionListener)a).mouseDragged(e);
+        ((MouseMotionListener)b).mouseDragged(e);
+    }
+
+    /**
+     * Handles the mouseMoved event by invoking the
+     * mouseMoved methods on listener-a and listener-b.
+     * @param e the mouse event
+     */
+    public void mouseMoved(MouseEvent e) {
+        ((MouseMotionListener)a).mouseMoved(e);
+        ((MouseMotionListener)b).mouseMoved(e);
+    }
+
+    /**
+     * Handles the windowOpened event by invoking the
+     * windowOpened methods on listener-a and listener-b.
+     * @param e the window event
+     */
+    public void windowOpened(WindowEvent e) {
+        ((WindowListener)a).windowOpened(e);
+        ((WindowListener)b).windowOpened(e);
+    }
+
+    /**
+     * Handles the windowClosing event by invoking the
+     * windowClosing methods on listener-a and listener-b.
+     * @param e the window event
+     */
+    public void windowClosing(WindowEvent e) {
+        ((WindowListener)a).windowClosing(e);
+        ((WindowListener)b).windowClosing(e);
+    }
+
+    /**
+     * Handles the windowClosed event by invoking the
+     * windowClosed methods on listener-a and listener-b.
+     * @param e the window event
+     */
+    public void windowClosed(WindowEvent e) {
+        ((WindowListener)a).windowClosed(e);
+        ((WindowListener)b).windowClosed(e);
+    }
+
+    /**
+     * Handles the windowIconified event by invoking the
+     * windowIconified methods on listener-a and listener-b.
+     * @param e the window event
+     */
+    public void windowIconified(WindowEvent e) {
+        ((WindowListener)a).windowIconified(e);
+        ((WindowListener)b).windowIconified(e);
+    }
+
+    /**
+     * Handles the windowDeiconfied event by invoking the
+     * windowDeiconified methods on listener-a and listener-b.
+     * @param e the window event
+     */
+    public void windowDeiconified(WindowEvent e) {
+        ((WindowListener)a).windowDeiconified(e);
+        ((WindowListener)b).windowDeiconified(e);
+    }
+
+    /**
+     * Handles the windowActivated event by invoking the
+     * windowActivated methods on listener-a and listener-b.
+     * @param e the window event
+     */
+    public void windowActivated(WindowEvent e) {
+        ((WindowListener)a).windowActivated(e);
+        ((WindowListener)b).windowActivated(e);
+    }
+
+    /**
+     * Handles the windowDeactivated event by invoking the
+     * windowDeactivated methods on listener-a and listener-b.
+     * @param e the window event
+     */
+    public void windowDeactivated(WindowEvent e) {
+        ((WindowListener)a).windowDeactivated(e);
+        ((WindowListener)b).windowDeactivated(e);
+    }
+
+    /**
+     * Handles the actionPerformed event by invoking the
+     * actionPerformed methods on listener-a and listener-b.
+     * @param e the action event
+     */
+    public void actionPerformed(ActionEvent e) {
+        ((ActionListener)a).actionPerformed(e);
+        ((ActionListener)b).actionPerformed(e);
+    }
+
+    /**
+     * Handles the itemStateChanged event by invoking the
+     * itemStateChanged methods on listener-a and listener-b.
+     * @param e the item event
+     */
+    public void itemStateChanged(ItemEvent e) {
+        ((ItemListener)a).itemStateChanged(e);
+        ((ItemListener)b).itemStateChanged(e);
+    }
+
+    /**
+     * Handles the adjustmentValueChanged event by invoking the
+     * adjustmentValueChanged methods on listener-a and listener-b.
+     * @param e the adjustment event
+     */
+    public void adjustmentValueChanged(AdjustmentEvent e) {
+        ((AdjustmentListener)a).adjustmentValueChanged(e);
+        ((AdjustmentListener)b).adjustmentValueChanged(e);
+    }
+    public void textValueChanged(TextEvent e) {
+        ((TextListener)a).textValueChanged(e);
+        ((TextListener)b).textValueChanged(e);
+    }
+
+    /**
+     * Adds component-listener-a with component-listener-b and
+     * returns the resulting multicast listener.
+     * @param a component-listener-a
+     * @param b component-listener-b
+     */
+    public static ComponentListener add(ComponentListener a, ComponentListener 
b) {
+        return (ComponentListener)addInternal(a, b);
+    }
+
+    /**
+     * Adds container-listener-a with container-listener-b and
+     * returns the resulting multicast listener.
+     * @param a container-listener-a
+     * @param b container-listener-b
+     */
+    public static ContainerListener add(ContainerListener a, ContainerListener 
b) {
+        return (ContainerListener)addInternal(a, b);
+    }
+
+    /**
+     * Adds focus-listener-a with focus-listener-b and
+     * returns the resulting multicast listener.
+     * @param a focus-listener-a
+     * @param b focus-listener-b
+     */
+    public static FocusListener add(FocusListener a, FocusListener b) {
+        return (FocusListener)addInternal(a, b);
+    }
+
+    /**
+     * Adds key-listener-a with key-listener-b and
+     * returns the resulting multicast listener.
+     * @param a key-listener-a
+     * @param b key-listener-b
+     */
+    public static KeyListener add(KeyListener a, KeyListener b) {
+        return (KeyListener)addInternal(a, b);
+    }
+
+    /**
+     * Adds mouse-listener-a with mouse-listener-b and
+     * returns the resulting multicast listener.
+     * @param a mouse-listener-a
+     * @param b mouse-listener-b
+     */
+    public static MouseListener add(MouseListener a, MouseListener b) {
+        return (MouseListener)addInternal(a, b);
+    }
+
+    /**
+     * Adds mouse-motion-listener-a with mouse-motion-listener-b and
+     * returns the resulting multicast listener.
+     * @param a mouse-motion-listener-a
+     * @param b mouse-motion-listener-b
+     */
+    public static MouseMotionListener add(MouseMotionListener a, 
MouseMotionListener b) {
+        return (MouseMotionListener)addInternal(a, b);
+    }
+
+    /**
+     * Adds window-listener-a with window-listener-b and
+     * returns the resulting multicast listener.
+     * @param a window-listener-a
+     * @param b window-listener-b
+     */
+    public static WindowListener add(WindowListener a, WindowListener b) {
+        return (WindowListener)addInternal(a, b);
+    }
+
+    /**
+     * Adds action-listener-a with action-listener-b and
+     * returns the resulting multicast listener.
+     * @param a action-listener-a
+     * @param b action-listener-b
+     */
+    public static ActionListener add(ActionListener a, ActionListener b) {
+        return (ActionListener)addInternal(a, b);
+    }
+
+    /**
+     * Adds item-listener-a with item-listener-b and
+     * returns the resulting multicast listener.
+     * @param a item-listener-a
+     * @param b item-listener-b
+     */
+    public static ItemListener add(ItemListener a, ItemListener b) {
+        return (ItemListener)addInternal(a, b);
+    }
+
+    /**
+     * Adds adjustment-listener-a with adjustment-listener-b and
+     * returns the resulting multicast listener.
+     * @param a adjustment-listener-a
+     * @param b adjustment-listener-b
+     */
+    public static AdjustmentListener add(AdjustmentListener a, 
AdjustmentListener b) {
+        return (AdjustmentListener)addInternal(a, b);
+    }
+    public static TextListener add(TextListener a, TextListener b) {
+        return (TextListener)addInternal(a, b);
+    }
+
+    /**
+     * Removes the old component-listener from component-listener-l and
+     * returns the resulting multicast listener.
+     * @param l component-listener-l
+     * @param oldl the component-listener being removed
+     */
+    public static ComponentListener remove(ComponentListener l, 
ComponentListener oldl) {
+       return (ComponentListener) removeInternal(l, oldl);
+    }
+
+    /**
+     * Removes the old container-listener from container-listener-l and
+     * returns the resulting multicast listener.
+     * @param l container-listener-l
+     * @param oldl the container-listener being removed
+     */
+    public static ContainerListener remove(ContainerListener l, 
ContainerListener oldl) {
+       return (ContainerListener) removeInternal(l, oldl);
+    }
+
+    /**
+     * Removes the old focus-listener from focus-listener-l and
+     * returns the resulting multicast listener.
+     * @param l focus-listener-l
+     * @param oldl the focus-listener being removed
+     */
+    public static FocusListener remove(FocusListener l, FocusListener oldl) {
+       return (FocusListener) removeInternal(l, oldl);
+    }
+
+    /**
+     * Removes the old key-listener from key-listener-l and
+     * returns the resulting multicast listener.
+     * @param l key-listener-l
+     * @param oldl the key-listener being removed
+     */
+    public static KeyListener remove(KeyListener l, KeyListener oldl) {
+       return (KeyListener) removeInternal(l, oldl);
+    }
+
+    /**
+     * Removes the old mouse-listener from mouse-listener-l and
+     * returns the resulting multicast listener.
+     * @param l mouse-listener-l
+     * @param oldl the mouse-listener being removed
+     */
+    public static MouseListener remove(MouseListener l, MouseListener oldl) {
+       return (MouseListener) removeInternal(l, oldl);
+    }
+
+    /**
+     * Removes the old mouse-motion-listener from mouse-motion-listener-l 
+     * and returns the resulting multicast listener.
+     * @param l mouse-motion-listener-l
+     * @param oldl the mouse-motion-listener being removed
+     */
+    public static MouseMotionListener remove(MouseMotionListener l, 
MouseMotionListener oldl) {
+       return (MouseMotionListener) removeInternal(l, oldl);
+    }
+
+    /**
+     * Removes the old window-listener from window-listener-l and
+     * returns the resulting multicast listener.
+     * @param l window-listener-l
+     * @param oldl the window-listener being removed
+     */
+    public static WindowListener remove(WindowListener l, WindowListener oldl) 
{
+       return (WindowListener) removeInternal(l, oldl);
+    }
+
+    /**
+     * Removes the old action-listener from action-listener-l and
+     * returns the resulting multicast listener.
+     * @param l action-listener-l
+     * @param oldl the action-listener being removed
+     */
+    public static ActionListener remove(ActionListener l, ActionListener oldl) 
{
+       return (ActionListener) removeInternal(l, oldl);
+    }
+
+    /**
+     * Removes the old item-listener from item-listener-l and
+     * returns the resulting multicast listener.
+     * @param l item-listener-l
+     * @param oldl the item-listener being removed
+     */
+    public static ItemListener remove(ItemListener l, ItemListener oldl) {
+       return (ItemListener) removeInternal(l, oldl);
+    }
+
+    /**
+     * Removes the old adjustment-listener from adjustment-listener-l and
+     * returns the resulting multicast listener.
+     * @param l adjustment-listener-l
+     * @param oldl the adjustment-listener being removed
+     */
+    public static AdjustmentListener remove(AdjustmentListener l, 
AdjustmentListener oldl) {
+       return (AdjustmentListener) removeInternal(l, oldl);
+    }
+    public static TextListener remove(TextListener l, TextListener oldl) {
+       return (TextListener) removeInternal(l, oldl);
+    }
+
+    /** 
+     * Returns the resulting multicast listener from adding listener-a
+     * and listener-b together.  
+     * If listener-a is null, it returns listener-b;  
+     * If listener-b is null, it returns listener-a
+     * If neither are null, then it creates and returns
+     * a new AWTEventMulticaster instance which chains a with b.
+     * @param a event listener-a
+     * @param b event listener-b
+     */
+    protected static EventListener addInternal(EventListener a, EventListener 
b) {
+       if (a == null)  return b;
+       if (b == null)  return a;
+       return new AWTEventMulticaster(a, b);
+    }
+
+    /** 
+     * Returns the resulting multicast listener after removing the
+     * old listener from listener-l.
+     * If listener-l equals the old listener OR listener-l is null, 
+     * returns null.
+     * Else if listener-l is an instance of AWTEventMulticaster, 
+     * then it removes the old listener from it.
+     * Else, returns listener l.
+     * @param l the listener being removed from
+     * @param oldl the listener being removed
+     */
+    protected static EventListener removeInternal(EventListener l, 
EventListener oldl) {
+       if (l == oldl || l == null) {
+           return null;
+       } else if (l instanceof AWTEventMulticaster) {
+           return ((AWTEventMulticaster)l).remove(oldl);
+       } else {
+           return l;           // it's not here
+       }
+    }
+      
+
+    /* Serialization support.  
+     */
+
+    protected void saveInternal(ObjectOutputStream s, String k) throws 
IOException {
+        if (a instanceof AWTEventMulticaster) {
+           ((AWTEventMulticaster)a).saveInternal(s, k);
+        }
+        else if (a instanceof Serializable) {
+            s.writeObject(k);
+            s.writeObject(a);
+        }
+        
+        if (b instanceof AWTEventMulticaster) {
+           ((AWTEventMulticaster)b).saveInternal(s, k);
+        }
+        else if (b instanceof Serializable) {
+            s.writeObject(k);
+            s.writeObject(b);
+        }
+    }
+
+    static void save(ObjectOutputStream s, String k, EventListener l) throws 
IOException {
+      if (l == null) {
+          return;
+      } 
+      else if (l instanceof AWTEventMulticaster) {
+          ((AWTEventMulticaster)l).saveInternal(s, k);
+      }
+      else if (l instanceof Serializable) {
+           s.writeObject(k);
+           s.writeObject(l);
+      }
+    }
+}
diff --git a/test/etags/java-src/KeyEve.java b/test/etags/java-src/KeyEve.java
new file mode 100644
index 0000000..dc07fb2
--- /dev/null
+++ b/test/etags/java-src/KeyEve.java
@@ -0,0 +1,440 @@
+/*
+ * @(#)KeyEvent.java   1.20 97/01/30
+ * 
+ * Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved.
+ * 
+ * This software is the confidential and proprietary information of Sun
+ * Microsystems, Inc. ("Confidential Information").  You shall not
+ * disclose such Confidential Information and shall use it only in
+ * accordance with the terms of the license agreement you entered into
+ * with Sun.
+ * 
+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
+ * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
+ * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
+ * THIS SOFTWARE OR ITS DERIVATIVES.
+ * 
+ * CopyrightVersion 1.1_beta
+ * 
+ */
+
+package java.awt.event;
+
+import java.awt.Event;
+import java.awt.Component;
+import java.awt.Toolkit;
+
+/**
+ * The component-level keyboard event.
+ *
+ * @version 1.20 30 Jan 1997
+ * @author Carl Quinn
+ * @author Amy Fowler
+ */
+public class KeyEvent extends InputEvent {
+
+    /**
+     * Marks the first integer id for the range of key event ids.
+     */
+    public static final int KEY_FIRST = 400;
+
+    /**
+     * Marks the last integer id for the range of key event ids.
+     */
+    public static final int KEY_LAST  = 402;
+
+    /**
+     * The key typed event type.  This type is generated by a combination
+     * of a key press followed by a key release.
+     */
+    public static final int KEY_TYPED = KEY_FIRST;
+
+    /**
+     * The key pressed event type.
+     */
+    public static final int KEY_PRESSED = 1 + KEY_FIRST; //Event.KEY_PRESS
+
+    /**
+     * The key released event type.
+     */
+    public static final int KEY_RELEASED = 2 + KEY_FIRST; //Event.KEY_RELEASE
+
+    /**
+     * Virtual key codes.  These codes report which keyboard key has
+     * been pressed, rather than any character generated by one or more
+     * keys being pressed.  
+     *
+     * For example, pressing the Shift key will cause a KEY_PRESSED event 
+     * with a VK_SHIFT keyCode, while pressing the 'a' key will result in 
+     * a VK_A keyCode.  After the 'a' key is released, a KEY_RELEASED event 
+     * will be fired with VK_A, followed by a KEY_TYPED event with a keyChar 
+     * value of 'A'.  Key combinations which do not result in characters,
+     * such as action keys like F1, will not generate KEY_TYPED events.
+     *
+     * Note: not all keyboards or systems are capable of generating all
+     * virtual key codes.  No attempt is made in Java to artificially
+     * generate these keys.
+     *
+     * WARNING:  aside from those keys where are defined by the Java language
+     * (VK_ENTER, VK_BACK_SPACE, and VK_TAB), do not rely on the values of 
these
+     * constants.  Sun reserves the right to change these values as needed
+     * to accomodate a wider range of keyboards in the future.  
+     */
+    public static final int VK_ENTER          = '\n';
+    public static final int VK_BACK_SPACE     = '\b';
+    public static final int VK_TAB            = '\t';
+    public static final int VK_CANCEL         = 0x03;
+    public static final int VK_CLEAR          = 0x0C;
+    public static final int VK_SHIFT          = 0x10;
+    public static final int VK_CONTROL        = 0x11;
+    public static final int VK_ALT            = 0x12;
+    public static final int VK_PAUSE          = 0x13;
+    public static final int VK_CAPS_LOCK      = 0x14;
+    public static final int VK_ESCAPE         = 0x1B;
+    public static final int VK_SPACE          = 0x20;
+    public static final int VK_PAGE_UP        = 0x21;
+    public static final int VK_PAGE_DOWN      = 0x22;
+    public static final int VK_END            = 0x23;
+    public static final int VK_HOME           = 0x24;
+    public static final int VK_LEFT           = 0x25;
+    public static final int VK_UP             = 0x26;
+    public static final int VK_RIGHT          = 0x27;
+    public static final int VK_DOWN           = 0x28;
+    public static final int VK_COMMA          = 0x2C;
+    public static final int VK_PERIOD         = 0x2E;
+    public static final int VK_SLASH          = 0x2F;
+
+    /** VK_0 thru VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39) */
+    public static final int VK_0              = 0x30;
+    public static final int VK_1              = 0x31;
+    public static final int VK_2              = 0x32;
+    public static final int VK_3              = 0x33;
+    public static final int VK_4              = 0x34;
+    public static final int VK_5              = 0x35;
+    public static final int VK_6              = 0x36;
+    public static final int VK_7              = 0x37;
+    public static final int VK_8              = 0x38;
+    public static final int VK_9              = 0x39;
+
+    public static final int VK_SEMICOLON      = 0x3B;
+    public static final int VK_EQUALS         = 0x3D;
+
+    /** VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A) */
+    public static final int VK_A              = 0x41;
+    public static final int VK_B              = 0x42;
+    public static final int VK_C              = 0x43;
+    public static final int VK_D              = 0x44;
+    public static final int VK_E              = 0x45;
+    public static final int VK_F              = 0x46;
+    public static final int VK_G              = 0x47;
+    public static final int VK_H              = 0x48;
+    public static final int VK_I              = 0x49;
+    public static final int VK_J              = 0x4A;
+    public static final int VK_K              = 0x4B;
+    public static final int VK_L              = 0x4C;
+    public static final int VK_M              = 0x4D;
+    public static final int VK_N              = 0x4E;
+    public static final int VK_O              = 0x4F;
+    public static final int VK_P              = 0x50;
+    public static final int VK_Q              = 0x51;
+    public static final int VK_R              = 0x52;
+    public static final int VK_S              = 0x53;
+    public static final int VK_T              = 0x54;
+    public static final int VK_U              = 0x55;
+    public static final int VK_V              = 0x56;
+    public static final int VK_W              = 0x57;
+    public static final int VK_X              = 0x58;
+    public static final int VK_Y              = 0x59;
+    public static final int VK_Z              = 0x5A;
+
+    public static final int VK_OPEN_BRACKET   = 0x5B;
+    public static final int VK_BACK_SLASH     = 0x5C;
+    public static final int VK_CLOSE_BRACKET  = 0x5D;
+
+    public static final int VK_NUMPAD0        = 0x60;
+    public static final int VK_NUMPAD1        = 0x61;
+    public static final int VK_NUMPAD2        = 0x62;
+    public static final int VK_NUMPAD3        = 0x63;
+    public static final int VK_NUMPAD4        = 0x64;
+    public static final int VK_NUMPAD5        = 0x65;
+    public static final int VK_NUMPAD6        = 0x66;
+    public static final int VK_NUMPAD7        = 0x67;
+    public static final int VK_NUMPAD8        = 0x68;
+    public static final int VK_NUMPAD9        = 0x69;
+    public static final int VK_MULTIPLY       = 0x6A;
+    public static final int VK_ADD            = 0x6B;
+    public static final int VK_SEPARATER      = 0x6C;
+    public static final int VK_SUBTRACT       = 0x6D;
+    public static final int VK_DECIMAL        = 0x6E;
+    public static final int VK_DIVIDE         = 0x6F;
+    public static final int VK_F1             = 0x70;
+    public static final int VK_F2             = 0x71;
+    public static final int VK_F3             = 0x72;
+    public static final int VK_F4             = 0x73;
+    public static final int VK_F5             = 0x74;
+    public static final int VK_F6             = 0x75;
+    public static final int VK_F7             = 0x76;
+    public static final int VK_F8             = 0x77;
+    public static final int VK_F9             = 0x78;
+    public static final int VK_F10            = 0x79;
+    public static final int VK_F11            = 0x7A;
+    public static final int VK_F12            = 0x7B;
+    public static final int VK_DELETE         = 0x7F; /* ASCII DEL */
+    public static final int VK_NUM_LOCK       = 0x90;
+    public static final int VK_SCROLL_LOCK    = 0x91;
+
+    public static final int VK_PRINTSCREEN    = 0x9A;
+    public static final int VK_INSERT         = 0x9B;
+    public static final int VK_HELP           = 0x9C;
+    public static final int VK_META           = 0x9D;
+
+    public static final int VK_BACK_QUOTE     = 0xC0;
+    public static final int VK_QUOTE          = 0xDE;
+
+    /** for Asian Keyboard */
+    public static final int VK_FINAL          = 0x18;
+    public static final int VK_CONVERT        = 0x1C;
+    public static final int VK_NONCONVERT     = 0x1D;
+    public static final int VK_ACCEPT         = 0x1E;
+    public static final int VK_MODECHANGE     = 0x1F;
+    public static final int VK_KANA           = 0x15;
+    public static final int VK_KANJI          = 0x19;
+    
+    /**
+     * KEY_TYPED events do not have a defined keyCode.
+     */
+    public static final int VK_UNDEFINED      = 0x0;
+
+    /**
+     * KEY_PRESSED and KEY_RELEASED events which do not map to a
+     * valid Unicode character do not have a defined keyChar.
+     */
+    public static final char CHAR_UNDEFINED   = 0x0;
+
+    int  keyCode;
+    char keyChar;
+
+    /*
+     * JDK 1.1 serialVersionUID 
+     */
+     private static final long serialVersionUID = -2352130953028126954L;
+
+    /**
+     * Constructs a KeyEvent object with the specified source component,
+     * type, modifiers, and key.
+     * @param source the object where the event originated
+     * @id the event type
+     * @when the time the event occurred
+     * @modifiers the modifier keys down during event
+     * @keyCode the integer code representing the key of the event 
+     * @keyChar the Unicode character generated by this event, or NUL
+     */
+    public KeyEvent(Component source, int id, long when, int modifiers,
+                    int keyCode, char keyChar) {
+        super(source, id, when, modifiers);
+
+        if (id == KEY_TYPED && keyChar == CHAR_UNDEFINED) {
+            throw new IllegalArgumentException("invalid keyChar");
+        }
+        if (id == KEY_TYPED && keyCode != VK_UNDEFINED) {
+            throw new IllegalArgumentException("invalid keyCode");
+        }
+
+        this.keyCode = keyCode;
+        this.keyChar = keyChar;
+    }
+
+    /*
+     * @deprecated, as of JDK1.1 - Do NOT USE; will be removed in 1.1.1.
+     */
+    public KeyEvent(Component source, int id, long when, int modifiers,
+                    int keyCode) {
+        this(source, id, when, modifiers, keyCode, (char)keyCode);
+    }
+
+    /**
+     * Returns the integer key-code associated with the key in this event.
+     * For KEY_TYPED events, keyCode is VK_UNDEFINED.
+     */
+    public int getKeyCode() {
+        return keyCode;
+    }
+
+    public void setKeyCode(int keyCode) {
+        this.keyCode = keyCode;
+    }
+
+    public void setKeyChar(char keyChar) {
+        this.keyChar = keyChar;
+    }
+
+    public void setModifiers(int modifiers) {
+        this.modifiers = modifiers;
+    }
+
+    /**
+     * Returns the character associated with the key in this event.
+     * If no valid Unicode character exists for this key event, keyChar
+     * is CHAR_UNDEFINED.
+     */
+    public char getKeyChar() {
+        return keyChar;
+    }
+
+    /**
+     * Returns a String describing the keyCode, such as "HOME", "F1" or "A".
+     * These strings can be localized by changing the awt.properties file.
+     */
+    public static String getKeyText(int keyCode) {
+        if (keyCode >= VK_0 && keyCode <= VK_9 || 
+            keyCode >= VK_A && keyCode <= VK_Z) {
+            return String.valueOf((char)keyCode);
+        }
+
+        // Check for other ASCII keyCodes.
+        int index = ",./;=[\\]".indexOf(keyCode);
+        if (index >= 0) {
+            return String.valueOf((char)keyCode);
+        }
+       
+        switch(keyCode) {
+          case VK_ENTER: return Toolkit.getProperty("AWT.enter", "Enter");
+          case VK_BACK_SPACE: return Toolkit.getProperty("AWT.backSpace", 
"Backspace");
+          case VK_TAB: return Toolkit.getProperty("AWT.tab", "Tab");
+          case VK_CANCEL: return Toolkit.getProperty("AWT.cancel", "Cancel");
+          case VK_CLEAR: return Toolkit.getProperty("AWT.clear", "Clear");
+          case VK_SHIFT: return Toolkit.getProperty("AWT.shift", "Shift");
+          case VK_CONTROL: return Toolkit.getProperty("AWT.control", 
"Control");
+          case VK_ALT: return Toolkit.getProperty("AWT.alt", "Alt");
+          case VK_PAUSE: return Toolkit.getProperty("AWT.pause", "Pause");
+          case VK_CAPS_LOCK: return Toolkit.getProperty("AWT.capsLock", "Caps 
Lock");
+          case VK_ESCAPE: return Toolkit.getProperty("AWT.escape", "Escape");
+          case VK_SPACE: return Toolkit.getProperty("AWT.space", "Space");
+          case VK_PAGE_UP: return Toolkit.getProperty("AWT.pgup", "Page Up");
+          case VK_PAGE_DOWN: return Toolkit.getProperty("AWT.pgdn", "Page 
Down");
+          case VK_END: return Toolkit.getProperty("AWT.end", "End");
+          case VK_HOME: return Toolkit.getProperty("AWT.home", "Home");
+          case VK_LEFT: return Toolkit.getProperty("AWT.left", "Left");
+          case VK_UP: return Toolkit.getProperty("AWT.up", "Up");
+          case VK_RIGHT: return Toolkit.getProperty("AWT.right", "Right");
+          case VK_DOWN: return Toolkit.getProperty("AWT.down", "Down");
+
+          case VK_MULTIPLY: return Toolkit.getProperty("AWT.multiply", "NumPad 
*");
+          case VK_ADD: return Toolkit.getProperty("AWT.add", "NumPad +");
+          case VK_SEPARATER: return Toolkit.getProperty("AWT.separater", 
"NumPad ,");
+          case VK_SUBTRACT: return Toolkit.getProperty("AWT.subtract", "NumPad 
-");
+          case VK_DECIMAL: return Toolkit.getProperty("AWT.decimal", "NumPad 
.");
+          case VK_DIVIDE: return Toolkit.getProperty("AWT.divide", "NumPad /");
+
+          case VK_F1: return Toolkit.getProperty("AWT.f1", "F1");
+          case VK_F2: return Toolkit.getProperty("AWT.f2", "F2");
+          case VK_F3: return Toolkit.getProperty("AWT.f3", "F3");
+          case VK_F4: return Toolkit.getProperty("AWT.f4", "F4");
+          case VK_F5: return Toolkit.getProperty("AWT.f5", "F5");
+          case VK_F6: return Toolkit.getProperty("AWT.f6", "F6");
+          case VK_F7: return Toolkit.getProperty("AWT.f7", "F7");
+          case VK_F8: return Toolkit.getProperty("AWT.f8", "F8");
+          case VK_F9: return Toolkit.getProperty("AWT.f9", "F9");
+          case VK_F10: return Toolkit.getProperty("AWT.f10", "F10");
+          case VK_F11: return Toolkit.getProperty("AWT.f11", "F11");
+          case VK_F12: return Toolkit.getProperty("AWT.f12", "F12");
+          case VK_DELETE: return Toolkit.getProperty("AWT.delete", "Delete");
+          case VK_NUM_LOCK: return Toolkit.getProperty("AWT.numLock", "Num 
Lock");
+          case VK_SCROLL_LOCK: return Toolkit.getProperty("AWT.scrollLock", 
"Scroll Lock");
+          case VK_PRINTSCREEN: return Toolkit.getProperty("AWT.printScreen", 
"Print Screen");
+          case VK_INSERT: return Toolkit.getProperty("AWT.insert", "Insert");
+          case VK_HELP: return Toolkit.getProperty("AWT.help", "Help");
+          case VK_META: return Toolkit.getProperty("AWT.meta", "Meta");
+          case VK_BACK_QUOTE: return Toolkit.getProperty("AWT.backQuote", 
"Back Quote");
+          case VK_QUOTE: return Toolkit.getProperty("AWT.quote", "Quote");
+                        
+          case VK_FINAL: return Toolkit.getProperty("AWT.final", "Final");
+          case VK_CONVERT: return Toolkit.getProperty("AWT.convert", 
"Convert");
+          case VK_NONCONVERT: return Toolkit.getProperty("AWT.noconvert", "No 
Convert");
+          case VK_ACCEPT: return Toolkit.getProperty("AWT.accept", "Accept");
+          case VK_MODECHANGE: return Toolkit.getProperty("AWT.modechange", 
"Mode Change");
+          case VK_KANA: return Toolkit.getProperty("AWT.kana", "Kana");
+         case VK_KANJI: return Toolkit.getProperty("AWT.kanji", "Kanji");
+        }
+
+        if (keyCode >= VK_NUMPAD0 && keyCode <= VK_NUMPAD9) {
+            String numpad = Toolkit.getProperty("AWT.numpad", "NumPad");
+           char c = (char)(keyCode - VK_NUMPAD0 + '0');
+            return numpad + "-" + c;
+        }
+
+        String unknown = Toolkit.getProperty("AWT.unknown", "Unknown keyCode");
+        return unknown + ": 0x" + Integer.toString(keyCode, 16);
+    }
+
+    /**
+     * Returns a String describing the modifier key(s), such as "Shift",
+     * or "Ctrl+Shift".  These strings can be localized by changing the 
+     * awt.properties file.
+     */
+    public static String getKeyModifiersText(int modifiers) {
+        StringBuffer buf = new StringBuffer();
+        if ((modifiers & Event.META_MASK) != 0) {
+            buf.append(Toolkit.getProperty("AWT.meta", "Meta"));
+            buf.append("+");
+        }
+        if ((modifiers & Event.CTRL_MASK) != 0) {
+            buf.append(Toolkit.getProperty("AWT.control", "Ctrl"));
+            buf.append("+");
+        }
+        if ((modifiers & Event.META_MASK) != 0) {
+            buf.append(Toolkit.getProperty("AWT.alt", "Alt"));
+            buf.append("+");
+        }
+        if ((modifiers & Event.SHIFT_MASK) != 0) {
+            buf.append(Toolkit.getProperty("AWT.shift", "Shift"));
+            buf.append("+");
+        }
+        if (buf.length() > 0) {
+            buf.setLength(buf.length()-1); // remove trailing '+'
+        }
+        return buf.toString();
+    }
+
+    /** Returns whether or not the key in this event is an "action" key.
+     */
+    public boolean isActionKey() {
+        return (keyChar == CHAR_UNDEFINED);
+    }
+
+    public String paramString() {
+        String typeStr;
+        switch(id) {
+          case KEY_PRESSED:
+              typeStr = "KEY_PRESSED";
+              break;
+          case KEY_RELEASED:
+              typeStr = "KEY_RELEASED";
+              break;
+          case KEY_TYPED:
+              typeStr = "KEY_TYPED";
+              break;
+          default:
+              typeStr = "unknown type";
+        }
+
+        String str = typeStr + ",keyCode=" + keyCode;
+        if (isActionKey() || keyCode == VK_ENTER || keyCode == VK_BACK_SPACE 
|| 
+           keyCode == VK_TAB || keyCode == VK_ESCAPE || keyCode == VK_DELETE ||
+           (keyCode >= VK_NUMPAD0 && keyCode <= VK_NUMPAD9)) {
+            str += "," + getKeyText(keyCode);
+       } else if (keyChar == '\n' || keyChar == '\b' ||
+           keyChar == '\t' || keyChar == VK_ESCAPE || keyChar == VK_DELETE) {
+            str += "," + getKeyText(keyChar);
+        } else {
+            str += ",keyChar='" + keyChar + "'";
+        }
+        if (modifiers > 0) {
+            str += ",modifiers=" + getKeyModifiersText(modifiers);
+        }
+        return str;
+    }
+
+}
diff --git a/test/etags/java-src/SMan.java b/test/etags/java-src/SMan.java
new file mode 100644
index 0000000..ccc9bf1
--- /dev/null
+++ b/test/etags/java-src/SMan.java
@@ -0,0 +1,848 @@
+/*
+ * @(#)SecurityManager.java    1.46 97/01/27
+ * 
+ * Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved.
+ * 
+ * This software is the confidential and proprietary information of Sun
+ * Microsystems, Inc. ("Confidential Information").  You shall not
+ * disclose such Confidential Information and shall use it only in
+ * accordance with the terms of the license agreement you entered into
+ * with Sun.
+ * 
+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
+ * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
+ * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
+ * THIS SOFTWARE OR ITS DERIVATIVES.
+ * 
+ * CopyrightVersion 1.1_beta
+ * 
+ */
+
+package java.lang;
+
+import java.io.FileDescriptor;
+import java.util.Hashtable;
+import java.net.InetAddress;
+import java.lang.reflect.Member;
+
+/**
+ * The security manager is an abstract class that allows 
+ * applications to implement a security policy. It allows an 
+ * application to determine, before performing a possibly unsafe or 
+ * sensitive operation, what the operation is and whether the 
+ * operation is being performed by a class created via a class loader 
+ * rather than installed locally. Classes loaded via a class loader 
+ * (especially if they have been downloaded over a network) may be 
+ * less trustworthy than classes from files installed locally. The 
+ * application can allow or disallow the operation. 
+ * <p>
+ * The <code>SecurityManager</code> class contains many methods with 
+ * names that begin with the word <code>check</code>. These methods 
+ * are called by various methods in the Java libraries before those 
+ * methods perform certain potentially sensitive operations. The 
+ * invocation of such a check method typically looks like this: 
+ * <p><blockquote><pre>
+ *     SecurityManager security = System.getSecurityManager();
+ *     if (security != null) {
+ *         security.check</code><i>XXX</i><code>(argument, 
&nbsp;.&nbsp;.&nbsp;.&nbsp;);
+ *     }
+ * </pre></blockquote>
+ * <p>
+ * The security manager is thereby given an opportunity to prevent 
+ * completion of the operation by throwing an exception. A security 
+ * manager routine simply returns if the operation is permitted, but 
+ * throws a <code>SecurityException</code> if the operation is not 
+ * permitted. The only exception to this convention is 
+ * <code>checkTopLevelWindow</code>, which returns a 
+ * <code>boolean</code> value. 
+ * <p>
+ * The current security manager is set by the 
+ * <code>setSecurityManager</code> method in class 
+ * <code>System</code>. The current security manager is obtained 
+ * by the <code>getSecurityManager</code> method. 
+ * <p>
+ * The default implementation of each of the 
+ * <code>check</code><i>XXX</i> methods is to assume that the caller 
+ * does <i>not</i> have permission to perform the requested operation. 
+ *
+ * @author  Arthur van Hoff
+ * @version 1.46, 27 Jan 1997
+ * @see     java.lang.ClassLoader
+ * @see     java.lang.SecurityException
+ * @see     java.lang.SecurityManager#checkTopLevelWindow(java.lang.Object)
+ * @see     java.lang.System#getSecurityManager()
+ * @see     java.lang.System#setSecurityManager(java.lang.SecurityManager)
+ * @since   JDK1.0
+ */
+public abstract
+class SecurityManager {
+   /**
+     * This field is <code>true</code> if there is a security check in 
+     * progress; <code>false</code> otherwise. 
+     *
+     * @since   JDK1.0
+     */
+    protected boolean inCheck;
+
+    // Have we been initialized. Effective against finalizer attacks.
+    private boolean initialized = false;
+
+    /** 
+     * Tests if there is a security check in progress.
+     *
+     * @return  the value of the <code>inCheck</code> field. This field should
+     *          contain <code>true</code> if a security check is in progress;
+     *          <code>false</code> otherwise.
+     * @see     java.lang.SecurityManager#inCheck
+     * @since   JDK1.0
+     */
+    public boolean getInCheck() {
+       return inCheck;
+    }
+
+    /**
+     * Constructs a new <code>SecurityManager</code>. An application is 
+     * not allowed to create a new security manager if there is already a 
+     * current security manager. 
+     *
+     * @exception  SecurityException  if a security manager already exists.
+     * @see        java.lang.System#getSecurityManager()
+     * @since      JDK1.0
+     */
+    protected SecurityManager() {
+       // checkCreateSecurityManager(); ? REMIND
+       initialized = true;
+    }
+
+    /**
+     * Returns the current execution stack as an array of classes. 
+     * <p>
+     * The length of the array is the number of methods on the execution 
+     * stack. The element at index <code>0</code> is the class of the 
+     * currently executing method, the element at index <code>1</code> is 
+     * the class of that method's caller, and so on. 
+     *
+     * @return  the execution stack.
+     * @since   JDK1.0
+     */
+    protected native Class[] getClassContext();
+
+    /**
+     * Returns an object describing the most recent class loader executing
+     * on the stack. 
+     *
+     * @return  the class loader of the most recent occurrence on the stack
+     *          of a method from a class defined using a class loader;
+     *          returns <code>null</code> if there is no occurrence on the
+     *          stack of a method from a class defined using a class loader.
+     * @since   JDK1.0
+     */
+    protected native ClassLoader currentClassLoader();
+
+    /**
+     * Returns the current Class with a ClassLoader on the execution stack.
+     *
+     * @since   JDK1.1
+     */
+    protected Class currentLoadedClass() {
+       return currentLoadedClass0();   
+    }
+
+    /**
+     * Returns the stack depth of the specified class. 
+     *
+     * @param   name   the fully qualified name of the class to search for.
+     * @return  the depth on the stack frame of the first occurrence of a
+     *          method from a class with the specified name;
+     *          <code>-1</code> if such a frame cannot be found.
+     * @since   JDK1.0
+     */
+    protected native int classDepth(String name);
+
+    /**
+     * Returns the stack depth of the most recently executing method 
+     * from a class defined using a class loader. 
+     *
+     * @return  the depth on the stack frame of the most recent occurrence of a
+     *          method from a class defined using a class loader; returns
+     *          <code>-1</code> if there is no occurrence of a method from
+     *          a class defined using a class loader.
+     * @since   JDK1.0
+     */
+    protected native int classLoaderDepth();
+
+    /**
+     * Tests if the specified String is in this Class. 
+     *
+     * @param   name   the fully qualified name of the class.
+     * @return  <code>true</code> if a method from a class with the specified
+     *          name is on the execution stack; <code>false</code> otherwise.
+     * @since   JDK1.0
+     */
+    protected boolean inClass(String name) {
+       return classDepth(name) >= 0;
+    }
+
+    /**
+     * Tests if the current ClassLoader is equal to
+     * <code>null</code>.
+     *
+     * @return  <code>true</code> if a method from a class defined using a
+     *          class loader is on the execution stack.
+     * @since   JDK1.0
+     */
+    protected boolean inClassLoader() {
+       return currentClassLoader() != null;
+    }
+
+    /**
+     * Creates an object that encapsulates the current execution 
+     * environment. The result of this method is used by the 
+     * three-argument <code>checkConnect</code> method and by the 
+     * two-argument <code>checkRead</code> method. 
+     * <p>
+     * These methods are needed because a trusted method may be called 
+     * on to read a file or open a socket on behalf of another method. 
+     * The trusted method needs to determine if the other (possibly 
+     * untrusted) method would be allowed to perform the operation on its 
+     * own. 
+     *
+     * @return  an implementation-dependent object that encapsulates
+     *          sufficient information about the current execution environment
+     *          to perform some security checks later.
+     * @see     java.lang.SecurityManager#checkConnect(java.lang.String,
+     *            int, java.lang.Object)
+     * @see     java.lang.SecurityManager#checkRead(java.lang.String,
+     *            java.lang.Object)
+     * @since   JDK1.0
+     */
+    public Object getSecurityContext() {
+       return null;
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to create a new class loader. 
+     * <p>
+     * The <code>checkCreateClassLoader</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @exception  SecurityException  if the caller does not have permission
+     *             to create a new class loader.
+     * @see        java.lang.ClassLoader#ClassLoader()
+     * @since      JDK1.0
+     */
+    public void checkCreateClassLoader() {
+       throw new SecurityException();
+    }
+    
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to modify the thread argument. 
+     * <p>
+     * This method is invoked for the current security manager by the 
+     * <code>stop</code>, <code>suspend</code>, <code>resume</code>, 
+     * <code>setPriority</code>, <code>setName</code>, and 
+     * <code>setDaemon</code> methods of class <code>Thread</code>. 
+     * <p>
+     * The <code>checkAccess</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      g   the thread to be checked.
+
+     * @exception  SecurityException  if the caller does not have permission
+     *               to modify the thread.
+     * @see        java.lang.System#getSecurityManager()
+     * @see        java.lang.Thread#resume()
+     * @see        java.lang.Thread#setDaemon(boolean)
+     * @see        java.lang.Thread#setName(java.lang.String)
+     * @see        java.lang.Thread#setPriority(int)
+     * @see        java.lang.Thread#stop()
+     * @see        java.lang.Thread#suspend()
+     * @since      JDK1.0
+     */
+    public void checkAccess(Thread g) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to modify the thread group argument. 
+     * <p>
+     * This method is invoked for the current security manager when a 
+     * new child thread or child thread group is created, and by the 
+     * <code>setDaemon</code>, <code>setMaxPriority</code>, 
+     * <code>stop</code>, <code>suspend</code>, <code>resume</code>, and 
+     * <code>destroy</code> methods of class <code>ThreadGroup</code>. 
+     * <p>
+     * The <code>checkAccess</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      g   the thread group to be checked.
+     * @exception  SecurityException  if the caller does not have permission
+     *               to modify the thread group.
+     * @see        java.lang.System#getSecurityManager()
+     * @see        java.lang.ThreadGroup#destroy()
+     * @see        java.lang.ThreadGroup#resume()
+     * @see        java.lang.ThreadGroup#setDaemon(boolean)
+     * @see        java.lang.ThreadGroup#setMaxPriority(int)
+     * @see        java.lang.ThreadGroup#stop()
+     * @see        java.lang.ThreadGroup#suspend()
+     * @since      JDK1.0
+     */
+    public void checkAccess(ThreadGroup g) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to cause the Java Virtual Machine to 
+     * halt with the specified status code. 
+     * <p>
+     * This method is invoked for the current security manager by the 
+     * <code>exit</code> method of class <code>Runtime</code>. A status 
+     * of <code>0</code> indicates success; other values indicate various 
+     * errors. 
+     * <p>
+     * The <code>checkExit</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      status   the exit status.
+     * @exception  SecurityException  if the caller does not have permission
+     *               to halt the Java Virtual Machine with the specified 
status.
+     * @see        java.lang.Runtime#exit(int)
+     * @see        java.lang.System#getSecurityManager()
+     * @since      JDK1.0
+     */
+    public void checkExit(int status) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to create a subprocss. 
+     * <p>
+     * This method is invoked for the current security manager by the 
+     * <code>exec</code> methods of class <code>Runtime</code>.
+     * <p>
+     * The <code>checkExec</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      cmd   the specified system command.
+     * @exception  SecurityException  if the caller does not have permission
+     *               to create a subprocess.
+     * @see        java.lang.Runtime#exec(java.lang.String)
+     * @see        java.lang.Runtime#exec(java.lang.String, java.lang.String[])
+     * @see        java.lang.Runtime#exec(java.lang.String[])
+     * @see        java.lang.Runtime#exec(java.lang.String[],
+     *               java.lang.String[])
+     * @see        java.lang.System#getSecurityManager()
+     * @since      JDK1.0
+     */
+    public void checkExec(String cmd) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to dynamic link the library code 
+     * specified by the string argument file. The argument is either a 
+     * simple library name or a complete filename. 
+     * <p>
+     * This method is invoked for the current security manager by 
+     * methods <code>load</code> and <code>loadLibrary</code> of class 
+     * <code>Runtime</code>. 
+     * <p>
+     * The <code>checkLink</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      lib   the name of the library.
+     * @exception  SecurityException  if the caller does not have permission
+     *               to dynamically link the library.
+     * @see        java.lang.Runtime#load(java.lang.String)
+     * @see        java.lang.Runtime#loadLibrary(java.lang.String)
+     * @see        java.lang.System#getSecurityManager()
+     * @since      JDK1.0
+     */
+    public void checkLink(String lib) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to read from the specified file 
+     * descriptor. 
+     * <p>
+     * The <code>checkRead</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      fd   the system-dependent file descriptor.
+     * @exception  SecurityException  if the caller does not have permission
+     *               to access the specified file descriptor.
+     * @see        java.io.FileDescriptor
+     * @since      JDK1.0
+     */
+    public void checkRead(FileDescriptor fd) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to read the file specified by the 
+     * string argument. 
+     * <p>
+     * The <code>checkRead</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      file   the system-dependent file name.
+     * @exception  SecurityException  if the caller does not have permission
+     *               to access the specified file.
+     * @since   JDK1.0
+     */
+    public void checkRead(String file) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * specified security context is not allowed to read the file 
+     * specified by the string argument. The context must be a security 
+     * context returned by a previous call to 
+     * <code>getSecurityContext</code>. 
+     * <p>
+     * The <code>checkRead</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      file      the system-dependent filename.
+     * @param      context   a system-dependent security context.
+     * @exception  SecurityException  if the specified security context does
+     *               not have permission to read the specified file.
+     * @see        java.lang.SecurityManager#getSecurityContext()
+     * @since      JDK1.0
+     */
+    public void checkRead(String file, Object context) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to write to the specified file 
+     * descriptor. 
+     * <p>
+     * The <code>checkWrite</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      fd   the system-dependent file descriptor.
+     * @exception  SecurityException  if the caller does not have permission
+     *               to access the specified file descriptor.
+     * @see        java.io.FileDescriptor
+     * @since      JDK1.0
+     */
+    public void checkWrite(FileDescriptor fd) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to write to the file specified by 
+     * the string argument. 
+     * <p>
+     * The <code>checkWrite</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      file   the system-dependent filename.
+     * @exception  SecurityException  if the caller does not have permission
+     *               to access the specified file.
+     * @since   JDK1.0
+     */
+    public void checkWrite(String file) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to delete the specified file. 
+     * <p>
+     * This method is invoked for the current security manager by the 
+     * <code>delete</code> method of class <code>File</code>.
+     * <p>
+     * The <code>checkDelete</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      file   the system-dependent filename.
+     * @exception  SecurityException  if the caller does not have permission
+     *               to delete the file.
+     * @see        java.io.File#delete()
+     * @see        java.lang.System#getSecurityManager()
+     * @since      JDK1.0
+     */
+    public void checkDelete(String file) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to open a socket connection to the 
+     * specified host and port number. 
+     * <p>
+     * A port number of <code>-1</code> indicates that the calling 
+     * method is attempting to determine the IP address of the specified 
+     * host name. 
+     * <p>
+     * The <code>checkConnect</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      host   the host name port to connect to.
+     * @param      port   the protocol port to connect to.
+     * @exception  SecurityException  if the caller does not have permission
+     *               to open a socket connection to the specified
+     *               <code>host</code> and <code>port</code>.
+     * @since      JDK1.0
+     */
+    public void checkConnect(String host, int port) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * specified security context is not allowed to open a socket 
+     * connection to the specified host and port number. 
+     * <p>
+     * A port number of <code>-1</code> indicates that the calling 
+     * method is attempting to determine the IP address of the specified 
+     * host name. 
+     * <p>
+     * The <code>checkConnect</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      host      the host name port to connect to.
+     * @param      port      the protocol port to connect to.
+     * @param      context   a system-dependent security context.
+     * @exception  SecurityException  if the specified security context does
+     *               not have permission to open a socket connection to the
+     *               specified <code>host</code> and <code>port</code>.
+     * @see        java.lang.SecurityManager#getSecurityContext()
+     * @since      JDK1.0
+     */
+    public void checkConnect(String host, int port, Object context) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to wait for a connection request on 
+     * the specified local port number. 
+     * <p>
+     * The <code>checkListen</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      port   the local port.
+     * @exception  SecurityException  if the caller does not have permission
+     *               to listen on the specified port.
+     * @since   JDK1.0
+     */
+    public void checkListen(int port) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not permitted to accept a socket connection from 
+     * the specified host and port number. 
+     * <p>
+     * This method is invoked for the current security manager by the 
+     * <code>accept</code> method of class <code>ServerSocket</code>. 
+     * <p>
+     * The <code>checkAccept</code> method for class 
+     * <code>SecurityManager</code> always throws a
+     * <code>SecurityException</code>. 
+     *
+     * @param      host   the host name of the socket connection.
+     * @param      port   the port number of the socket connection.
+     * @exception  SecurityException  if the caller does not have permission
+     *               to accept the connection.
+     * @see        java.lang.System#getSecurityManager()
+     * @see        java.net.ServerSocket#accept()
+     * @since      JDK1.0
+     */
+    public void checkAccept(String host, int port) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Tests if current execution context is allowed to use
+     * (join/leave/send/receive) IP multicast.
+     *
+     * @param      multicast  Internet group address to be used.
+     * @exception  SecurityException  if a security error has occurred.
+     * @since      JDK1.1
+     */
+    public void checkMulticast(InetAddress maddr) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Tests to see if current execution context is allowed to use
+     * (join/leave/send/receive) IP multicast.
+     *
+     * @param      multicast  Internet group address to be used.
+     * @param      ttl        value in use, if it is multicast send.
+     * @exception  SecurityException  if a security error has occurred.
+     * @since      JDK1.1
+     */
+    public void checkMulticast(InetAddress maddr, byte ttl) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to access or modify the system 
+     * properties. 
+     * <p>
+     * This method is used by the <code>getProperties</code> and 
+     * <code>setProperties</code> methods of class <code>System</code>. 
+     * <p>
+     * The <code>checkPropertiesAccess</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @exception  SecurityException  if the caller does not have permission
+     *               to access or modify the system properties.
+     * @see        java.lang.System#getProperties()
+     * @see        java.lang.System#setProperties(java.util.Properties)
+     * @since      JDK1.0
+     */
+    public void checkPropertiesAccess() {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to access the system property with 
+     * the specified <code>key</code> name. 
+     * <p>
+     * This method is used by the <code>getProperty</code> method of 
+     * class <code>System</code>. 
+     * <p>
+     * The <code>checkPropertiesAccess</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      key   a system property key.
+     * @exception  SecurityException  if the caller does not have permission
+     *               to access the specified system property.
+     * @see        java.lang.System#getProperty(java.lang.String)
+     * @since      JDK1.0
+     */
+    public void checkPropertyAccess(String key) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Returns <code>false</code> if the calling 
+     * thread is not trusted to bring up the top-level window indicated 
+     * by the <code>window</code> argument. In this case, the caller can 
+     * still decide to show the window, but the window should include 
+     * some sort of visual warning. If the method returns 
+     * <code>true</code>, then the window can be shown without any 
+     * special restrictions. 
+     * <p>
+     * See class <code>Window</code> for more information on trusted and 
+     * untrusted windows. 
+     * <p>
+     * The <code>checkSetFactory</code> method for class 
+     * <code>SecurityManager</code> always returns <code>false</code>. 
+     *
+     * @param      window   the new window that is being created.
+     * @return     <code>true</code> if the caller is trusted to put up
+     *             top-level windows; <code>false</code> otherwise.
+     * @exception  SecurityException  if creation is disallowed entirely.
+     * @see        java.awt.Window
+     * @since      JDK1.0
+     */
+    public boolean checkTopLevelWindow(Object window) {
+       return false;
+    }
+
+    /**
+     * Tests if a client can initiate a print job request.
+     *
+     * @since   JDK1.1
+     */
+    public void checkPrintJobAccess() {
+      throw new SecurityException();
+    }
+
+    /**
+     * Tests if a client can get access to the system clipboard.
+     *
+     * @since   JDK1.1
+     */
+    public void checkSystemClipboardAccess() {
+      throw new SecurityException();
+    }
+
+    /**
+     * Tests if a client can get access to the AWT event queue.
+     *
+     * @since   JDK1.1
+     */
+    public void checkAwtEventQueueAccess() {
+      throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to access the package specified by 
+     * the argument. 
+     * <p>
+     * This method is used by the <code>loadClass</code> method of class 
+     * loaders. 
+     * <p>
+     * The <code>checkPackageAccess</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      pkg   the package name.
+     * @exception  SecurityException  if the caller does not have permission
+     *               to access the specified package.
+     * @see        java.lang.ClassLoader#loadClass(java.lang.String, boolean)
+     * @since      JDK1.0
+     */
+    public void checkPackageAccess(String pkg) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to define classes in the package 
+     * specified by the argument. 
+     * <p>
+     * This method is used by the <code>loadClass</code> method of some 
+     * class loaders. 
+     * <p>
+     * The <code>checkPackageDefinition</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @param      pkg   the package name.
+     * @exception  SecurityException  if the caller does not have permission
+     *               to define classes in the specified package.
+     * @see        java.lang.ClassLoader#loadClass(java.lang.String, boolean)
+     * @since      JDK1.0
+     */
+    public void checkPackageDefinition(String pkg) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Throws a <code>SecurityException</code> if the 
+     * calling thread is not allowed to set the socket factory used by 
+     * <code>ServerSocket</code> or <code>Socket</code>, or the stream 
+     * handler factory used by <code>URL</code>. 
+     * <p>
+     * The <code>checkSetFactory</code> method for class 
+     * <code>SecurityManager</code> always throws a 
+     * <code>SecurityException</code>. 
+     *
+     * @exception  SecurityException  if the caller does not have permission
+     *               to specify a socket factory or a stream handler factory.
+     * @see        java.net.ServerSocket#setSocketFactory(
+     *                                               
java.net.SocketImplFactory)
+     * @see        java.net.Socket#setSocketImplFactory(
+     *                                               
java.net.SocketImplFactory)
+     * @see        java.net.URL#setURLStreamHandlerFactory(
+     *                                         
java.net.URLStreamHandlerFactory)
+     * @since      JDK1.0
+     */
+    public void checkSetFactory() {
+       throw new SecurityException();
+    }
+
+    /**
+     * Tests if a client is allowed to access members. If access is
+     * denied, throw a SecurityException.
+     * The default policy is to deny all accesses.
+     *
+     * @since JDK1.1
+     */
+    public void checkMemberAccess(Class clazz, int which) {
+       throw new SecurityException();
+    }
+
+    /**
+     * Tests access to certain operations for a security API
+     * action.
+     *
+     * @since   JDK1.1
+     */
+    public void checkSecurityAccess(String action) {
+       throw new SecurityException();
+    }
+
+    private native Class currentLoadedClass0();
+
+    /**
+     * Returns the thread group into which to instantiate any new
+     * thread being created at the time this is being called.
+     * By default, it returns the thread group of the current
+     * thread. This should be overriden by specific security
+     * manager to return the appropriate thread group.
+     *
+     * @since   JDK1.1
+     */
+    public ThreadGroup getThreadGroup() {
+       return Thread.currentThread().getThreadGroup();
+    }
+
+}      
+
+class NullSecurityManager extends SecurityManager {
+    public void checkCreateClassLoader() { } 
+    public void checkAccess(Thread g) { }
+    public void checkAccess(ThreadGroup g) { }
+    public void checkExit(int status) { }
+    public void checkExec(String cmd) { }
+    public void checkLink(String lib) { }
+    public void checkRead(FileDescriptor fd) { }
+    public void checkRead(String file) { }
+    public void checkRead(String file, Object context) { }
+    public void checkWrite(FileDescriptor fd) { }
+    public void checkWrite(String file) { }
+    public void checkDelete(String file) { }
+    public void checkConnect(String host, int port) { }
+    public void checkConnect(String host, int port, Object context) { }
+    public void checkListen(int port) { }
+    public void checkAccept(String host, int port) { }
+    public void checkMulticast(InetAddress maddr) { }
+    public void checkMulticast(InetAddress maddr, byte ttl) { }
+    public void checkPropertiesAccess() { }
+    public void checkPropertyAccess(String key) { }
+    public void checkPropertyAccess(String key, String def) { }
+    public boolean checkTopLevelWindow(Object window) { return true; }
+    public void checkPrintJobAccess() { }
+    public void checkSystemClipboardAccess() { }
+    public void checkAwtEventQueueAccess() { }
+    public void checkPackageAccess(String pkg) { }
+    public void checkPackageDefinition(String pkg) { }
+    public void checkSetFactory() { }
+    public void checkMemberAccess(Class clazz, int which) { }
+    public void checkSecurityAccess(String provider) { }
+}      
diff --git a/test/etags/java-src/SysCol.java b/test/etags/java-src/SysCol.java
new file mode 100644
index 0000000..5356442
--- /dev/null
+++ b/test/etags/java-src/SysCol.java
@@ -0,0 +1,381 @@
+/*
+ * @(#)SystemColor.java        1.5 97/01/27
+ * 
+ * Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved.
+ * 
+ * This software is the confidential and proprietary information of Sun
+ * Microsystems, Inc. ("Confidential Information").  You shall not
+ * disclose such Confidential Information and shall use it only in
+ * accordance with the terms of the license agreement you entered into
+ * with Sun.
+ * 
+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
+ * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
+ * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
+ * THIS SOFTWARE OR ITS DERIVATIVES.
+ * 
+ * CopyrightVersion 1.1_beta
+ * 
+ */
+package java.awt;
+
+/**
+ * A class to encapsulate symbolic colors representing the color
+ * of GUI objects on a system.  For systems which support the dynamic
+ * update of the system colors (when the user changes the colors)
+ * the actual RGB values of these symbolic colors will also change
+ * dynamically.  In order to compare the "current" RGB value of a SystemColor
+ * object with a non-symbolic Color object, getRGB() should be used
+ * rather than equals(). 
+ *
+ * @version    1.5, 27 Jan 1997
+ * @author     Carl Quinn
+ * @author      Amy Fowler
+ */
+public final class SystemColor extends Color implements java.io.Serializable {
+
+    /**
+     * The array index for the desktop background color.
+     */
+    public final static int DESKTOP = 0;
+
+    /**
+     * The array index for the active caption background color.
+     */
+    public final static int ACTIVE_CAPTION = 1;
+
+    /**
+     * The array index for the action caption text color.
+     */
+    public final static int ACTIVE_CAPTION_TEXT = 2;
+
+    /**
+     * The array index for the active caption border color.
+     */
+    public final static int ACTIVE_CAPTION_BORDER = 3;
+
+    /**
+     * The array index for the inactive caption background color.
+     */
+    public final static int INACTIVE_CAPTION = 4;
+
+    /**
+     * The array index for the inactive caption text color.
+     */
+    public final static int INACTIVE_CAPTION_TEXT = 5;
+
+    /**
+     * The array index for the inactive caption border color.
+     */
+    public final static int INACTIVE_CAPTION_BORDER = 6;
+
+    /**
+     * The array index for the window background color.
+     */
+    public final static int WINDOW = 7;
+
+    /**
+     * The array index for the window border color.
+     */
+    public final static int WINDOW_BORDER = 8;
+
+    /**
+     * The array index for the window text color.
+     */
+    public final static int WINDOW_TEXT = 9;
+
+    /**
+     * The array index for the menu background color.
+     */
+    public final static int MENU = 10;
+
+    /**
+     * The array index for the menu text color.
+     */
+    public final static int MENU_TEXT = 11;
+
+    /**
+     * The array index for the text background color.
+     */
+    public final static int TEXT = 12;
+
+    /**
+     * The array index for the text text color.
+     */
+    public final static int TEXT_TEXT = 13;
+
+    /**
+     * The array index for the text highlight color.
+     */
+    public final static int TEXT_HIGHLIGHT = 14;
+
+    /**
+     * The array index for the text highlight text color.
+     */
+    public final static int TEXT_HIGHLIGHT_TEXT = 15;
+
+    /**
+     * The array index for the text inactive text color.
+     */
+    public final static int TEXT_INACTIVE_TEXT = 16;
+
+    /**
+     * The array index for the control background color.
+     */
+    public final static int CONTROL = 17;
+
+    /**
+     * The array index for the control text color.
+     */
+    public final static int CONTROL_TEXT = 18;
+
+    /**
+     * The array index for the control highlight color.
+     */
+    public final static int CONTROL_HIGHLIGHT = 19;
+
+    /**
+     * The array index for the control light highlight color.
+     */
+    public final static int CONTROL_LT_HIGHLIGHT = 20;
+
+    /**
+     * The array index for the control shadow color.
+     */
+    public final static int CONTROL_SHADOW = 21;
+
+    /**
+     * The array index for the control dark shadow color.
+     */
+    public final static int CONTROL_DK_SHADOW = 22;
+
+    /**
+     * The array index for the scrollbar background color.
+     */
+    public final static int SCROLLBAR = 23;
+
+    /**
+     * The array index for the info background color.
+     */
+    public final static int INFO = 24;
+
+    /**
+     * The array index for the info text color.
+     */
+    public final static int INFO_TEXT = 25;
+
+    /**
+     * The number of system colors in the array.
+     */
+    public final static int NUM_COLORS = 26;
+    
+   /**
+     * The color of the desktop background.
+     */
+    public final static SystemColor desktop = new SystemColor((byte)DESKTOP);
+
+    /**
+     * The background color for captions in window borders.
+     */
+    public final static SystemColor activeCaption = new 
SystemColor((byte)ACTIVE_CAPTION);
+
+    /**
+     * The text color for captions in window borders.
+     */
+    public final static SystemColor activeCaptionText = new 
SystemColor((byte)ACTIVE_CAPTION_TEXT);
+
+    /**
+     * The border color for captions in window borders.
+     */
+    public final static SystemColor activeCaptionBorder = new 
SystemColor((byte)ACTIVE_CAPTION_BORDER);
+
+    /**
+     * The background color for inactive captions in window borders.
+     */
+    public final static SystemColor inactiveCaption = new 
SystemColor((byte)INACTIVE_CAPTION);
+
+    /**
+     * The text color for inactive captions in window borders.
+     */
+    public final static SystemColor inactiveCaptionText = new 
SystemColor((byte)INACTIVE_CAPTION_TEXT);
+
+    /**
+     * The border color for inactive captios in window borders.
+     */
+    public final static SystemColor inactiveCaptionBorder = new 
SystemColor((byte)INACTIVE_CAPTION_BORDER);
+
+    /**
+     * The background color for windows.
+     */
+    public final static SystemColor window = new SystemColor((byte)WINDOW);
+
+    /**
+     * The border color for windows.
+     */
+    public final static SystemColor windowBorder = new 
SystemColor((byte)WINDOW_BORDER);
+
+    /**
+     * The text color for windows.
+     */
+    public final static SystemColor windowText = new 
SystemColor((byte)WINDOW_TEXT);
+
+    /**
+     * The background color for menus.
+     */
+    public final static SystemColor menu = new SystemColor((byte)MENU);
+
+    /**
+     * The text color for menus.
+     */
+    public final static SystemColor menuText = new 
SystemColor((byte)MENU_TEXT);
+
+    /**
+     * The background color for text components.
+     */
+    public final static SystemColor text = new SystemColor((byte)TEXT);
+
+    /**
+     * The text color for text components.
+     */
+    public final static SystemColor textText = new 
SystemColor((byte)TEXT_TEXT);
+
+    /**
+     * The background color for highlighted text.
+     */
+    public final static SystemColor textHighlight = new 
SystemColor((byte)TEXT_HIGHLIGHT);
+
+    /**
+     * The text color for highlighted text.
+     */
+    public final static SystemColor textHighlightText = new 
SystemColor((byte)TEXT_HIGHLIGHT_TEXT);
+
+    /**
+     * The text color for inactive text.
+     */
+    public final static SystemColor textInactiveText = new 
SystemColor((byte)TEXT_INACTIVE_TEXT);
+
+    /**
+     * The background color for control objects.
+     */
+    public final static SystemColor control = new SystemColor((byte)CONTROL);
+
+    /**
+     * The text color for control objects.
+     */
+    public final static SystemColor controlText = new 
SystemColor((byte)CONTROL_TEXT);
+
+    /**
+     * The light highlight color for control objects.
+     */
+    public final static SystemColor controlHighlight = new 
SystemColor((byte)CONTROL_HIGHLIGHT);
+
+    /**
+     * The regular highlight color for control objects.
+     */
+    public final static SystemColor controlLtHighlight = new 
SystemColor((byte)CONTROL_LT_HIGHLIGHT);
+
+    /**
+     * The regular shadow color for control objects.
+     */
+    public final static SystemColor controlShadow = new 
SystemColor((byte)CONTROL_SHADOW);
+
+    /**
+     * The dark shadow color for control objects.
+     */
+    public final static SystemColor controlDkShadow = new 
SystemColor((byte)CONTROL_DK_SHADOW);
+
+    /**
+     * The background color for scrollbars.
+     */
+    public final static SystemColor scrollbar = new 
SystemColor((byte)SCROLLBAR);
+
+    /**
+     * The background color for info(help) text.
+     */
+    public final static SystemColor info = new SystemColor((byte)INFO);
+
+    /**
+     * The text color for info(help) text.
+     */
+    public final static SystemColor infoText = new 
SystemColor((byte)INFO_TEXT);
+
+    /*
+     * System colors with default initial values, overwritten by toolkit if 
+     * system values differ and are available.
+     */
+    private static int[] systemColors = {
+        0xFF005C5C,  // desktop = new Color(0,92,92);
+        0xFF000080,  // activeCaption = new Color(0,0,128);
+        0xFFFFFFFF,  // activeCaptionText = Color.white;
+        0xFFC0C0C0,  // activeCaptionBorder = Color.lightGray;
+        0xFF808080,  // inactiveCaption = Color.gray;
+        0xFFC0C0C0,  // inactiveCaptionText = Color.lightGray;
+        0xFFC0C0C0,  // inactiveCaptionBorder = Color.lightGray;
+        0xFFFFFFFF,  // window = Color.white;
+        0xFF000000,  // windowBorder = Color.black;
+        0xFF000000,  // windowText = Color.black;
+        0xFFC0C0C0,  // menu = Color.lightGray;
+        0xFF000000,  // menuText = Color.black;
+        0xFFC0C0C0,  // text = Color.lightGray;
+        0xFF000000,  // textText = Color.black;
+        0xFF000080,  // textHighlight = new Color(0,0,128);
+        0xFFFFFFFF,  // textHighlightText = Color.white;
+        0xFF808080,  // textInactiveText = Color.gray;
+        0xFFC0C0C0,  // control = Color.lightGray;
+        0xFF000000,  // controlText = Color.black;
+        0xFFFFFFFF,  // controlHighlight = Color.white;
+        0xFFE0E0E0,  // controlLtHighlight = new Color(224,224,224);
+        0xFF808080,  // controlShadow = Color.gray;
+        0xFF000000,  // controlDkShadow = Color.black;
+        0xFFE0E0E0,  // scrollbar = new Color(224,224,224);
+        0xFFE0E000,  // info = new Color(224,224,0);
+        0xFF000000,  // infoText = Color.black;
+    };
+
+    /*
+     * JDK 1.1 serialVersionUID 
+     */
+    private static final long serialVersionUID = 4503142729533789064L;
+
+    static {
+      updateSystemColors();
+    }
+
+    /**
+     * called from <init> & toolkit to update the above systemColors cache
+     */
+    private static void updateSystemColors() {
+      Toolkit.getDefaultToolkit().loadSystemColors(systemColors);
+    }
+
+    /**
+     * Create a symbolic color that represents an indexed entry into system
+     * color cache. Used by above static system colors.
+     */
+    private SystemColor(byte index) {
+        super(0, 0, 0);
+       value = index;
+    }
+
+    /**
+     * Gets the "current" RGB value representing the symbolic color.
+     * (Bits 24-31 are 0xff, 16-23 are red, 8-15 are green, 0-7 are blue).
+     * @see java.awt.image.ColorModel#getRGBdefault
+     * @see #getRed
+     * @see #getGreen
+     * @see #getBlue
+     */
+    public int getRGB() {
+       return systemColors[value];
+    }
+
+    /**
+     * Returns the String representation of this Color's values.
+     */
+    public String toString() {
+        return getClass().getName() + "[i=" + (value) + "]";
+    }
+
+}
diff --git a/test/etags/java-src/TG.java b/test/etags/java-src/TG.java
new file mode 100644
index 0000000..707c2fc
--- /dev/null
+++ b/test/etags/java-src/TG.java
@@ -0,0 +1,840 @@
+/*
+ * @(#)ThreadGroup.java        1.31 97/01/20
+ * 
+ * Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved.
+ * 
+ * This software is the confidential and proprietary information of Sun
+ * Microsystems, Inc. ("Confidential Information").  You shall not
+ * disclose such Confidential Information and shall use it only in
+ * accordance with the terms of the license agreement you entered into
+ * with Sun.
+ * 
+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
+ * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
+ * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
+ * THIS SOFTWARE OR ITS DERIVATIVES.
+ * 
+ * CopyrightVersion 1.1_beta
+ * 
+ */
+
+package java.lang;
+
+import java.io.PrintStream;
+import sun.misc.VM;
+
+/**
+ * A thread group represents a set of threads. In addition, a thread 
+ * group can also include other thread groups. The thread groups form 
+ * a tree in which every thread group except the initial thread group 
+ * has a parent. 
+ * <p>
+ * A thread is allowed to access information about its own thread 
+ * group, but not to access information about its thread group's 
+ * parent thread group or any other thread groups. 
+ *
+ * @author  unascribed
+ * @version 1.31, 20 Jan 1997
+ * @since   JDK1.0
+ */
+/* The locking strategy for this code is to try to lock only one level of the
+ * tree wherever possible, but otherwise to lock from the bottom up.
+ * That is, from child thread groups to parents.
+ * This has the advantage of limiting the number of locks that need to be held
+ * and in particular avoids having to grab the lock for the root thread group,
+ * (or a global lock) which would be a source of contention on a 
+ * multi-processor system with many thread groups.
+ * This policy often leads to taking a snapshot of the state of a thread group
+ * and working off of that snapshot, rather than holding the thread group 
locked
+ * while we work on the children.
+ */
+public
+class ThreadGroup {
+    ThreadGroup parent;
+    String name;
+    int maxPriority;
+    boolean destroyed;
+    boolean daemon;
+    boolean vmAllowSuspension;
+
+    int nthreads;
+    Thread threads[];
+
+    int ngroups;
+    ThreadGroup groups[];
+
+    /**
+     * Creates an empty Thread group that is not in any Thread group. 
+     * This method is used to create the system Thread group.
+     */
+    private ThreadGroup() {    // called from C code
+       this.name = "system";
+       this.maxPriority = Thread.MAX_PRIORITY;
+    }
+
+    /**
+     * Constructs a new thread group. The parent of this new group is 
+     * the thread group of the currently running thread. 
+     *
+     * @param   name   the name of the new thread group.
+     * @since   JDK1.0
+     */
+    public ThreadGroup(String name) {
+       this(Thread.currentThread().getThreadGroup(), name);
+    }
+
+    /**
+     * Creates a new thread group. The parent of this new group is the 
+     * specified thread group. 
+     * <p>
+     * The <code>checkAccess</code> method of the parent thread group is 
+     * called with no arguments; this may result in a security exception. 
+     *
+     * @param     parent   the parent thread group.
+     * @param     name     the name of the new thread group.
+     * @exception  NullPointerException  if the thread group argument is
+     *               <code>null</code>.
+     * @exception  SecurityException  if the current thread cannot create a
+     *               thread in the specified thread group.
+     * @see     java.lang.SecurityException
+     * @see     java.lang.ThreadGroup#checkAccess()
+     * @since   JDK1.0
+     */
+    public ThreadGroup(ThreadGroup parent, String name) {
+       if (parent == null) {
+           throw new NullPointerException();
+       }
+       parent.checkAccess();
+       this.name = name;
+       this.maxPriority = parent.maxPriority;
+       this.daemon = parent.daemon;
+       this.vmAllowSuspension = parent.vmAllowSuspension;
+       this.parent = parent;
+       parent.add(this);
+    }
+
+    /**
+     * Returns the name of this thread group.
+     *
+     * @return  the name of this thread group.
+     * @since   JDK1.0
+     */
+    public final String getName() {
+       return name;
+    }
+
+    /**
+     * Returns the parent of this thread group.
+     *
+     * @return  the parent of this thread group. The top-level thread group
+     *          is the only thread group whose parent is <code>null</code>.
+     * @since   JDK1.0
+     */
+    public final ThreadGroup getParent() {
+       return parent;
+    }
+
+    /**
+     * Returns the maximum priority of this thread group. Threads that are
+     * part of this group cannot have a higher priority than the maximum
+     * priority.
+     *
+     * @return  the maximum priority that a thread in this thread group
+     *          can have.
+     * @since   JDK1.0
+     */
+    public final int getMaxPriority() {
+       return maxPriority;
+    }
+
+    /**
+     * Tests if this thread group is a daemon thread group. A 
+     * daemon thread group is automatically destroyed when its last 
+     * thread is stopped or its last thread group is destroyed. 
+     *
+     * @return  <code>true</code> if this thread group is a daemon thread 
group;
+     *          <code>false</code> otherwise.
+     * @since   JDK1.0
+     */
+    public final boolean isDaemon() {
+       return daemon;
+    }
+
+    /**
+     * Tests if this thread group has not been destroyed.
+     *
+     * @since   JDK1.1
+     */
+    public synchronized boolean isDestroyed() {
+       return destroyed;
+    }
+
+    /**
+     * Changes the daemon status of this thread group.
+     * <p>
+     * First, the <code>checkAccess</code> method of this thread group is 
+     * called with no arguments; this may result in a security exception. 
+     * <p>
+     * A daemon thread group is automatically destroyed when its last 
+     * thread is stopped or its last thread group is destroyed. 
+     *
+     * @param      daemon   if <code>true</code>, marks this thread group as
+     *                      a daemon thread group; otherwise, marks this
+     *                      thread group as normal.
+     * @exception  SecurityException  if the current thread cannot modify
+     *               this thread.
+     * @see        java.lang.SecurityException
+     * @see        java.lang.ThreadGroup#checkAccess()
+     * @since      JDK1.0
+     */
+    public final void setDaemon(boolean daemon) {
+       checkAccess();
+       this.daemon = daemon;
+    }
+
+    /**
+     * Sets the maximum priority of the group. 
+     * <p>
+     * First, the <code>checkAccess</code> method of this thread group is 
+     * called with no arguments; this may result in a security exception. 
+     * <p>
+     * Threads in the thread group that already have a higher priority 
+     * are not affected. 
+     *
+     * @param      pri   the new priority of the thread group.
+     * @exception  SecurityException  if the current thread cannot modify
+     *               this thread group.
+     * @see        java.lang.SecurityException
+     * @see        java.lang.ThreadGroup#checkAccess()
+     * @since      JDK1.0
+     */
+    public final void setMaxPriority(int pri) {
+       int ngroupsSnapshot;
+       ThreadGroup[] groupsSnapshot;
+       synchronized (this) {
+           checkAccess();
+           if (pri < Thread.MIN_PRIORITY) {
+               maxPriority = Thread.MIN_PRIORITY;
+           } else if (pri < maxPriority) {
+               maxPriority = pri;
+           }
+           ngroupsSnapshot = ngroups;
+           if (groups != null) {
+               groupsSnapshot = new ThreadGroup[ngroupsSnapshot];
+               System.arraycopy(groups, 0, groupsSnapshot, 0, ngroupsSnapshot);
+           } else {
+               groupsSnapshot = null;
+           }
+       }
+       for (int i = 0 ; i < ngroupsSnapshot ; i++) {
+           groupsSnapshot[i].setMaxPriority(pri);
+       }
+    }
+
+    /**
+     * Tests if this thread group is either the thread group 
+     * argument or one of its ancestor thread groups. 
+     *
+     * @param   g   a thread group.
+     * @return  <code>true</code> if this thread group is the thread group
+     *          argument or one of its ancestor thread groups;
+     *          <code>false</code> otherwise.
+     * @since   JDK1.0
+     */
+    public final boolean parentOf(ThreadGroup g) {
+       for (; g != null ; g = g.parent) {
+           if (g == this) {
+               return true;
+           }
+       }
+       return false;
+    }
+
+    /**
+     * Determines if the currently running thread has permission to 
+     * modify this thread group. 
+     * <p>
+     * If there is a security manager, its <code>checkAccess</code> method 
+     * is called with this thread group as its argument. This may result 
+     * in throwing a <code>SecurityException</code>. 
+     *
+     * @exception  SecurityException  if the current thread is not allowed to
+     *               access this thread group.
+     * @see        java.lang.SecurityManager#checkAccess(java.lang.ThreadGroup)
+     * @since      JDK1.0
+     */
+    public final void checkAccess() {
+       SecurityManager security = System.getSecurityManager();
+       if (security != null) {
+           security.checkAccess(this);
+       }
+    }
+
+    /**
+     * Returns an estimate of the number of active threads in this
+     * thread group.
+     *
+     * @return  the number of active threads in this thread group and in any
+     *          other thread group that has this thread group as an ancestor.
+     * @since   JDK1.0
+     */
+    public int activeCount() {
+       int result;
+       // Snapshot sub-group data so we don't hold this lock
+       // while our children are computing.
+       int ngroupsSnapshot;
+       ThreadGroup[] groupsSnapshot;
+       synchronized (this) {
+           if (destroyed) {
+               return 0;
+           }
+           result = nthreads;
+           ngroupsSnapshot = ngroups;
+           if (groups != null) {
+               groupsSnapshot = new ThreadGroup[ngroupsSnapshot];
+               System.arraycopy(groups, 0, groupsSnapshot, 0, ngroupsSnapshot);
+           } else {
+               groupsSnapshot = null;
+           }
+       }
+       for (int i = 0 ; i < ngroupsSnapshot ; i++) {
+           result += groupsSnapshot[i].activeCount();
+       }
+       return result;
+    }
+
+    /**
+     * Copies into the specified array every active thread in this 
+     * thread group and its subgroups. 
+     * <p>
+     * An application should use the <code>activeCount</code> method to 
+     * get an estimate of how big the array should be. If the array is 
+     * too short to hold all the threads, the extra threads are silently 
+     * ignored. 
+     *
+     * @param   list   an array into which to place the list of threads.
+     * @return  the number of threads put into the array.
+     * @see     java.lang.ThreadGroup#activeCount()
+     * @since   JDK1.0
+     */
+    public int enumerate(Thread list[]) {
+       return enumerate(list, 0, true);
+    }
+
+    /**
+     * Copies into the specified array every active thread in this 
+     * thread group. If the <code>recurse</code> flag is 
+     * <code>true</code>, references to every active thread in this 
+     * thread's subgroups are also included. If the array is too short to 
+     * hold all the threads, the extra threads are silently ignored. 
+     * <p>
+     * An application should use the <code>activeCount</code> method to 
+     * get an estimate of how big the array should be. 
+     *
+     * @param   list      an array into which to place the list of threads.
+     * @param   recurse   a flag indicating whether also to include threads
+     *                    in thread groups that are subgroups of this
+     *                    thread group.
+     * @return  the number of threads placed into the array.
+     * @see     java.lang.ThreadGroup#activeCount()
+     * @since   JDK1.0
+     */
+    public int enumerate(Thread list[], boolean recurse) {
+       return enumerate(list, 0, recurse);
+    }
+
+    private int enumerate(Thread list[], int n, boolean recurse) {
+       int ngroupsSnapshot = 0;
+       ThreadGroup[] groupsSnapshot = null;
+       synchronized (this) {
+           if (destroyed) {
+               return 0;
+           }
+           int nt = nthreads;
+           if (nt > list.length - n) {
+               nt = list.length - n;
+           }
+           if (nt > 0) {
+               System.arraycopy(threads, 0, list, n, nt);
+               n += nt;
+           }
+           if (recurse) {
+               ngroupsSnapshot = ngroups;
+               if (groups != null) {
+                   groupsSnapshot = new ThreadGroup[ngroupsSnapshot];
+                   System.arraycopy(groups, 0, groupsSnapshot, 0, 
ngroupsSnapshot);
+               } else {
+                   groupsSnapshot = null;
+               }
+           }
+       }
+       if (recurse) {
+           for (int i = 0 ; i < ngroupsSnapshot ; i++) {
+               n = groupsSnapshot[i].enumerate(list, n, true);
+           }
+       }
+       return n;
+    }
+
+    /**
+     * Returns an estimate of the number of active groups in this
+     * thread group.
+     *
+     * @return  the number of active thread groups with this thread group as
+     *          an ancestor.
+     * @since   JDK1.0
+     */
+    public int activeGroupCount() {
+       int ngroupsSnapshot;
+       ThreadGroup[] groupsSnapshot;
+       synchronized (this) {
+           if (destroyed) {
+               return 0;
+           }
+           ngroupsSnapshot = ngroups;
+           if (groups != null) {
+               groupsSnapshot = new ThreadGroup[ngroupsSnapshot];
+               System.arraycopy(groups, 0, groupsSnapshot, 0, ngroupsSnapshot);
+           } else {
+               groupsSnapshot = null;
+           }
+       }
+       int n = ngroupsSnapshot;
+       for (int i = 0 ; i < ngroupsSnapshot ; i++) {
+           n += groupsSnapshot[i].activeGroupCount();
+       }
+       return n;
+    }
+
+    /**
+     * Copies into the specified array references to every active 
+     * subgroup in this thread group. 
+     * <p>
+     * An application should use the <code>activeGroupCount</code> 
+     * method to get an estimate of how big the array should be. If the 
+     * array is too short to hold all the thread groups, the extra thread 
+     * groups are silently ignored. 
+     *
+     * @param   list   an array into which to place the list of thread groups.
+     * @return  the number of thread groups put into the array.
+     * @see     java.lang.ThreadGroup#activeGroupCount()
+     * @since   JDK1.0
+     */
+    public int enumerate(ThreadGroup list[]) {
+       return enumerate(list, 0, true);
+    }
+
+    /**
+     * Copies into the specified array references to every active 
+     * subgroup in this thread group. If the <code>recurse</code> flag is 
+     * <code>true</code>, references to all active subgroups of the 
+     * subgroups and so forth are also included. 
+     * <p>
+     * An application should use the <code>activeGroupCount</code> 
+     * method to get an estimate of how big the array should be. 
+     *
+     * @param   list      an array into which to place the list of threads.
+     * @param   recurse   a flag indicating whether to recursively enumerate
+     *                    all included thread groups.
+     * @return  the number of thread groups put into the array.
+     * @see     java.lang.ThreadGroup#activeGroupCount()
+     * @since   JDK1.0
+     */
+    public int enumerate(ThreadGroup list[], boolean recurse) {
+       return enumerate(list, 0, recurse);
+    }
+
+    private int enumerate(ThreadGroup list[], int n, boolean recurse) {
+       int ngroupsSnapshot = 0;
+       ThreadGroup[] groupsSnapshot = null;
+       synchronized (this) {
+           if (destroyed) {
+               return 0;
+           }
+           int ng = ngroups;
+           if (ng > list.length - n) {
+               ng = list.length - n;
+           }
+           if (ng > 0) {
+               System.arraycopy(groups, 0, list, n, ng);
+               n += ng;
+           }
+           if (recurse) {
+               ngroupsSnapshot = ngroups;
+               if (groups != null) {
+                   groupsSnapshot = new ThreadGroup[ngroupsSnapshot];
+                   System.arraycopy(groups, 0, groupsSnapshot, 0, 
ngroupsSnapshot);
+               } else {
+                   groupsSnapshot = null;
+               }
+           }
+       }
+       if (recurse) {
+           for (int i = 0 ; i < ngroupsSnapshot ; i++) {
+               n = groupsSnapshot[i].enumerate(list, n, true);
+           }
+       }
+       return n;
+    }
+
+    /**
+     * Stops all processes in this thread group. 
+     * <p>
+     * First, the <code>checkAccess</code> method of this thread group is 
+     * called with no arguments; this may result in a security exception. 
+     * <p>
+     * This method then calls the <code>stop</code> method on all the 
+     * threads in this thread group and in all of its subgroups. 
+     *
+     * @exception  SecurityException  if the current thread is not allowed
+     *               to access this thread group or any of the threads in
+     *               the thread group.
+     * @see        java.lang.SecurityException
+     * @see        java.lang.Thread#stop()
+     * @see        java.lang.ThreadGroup#checkAccess()
+     * @since      JDK1.0
+     */
+    public final void stop() {
+       int ngroupsSnapshot;
+       ThreadGroup[] groupsSnapshot;
+       synchronized (this) {
+           checkAccess();
+           for (int i = 0 ; i < nthreads ; i++) {
+               threads[i].stop();
+           }
+           ngroupsSnapshot = ngroups;
+           if (groups != null) {
+               groupsSnapshot = new ThreadGroup[ngroupsSnapshot];
+               System.arraycopy(groups, 0, groupsSnapshot, 0, ngroupsSnapshot);
+           } else {
+               groupsSnapshot = null;
+           }
+       }
+       for (int i = 0 ; i < ngroupsSnapshot ; i++) {
+           groupsSnapshot[i].stop();
+       }
+    }
+
+    /**
+     * Suspends all processes in this thread group. 
+     * <p>
+     * First, the <code>checkAccess</code> method of this thread group is 
+     * called with no arguments; this may result in a security exception. 
+     * <p>
+     * This method then calls the <code>suspend</code> method on all the 
+     * threads in this thread group and in all of its subgroups. 
+     *
+     * @exception  SecurityException  if the current thread is not allowed
+     *               to access this thread group or any of the threads in
+     *               the thread group.
+     * @see        java.lang.SecurityException
+     * @see        java.lang.Thread#suspend()
+     * @see        java.lang.ThreadGroup#checkAccess()
+     * @since      JDK1.0
+     */
+    public final void suspend() {
+       int ngroupsSnapshot;
+       ThreadGroup[] groupsSnapshot;
+       synchronized (this) {
+           checkAccess();
+           for (int i = 0 ; i < nthreads ; i++) {
+               threads[i].suspend();
+           }
+           ngroupsSnapshot = ngroups;
+           if (groups != null) {
+               groupsSnapshot = new ThreadGroup[ngroupsSnapshot];
+               System.arraycopy(groups, 0, groupsSnapshot, 0, ngroupsSnapshot);
+           } else {
+               groupsSnapshot = null;
+           }
+       }
+       for (int i = 0 ; i < ngroupsSnapshot ; i++) {
+           groupsSnapshot[i].suspend();
+       }
+    }
+
+    /**
+     * Resumes all processes in this thread group. 
+     * <p>
+     * First, the <code>checkAccess</code> method of this thread group is 
+     * called with no arguments; this may result in a security exception. 
+     * <p>
+     * This method then calls the <code>resume</code> method on all the 
+     * threads in this thread group and in all of its sub groups. 
+     *
+     * @exception  SecurityException  if the current thread is not allowed to
+     *               access this thread group or any of the threads in the
+     *               thread group.
+     * @see        java.lang.SecurityException
+     * @see        java.lang.Thread#resume()
+     * @see        java.lang.ThreadGroup#checkAccess()
+     * @since      JDK1.0
+     */
+    public final void resume() {
+       int ngroupsSnapshot;
+       ThreadGroup[] groupsSnapshot;
+       synchronized (this) {
+           checkAccess();
+           for (int i = 0 ; i < nthreads ; i++) {
+               threads[i].resume();
+           }
+           ngroupsSnapshot = ngroups;
+           if (groups != null) {
+               groupsSnapshot = new ThreadGroup[ngroupsSnapshot];
+               System.arraycopy(groups, 0, groupsSnapshot, 0, ngroupsSnapshot);
+           } else {
+               groupsSnapshot = null;
+           }
+       }
+       for (int i = 0 ; i < ngroupsSnapshot ; i++) {
+           groupsSnapshot[i].resume();
+       }
+    }
+
+    /**
+     * Destroys this thread group and all of its subgroups. This thread 
+     * group must be empty, indicating that all threads that had been in 
+     * this thread group have since stopped. 
+     *
+     * @exception  IllegalThreadStateException  if the thread group is not
+     *               empty or if the thread group has already been destroyed.
+     * @exception  SecurityException  if the current thread cannot modify this
+     *               thread group.
+     * @since      JDK1.0
+     */
+    public final void destroy() {
+       int ngroupsSnapshot;
+       ThreadGroup[] groupsSnapshot;
+       synchronized (this) {
+           checkAccess();
+           if (destroyed || (nthreads > 0)) {
+               throw new IllegalThreadStateException();
+           }
+           ngroupsSnapshot = ngroups;
+           if (groups != null) {
+               groupsSnapshot = new ThreadGroup[ngroupsSnapshot];
+               System.arraycopy(groups, 0, groupsSnapshot, 0, ngroupsSnapshot);
+           } else {
+               groupsSnapshot = null;
+           }
+           if (parent != null) {
+               destroyed = true;
+               ngroups = 0;
+               groups = null;
+               nthreads = 0;
+               threads = null;
+           }
+       }
+       for (int i = 0 ; i < ngroupsSnapshot ; i += 1) {
+           groupsSnapshot[i].destroy();
+       }
+       if (parent != null) {
+           parent.remove(this);
+       }
+    }
+
+    /**
+     * Adds the specified Thread group to this group.
+     * @param g the specified Thread group to be added
+     * @exception IllegalThreadStateException If the Thread group has been 
destroyed.
+     */
+    private final void add(ThreadGroup g){
+       synchronized (this) {
+           if (destroyed) {
+               throw new IllegalThreadStateException();
+           }
+           if (groups == null) {
+               groups = new ThreadGroup[4];
+           } else if (ngroups == groups.length) {
+               ThreadGroup newgroups[] = new ThreadGroup[ngroups * 2];
+               System.arraycopy(groups, 0, newgroups, 0, ngroups);
+               groups = newgroups;
+           }
+           groups[ngroups] = g;
+
+           // This is done last so it doesn't matter in case the
+           // thread is killed
+           ngroups++;
+       }
+    }
+
+    /**
+     * Removes the specified Thread group from this group.
+     * @param g the Thread group to be removed
+     * @return if this Thread has already been destroyed.
+     */
+    private void remove(ThreadGroup g) {
+       synchronized (this) {
+           if (destroyed) {
+               return;
+           }
+           for (int i = 0 ; i < ngroups ; i++) {
+               if (groups[i] == g) {
+                   ngroups -= 1;
+                   System.arraycopy(groups, i + 1, groups, i, ngroups - i);
+                   // Zap dangling reference to the dead group so that
+                   // the garbage collector will collect it.
+                   groups[ngroups] = null;
+                   break;
+               }
+           }
+           if (nthreads == 0) {
+               notifyAll();
+           }
+           if (daemon && (nthreads == 0) && (ngroups == 0)) {
+               destroy();
+           }
+       }
+    }
+    
+    /**
+     * Adds the specified Thread to this group.
+     * @param t the Thread to be added
+     * @exception IllegalThreadStateException If the Thread group has been 
destroyed.
+     */
+    void add(Thread t) {
+       synchronized (this) {
+           if (destroyed) {
+               throw new IllegalThreadStateException();
+           }
+           if (threads == null) {
+               threads = new Thread[4];
+           } else if (nthreads == threads.length) {
+               Thread newthreads[] = new Thread[nthreads * 2];
+               System.arraycopy(threads, 0, newthreads, 0, nthreads);
+               threads = newthreads;
+           }
+           threads[nthreads] = t;
+
+           // This is done last so it doesn't matter in case the
+           // thread is killed
+           nthreads++;
+       }
+    }
+
+    /**
+     * Removes the specified Thread from this group.
+     * @param t the Thread to be removed
+     * @return if the Thread has already been destroyed.
+     */
+    void remove(Thread t) {
+       synchronized (this) {
+           if (destroyed) {
+               return;
+           }
+           for (int i = 0 ; i < nthreads ; i++) {
+               if (threads[i] == t) {
+                   System.arraycopy(threads, i + 1, threads, i, --nthreads - 
i);
+                   // Zap dangling reference to the dead thread so that
+                   // the garbage collector will collect it.
+                   threads[nthreads] = null;
+                   break;
+               }
+           }
+           if (nthreads == 0) {
+               notifyAll();
+           }
+           if (daemon && (nthreads == 0) && (ngroups == 0)) {
+               destroy();
+           }
+       }
+    }
+
+    /**
+     * Prints information about this thread group to the standard 
+     * output. This method is useful only for debugging. 
+     *
+     * @since   JDK1.0
+     */
+    public void list() {
+       list(System.out, 0);
+    }
+    void list(PrintStream out, int indent) {
+       int ngroupsSnapshot;
+       ThreadGroup[] groupsSnapshot;
+       synchronized (this) {
+           for (int j = 0 ; j < indent ; j++) {
+               out.print(" ");
+           }
+           out.println(this);
+           indent += 4;
+           for (int i = 0 ; i < nthreads ; i++) {
+               for (int j = 0 ; j < indent ; j++) {
+                   out.print(" ");
+               }
+               out.println(threads[i]);
+           }
+           ngroupsSnapshot = ngroups;
+           if (groups != null) {
+               groupsSnapshot = new ThreadGroup[ngroupsSnapshot];
+               System.arraycopy(groups, 0, groupsSnapshot, 0, ngroupsSnapshot);
+           } else {
+               groupsSnapshot = null;
+           }
+       }
+       for (int i = 0 ; i < ngroupsSnapshot ; i++) {
+           groupsSnapshot[i].list(out, indent);
+       }
+    }
+
+    /**
+     * Called by the Java Virtual Machine when a thread in this 
+     * thread group stops because of an uncaught exception. 
+     * <p>
+     * The <code>uncaughtException</code> method of 
+     * <code>ThreadGroup</code> does the following: 
+     * <ul>
+     * <li>If this thread group has a parent thread group, the
+     *     <code>uncaughtException</code> method of that parent is called
+     *     with the same two arguments. 
+     * <li>Otherwise, this method determines if the <code>Throwable</code>
+     *     argument is an instance of <code>ThreadDeath</code>. If so, nothing
+     *     special is done. Otherwise, the <code>Throwable</code>'s
+     *     <code>printStackTrace</code> method is called to print a stack
+     *     backtrace to the standard error stream.
+     * </ul>
+     * <p>
+     * Applications can override this method in subclasses of 
+     * <code>ThreadGroup</code> to provide alternative handling of 
+     * uncaught exceptions. 
+     *
+     * @param   t   the thread that is about to exit.
+     * @param   e   the uncaught exception.
+     * @see     java.lang.System#err
+     * @see     java.lang.ThreadDeath
+     * @see     java.lang.Throwable#printStackTrace(java.io.PrintStream)
+     * @since   JDK1.0
+     */
+    public void uncaughtException(Thread t, Throwable e) {
+       if (parent != null) {
+           parent.uncaughtException(t, e);
+       } else if (!(e instanceof ThreadDeath)) {
+           e.printStackTrace(System.err);
+       }
+    }
+
+    /**
+     * Used by VM to control lowmem implicit suspension.
+     *
+     * @since   JDK1.1
+     */
+    public boolean allowThreadSuspension(boolean b) {
+       this.vmAllowSuspension = b;
+       if (!b) {
+           VM.unsuspendSomeThreads();
+       }
+       return true;
+    }
+
+    /**
+     * Returns a string representation of this Thread group.
+     *
+     * @return  a string representation of this thread group.
+     * @since   JDK1.0
+     */
+    public String toString() {
+       return getClass().getName() + "[name=" + getName() + ",maxpri=" + 
maxPriority + "]";
+    }
+}
diff --git a/test/etags/lua-src/allegro.lua b/test/etags/lua-src/allegro.lua
new file mode 100644
index 0000000..c316b6f
--- /dev/null
+++ b/test/etags/lua-src/allegro.lua
@@ -0,0 +1,282 @@
+-- ase -- allegro-sprite-editor: the ultimate sprites factory
+-- Copyright (C) 2001-2004 by David A. Capello
+--
+-- Read "LEGAL.txt" for more information.
+
+-- internal routine
+local function get_layer_by_name (sprite, layer, name)
+  if layer.readable == false then
+    return nil;
+  end
+
+  if layer.name and strcmp (layer.name, name) == 0 then
+    return layer;
+  end
+
+  if layer_is_set (layer) then
+    local it, sub;
+
+    it = layer.layers;
+    while it do
+      sub = get_layer_by_name (sprite, it, name)
+      if sub then
+       return sub;
+      end
+      it = it.next
+    end
+  end
+
+  return nil;
+end
+
+-- internal routine
+local function count_layers (layer)
+  local count;
+
+  if layer.parent.type == GFXOBJ_SPRITE then
+    count = 0;
+  else
+    count = 1;
+  end
+
+  if layer_is_set (layer) then
+    local it = layer.layers;
+    while it do
+      count = count + count_layers (it);
+      it = it.next;
+    end
+  end
+
+  return count;
+end
+
+-- Layer *GetLayerByName (const char *name);
+function GetLayerByName (name)
+  local sprite = current_sprite;
+
+  if sprite and name then
+    return get_layer_by_name (sprite, sprite.set, name);
+  else
+    return nil;
+  end
+end
+
+-- const char *GetUniqueLayerName (void);
+function GetUniqueLayerName ()
+  local sprite = current_sprite;
+
+  if sprite then
+    return _("Layer") .. " " .. count_layers (sprite.set);
+  else
+    return nil;
+  end
+end
+
+-- void SelectLayer (Layer *layer);
+function SelectLayer (layer)
+  if current_sprite then
+    sprite_set_layer (current_sprite, layer);
+  end
+end
+
+-- Layer *NewLayer (const char *name, int x, int y, int w, int h);
+-- creates a new layer with the "name" in the current sprite (in the
+-- current frame) with the specified position and size (if w=h=0 the
+-- routine will use the sprite dimension)
+function NewLayer (name, x, y, w, h)
+  local sprite = current_sprite;
+  local layer = nil;
+  local image, frame, index;
+
+  if sprite and name then
+    if not w or w == 0 then w = sprite.w; end
+    if not h or h == 0 then h = sprite.h; end
+ 
+    -- new image
+    image = image_new (sprite.imgtype, w, h);
+    if not image then
+      return nil;
+    end
+
+    -- new layer
+    layer = layer_image_new (sprite.imgtype, w, h);
+    if not layer then
+      image_free (image);
+      return nil;
+    end
+
+    -- clear with mask color
+    image_clear (image, 0);
+
+    -- configure layer name and blend mode
+    layer_set_name (layer, name);
+    layer_set_blend_mode (layer, BLEND_MODE_NORMAL);
+
+    -- add image in the layer stock
+    index = stock_add_image (layer.stock, image);
+
+    -- create frame (XXX in the current frpos? --dacap)
+    frame = frame_new (sprite.frpos, index, x, y, 255);
+
+    -- add frame
+    layer_add_frame (layer, frame);
+
+    -- undo stuff
+    if undo_is_enabled (sprite.undo) then
+      undo_open (sprite.undo);
+      undo_add_layer (sprite.undo, sprite.set, layer);
+      undo_set_layer (sprite.undo, sprite);
+      undo_close (sprite.undo);
+    end
+
+    -- add the layer in the sprite set
+    layer_add_layer (sprite.set, layer);
+
+    -- select the new layer
+    sprite_set_layer (sprite, layer);
+  end
+
+  return layer;
+end
+
+-- Layer *NewLayerSet (const char *name);
+-- creates a new layer set with the "name" in the current sprite
+function NewLayerSet (name)
+  local sprite = current_sprite;
+  local layer = nil;
+
+  if sprite and name then
+    -- new layer
+    layer = layer_set_new ();
+    if not layer then
+      return nil;
+    end
+
+    -- configure layer name and blend mode
+    layer_set_name (layer, name);
+
+    -- add the layer in the sprite set
+    layer_add_layer (sprite.set, layer);
+
+    -- select the new layer
+    sprite_set_layer (sprite, layer);
+  end
+
+  return layer;
+end
+
+-- void RemoveLayer (void);
+-- removes the current selected layer
+function RemoveLayer ()
+  local sprite = current_sprite;
+
+  if sprite and sprite.layer then
+    local layer = sprite.layer;
+    local parent = layer.parent;
+    local layer_select;
+
+    -- select: previous layer, or next layer, or parent (if it is not
+    -- the main layer of sprite set)
+    if layer.prev then
+      layer_select = layer.prev;
+    elseif layer.next then
+      layer_select = layer.next;
+    elseif parent != sprite.set then
+      layer_select = parent;
+    else
+      layer_select = nil;
+    end
+
+    -- undo stuff
+    if undo_is_enabled (sprite.undo) then
+      undo_open (sprite.undo);
+      undo_set_layer (sprite.undo, sprite);
+      undo_remove_layer (sprite.undo, layer);
+      undo_close (sprite.undo);
+    end
+
+    -- select other layer
+    sprite_set_layer (sprite, layer_select);
+
+    -- remove the layer
+    layer_remove_layer (parent, layer);
+
+    -- destroy the layer
+    layer_free (layer);
+  end
+end
+
+-- void MoveLayerTop (void);
+-- moves the current layer in the top of the main set
+function MoveLayerTop ()
+  if current_sprite and current_sprite.layer then
+    local layer = current_sprite.layer;
+
+    layer_remove_layer (layer.parent, layer);
+
+    layer_add_layer (current_sprite.set, layer);
+  end
+end
+
+-- void MoveLayerBottom (void);
+-- moves the current layer in the bottom of the main set
+function MoveLayerBottom ()
+  if current_sprite and current_sprite.layer then
+    local layer = current_sprite.layer;
+
+    layer_remove_layer (layer.parent, layer);
+
+    layer_add_layer (current_sprite.set, layer);
+    layer_move_layer (current_sprite.set, layer, nil);
+  end
+end
+
+-- void MoveLayerBefore (Layer *this_one);
+-- moves the current layer above the layer "this_one"
+function MoveLayerBefore (this_one)
+  if current_sprite and current_sprite.layer then
+    local layer = current_sprite.layer;
+    local layer_dest;
+
+    if not this_one then
+      layer_dest = current_sprite.set;
+    else
+      layer_dest = this_one;
+    end
+
+    if layer_dest then
+      layer_remove_layer (layer.parent, layer);
+      layer_add_layer (layer_dest.parent, layer);
+      layer_move_layer (layer_dest.parent, layer, layer_dest);
+    end
+  end
+end
+
+-- void MoveLayerAfter (Layer *this_one);
+-- moves the current layer below the layer "this_one" (if that layer
+-- is a set, the layer is put in the top of the layer set)
+function MoveLayerAfter (this_one)
+  if current_sprite and current_sprite.layer then
+    local layer = current_sprite.layer;
+    local layer_dest;
+
+    if not this_one then
+      layer_dest = current_sprite.set;
+    else
+      layer_dest = this_one;
+    end
+
+    if layer_dest then
+      layer_remove_layer (layer.parent, layer);
+
+      -- insert in the first position of the set
+      if layer_is_set (layer_dest) then
+       layer_add_layer (layer_dest, layer);
+      -- insert below the layer
+      else
+       layer_add_layer (layer_dest.parent, layer);
+       layer_move_layer (layer_dest.parent, layer, layer_dest.prev);
+      end
+    end
+  end
+end
diff --git a/test/etags/make-src/Makefile b/test/etags/make-src/Makefile
new file mode 100644
index 0000000..daf605d
--- /dev/null
+++ b/test/etags/make-src/Makefile
@@ -0,0 +1,226 @@
+LATEST=17
address@hidden address@hidden address@hidden address@hidden
+
+ADASRC=etags-test-for.ada 2ataspri.adb 2ataspri.ads waroquiers.ada
+ASRC=empty.zz empty.zz.gz
+CSRC=abbrev.c ../etags/h.h .//c.c torture.c getopt.h etags.c\
+ exit.c exit.strange_suffix sysdep.h tab.c\
+ emacs/src/gmalloc.c emacs/src/regex.h emacs/src/keyboard.c dostorture.c\
+ machsyscalls.c machsyscalls.h fail.c a/b/b.c
+CPSRC=c.C abstract.C abstract.H cfront.H burton.cpp burton.cpp\
+ functions.cpp MDiagArray2.h Pctest.h Range.h\
+ screen.cpp screen.hpp conway.cpp conway.hpp clheir.cpp.gz clheir.hpp.gz fail.C
+ELSRC=TAGTEST.EL emacs/lisp/progmodes/etags.el
+ERLSRC=gs_dialog.erl lines.erl lists.erl
+FORTHSRC=test-forth.fth
+FSRC=entry.for entry.strange_suffix entry.strange
+HTMLSRC=softwarelibero.html index.shtml algrthms.html software.html
+JAVASRC=AWTEMul.java KeyEve.java SMan.java SysCol.java TG.java 
+LUASRC=allegro.lua
+MAKESRC=Makefile
+OBJCSRC=Subprocess.h Subprocess.m PackInsp.h PackInsp.m
+OBJCPPSRC=SimpleCalc.H SimpleCalc.M
+PASSRC=common.pas
+PERLSRC=htlmify-cystic yagrip.pl kai-test.pl mirror.pl
+PHPSRC=lce_functions.php ptest.php sendmail.php
+PSSRC=rfc1245.ps
+PROLSRC=ordsets.prolog natded.prolog
+PYTSRC=server.py
+TEXSRC=testenv.tex gzip.texi texinfo.tex nonewline.tex
+YSRC=parse.y parse.c atest.y cccp.c cccp.y
+SRCS=Makefile ${ADASRC} ${ASRC} ${CSRC} ${CPSRC} ${ELSRC} ${ERLSRC} ${FSRC}\
+     ${FORTHSRC} ${HTMLSRC} ${JAVASRC} ${LUASRC} ${MAKESRC} ${OBJCSRC}\
+     ${OBJCPPSRC} ${PASSRC} ${PHPSRC} ${PERLSRC} ${PSSRC} ${PROLSRC} ${PYTSRC}\
+     ${TEXSRC} ${YSRC}
+NONSRCS=entry.strange lists.erl clheir.hpp.gz
+
+VHDLFLAGS=--language=none --regex='/[ \t]*\(ARCHITECTURE\|CONFIGURATION\) +[^ 
]* +OF/' --regex='/[ \t]*\(ATTRIBUTE\|ENTITY\|FUNCTION\|PACKAGE\( 
BODY\)?\|PROCEDURE\|PROCESS\|TYPE\)[ \t]+\([^ \t(]+\)/\3/'
+COBOLFLAGS=--language=none --regex='/.......[a-zA-Z0-9-]+\./'
+POSTSCRIPTFLAGS=--language=none --regex='#/[^ \t{]+#'
+TCLFLAGS=--lang=none --regex='/proc[ \t]+\([^ \t]+\)/\1/'
+
+GETOPTOBJS= #getopt.o getopt1.o
+RXINCLUDE=-Iemacs/src
+REGEXOBJS=regex.o
+
+CHECKOBJS=chkmalloc.o chkxm.o
+CHECKFLAGS=-DDEBUG -Wno-unused-function
+OBJS=${GETOPTOBJS} ${REGEXOBJS} ${CHECKOBJS}
+CPPFLAGS=${CHECKFLAGS} -DSTDC_HEADERS -DHAVE_GETCWD ${RXINCLUDE} -I.
+LDFLAGS=#-static -lc_p
+WARNINGS=-pedantic -Wall -Wpointer-arith -Winline -Wmissing-prototypes 
-Wmissing-declarations -Wunused -Wformat -Wno-switch -Wsign-compare 
-Wpointer-arith -Wshadow -Wstrict-prototypes
+CFLAGS=${WARNINGS} -ansi -g3 # -pg -O
+#CC=gcc-3.0
+#TARGET_ARCH=
+FASTCFLAGS=-O3 -finline-functions -ffast-math -funroll-loops
+FASTCFLAGSWARN=${WARNINGS} -Werror ${FASTCFLAGS}
+
+FILTER=grep -v '\.[Cchefy][lor]*,[1-9][0-9]*' || true
+REGEX=/[ \t]*DEFVAR_[A-Z_ \t\n(]+"\([^"]+\)"/
+xx="this line is here because of a fontlock bug
+
+MAKE:=$(MAKE) --no-print-directory
+RUN=time --quiet --format '%U + %S: %E'
+RUN=
+OPTIONS=--members --declarations address@hidden
+ARGS=- < srclist
+
+infiles = $(filter-out ${NONSRCS},${SRCS}) srclist regexfile
+
+quiettest:
+       @rm -f /tmp/[0-9][0-9][0-9][0-9][0-9][0-9]malloc
+       @-$(MAKE) OPTIONS='--no-members' ${LATEST}ediff
+       @-$(MAKE) OPTIONS='--declarations --no-members' ${LATEST}ediff
+       @-$(MAKE) OPTIONS='--members' ${LATEST}ediff
+       @-$(MAKE) OPTIONS='address@hidden --no-members' ${LATEST}ediff
+       @-$(MAKE) OPTIONS='nonexistent --members --declarations address@hidden' 
${LATEST}ediff
+       @-$(MAKE) ${LATEST}cdiff
+
+test:
+       @rm -f /tmp/[0-9][0-9][0-9][0-9][0-9][0-9]malloc
+       @$(MAKE) OPTIONS='--no-members' ${LATEST}ediff
+       @$(MAKE) OPTIONS='--declarations --no-members' ${LATEST}ediff
+       @$(MAKE) OPTIONS='--members' ${LATEST}ediff
+       @$(MAKE) OPTIONS='address@hidden --no-members' ${LATEST}ediff
+       @$(MAKE) OPTIONS='nonexistent --members --declarations address@hidden' 
${LATEST}ediff
+       @$(MAKE) ${LATEST}cdiff
+
+${CHECKOBJS}: CFLAGS=-g3 -DNULLFREECHECK=0
+
+checker:
+       @rm -f /tmp/[0-9][0-9][0-9][0-9][0-9][0-9]malloc ${REGEXOBJS}
+       @env CHECKEROPTS="--trace --profile --Wfree-null" \
+       $(MAKE) CFLAGS= CHECKOBJS= CHECKFLAGS= CC=checkergcc ${LATEST}ediff
+       rm -f $REGEXOBJS
+
+standalone:
+       rm -f etags ctags
+       @$(MAKE) etags "CPPFLAGS=-UVERSION"
+       @$(MAKE) ctags "CPPFLAGS=-UVERSION"
+
+prof: ETAGS
+       prof -xgs etags
+
+fastetags:
+       rm -f etags ${GETOPTOBJS} ${REGEXOBJS}
+       @$(MAKE) CHECKOBJS= CHECKFLAGS= etags "CFLAGS=-ansi ${FASTCFLAGSWARN}"
+
+fastctags:
+       rm -f ctags ${GETOPTOBJS} ${REGEXOBJS}
+       @$(MAKE) CHECKOBJS= CHECKFLAGS= ctags "CFLAGS=-ansi ${FASTCFLAGSWARN}"
+
+staticetags:
+       rm -f etags ${GETOPTOBJS} ${REGEXOBJS}
+       @$(MAKE) etags CHECKOBJS= CHECKFLAGS= REGEXOBJS= GETOPTOBJS= RXINCLUDE= 
"CFLAGS=${FASTCFLAGSWARN} -static"
+
+rsynctofly:
+       rsync --exclude "*~" --exclude core --exclude etags -zauRv . 
fly:gnu/etags/
+
+rsyncfromfly:
+       rsync --exclude "*~" --exclude core --exclude etags -zauRv 
fly:gnu/etags/ ../..
+
+web ftp publish:
+       @-echo -e \\ttesting with debugging enabled...; $(MAKE) quiettest
+       @-echo -e \\ttesting standalone...; $(MAKE) standalone quiettest
+       @-echo -e \\ttesting fast versions...; $(MAKE) fastetags fastctags 
quiettest
+       @$(MAKE) /home/www/pub/etags.c.gz
+       @$(MAKE) /home/www/pub/software/unix/etags.tar.gz
+
+release distrib: web
+       cat xemacs-mail | /usr/sbin/sendmail -f address@hidden ${RELEASELIST}
+       mv etags etags${LATEST}
+       mv ctags ctags${LATEST}
+
+tags: TAGS
+
+clean:
+       rm -f ${OBJS} etags ETAGS
+
+srclist: Makefile
+       @for i in $(SRCS); do echo $$i; done > srclist
+       @echo srclist remade
+
+regexfile: Makefile
+       @echo ' -- This is for GNU Emacs source files' > regexfile
+       @echo '${REGEX}' >> regexfile
+       @echo '{c}${REGEX}\\1/m' >> regexfile
+       @echo regexfile remade
+
+/home/www/pub/etags.c.gz: etags.c
+       co -kv etags.c
+       gzip --best -c etags.c > $@
+
+#/home/www/pub/software/unix/etags.tar.gz: Makefile staticetags etags.1.man 
ETAGS.EBNF ETAGS.README
+#      tar -hzcf $@ COPYING ChangeLog ETAGS.EBNF etags.c etags.1 etags.1.man 
etags
+
+/home/www/pub/software/unix/etags.tar.gz: Makefile etags.1.man ETAGS.EBNF 
ETAGS.README maintaining.texi
+       tar -hzcf $@ COPYING ChangeLog ETAGS.EBNF ETAGS.README etags.c etags.1 
etags.1.man maintaining.texi
+
+regex.o: emacs/src/regex.c
+       $(CC) ${FASTCFLAGS} -c $?
+
+getopt.o: emacs/lib-src/getopt.c
+       $(CC) ${FASTCFLAGS} -c $?
+
+getopt1.o: emacs/lib-src/getopt1.c
+       $(CC) ${FASTCFLAGS} -c $?
+
+etags: etags.c ${OBJS}
+       $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o etags etags.c ${OBJS}
+
+ctags: etags.c ${OBJS}
+       $(CC) $(CFLAGS) $(CPPFLAGS) -DCTAGS $(LDFLAGS) -o ctags etags.c ${OBJS}
+
+man manpage: etags.1.man
+
+etags.1.man: etags.1
+       nroff -man -Tman etags.1 > $@
+
+maintaining.info: maintaining.texi
+       makeinfo --force --no-split maintaining.texi
+
+TAGS: etags.c
+       etags etags.c
+
+%ediff: ETAGS% ETAGS ${infiles}
+       sdiff --suppress-common-lines --width=103 ETAGS$* ETAGS
+
+oediff: OTAGS ETAGS ${infiles}
+       sdiff --suppress-common-lines --width=103 OTAGS ETAGS
+
+%cdiff: CTAGS% CTAGS ${infiles}
+       sdiff --suppress-common-lines --width=103 CTAGS$* CTAGS
+
+xdiff: ETAGS EXTAGS ${infiles}
+       sdiff --suppress-common-lines --width=103 ETAGS EXTAGS
+
+ETAGS: FRC etags ${infiles}
+       ${RUN} ./etags ${OPTIONS} -o $@ ${ARGS}
+
+ETAGS%: FRC etags% ${infiles}
+       ${RUN} etags$* ${OPTIONS} -o $@ ${ARGS}
+
+ETAGS13 ETAGS14 ETAGS15: etags% ${infiles}
+       TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* address@hidden -o 
$@ ${ARGS}
+
+ETAGS12: etags12 ${infiles}
+       ${RUN} etags12 --members -o $@ --regex='${REGEX}' ${ARGS}
+
+OTAGS: oetags ${SRCS} srclist
+       ${RUN} ./oetags -o $@ -t ${ARGS}
+
+CTAGS: ctags ${infiles}
+       ${RUN} ./ctags -o $@ address@hidden ${ARGS}
+
+CTAGS%: ctags% ${infiles}
+       ${RUN} ctags$* -wtTd --globals --members -o $@ address@hidden ${ARGS}
+
+CTAGS13 CTAGS14 CTAGS15: ctags% ${infiles}
+       TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ 
--regex='${REGEX}' ${ARGS}
+
+EXTAGS: extags ${infiles} Makefile
+       ${RUN} ./extags -e --regex-c='${REGEX}' --c++-types=+x --c-types=+x 
--if0=yes --line-directives=yes -o $@ -L - < srclist
+
+.PRECIOUS: ETAGS CTAGS ETAGS16 CTAGS16 ETAGS17 CTAGS17
+
+FRC:;
diff --git a/test/etags/objc-src/PackInsp.h b/test/etags/objc-src/PackInsp.h
new file mode 100644
index 0000000..0e3643c
--- /dev/null
+++ b/test/etags/objc-src/PackInsp.h
@@ -0,0 +1,120 @@
+/*+++*
+ *  title:     PackageInspector.h
+ *  abstract:  interface definitions for WM PackageInspector 
+ *  author:    T.R.Hageman, Groningen, The Netherlands
+ *  created:   November 1994
+ *  modified:  (see RCS Log at end)
+ *  copyleft:
+ *
+ *             Copyright (C) 1994,1995  Tom R. Hageman.
+ *
+ *     This is free software; you can redistribute it and/or modify
+ *     it under the terms of the GNU General Public License as published by
+ *     the Free Software Foundation; either version 2 of the License, or
+ *     (at your option) any later version.
+ *
+ *     This software is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public License
+ *     along with this software; if not, write to the Free Software
+ *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  description:
+ *
+ *---*/
+
+#import <appkit/appkit.h>
+#import <apps/Workspace.h>
+
+#include <sys/stat.h>
+
+#import "Subprocess.h"
+
+#define NUMSTATS       4
+#define TYPESTOSTAT    "bom", "info", "sizes", "tiff"
+
address@hidden PackageInspector:WMInspector
+{
+       // Outlets
+    id packageArchesField;
+    id packageDescriptionText;
+    id packageIconButton;
+    id packageLocationField;
+    id packageSizesField;
+    id packageStatusField;
+    id packageTitleField;
+    id packageVersionField;
+
+    id  inspectorVersionField;
+    id infoPanel;
+    id infoVersionField;
+
+       // other variables.
+       NXBundle *bundle;               // class bundle.
+       NXBundle *package;              // package bundle.
+       struct stat stats[NUMSTATS];    // for lazy inspection.
+       enum { listContents, listDescription } revertButtonState;
+
+       Subprocess *archProcess;        // To determine architectures.
+}
+
+// Actions.
+-showInfo:sender;
+
+-open:sender;
+
+// The workhorses
+-(BOOL)shouldLoad;
+-load;
+-toggleDescription;
+
+// Load helper methods
+-loadKeyValuesFrom:(const char *)type inTable:(HashTable *)table;
+-loadContentsOf:(const char *)type inTable:(HashTable *)table;
+-loadImage;
+
+// Support methods
+-(const char *)getPath:(char *)path forType:(const char *)type;
+-setRevertButtonTitle;
+-(const char *)formatSize:(const char *)size inBuf:(char *)buf;
+
+// Determine architectures, in separate subprocess.
+-(void)getArchs;
+// Subprocess [TRH-enhanced] delegate methods:
+// Subprocess delegate methods:
+-subprocess:(Subprocess *)sender output:(char *)buffer;
+-subprocessDone:(Subprocess *)sender;
+
address@hidden // PackageInspector
+
+/*======================================================================
+ * PackageInspector.h,v
+ * Revision 1.7  1995/08/17 22:18:24  tom
+ * (-open:): new method.
+ *
+ * Revision 1.6  1995/07/30 16:59:51  tom
+ * import Subprocess.h; (archProcess): new ivar;
+ * (-getArchs,-subprocess:output:,-subprocessDone:): new methods;
+ * added for asynchronous arch-determination.
+ *
+ * Revision 1.5  1995/07/29 02:59:55  tom
+ * (NUMSTATS,TYPESTOSTAT): new defines, (stats[NUMSTATS]): new ivar, replaces
+ * bomstat, infostat, t ogeneralize lazy-load code.
+ *
+ * Revision 1.4  1995/04/02  02:39:05  tom
+ * (package): NXBundle instead of (const char *). so that localized info files
+ *  are found. (this loses out if *.pkg is a symbolic link, though.)
+ *
+ * Revision 1.3  1994/12/07  00:00:36  tom
+ * add GNU copleft comment.
+ *
+ * Revision 1.2  1994/11/25  20:18:56  tom
+ * (package ivar): use (char*) instead of (NXBundle*) to workaround symlink 
problems
+ *
+ * Revision 1.1  1994/11/24  22:39:56  tom
+ * Initial revision
+ *
+ *======================================================================*/
diff --git a/test/etags/objc-src/PackInsp.m b/test/etags/objc-src/PackInsp.m
new file mode 100644
index 0000000..41cc876
--- /dev/null
+++ b/test/etags/objc-src/PackInsp.m
@@ -0,0 +1,505 @@
+/*+++*
+ *  title:     PackageInspector.m
+ *  abstract:  NEXTSTEP Workspace Manager Inspector for Installer ".pkg" files.
+ *  author:    T.R.Hageman, Groningen, The Netherlands
+ *  created:   November 1994
+ *  modified:  (see RCS Log at end)
+ *  copyleft:
+ *
+ *             Copyright (C) 1994,1995  Tom R. Hageman.
+ *
+ *     This is free software; you can redistribute it and/or modify
+ *     it under the terms of the GNU General Public License as published by
+ *     the Free Software Foundation; either version 2 of the License, or
+ *     (at your option) any later version.
+ *
+ *     This software is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public License
+ *     along with this software; if not, write to the Free Software
+ *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  description:
+ *
+ *---*/
+
+#ifdef RCS_ID
+static const char RCSid[] =
+"PackageInspector.m,v 1.8 1995/09/01 21:46:27";
+#endif
+
+#define VERSION        "0.951"
+
+#ifndef DEBUG
+#   define DEBUG 0
+#endif
+#define LISTCONTENTS   0       // List Contents not yet implemented
+
+#import "PackageInspector.h"
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+// Localized strings
+#define OPENBUTTON             NXLocalizedStringFromTableInBundle(NULL, 
bundle, "Open", NULL, button label)
+#define LISTCONTENTSBUTTON     NXLocalizedStringFromTableInBundle(NULL, 
bundle, "List Contents", NULL, button label)
+#define LISTDESCRIPTIONBUTTON  NXLocalizedStringFromTableInBundle(NULL, 
bundle, "Description", NULL, button label)
+
+// States
+#define STATE_UNINSTALLED      NXLocalizedStringFromTableInBundle(NULL, 
bundle, "Uninstalled", NULL, original package state)
+#define STATE_INSTALLED                
NXLocalizedStringFromTableInBundle(NULL, bundle, "installed", "Installed", 
package has been uncompressed unto disk)
+#define STATE_COMPRESSD                
NXLocalizedStringFromTableInBundle(NULL, bundle, "compressed", "Compressed", 
installed package has been recompressed)
+
+// so InfoView.strings can be ripped off from Installer.app
+#define SIZEFORMAT             NXLocalizedStringFromTableInBundle("InfoView", 
bundle, "%s installed, %s compressed", NULL, Short indication to user about the 
size of a package once installed and the size when compressed)
+#define KBYTES                 NXLocalizedStringFromTableInBundle("InfoView", 
bundle, "KB", NULL, Kilobytes -- package size)
+#define MBYTES                 NXLocalizedStringFromTableInBundle("InfoView", 
bundle, "MB", NULL, MegaBytes -- package size)
+
+#define LOCALIZE(s)            NXLoadLocalizedStringFromTableInBundle(NULL, 
bundle, s, NULL)
+#define LOCALIZE_ARCH(s)       
NXLoadLocalizedStringFromTableInBundle("Architectures", bundle, s, NULL)
+
+
address@hidden PackageInspector
+
++new
+{
+       static PackageInspector *instance;
+       
+       if (instance == nil) {
+               char path[MAXPATHLEN+1];
+               const char *nibname = [self name];
+
+               instance = [super new];
+
+               instance->bundle = [NXBundle bundleForClass:self];
+
+               if ([instance->bundle getPath:path forResource:nibname 
ofType:"nib"] &&
+                   [NXApp loadNibFile:path owner:instance]) {
+                       [instance->inspectorVersionField 
setStringValue:VERSION];
+                       [instance->packageDescriptionText 
setVertResizable:YES]; // ??Necessary??
+               }
+               else {
+                       fprintf(stderr, "Couldn't load %s.nib\n", nibname);
+                       [instance free];
+                       instance = nil;
+               }
+       }
+       return instance;
+}
+
+-showInfo:sender
+{
+       if (infoPanel == nil) {
+               char path[MAXPATHLEN+1];
+
+               if ([bundle getPath:path forResource:"Info" ofType:"nib"] &&
+                   [NXApp loadNibFile:path owner:self]) {
+                       [infoVersionField setStringValue:[inspectorVersionField 
stringValue]];
+               }
+       }
+       [infoPanel makeKeyAndOrderFront:sender];
+       return self;
+}
+
+-revert:sender
+{
+       [super revert:sender];
+
+       if ([self selectionCount] != 1) {
+               return nil;
+       }
+       if (sender == [self revertButton]) {
+               [self toggleDescription];
+       }
+       else {
+               char path[MAXPATHLEN+1];
+
+               [package free];
+               [self selectionPathsInto:path separator:'\0'];
+               if (!(package = [[NXBundle allocFromZone:[self zone]] 
initForDirectory:path])) {
+                       return nil;
+               }
+               if ([self shouldLoad]) {
+                       [self load];
+                       revertButtonState = listContents;
+               }
+       }
+       [[[self okButton] setTitle:OPENBUTTON] setEnabled:YES];
+       [self setRevertButtonTitle];
+
+       return self;
+}
+
+-ok:sender
+{
+       [self perform:@selector(open:) with:sender afterDelay:0 
cancelPrevious:NO];
+       [super ok:sender];
+       return self;
+}
+
+-load
+{
+       char buf[256], size[2][20];
+       HashTable *table = [[HashTable alloc] initKeyDesc:"*" valueDesc:"*"];
+
+       [self getArchs];
+       // Collect information about the package in a hashtable.
+       [self loadKeyValuesFrom:"info" inTable:table];
+       [self loadKeyValuesFrom:"sizes" inTable:table];
+       [self loadContentsOf:"location" inTable:table];
+       [self loadContentsOf:"status" inTable:table];
+
+       // Convenience macro.
+#define LOOKUP(key, notfound)  ([table isKey:key] ? [table valueForKey:key] : \
+                                (notfound))
+#if 0
+       // Set the various controls.
+       sprintf(buf, "<<not yet implemented>>");
+       // Well then, how *DOES* Installer determine this??? 
+       [packageArchesField setStringValue:buf];
+#endif
+       [packageDescriptionText setText:LOOKUP("Description", "")];
+       [packageLocationField setStringValue:
+        LOOKUP("location", LOOKUP("DefaultLocation", "???"))];
+
+       [self formatSize:[table valueForKey:"InstalledSize"] inBuf:size[0]];
+       [self formatSize:[table valueForKey:"CompressedSize"] inBuf:size[1]];
+       sprintf(buf, SIZEFORMAT, size[0], size[1]);
+       [packageSizesField setStringValue:buf];
+
+       [packageStatusField setStringValue:LOCALIZE(LOOKUP("status", 
"Uninstalled"))];
+       [packageTitleField setStringValue:LOOKUP("Title", "???")];
+       [packageVersionField setStringValue:LOOKUP("Version", "???")];
+#undef LOOKUP
+       // Is this how one frees the contents of a hashtable?
+       [table freeKeys:free values:free];
+       [table free];
+
+       [self loadImage];
+
+       return self;
+}
+
+-loadKeyValuesFrom:(const char *)type inTable:(HashTable *)table
+{
+       char path[MAXPATHLEN+1];
+       NXStream *stream;
+
+       if (stream = NXMapFile([self getPath:path forType:type], NX_READONLY)) {
+               int c;
+
+#if DEBUG & 1
+               fprintf(stderr, "loadKeyValuesFrom:%s\n", path);
+#endif
+               while ((c = NXGetc(stream)) >= 0) {
+                       // Buffer sizes should be enough, according to doc.
+                       char key[1024+1], value[1024+1];
+                       char *p;
+
+                       if (NXIsSpace(c)) continue;
+                       if (c == '#') {
+                               while ((c = NXGetc(stream)) >= 0 && c != '\n') ;
+                               continue;
+                       }
+                       // Found key; collect it.
+                       p = key;
+                       do {
+                               if (p < &key[sizeof key-1]) *p++ = c;
+                       } while ((c = NXGetc(stream)) >= 0 && !NXIsSpace(c));
+                       *p = '\0';
+
+                       // Skip over spaces and tabs.
+                       while (c == ' ' || c == '\t') c = NXGetc(stream);
+
+                       // Value is rest of line, up to newline.
+                       p = value;
+                       do {
+                               if (p < &value[sizeof value-1]) *p++ = c;
+                       } while ((c = NXGetc(stream)) >= 0 && c != '\n');
+                       *p = '\0';
+
+                       // Insert key/value pair in hashtable.
+#if DEBUG & 1
+                       fprintf(stderr, "key:%s value:%s\n", key, value);
+#endif
+                       [table insertKey:NXCopyStringBuffer(key)
+                        value:NXCopyStringBuffer(value)];
+               }
+
+               NXCloseMemory(stream, NX_FREEBUFFER);
+       }
+       return self;
+
+}
+
+-loadContentsOf:(const char *)type inTable:(HashTable *)table
+{
+       char path[MAXPATHLEN+1];
+       NXStream *stream;
+
+       if (stream = NXMapFile([self getPath:path forType:type], NX_READONLY)) {
+               char line[1024+1];
+               int n = NXRead(stream, line, sizeof line);
+
+               if (n > 0 && line[n-1] == '\n') line[n-1] = '\0';       // 
remove trailing newline.
+
+               NXCloseMemory(stream, NX_FREEBUFFER);
+
+               [table insertKey:NXCopyStringBuffer(type)
+                value:NXCopyStringBuffer(line)];
+       }
+       return self;
+}
+
+-loadImage
+{
+       char path[MAXPATHLEN+1];
+       NXImage *image;
+
+       // Remove old image from the button.
+       if (image = [packageIconButton image]) {
+               [packageIconButton setImage:nil];
+               [image free];
+       }
+       // Get the image (if any) from the package
+       image = [[NXImage allocFromZone:[self zone]] initFromFile:[self 
getPath:path forType:"tiff"]];
+       [packageIconButton setImage:image];
+
+       return self;
+}
+
+
+#define STAT_EQ(s1, s2)        ((s1)->st_ino == (s2)->st_ino && \
+                        (s1)->st_dev == (s2)->st_dev && \
+                        (s1)->st_mtime == (s2)->st_mtime && \
+                        (s1)->st_size == (s2)->st_size)
+
+-(BOOL)shouldLoad
+{
+       char path[MAXPATHLEN+1];
+       struct stat newstats[NUMSTATS];
+       static const char * const typesToStat[NUMSTATS] = { TYPESTOSTAT };
+       BOOL result = NO;
+       int i;
+
+       for (i = 0;  i < NUMSTATS;  i++) {
+               memset(&newstats[i], 0, sizeof(struct stat));
+               if (!(stat([self getPath:path forType:typesToStat[i]], 
&newstats[i]) == 0 &&
+                     STAT_EQ(&newstats[i], &stats[i]))) {
+                       result = YES;
+                       ///break; // NOT!!! must stat all for accurate cache.
+               }
+               stats[i] = newstats[i];
+       }
+
+       return result;
+}
+
+-toggleDescription
+{
+       switch (revertButtonState) {
+       case listContents:
+               // TODO: swap views?
+               revertButtonState = listDescription;
+               break;
+       case listDescription:
+               revertButtonState = listContents;
+               break;
+       }
+       return [self setRevertButtonTitle];
+}
+
+
+// Support methods
+-(const char *)getPath:(char *)buf forType:(const char *)type
+{
+       char name[MAXPATHLEN+1];
+
+       // Get package name, sans extension.
+       *strrchr(strcpy(name, strrchr([package directory], '/')+1), '.') = '\0';
+
+       // Now get the full pathname.
+       [package getPath:buf forResource:name ofType:type];
+#if DEBUG & 2
+       fprintf(stderr, "PackageInspector: type=\"%s\" name=\"%s\" 
path=\"%s\"\n",
+               type, name, buf);
+#endif
+       return buf;
+}
+
+-setRevertButtonTitle
+{
+#if LISTCONTENTS
+       [[[self revertButton]
+         setTitle:LOCALIZE(revertButtonState == listContents ?
+                           "List Contents" : "Description")]
+        setEnabled:YES];
+#endif
+       return self;
+}
+
+-(const char *)formatSize:(const char *)size inBuf:(char *)buf
+{
+       // [TRH] this is very simplistic (but seems consistent with 
Installer.app)
+       if (!size) {
+               strcpy(buf, "???");
+       }
+       else {
+               int len = strlen(size);
+               if (len < 4) {
+                       sprintf(buf, "%s%s", size, KBYTES);
+               }
+               else if (len < 6) {
+                       sprintf(buf, "%.*s.%.*s%s",
+                               (len-3), size, 3-(len-3), size+(len-3), 
MBYTES); 
+               }
+               else {
+                       sprintf(buf, "%.*s%s", (len-3), size, MBYTES);
+               }
+       }
+       return buf;
+}
+
+// Determine architectures, in separate subprocess.
+
+#define WORKING        " ..."  // `I'm still busy' indicator.
+
+-(void)getArchs
+{
+       char command[2*MAXPATHLEN+10+1];
+
+       if (archProcess) [archProcess terminate:self];
+
+       [packageArchesField setStringValue:WORKING];
+
+       [bundle getPath:command forResource:"archbom" ofType:NULL];
+       strcat(command, " ");
+       [self getPath:&command[strlen(command)] forType:"bom"];
+       archProcess = [[Subprocess allocFromZone:[self zone]] init:command
+                      withDelegate:self andPtySupport:NO andStdErr:NO];
+}
+
+-(void)addArchs:(const char *)string
+{
+       char result[1024];      // Should be big enough...
+       const char *s;
+       char *d;
+
+       strcpy(result, [packageArchesField stringValue]);
+       if ((d = strstr(result, WORKING)) != NULL) {
+               *d = '\0';
+       }
+       else {
+               d = result + strlen(result);
+       }
+       if ((s = string)) {
+               do {
+                       char name[100];
+                       char *t = name;
+
+                       while (*s && !NXIsAlNum(*s)) {
+                               if (*s == '\n') {
+                                       *d++ = ' ', s++;
+                               }
+                               else {
+                                       *d++ = *s++;
+                               }
+                       }
+                       while (NXIsAlNum(*s)) *t++ = *s++;
+                       *t = '\0';
+                       if (t > name) {
+#if DEBUG & 4
+                               fprintf(stderr, "addArchs:\"%s\" localized: 
\"%s\"\n", name, LOCALIZE_ARCH(name));
+#endif
+                               strcpy(d, LOCALIZE_ARCH(name));
+                               d += strlen(d);
+                       }
+               } while (*s);
+
+               strcpy(d, WORKING);
+       }
+       [packageArchesField setStringValue:result];
+       [window displayIfNeeded]; // necessary??
+}
+
+-subprocess:(Subprocess *)sender output:(char *)buffer
+{
+       if (sender == archProcess) {
+               [self addArchs:buffer];
+       }
+       return self;
+}
+
+-subprocessDone:(Subprocess *)sender
+{
+       if (sender == archProcess) {
+               archProcess = nil;
+               [self addArchs:NULL];
+       }
+       [sender free];
+       return self;
+}
+
+static void openInWorkspace(const char *filename)
+{
+       // Indirect approach to circumvent Workspace deadlock/timeout.
+       char command[14+3*MAXPATHLEN+1];
+       const char *s;
+       char *d = command;
+
+       for (s = "exec open '"; *s; ) *d++ = *s++;
+       // Escape single quote characters.
+       for (s = filename; *s; ) {
+               if ((*d++ = *s++) == '\'') {
+                       *d++ = '\\', *d++ = '\'', *d++ = '\'';
+               }
+       }
+       for (s = "'&"; *d++ = *s++; ) ;
+       system(command);
+}
+
+-open:sender
+{
+       openInWorkspace([package directory]);
+       return self;
+}
+
address@hidden
+
+/*======================================================================
+ * PackageInspector.m,v
+ * Revision 1.8  1995/09/01 21:46:27  tom
+ * Circumvent open deadlock/timeout (when Installer.app is not yet launched);
+ * (openInWorkspace): new private function; (-open:): new method.
+ *
+ * Revision 1.7  1995/07/30 22:20:26  tom
+ * (LOCALIZE_ARCH): new macro; (-addArchs:): new method;
+ * (-subprocess:output:,-subprocessDone:) use it.
+ *
+ * Revision 1.6  1995/07/30 16:59:51  tom
+ * import Subprocess.h; (archProcess): new ivar;
+ * (-getArchs,-subprocess:output:,-subprocessDone:): new methods;
+ * added for asynchronous arch-determination.
+ *
+ * Revision 1.5  1995/07/29 19:13:35  tom
+ * (+new): avoid reassignment of self;
+ *  make packageDescriptionText vertically resizable;
+ * (-shouldLoad): rewritten to generalized array-driven approach.
+ *
+ * Revision 1.4  1995/04/02 02:39:01  tom
+ * (package): NXBundle instead of (const char *). so that localized info files
+ *  are found. (this loses out if *.pkg is a symbolic link, though.)
+ *
+ * Revision 1.3  1994/12/07 00:00:36  tom
+ * (RCSid): add spaces.
+ *
+ * Revision 1.2  1994/11/25 21:27:18  tom
+ * (package ivar): use (char*) instead of (NXBundle*) to workaround symlink 
problems
+ *
+ * Revision 1.1  1994/11/25 16:13:12  tom
+ * Initial revision
+ *
+ *======================================================================*/
diff --git a/test/etags/objc-src/Subprocess.h b/test/etags/objc-src/Subprocess.h
new file mode 100644
index 0000000..7e586a1
--- /dev/null
+++ b/test/etags/objc-src/Subprocess.h
@@ -0,0 +1,81 @@
+/*
+       Subprocess.h    (v10)
+       by Charles L. Oei
+       pty support by Joe Freeman
+       with encouragement from Kristofer Younger
+       Subprocess Example, Release 2.0
+       NeXT Computer, Inc.
+
+       You may freely copy, distribute and reuse the code in this example.
+       NeXT disclaims any warranty of any kind, expressed or implied, as to
+       its fitness for any particular use.
+
+       Hacked up for use in PackageInspector by Tom Hageman.
+*/
+
+#import <objc/Object.h>
+#import <stdio.h>
+
+/*
+    This subprocess object sends/receives data to/from any UNIX
+    subprocess asynchronously (via vfork/pipe).
+    Its delegate, if any, will receive the following messages:
+
+       - subprocessDone;
+           // sent when the subprocess exits
+    
+       - subprocessOutput:(char *)buffer;
+           // sent whenever there is data on the standard output pipe;
+           // buffer is only valid until next call
+       
+       - subprocessError:(const char *)errorString;
+           // sent when an error occurs;
+           // if it ever happens, it's usually only at startup time
+
+       // [TRH] and this is how these should have been done in the first 
place...
+       - subprocessDone:(SubProcess *)sender;
+       - subprocess:(SubProcess *)sender output:(char *)buffer;        
+*/
+
+// Hack to uniquize classname (to avoid dynload errors.)
+#define Subprocess SubprocessForPackageInspector
+
+#define BUFFERSIZE 2048
+
address@hidden Subprocess:Object
+{
+    FILE *fpToChild;
+    int fromChild;
+    int childPid;
+    id delegate;
+    int masterPty;     // file descriptor for master/slave pty
+    int slavePty;
+    int bufferCount;
+    char outputBuffer[BUFFERSIZE];
+}
+
+- init:(const char *)subprocessString;
+    // a cover for the below withDelegate:nil, andPtySupport:NO, andStdErr:YES
+
+- init:(const char *)subprocessString
+    withDelegate:theDelegate
+    andPtySupport:(BOOL)wantsPty
+    andStdErr:(BOOL)wantsStdErr;
+    // optional requests for pseudo terminal support and
+    // redirecting the standard error stream thru standard output
+
+- send:(const char *)string withNewline:(BOOL)wantNewline;
+    // send the string optionally followed by a new line
+- send:(const char *)string;
+    // sends the string followed by a new line
+    // shorthand for above withNewline:YES
+- terminateInput;
+    // sends an end-of-file (EOF) to the subprocess
+    // (and closes input pipe to child)
+- terminate:sender;
+    // forces the subprocess to terminate (w/ SIGTERM)
+
+- setDelegate:anObject;
+- delegate;
+
address@hidden
diff --git a/test/etags/objc-src/Subprocess.m b/test/etags/objc-src/Subprocess.m
new file mode 100644
index 0000000..2d8d586
--- /dev/null
+++ b/test/etags/objc-src/Subprocess.m
@@ -0,0 +1,343 @@
+/*
+       Subprocess.m    (v10)
+       by Charles L. Oei
+       pty support by Joe Freeman
+       Subprocess Example, Release 2.0
+       NeXT Computer, Inc. 
+
+       You may freely copy, distribute and reuse the code in this example.
+       NeXT disclaims any warranty of any kind, expressed or implied, as to
+       its fitness for any particular use.
+*/
+
+#import "Subprocess.h"
+// #import <sgtty.h>   // needed to compile under Release 1.0
+#import <appkit/nextstd.h>
+#import <appkit/Application.h>
+#import <appkit/Panel.h>
+#import <sys/wait.h>
+
+#define        PTY_TEMPLATE "/dev/pty??"
+#define        PTY_LENGTH 11
+
+static void showError();
+
+
+/*==========================================================
+ *
+ * Private Instance Methods
+ *
+ *==========================================================*/
+
address@hidden Subprocess(Private)
+- childDidExit;
+- fdHandler:(int)theFd;
address@hidden
+
address@hidden Subprocess(Private)
+
+- childDidExit
+    // cleanup after a child process exits
+{
+    if (childPid)
+    {
+       union wait exitstatus;
+       int waitresult;
+
+       DPSRemoveFD(fromChild);
+       close(fromChild);
+       fclose(fpToChild);
+       // Cleanup zombie processes. (blocking wait is too dangerous here...)
+       waitresult = wait4(childPid, &exitstatus, WNOHANG, NULL);
+       if (waitresult != childPid) {
+               /* XXX should handle this gracefully, e.g, timed entry. */
+       }
+       childPid=0;     // specify that child is dead
+       if (delegate)
+       {    
+           if ([delegate respondsTo:@selector(subprocessDone:)])
+               [delegate perform:@selector(subprocessDone:) with:self];
+           else if ([delegate respondsTo:@selector(subprocessDone)])
+               [delegate perform:@selector(subprocessDone)];
+       }
+    }
+    return self;
+}
+
+- fdHandler:(int)theFd
+    // DPS handler for output from subprocess
+{
+    if ((bufferCount = read(theFd, outputBuffer, BUFFERSIZE-1)) <= 0)
+    {
+       [self childDidExit];
+       return self;
+    }
+    outputBuffer[bufferCount] = '\0';
+    if (delegate)
+    {
+        if ([delegate respondsTo:@selector(subprocess:output:)])
+           [delegate perform:@selector(subprocess:output:)
+                 with:self with:(void *)&outputBuffer];
+        else if ([delegate respondsTo:@selector(subprocessOutput:)])
+           [delegate perform:@selector(subprocessOutput:)
+                 with:(void *)&outputBuffer];
+    }
+    return self;
+}
+
address@hidden
+
+
+/*==========================================================
+ *
+ * Private Utility Routines
+ *
+ *==========================================================*/
+ 
+static void
+showError (const char *errorString, id theDelegate)
+    // ensure errors never get dropped on the floor
+{
+    if (theDelegate && [theDelegate respondsTo:@selector(subprocessError:)])
+       [theDelegate
+           perform:@selector(subprocessError:)
+           with:(void *)errorString];
+    else if (NXApp)    // no delegate, but we're running w/in an App
+       NXRunAlertPanel(0, errorString, 0, 0, 0);
+    else
+       perror(errorString);
+}
+
+static void
+fdHandler (int theFd, id self)
+    // DPS handler for output from subprocess
+{
+    [self fdHandler:theFd];
+}
+
+static void
+getptys (int *master, int *slave)
+    // attempt to setup the ptys
+{
+    char device[PTY_LENGTH];
+    char *block, *num;
+    char *blockLoc; // specifies the location of block for the device string
+    char *numLoc; // specifies the pty name with the digit ptyxD
+    char *msLoc; // specifies the master (ptyxx) or slave (ttyxx)
+    
+    struct sgttyb setp =
+       {B9600, B9600, (char)0x7f, (char)0x15, (CRMOD|ANYP)};
+    struct tchars setc =
+       {CINTR, CQUIT, CSTART, CSTOP, CEOF, CBRK};
+    struct ltchars sltc =
+       {CSUSP, CDSUSP, CRPRNT, CFLUSH, CWERASE, CLNEXT};
+    int        lset =
+       (LCRTBS|LCRTERA|LCRTKIL|LCTLECH|LPENDIN|LDECCTQ);
+    int        setd = NTTYDISC;
+    
+    strcpy(device, PTY_TEMPLATE); // string constants are not writable
+    blockLoc = &device[ strlen("/dev/pty") ];
+    numLoc = &device[ strlen("/dev/pty?") ];
+    msLoc = &device[ strlen("/dev/") ];
+    for (block = "pqrs"; *block; block++)
+    {
+       *blockLoc = *block;
+       for (num = "0123456789abcdef"; *num; num++)
+       {
+           *numLoc = *num;
+           *master = open(device, O_RDWR);
+           if (*master >= 0)
+           {
+               *msLoc = 't';
+               *slave = open(device, O_RDWR);
+               if (*slave >= 0)
+               {
+                   (void) ioctl(*slave, TIOCSETP, (char *)&setp);
+                   (void) ioctl(*slave, TIOCSETC, (char *)&setc);
+                   (void) ioctl(*slave, TIOCSETD, (char *)&setd);
+                   (void) ioctl(*slave, TIOCSLTC, (char *)&sltc);
+                   (void) ioctl(*slave, TIOCLSET, (char *)&lset);
+                   return;
+               } else {
+                   // close the master and reset the device
+                   // name so that the master opens it properly
+                   *msLoc = 'p';
+                   close(*master);
+               }
+           }
+       } /* hunting through a bank of ptys */
+    } /* hunting through blocks of ptys in all the right places */
+    *master = -1;
+    *slave = -1;
+}
+
+
address@hidden Subprocess
+
+/*==========================================================
+ *
+ * Public Instance Methods
+ *
+ *==========================================================*/
+
+- init:(const char *)subprocessString
+    // a cover for the below withDelegate:nil, andPtySupport:NO, andStdErr:YES
+{
+    return
+       [self
+           init:subprocessString
+           withDelegate:nil
+           andPtySupport:NO
+           andStdErr:YES];
+}
+
+- init:(const char *)subprocessString
+    withDelegate:theDelegate
+    andPtySupport:(BOOL)wantsPty
+    andStdErr:(BOOL)wantsStdErr
+    // initializes an instance of Subprocess and corresponding UNIX process
+{
+    int pipeTo[2];             // for non-Pty support
+    int pipeFrom[2];
+    int        tty, numFds, fd;        // for temporary use
+    int processGroup;
+    int pidChild;              // needed because childPid does not exist
+                               // until Subprocess is instantiated
+
+    if (wantsPty)
+    {
+       tty = open("/dev/tty", O_RDWR);
+       getptys(&masterPty,&slavePty);
+       if (masterPty <= 0 || slavePty <= 0)
+       {
+           showError("Error grabbing ptys for subprocess.", theDelegate);
+           return self;
+       }
+       // remove the controlling tty if launched from a shell,
+       // but not Workspace;
+       // so that we have job control over the parent application in shell
+       // and so that subprocesses can be restarted in Workspace
+       if  ((tty<0) && ((tty = open("/dev/tty", 2))>=0))
+       {
+           ioctl(tty, TIOCNOTTY, 0);
+           close(tty);
+       }
+    }
+    else
+    {
+       if (pipe(pipeTo) < 0 || pipe(pipeFrom) < 0)
+       {
+           showError("Error starting UNIX pipes to subprocess.", theDelegate);
+           return self;
+       }
+    }
+    
+    switch (pidChild = vfork())
+    {
+    case -1:   // error
+       showError("Error starting UNIX vfork of subprocess.", theDelegate);
+       return self;
+
+    case 0:    // child
+       if (wantsPty)
+       {
+           dup2(slavePty, 0);
+           dup2(slavePty, 1);
+           if (wantsStdErr)
+               dup2(slavePty, 2);
+       }
+       else
+       {
+           dup2(pipeTo[0], 0);
+           dup2(pipeFrom[1], 1);
+           if (wantsStdErr)
+               dup2(pipeFrom[1], 2);
+       }
+       
+       numFds = getdtablesize();
+       for (fd=3; fd<numFds; fd++)
+           close(fd);
+
+       processGroup = getpid();
+       ioctl(0, TIOCSPGRP, (char *)&processGroup);
+       setpgrp (0, processGroup);
+       
+       // we exec a /bin/sh so that cmds are easier to specify for the user
+       execl("/bin/sh", "sh", "-c", subprocessString, 0);
+       perror("vfork (child)"); // should never gets here tho
+       exit(1);
+
+    default:   // parent
+       [self setDelegate:theDelegate];
+       childPid = pidChild;
+
+       if (wantsPty)
+       {
+           close(slavePty);
+           
+           fpToChild = fdopen(masterPty, "w");
+           fromChild = masterPty;
+       }
+       else
+       {
+           close(pipeTo[0]);
+           close(pipeFrom[1]);
+    
+           fpToChild = fdopen(pipeTo[1], "w");
+           fromChild = pipeFrom[0];
+       }
+
+       setbuf(fpToChild, NULL);
+       DPSAddFD(
+           fromChild,
+           (DPSFDProc)fdHandler,
+           (id)self,
+           NX_MODALRESPTHRESHOLD+1);
+       return self;
+    }
+}
+
+- send:(const char *)string withNewline:(BOOL)wantNewline
+{
+    fputs(string, fpToChild);
+    if (wantNewline)
+        fputc('\n', fpToChild);
+    return self;
+}
+
+- send:(const char *)string
+{
+    [self send:string withNewline:YES];
+    return self;
+}
+
+- terminateInput
+    // effectively sends an EOF to the child process stdin
+{
+    fclose(fpToChild);
+    return self;
+}
+
+- terminate:sender
+{
+    if (childPid)
+    {
+       //kill(childPid+1, SIGTERM);
+       killpg(childPid, SIGTERM);
+       [self childDidExit];
+    }
+    return self;
+}
+
+- setDelegate:anObject
+{
+    delegate = anObject;
+    return self;
+}
+
+- delegate
+{
+    return delegate;
+}
+
address@hidden
diff --git a/test/etags/objcpp-src/SimpleCalc.H 
b/test/etags/objcpp-src/SimpleCalc.H
new file mode 100644
index 0000000..121ae6b
--- /dev/null
+++ b/test/etags/objcpp-src/SimpleCalc.H
@@ -0,0 +1,49 @@
+//
+//     SimpleCalc -- Randy Nelson -- NeXT Developer Training
+//     A general class that serves as a liaison between a calculator interface
+//     and a calculator engine.
+//
+//  You may freely copy, distribute and reuse the code in this example.
+//  NeXT disclaims any warranty of any kind, expressed or implied, as to
+//  its fitness for any particular use.
+//
+//     Created 8-8-90
+//
+#import <objc/Object.h>
+
address@hidden SimpleCalc:Object
+{
+    // outlets...the front-end.
+    id                         display;
+    id                 enterKey;
+    id                 minusKey;
+    id                 infoManager;
+    id                 myNXStringTable;
+
+    // C++ object's can be a-part-of Objective-C objects.
+    class CalcEngine   *cplus_object;  
+
+    // record each previous user action
+    SEL                        previousAction;
+}
+
+// actions.
+
+- numberKeys:sender;
+- decimalKey:sender;
+- operationKeys:sender;
+- equalsKey:sender;
+- clearKey:sender;
+- clearAllKey:sender;
+- infoPanel:sender;
+- helpPanel:sender;
+
+// delegate methods.
+
+- windowWillClose:sender;
+- appDidInit:sender;
+
+- registerAction:(SEL)action;
+- appendToDisplay:(const char *)theString;
+
address@hidden
diff --git a/test/etags/objcpp-src/SimpleCalc.M 
b/test/etags/objcpp-src/SimpleCalc.M
new file mode 100644
index 0000000..34846a7
--- /dev/null
+++ b/test/etags/objcpp-src/SimpleCalc.M
@@ -0,0 +1,207 @@
+//     SimpleCalc -- Randy Nelson -- NeXT Developer Training
+//     A general class that serves as a liaison between a calculator interface
+//     and a calculator engine.
+//
+//     You may freely copy, distribute and reuse the code in this example.
+//     NeXT disclaims any warranty of any kind, expressed or implied, as to
+//     its fitness for any particular use.
+//
+//     Created 8-22-90
+//
+//     C++ "linkage" directive - tells the C++ compiler that the following 
+//     interface files contain Objective-C code.
+
+extern "Objective-C"           
+{                              
+#import <appkit/Application.h>
+#import <appkit/Panel.h>
+#import <appkit/TextField.h>
+#import <appkit/Button.h>
+}
+
+extern "C"
+{
+#import <appkit/publicWraps.h>
+#import <objc/error.h>
+#import <objc/NXStringTable.h>
+#import <strings.h>
+}
+
+//     The C++ "linkage" directive serves two purposes (when importing
+//     interface files that contain straight ANSI-C/Objective-C code). It:
+//
+//     (a) allows you to link with libraries that have not been compiled with
+//     the C++ compiler. Since libraries on the NeXT computer are compiled 
+//     with the Objective-C compiler (cc, not cc++), you must use the C++ 
+//     linkage directive when importing interface files that represent NeXT 
+//     libraries (or any library that is not compiled with cc++). 
+//
+//     (b) tells the compiler to ignore C++ keywords that will result in
+//     syntax errors when importing ANSI-C/Objective-C interface files. 
+//     The linkage directive essentially tells the C++ compiler to treat 
+//     keywords (such as "new", "delete", etc.) as normal identifiers.
+
+#import "SimpleCalc.h"
+#import "CalcEngine.h"
+#import "InfoManager.h"
+
address@hidden SimpleCalc
+
+// Initialize an instance of the SimpleCalc class.  One instance variable of
+// that class is the C++ calculator engine.
+- init
+{
+    cplus_object = new CalcEngine; // new is a keyword in C++.
+    previousAction = 0; 
+    return self;
+}
+
+// Append a new digit entered by the user to the text field display.
+- appendToDisplay:(const char *)theDigit
+{
+    char *copyOfDisplay = NXCopyStringBuffer([display stringValue]);
+
+    [display setStringValue: strcat(copyOfDisplay, theDigit)];
+
+    return self;
+}
+
+// We need to keep a history of one action to make decisions about the display.
+- registerAction:(SEL)action
+{
+    previousAction = action;
+    return self;
+}
+
+// The user has pushed the decimal key on the calculator.
+- decimalKey:sender
+{
+    if (previousAction == @selector(operationKeys:))
+       [display setStringValue:"."];
+    else {
+       if (strchr([display stringValue], '.'))
+           NXBeep();
+       else 
+           [self appendToDisplay:"."];
+    }
+    return [self registerAction:_cmd];
+}
+
+// One of the number keys was selected by the user.
+- numberKeys:sender
+{      
+    char aDigit[2];
+    int digit = [sender selectedTag];
+
+    sprintf(aDigit, "%d", digit);
+
+    if (previousAction == @selector(operationKeys:) ||
+       previousAction == @selector(equalsKey:))
+    {
+       [display setStringValue:aDigit];
+    } else {
+       if ([display doubleValue] == 0 && !strchr([display stringValue], '.'))
+           [display setStringValue:aDigit];
+       else
+           [self appendToDisplay:aDigit];
+    }
+    return [self registerAction:_cmd];
+}
+
+// The user pressed the equals key on the calculator interface.
+- equalsKey:sender
+{
+    if (previousAction == 0) 
+       NXBeep();
+    else {
+       NX_DURING
+           [display setDoubleValue:
+               cplus_object->equalsKey([display doubleValue])];
+       NX_HANDLER
+           NXRunAlertPanel(
+               [myNXStringTable valueForStringKey:"operationFailed"], 
+               [myNXStringTable valueForStringKey:NXLocalHandler.data1],
+               [myNXStringTable valueForStringKey:"OK"], NULL, NULL);
+       NX_ENDHANDLER
+    }
+    return [self registerAction:_cmd];
+}
+
+// The user pressed one of the operation keys.
+- operationKeys:sender
+{
+    if (previousAction == 0) 
+       NXBeep();
+    else if (previousAction == @selector(operationKeys:)) 
+       cplus_object->setOperation([sender selectedTag]);
+    else {
+       NX_DURING
+           [display setDoubleValue:
+               cplus_object->operationKeys([sender selectedTag],
+                                           [display doubleValue])];
+       NX_HANDLER
+           NXRunAlertPanel(
+               [myNXStringTable valueForStringKey:"operationFailed"], 
+               [myNXStringTable valueForStringKey:NXLocalHandler.data1],
+               [myNXStringTable valueForStringKey:"OK"], NULL, NULL);
+       NX_ENDHANDLER
+    }
+    return [self registerAction:_cmd];
+}
+
+// User pressed the Clear key.
+- clearKey:sender
+{
+    [display setStringValue:"0"];
+    return self;
+}
+
+// User pressed the Clear All key.
+- clearAllKey:sender
+{
+    cplus_object->clear();
+    [self registerAction:0];
+    return [self clearKey:sender];
+}
+
+// Called just after the application initializes and starts up.
+- appDidInit:sender
+{      
+    // Set the Enter key on the keypad to be equivalent to the = key.
+    [[display window] addToEventMask:NX_SYMBOLSET];
+    [enterKey setKeyEquivalent:3];
+    [[display window] makeKeyAndOrderFront:self];
+    return self;
+}
+
+// Called just before the window closes.
+- windowWillClose:sender
+{
+    return [NXApp terminate:self];
+}
+
+// Brings up the Info panel.   Not done on startup because it's in a separate
+// interface file.  Saves startup time for the user if we do this when they ask
+// for it, and not before.
+- infoPanel:sender
+{
+    if(infoManager == nil){
+       infoManager = [[InfoManager alloc] init];
+    }
+    [infoManager orderInfoPanelFront:sender];
+    return self;       
+}
+
+// Brings up the Help panel.   Not done on startup because it's in a separate
+// interface file.  Saves startup time for the user if we do this when they ask
+// for it, and not before.
+- helpPanel:sender
+{
+    if(infoManager == nil){
+       infoManager = [[InfoManager alloc] init];
+    }
+    [infoManager orderHelpPanelFront:sender];
+    return self;       
+}
+
address@hidden
diff --git a/test/etags/pas-src/common.pas b/test/etags/pas-src/common.pas
new file mode 100644
index 0000000..ec8e80c
--- /dev/null
+++ b/test/etags/pas-src/common.pas
@@ -0,0 +1,1545 @@
+#include "common.i"
+#include "common.h"
+
+type
+  NSPoolP = ^NSPoolRec;
+  NSPoolRec = record
+    Data: NameStringPointer;
+    Next: NSPoolP;
+  end;
+
+var
+  GlobalNSPool: record
+    Avail, Empty: NSPoolP;
+  end;
+
+var
+  AvailString : TextString;
+  NameList : BinNodePointer;  
+  AvailNameList : BinNodePointer;  
+
+
+
+(*------------------------------------------------------------------*) 
+(*                    InitializeStringPackage                       *) 
+(*------------------------------------------------------------------*) 
+procedure InitializeStringPackage;
+begin (* InitializeStringPackage *) 
+  AvailString := nil;
+end; (* InitializeStringPackage *) 
+
+(*------------------------------------------------------------------*) 
+(*                    newtextstring                                 *) 
+(*------------------------------------------------------------------*) 
+function newtextstring; (*: TextString;*)
+var
+  Temp : TextString;
+begin (* newtextstring *) 
+  if AvailString = nil then
+    new (Temp)
+  else begin
+    Temp := AvailString;
+    AvailString := Temp^.Next;
+  end;
+  Temp^.String.Length := 0;
+  Temp^.Next := nil;
+  newtextstring := Temp;
+end; (* newtextstring *) 
+
+(*------------------------------------------------------------------*) 
+(*                    disposetextstring                             *) 
+(*------------------------------------------------------------------*) 
+procedure disposetextstring;(*(
+  var S : TextString);*)
+var
+  Temp : TextString;
+  Temp2 : TextString;
+begin (* disposetextstring *) 
+  if S <> nil then begin
+    Temp := S;
+(*
+    while Temp^.Next <> nil do
+      Temp := Temp^.Next;
+    Temp^.Next := AvailString;
+    AvailString := S;
+*)
+    S := nil;
+    repeat
+      Temp2 := Temp^.Next;
+      dispose(Temp);
+      Temp := Temp2;
+    until Temp = nil;
+   end;
+end; (* disposetextstring *) 
+
+(*------------------------------------------------------------------*) 
+(*                    ConcatT                                       *) 
+(*------------------------------------------------------------------*) 
+function ConcatT;(*(
+  ToString : TextString;
+  S        : TextString) : TextString;*)
+var
+  Index : integer;
+begin (* ConcatT *) 
+  ConcatT := ToString;
+  if ToString = nil then
+    writeln (output, 'Error in ConcatT, ToString is nil')
+  else
+    if S = nil then
+      writeln (output, 'Error in ConcatT, S is nil')
+    else
+      if S^.Next <> nil then
+        writeln (output,
+          'Error in ConcatT, S contains several linked TextStrings')
+      else begin
+        while ToString^.Next <> nil do
+          ToString := ToString^.Next;
+        if ToString^.String.Length+S^.String.Length > NameStringLength then 
begin
+          ToString^.Next := newtextstring;
+          ToString := ToString^.Next;
+        end;
+        with ToString^, String do begin
+          for Index := 1 to S^.String.Length do
+            Value[Length+Index] := S^.String.Value[Index];
+          Length := Length+S^.String.Length;
+        end;
+      end;
+end; (* ConcatT *) 
+
+(*------------------------------------------------------------------*) 
+(*                    AppendTextString                              *) 
+(*------------------------------------------------------------------*) 
+function AppendTextString;(*(
+  ToString : TextString;
+  S        : TextString) : TextString;*)
+begin (* AppendTextString *) 
+  AppendTextString := ToString;
+  if ToString = nil then
+    writeln (output, 'Error in AppendTextString, ToString is nil')
+  else
+    if S = nil then
+      writeln (output, 'Error in AppendTextString, S is nil')
+    else begin
+      while ToString^.Next <> nil do
+        ToString := ToString^.Next;
+      ToString^.Next := S;
+    end;
+end; (* AppendTextString *) 
+
+(*------------------------------------------------------------------*) 
+(*                    CopyTextString                                *) 
+(*------------------------------------------------------------------*) 
+function CopyTextString;(*(
+  S : TextString
+  ) : TextString;*)
+var
+  Temp : TextString;
+begin   (* CopyTextString *) 
+  if S <> nil then begin
+    Temp := newtextstring;
+    Temp^.String := S^.String;
+    Temp^.Next := CopyTextString(S^.Next);
+    CopyTextString := Temp;
+  end
+  else
+    CopyTextString := nil;
+end;    (* CopyTextString *) 
+
+(*------------------------------------------------------------------*)
+(*                    CONVERT_CHARSTRING_TO_VALUE                   *)
+(*------------------------------------------------------------------*)
+procedure CONVERT_CHARSTRING_TO_VALUE;(*(
+      S : NameString;
+  var V : NameString);*)
+var
+  Pos : integer;
+  VPos : integer;
+  Ch : char;
+begin (* CONVERT_CHARSTRING_TO_VALUE *)
+  VPos := 0;
+  for Pos := 2 to S.Length - 1 do begin
+    Ch := S.Value[Pos];
+    if not ((Ch = '''') and (Pos > 2) and (S.Value[Pos - 1] = '''')) then
+      VPos := VPos + 1;
+    V.Value[VPos] := Ch;
+  end;
+  V.Length := VPos;
+end; (* CONVERT_CHARSTRING_TO_VALUE *)
+
+(*------------------------------------------------------------------*)
+(*                    append_string                                 *)
+(*------------------------------------------------------------------*)
+procedure append_string;(*(
+  var Txt    : TextString;
+  var String : NameString);*)
+var
+  Temp : TextString;
+begin (* append_string *)
+  Temp := newtextstring;
+  Temp^.String := String;
+  if Txt = nil then
+    Txt := Temp
+  else
+    Txt := AppendTextString(Txt, Temp);
+end; (* append_string *)
+
+function To_Upper;(*(ch:char) : char;*)
+begin
+  if ch in ['a'..'z'] then
+    To_Upper := chr(ord(ch) + ord('A')-ord('a'))
+  else
+    To_Upper := ch;
+end;
+
+function To_Lower;(*(ch:char) : char;*)
+begin
+  if ch in ['A'..'Z'] then
+    To_Lower := chr(ord(ch) - ord('A') + ord('a'))
+  else
+    To_Lower := ch;
+end;
+
+(*----------------------------------------------------------------------*)
+(*              Operations on NameString                                *)
+(*----------------------------------------------------------------------*)
+
+(*------------------------------------------------------------------*)
+(*                    EmptyNmStr                                    *)
+(*------------------------------------------------------------------*)
+function EmptyNmStr(* : NameString*);
+var
+  Nm : NameString;
+begin   (* EmptyNmStr *)
+  Nm.Length := 0;
+  EmptyNmStr := Nm;
+end;    (* EmptyNmStr *)
+
+
+(* returns a namestring containing one character, the inparameter Ch *)
+function chartonmstr; (*(
+  Ch : Char) : NameString; *)
+var
+  String : NameString;
+begin
+  String.Value[1] := Ch;
+  String.Length := 1;
+  chartonmstr := String;
+end;
+
+(* returns a namestring containing the inparameter Str in lowercase letters *)
+function LowerCaseNmStr; (*(
+  Str : NameString) : NameString; *)
+var
+  i : integer;
+begin (* LowerCaseNmStr *)
+  with Str do
+    for i := 1 to Length do
+      Value[i] := To_Lower(Value[i]);
+  LowerCaseNmStr := Str;
+end; (* LowerCaseNmStr *)
+
+(* returns a namestring containing inparameter S1 concatenated with inpar. S2 
*)
+function concatenatenamestrings; (*(
+  S1 : NameString;
+  S2 : NameString) : NameString; *)
+var
+  Temp : NameString;
+  Pos : integer;
+begin (* concatenatenamestrings *)
+  Temp := S1;
+  with Temp do begin
+    Pos := 0;
+    while Pos < S2.Length do begin
+      Pos := Pos + 1;
+      if Length < NameStringLength then begin
+        Length := Length + 1;
+        Value[Length] := S2.Value[Pos];
+      end;
+    end; (* while *)
+  end; (* with *)
+  concatenatenamestrings := Temp;
+end; (* concatenatenamestrings *)
+
+procedure writenamestring;(*(
+  var TextFile : text;
+  var Name     : NameString);*)
+var
+  Pos : integer;
+begin
+  with Name do
+    for Pos := 1 to Length do
+      write(TextFile, Value[Pos]);
+end;
+
+(*------------------------------------------------------------------*)
+(*                    IsControlChar                                 *)
+(*------------------------------------------------------------------*)
+function IsControlChar; (*(
+  Ch : char) : boolean; *)
+begin (* IsControlChar *)
+  IsControlChar := ord(Ch) in [0..32, 127];
+end; (* IsControlChar *)
+
+function namestringequal;(*(var Name1,Name2 : NameString) : Boolean;*)
+var i : Integer;
+    equal : Boolean;
+begin
+  if Name1.Length = Name2.Length then begin
+    equal := true;
+    i := 1;
+    while (i <= Name1.Length) and equal do begin
+       equal := To_Upper(Name1.Value[i]) = To_Upper(Name2.Value[i]);
+       i := i + 1;
+    end;
+    namestringequal := equal;
+  end 
+  else
+    namestringequal := false;
+end;
+
+(* Character strings are case sensitive *)
+
+function NameStringLess;(*(var Name1,Name2 : NameString) : Boolean;*)
+var i, minlength : Integer;
+    equal : Boolean;
+    C1, C2 : char;
+    Charstring : boolean;
+begin
+  C1 := ' ';
+  C2 := ' ';
+  if Name1.Length < Name2.Length then
+    minlength := Name1.Length 
+  else
+    minlength := Name2.Length;
+  if MinLength > 0 then
+    Charstring := (Name1.Value[1] = '''') or (Name2.Value[1] = '''')
+  else
+    Charstring := false;
+(*   Charstring := true; force case sensitive *)
+  i := 1;
+  equal := true;
+  if i <= minlength then
+    while (i <= minlength) and equal do begin
+      if Charstring then begin
+        C1 := Name1.Value[i];
+        C2 := Name2.Value[i];
+      end
+      else begin
+        C1 := To_Upper(Name1.Value[i]);
+        C2 := To_Upper(Name2.Value[i]);
+      end;
+      equal := C1 = C2;
+      i := i + 1;
+    end; (* while *)
+  if equal then
+    NameStringLess := Name1.Length < Name2.Length
+  else 
+    NameStringLess := C1 < C2;
+end;
+
+(*------------------------------------------------------------------*)
+(*                    IsControlCharName                             *)
+(*------------------------------------------------------------------*)
+function IsControlCharName(
+  Str : NameString;
+  Pos : integer) : boolean;
+begin (* IsControlCharName *)
+  with Str do begin
+    if Pos <= Length then
+      IsControlCharName := IsControlChar(Value[Pos])
+    else
+      IsControlCharName := false;
+  end;
+end; (* IsControlCharName *)
+
+(*------------------------------------------------------------------*)
+(*                    SubString                                     *)
+(*------------------------------------------------------------------*)
+function SubString; (*(
+  Str : NameString;
+  Start : integer;
+  Len : integer) : NameString; *)
+var
+  i : integer;
+begin (* SubString *)
+  with Str do begin
+    if Len > 0 then
+      for i := Start to Start + Len - 1 do
+        Value[i- Start + 1] := Value[i]
+    else if Len < 0 then
+      Len := 0;
+    Length := Len;
+  end;
+  SubString := Str;
+end; (* SubString *)
+
+(*------------------------------------------------------------------*)
+(*                    SkipChars                                     *)
+(*------------------------------------------------------------------*)
+function SkipChars; (*(
+  Str : NameString;
+  Start : integer;
+  Len : integer) : NameString; *)
+var
+  i : integer;
+begin (* SkipChars *)
+  with Str do begin
+    for i := Start to Length - Len do
+      Value[i] := Value[i + Len];
+    Length := Length - Len;
+  end;
+  SkipChars := Str;
+end; (* SkipChars *)
+
+(*------------------------------------------------------------------*)
+(*                    RemoveUnderlineControl                        *)
+(*------------------------------------------------------------------*)
+function RemoveUnderlineControl; (*(
+      Str : NameString) : NameString; *)
+var
+  Len : integer;
+  i : integer;
+  Start : integer;
+begin (* RemoveUnderlineControl *)
+  with Str do begin
+    i := 1;
+    while i <= Length do begin
+      if Value[i] = '_' then begin
+        Len := 0;
+        Start := i;
+        while IsControlCharName(Str, i + 1 + Len) do
+          Len := Len + 1;
+        if Len > 0 then
+          Str := SkipChars(Str, Start, Len + 1)
+        else
+          i := i + 1;
+      end
+      else
+        i := i + 1;
+    end; (* while *)
+  end; (* with *)
+  RemoveUnderlineControl := Str;
+end; (* RemoveUnderlineControl *)
+
+(*------------------------------------------------------------------*)
+(*                    First100Chars                                 *)
+(*------------------------------------------------------------------*)
+procedure First100Chars; (*(
+      Txt : TextString;
+  var Str : NameString;
+  var Truncated : boolean); *)
+var
+  Len : integer;
+  i : integer;
+begin (* First100Chars *)
+  Str.Length := 0;
+  if Txt <> nil then begin
+    Str := Txt^.String;
+    Txt := Txt^.Next;
+  end;
+  while (Txt <> nil) and (Str.Length < NameStringLength) do
+    with Txt^, String do begin
+      Str.Length := Str.Length + 1;
+      Str.Value[Str.Length] := ' ';
+      if Str.Length + Length <= NameStringLength then
+        Len := Str.Length + Length
+      else
+        Len := NameStringLength;
+      for i := Str.Length + 1 to Len do
+        Str.Value[i] := Value[i - Str.Length];
+      Str.Length := Len;
+      Txt := Txt^.Next;
+    end; (* while with *)
+  Truncated := Txt <> nil;
+end; (* First100Chars *)
+
+
+(*------------------------------------------------------------------*)
+(*                    SkipSpaces                                    *)
+(*------------------------------------------------------------------*)
+(* changes I to contain the first index in Str (starting at I) that *)
+(* is not a space                                                   *)
+procedure SkipSpaces; (* (Str : NameString; var I : Integer);*)
+var Stop : boolean;
+begin   (* SkipSpaces *)
+  Stop := false;
+  while (I < Str.Length) and not Stop do
+    if Str.Value[I] <> ' ' then
+      Stop := true
+    else
+      I := I+1; 
+end;    (* SkipSpaces *)
+
+
+(*------------------------------------------------------------------*)
+(*                    SkipBlanks                                    *)
+(*------------------------------------------------------------------*)
+function SkipBlanks; (*(
+  TextLine: NameString) : NameString; *)
+var
+  i : integer;
+  j : integer;
+  SpaceFound : boolean;
+begin (* SkipBlanks *)
+  with TextLine do begin
+    SpaceFound := true;
+    i := 1;
+    while SpaceFound and (i <= Length) do begin
+      SpaceFound := (Value[i] in [' ', chr(9)]);
+      if SpaceFound then
+        i := i + 1;
+    end; (* while *)
+    i := i - 1;
+    if i > 0 then
+      for j := 1 to Length - i do
+        if j <= Length - i then
+          Value[j] := Value[j + i];
+    Length := Length - i;
+  end; (* with *)
+  SkipBlanks := TextLine;
+end; (* SkipBlanks *)
+
+(*------------------------------------------------------------------*)
+(*                    stripname                                     *)
+(*------------------------------------------------------------------*)
+function stripname; (* (
+  TextLine: NameString) : NameString; *)
+var
+  SpaceFound : boolean;
+begin (* stripname *)
+  TextLine := SkipBlanks(TextLine);
+  with TextLine do begin
+    SpaceFound := true;
+    while SpaceFound and (Length > 0) do begin
+      SpaceFound := (Value[Length ] in [' ', chr(9)]);
+      if SpaceFound then
+        Length := Length - 1;
+    end; (* while *)
+  end; (* with *)
+  stripname := TextLine;
+end; (* stripname *)
+
+function Locate; (*(
+ Str : NameString;
+ Chars : SetOfChar) : integer; *)
+var
+  Pos : integer;
+  Found : boolean;
+begin (* Locate *)
+  Found := false;
+  Pos := 0;
+  with Str do
+    while not Found and (Pos < Length) do begin
+      Pos := Pos + 1;
+      Found := Value[Pos] in Chars;
+    end;
+  Locate := Pos;
+end; (* Locate *)
+
+
+(*------------------------------------------------------------------*)
+(*                    NameHasChar                                   *)
+(*------------------------------------------------------------------*)
+function NameHasChar; (* (TheName : NameString; TheChar : char) : boolean;*)
+var i : integer;
+    found : boolean;
+    
+begin   (* NameHasChar *)
+  found := false;
+  i := 0;
+  while not found and (i < TheName.Length) do begin
+    i := i+1;
+    found := TheName.Value[i] = TheChar;
+  end;
+  NameHasChar := found;
+end;    (* NameHasChar *)
+
+
+(*------------------------------------------------------------------*)
+(*                    integertonmstr                                *)
+(*------------------------------------------------------------------*)
+function integertonmstr; (* (TheInteger : integer) : NameString; *)
+var Nm : NameString;
+    Index,
+    Size,
+    TempNumber : integer;
+begin   (* integertonmstr *)
+  Size := 1;
+  TempNumber := TheInteger;
+  while TempNumber div 10 > 0 do begin
+    Size := Size + 1;
+    TempNumber := TempNumber div 10;
+  end;
+  Nm.Length := Size;
+  TempNumber := TheInteger;
+  for Index := Size downto 1 do begin
+    Nm.Value[Index] := chr(TempNumber mod 10 + ord('0'));
+    TempNumber := TempNumber div 10;
+  end;
+  integertonmstr := Nm;
+end;    (* integertonmstr *)
+
+(*------------------------------------------------------------------*)
+(*                    NmStrToInteger                                *)
+(*------------------------------------------------------------------*)
+function NmStrToInteger; (* (Str : NameString) : integer; *)
+var
+  Index : integer;
+  Numb : integer;
+  Max : integer;
+begin   (* NmStrToInteger *)
+ Max := (maxint div 10) - 10;
+ Numb := 0;
+  for Index := 1 to Str.Length do begin
+    if (Numb <= Max) and (Str.Value[Index] in ['0'..'9']) then
+      Numb := 10 * Numb + ord(Str.Value[Index]) - ord('0');
+  end;
+  NmStrToInteger := Numb;
+end;    (* NmStrToInteger *)
+
+function AddNullToNmStr; (*(
+  Nm : NameString) : NameString; *)
+begin (* AddNullToNmStr *)
+  with Nm do
+    if Length < NameStringLength then
+      Value[Length + 1] := chr(0)
+    else
+      Value[Length] := chr(0);
+  AddNullToNmStr := Nm;
+end; (* AddNullToNmStr *)
+
+function ValToNmStr; (*(
+  Nm : NameString) : NameString; *)
+begin (* ValToNmStr *)
+  with Nm do begin
+    length := 0;
+    while value[length + 1] <> chr(0) do
+      length := length + 1;
+  end;
+  ValToNmStr := Nm;
+end; (* ValToNmStr *)
+
+(*------------------------------------------------------------------*)
+(*                    ChangeFileType                                *)
+(*------------------------------------------------------------------*)
+function ChangeFileType; (*(FileName : NameString;
+  NewType : NameString) : NameString;*)
+var
+  Pos : integer;
+  Found : boolean;
+begin (* ChangeFileType *)
+  with Filename do begin
+    Pos := FileName.Length;
+    Found := false;
+    while not Found and (Pos > 0) do begin
+      Found := Value[Pos] = '.';
+      Pos := Pos - 1;
+    end;
+    if Found then
+      Length := Pos;
+  end; (* with *)
+  ChangeFileType := concatenatenamestrings(FileName, NewType);
+end; (* ChangeFileType*)
+
+(*------------------------------------------------------------------*)
+(*                    StripPath                                     *)
+(*------------------------------------------------------------------*)
+function StripPath; (*(
+      Str : NameString) : NameString; *)
+var
+  i : integer;
+  Len : integer;
+  Found : boolean;
+begin (* StripPath *)
+  with Str do begin
+    i := Length;
+    Found := false;
+    while not Found and (i > 0) do begin
+      Found := Value[i] in  ['/', '\'];
+      if not Found  then
+        i := i - 1;
+    end; (* while *)
+    if Found then begin
+      Len := Length - i + 1;
+      if i < Length then begin
+        i := i + 1;
+        Len := Len - 1;
+      end;
+      StripPath := SubString(Str, i, Len);
+    end
+    else
+      StripPath := Str;
+  end; (* with *)
+end; (* StripPath *)
+
+function ReprOfChar; (*( ch : char) : NameString;*)
+var
+  Repr : NameString;
+begin
+  if (ch >= ' ') and (ch <= '~') then
+    Repr := chartonmstr(ch)
+  else
+    Repr := concatenatenamestrings(concatenatenamestrings(chartonmstr('<'),
+              integertonmstr(ord(ch))), chartonmstr('>'));
+  ReprOfChar := Repr;
+end; (* ReprOfChar *)
+
+(*------------------------------------------------------------------*) 
+(*                    ExtractCommentInfo                            *) 
+(*------------------------------------------------------------------*) 
+(* check if Comment contains graphic reference or include directive *)
+(* /*#<graphref>*/ or /*#<include-dir>*/                            *)
+(*    <graphref>    =G pagename xcoord ycoord                       *)
+(*                   T pagename xcoord ycoord                       *)
+(*                   M diagramtype diagramname pagename xcoord ycoord *)
+(*                   D databankname                                 *)
+(*    <include-dir> =INCLUDE 'filename'                             *)
+(* InfoType will contain the type of the comment                    *)
+(* Info will contain <graphref> or the filename in <include-dir> if *)
+(* the Comment isn't an ordinary comment                            *)
+(* /*#E*/ do not count this line                                    *)
+(* /*#S*/ substructure generated from graphic short hand            *)
+procedure ExtractCommentInfo; (*(
+  var Comment, 
+      Info     : NameString; 
+  var InfoType : TypeOfComment); *)
+
+const
+  CommentMarkLength = 2;
+  IncludeMarkLength = 7;  (* = INCLUDE *) 
+  GRRefLen = 6;
+var StartIndex,
+    Index : integer;
+begin   (* ExtractCommentInfo *) 
+  Info.Length := 0;
+  with Comment do begin
+    InfoType := Ordinary;
+    StartIndex := CommentMarkLength + 1;
+    if Length > StartIndex then
+      if Value[StartIndex] = '#' then
+        if Value[StartIndex+1] in ['I','i', 'S'] then begin
+          if (Value[StartIndex+1] = 'S') and (Length = StartIndex+1+2) then
+            InfoType := SubstrShortHand
+          else if (Value[StartIndex+1] = 'S') and
+            (Length > StartIndex + GRRefLen) then begin
+              if Value[StartIndex+2] = 'D' then
+                if Value[StartIndex+3] = 'T' then
+                  if Value[StartIndex+4] = 'R' then
+                    if Value[StartIndex+5] = 'E' then
+                      if Value[StartIndex+6] = 'F' then
+                        InfoType := GRRef;
+            end
+          else begin
+            if Length > StartIndex + IncludeMarkLength then
+              if Value[StartIndex+2] in ['N','n'] then
+                if Value[StartIndex+3] in ['C','c'] then
+                  if Value[StartIndex+4] in ['L','l'] then
+                   if Value[StartIndex+5] in ['U','u'] then
+                     if Value[StartIndex+6] in ['D','d'] then
+                       if Value[StartIndex+7] in ['E','e'] then
+                         InfoType := IncludeClause;
+          end;
+        end;
+
+    if InfoType = IncludeClause then begin
+      InfoType := Ordinary;
+      StartIndex := StartIndex + IncludeMarkLength + 1;
+      if StartIndex+3 <= Length-2 then (* excluding the comment-end '*/' *) 
begin
+        if Value[StartIndex] = ' ' then begin
+          while (StartIndex <= Length-2) and (Value[StartIndex] = ' ') do 
+            StartIndex := StartIndex + 1;           (* Skip the spaces *)
+          if Value[StartIndex] = '''' then begin
+            Index := StartIndex+1;
+            while (Index <= Length-2) and (Value[Index] <> '''') do begin
+              Info.Value[Index-StartIndex] := Value[Index];
+              Index := Index + 1;
+            end;
+            if Value[Index] = '''' then begin
+              Info.Length := Index - StartIndex - 1;
+              Index := Index + 1;
+              while (Index <= Length-2) and (Value[Index] = ' ') do 
+                Index := Index + 1;           (* Skip the ending spaces *)
+              if Index = Length-1 then
+                InfoType := IncludeClause;  (* => a correct include directive 
*)
+            end;
+          end;
+        end;
+      end;
+    end
+    else if InfoType = SubstrShortHand then
+      Info := chartonmstr('S')
+    else if InfoType = GRRef then begin
+      if (Value[Length] = '/') and (Value[Length - 1] = '*') then
+        Info := SubString(Comment, StartIndex, Length - StartIndex + 1 - 2)
+      else (* truncated *)
+        Info := SubString(Comment, StartIndex, Length - StartIndex + 1);
+    end;
+  end;
+end;    (* ExtractCommentInfo *) 
+
+(*---------------------------------------------------------------------------*)
+(* inserts a node in a binary tree sorted after value. If node 
+   is in tree Found returns true.  *)
+
+procedure INSERT_TREE_NODE;(*( 
+            New_node: BinNodePointer;  node to insert 
+            var Node: BinNodePointer;  tree to insert in 
+            var FoundNode : BinNodePointer; 
+            var Found : boolean;       return status of operation 
+            var Higher: boolean);   returned true if the subtree height has 
+                                       increased *)
+
+var
+
+  Node_1,                    (* helpvariable to rotate nodes *)
+  Node_2: BinNodePointer; (* helpvariable to rotate nodes *)
+
+begin
+
+  if Node = nil then
+  begin  (* Value is not in tree, insert *)
+    Node:= New_node;
+    FoundNode := Node;
+    Higher:=  true;
+  end
+  else
+
+       (* New_node^.Value < Node^.Value *)
+    if NameStringLess(New_node^.NameP^, Node^.NameP^) then
+    begin  (* New Value is lower than actual Value *)
+      INSERT_TREE_NODE( New_node, Node^.left, FoundNode, Found, Higher);
+
+      if Higher then  (* left bransch has grown higher *)
+      case Node^.bal of
+
+        1: begin
+             Node^.bal:= 0;
+             Higher:= false;
+           end;
+
+        0: begin
+             Node^.bal:= -1;
+           end;
+
+       -1: begin  (* rebalance *)
+             Node_1:= Node^.left;
+
+             if Node_1^.bal = -1 then
+             begin  (* single LL rotation *)
+               Node^.left:= Node_1^.right;
+               Node_1^.right:= Node;
+               Node^.bal:= 0;
+               Node:= Node_1;
+             end
+             else
+
+             begin  (* double LR rotation *)
+               Node_2:= Node_1^.right;
+               Node_1^.right:= Node_2^.left;
+               Node_2^.left:= Node_1;
+               Node^.left:= Node_2^.right;
+               Node_2^.right:= Node;
+
+               if Node_2^.bal = -1 then
+                 Node^.bal:= 1
+               else
+                 Node^.bal:= 0;
+
+               if Node_2^.bal = 1 then
+                 Node_1^.bal:= -1
+               else
+                 Node_1^.bal:= 0;
+               Node:= Node_2;
+             end;
+             Node^.bal:= 0;
+             Higher:= false;
+           end;
+      end; (* end case Node^.bal of *)
+    end
+    else
+
+         (* New_node^.value > Node^.value *)
+      if NameStringLess(Node^.NameP^, New_Node^.NameP^) then
+      begin  (* New value is higher than actual value *)
+        INSERT_TREE_NODE( New_node, Node^.right, FoundNode, Found, Higher);
+
+        if Higher then  (* Right bransch has grown higher *)
+        case Node^.bal of
+
+         -1: begin
+               Node^.bal:= 0;
+               Higher:= false;
+             end;
+
+          0: begin
+               Node^.bal:= 1;
+             end;
+
+          1: begin  (* Rebalance *)
+               Node_1:= Node^.right;
+
+               if Node_1^.bal = 1 then
+               begin  (* single RR rotation *)
+                 Node^.right:= Node_1^.left;
+                 Node_1^.left:= Node;
+                 Node^.bal:= 0;
+                 Node:= Node_1;
+               end
+               else
+               begin  (* double RL rotation *)
+                 Node_2:= Node_1^.left;
+                 Node_1^.left:= Node_2^.right;
+                 Node_2^.right:= Node_1;
+                 Node^.right:= Node_2^.left;
+                 Node_2^.left:= Node;
+
+                 if Node_2^.bal = 1 then
+                   Node^.bal:= -1
+                 else
+                   Node^.bal:= 0;
+
+                 if Node_2^.bal = -1 then
+                   Node_1^.bal:= 1
+                 else
+                   Node_1^.bal:= 0;
+                 Node:= Node_2;
+               end;
+               Node^.bal:= 0;
+               Higher:= false;
+             end;
+        end; (* end case Node^.bal of *)
+      end
+      else
+      begin  (* New value is equal to actual value *)
+        Found := true;
+        FoundNode := Node;
+        Higher:= false;
+      end;
+end;  (* end INSERT_TREE_NODE *)
+
+function GetNameList; (* : BinNodePointer;*)
+begin
+  GetNameList := NameList;
+end;
+
+procedure DisposeANameList( 
+  var NodeP : BinNodePointer);
+begin (* DisposeANameList *)
+  if NodeP <> nil then begin
+    DisposeANameList(NodeP^.Left);
+    DisposeANameList(NodeP^.Right);
+    NodeP^.Left := AvailNameList;
+    NodeP^.Right := nil;
+    AvailNameList := NodeP;
+    NodeP := nil;
+  end;
+end; (* DisposeANameList *)
+
+procedure DisposeNameList;
+begin
+  DisposeANameList(NameList);
+end;
+
+function GetNewNameListNode;(*(
+  var Name  : NameString) : BinNodePointer;*)
+var
+  NodeP : BinNodePointer;
+begin (* GetNewNameListNode *)
+  if AvailNameList = nil then begin
+    new(NodeP);
+    with NodeP^ do begin
+      Left := nil;
+      Right := nil;
+      Bal := 0;
+      new(NameP);
+      Namep^ := Name;
+    end;
+  end
+  else begin
+    NodeP := AvailNameList;
+    AvailNameList := NodeP^.Left;
+    with NodeP^ do begin
+      Left := nil;
+      Bal := 0;
+      Namep^ := Name;
+    end;
+  end;
+  GetNewNameListNode := NodeP;
+end; (* GetNewNameListNode *)
+
+(*---------------------------------------------------------------------------*)
+
+function insertname;(*(
+      Name  : NameString;
+  var Found : boolean) : NameStringPointer;*)
+var
+  Higher : boolean;
+  NodeP  : BinNodePointer;
+  FoundNode : BinNodePointer;
+begin (* insertname *)
+  NodeP := GetNewNameListNode(Name);
+  Found := false;
+  INSERT_TREE_NODE(NodeP, NameList, FoundNode, Found, Higher);
+  insertname := FoundNode^.NameP;
+  if Found then
+    DisposeANameList(NodeP);
+end; (* insertname *)
+
+procedure InitNameList;
+begin
+  NameList := nil;
+  AvailNameList := nil;
+end;
+
+(********************************************************************) 
+(*                      NameString - Dynamic Memory Allocation      *) 
+(********************************************************************) 
+
+procedure InitNameStringPool;
+begin
+  GlobalNSPool.Avail := nil;
+  GlobalNSPool.Empty := nil;
+end;
+
+procedure NewNameString; (* (var NSP: NameStringPointer );*)
+(*var Temp: NSPoolP;*)
+begin
+(*
+  if GlobalNSPool.Avail=nil then
+    new( NSP )
+  else begin
+    Temp := GlobalNSPool.Avail;
+    GlobalNSPool.Avail := Temp^.Next;
+    Temp^.Next := GlobalNSPool.Empty;
+    GlobalNSPool.Empty := Temp;
+    NSP := Temp^.Data;
+  end;
+*)
+  new(NSP);
+  NSP^.Length := 0;
+end;
+
+procedure ReleaseNameString; (* (var NSP: NameStringPointer );*)
+(*var Temp: NSPoolP;*)
+begin
+  if NSP <> nil then begin
+(*
+    if GlobalNSPool.Empty=nil then begin
+      new(Temp);
+      Temp^.Next := GlobalNSPool.Avail;
+      GlobalNSPool.Avail := Temp;
+    end
+    else begin
+      Temp := GlobalNSPool.Empty;
+      GlobalNSPool.Empty := Temp^.Next;
+      Temp^.Next := GlobalNSPool.Avail;
+      GlobalNSPool.Avail := Temp;
+    end;
+    Temp^.Data := NSP;
+*)
+    dispose(NSP);
+    NSP := nil;
+  end;
+end;
+
+procedure SDTrefStringToRec (* (
+  var S : SDTrefString;
+  var R : SDTrefRec;
+  var Error : integer) *) ;
+
+(* Converts SDTrefString S to a record R (SDTrefRec). If an error is
+   detected Error is on exit the position in S where the error where
+   detected. If correct Error is 0. *)
+
+label 99;
+var
+  Len : integer;
+  ErrorFound, EndFound : Boolean;
+
+procedure SDTrefSkipSpaces;
+var Found : Boolean;
+begin
+  Found := false;
+  while not Found and (Len <= S.Length) do
+    if (S.Value[Len] = ' ') or (S.Value[Len] = chr(9)) then
+      Len := Len+1
+    else
+      Found := true;
+end;
+
+function SDTrefIsEnd : Boolean;
+begin
+  SDTrefIsEnd := false;
+  if S.Value[Len] = ')' then
+  begin
+    Len := Len+1;
+    SDTrefSkipSpaces;
+    if Len > S.Length then
+      SDTrefIsEnd := true;
+  end;
+end;
+
+function SDTrefGetInteger : integer;
+var
+  Temp : NameString;
+  Found : Boolean;
+begin
+  Temp.Length := 0;
+  Found := false;
+  while not Found and (Temp.Length <= NameStringLength) and
+                      (Len <= S.Length) do
+    if S.Value[Len] in ['0'..'9'] then
+    begin
+      Temp.Length := Temp.Length+1;
+      Temp.Value[Temp.Length] := S.Value[Len];
+      Len := Len+1;
+    end
+    else
+      Found := true;
+  if Temp.Length > 0 then
+    SDTrefGetInteger := NmStrToInteger(Temp)
+  else
+    SDTrefGetInteger := SDTrefUndefInt;
+end;
+
+begin
+  ErrorFound := true;
+  R.IsSDTGR := true;
+  R.FileName.Length := 0;
+  R.PageName.Length := 0;
+  R.ObjectId := SDTrefUndefInt;
+  R.XCoord := SDTrefUndefInt;
+  R.YCoord := SDTrefUndefInt;
+  R.LineNumber := SDTrefUndefInt;
+  R.Column := SDTrefUndefInt;
+
+  Len := 1;
+  if S.Length = 0 then goto 99;
+  if S.Value[1] <> '#' then goto 99;
+  Len := 2;
+  if S.Value[2] <> 'S' then goto 99;
+  Len := 3;
+  if S.Value[3] <> 'D' then goto 99;
+  Len := 4;
+  if S.Value[4] <> 'T' then goto 99;
+  Len := 5;
+  if S.Value[5] <> 'R' then goto 99;
+  Len := 6;
+  if S.Value[6] <> 'E' then goto 99;
+  Len := 7;
+  if S.Value[7] <> 'F' then goto 99;
+  Len := 8;
+  if S.Value[8] <> '(' then goto 99;
+  Len := 9;
+
+  if S.Value[9] = 'S' then
+  begin
+    Len := 10;
+    if S.Value[10] <> 'D' then goto 99;
+    Len := 11;
+    if S.Value[11] <> 'L' then goto 99;
+    Len := 12; SDTrefSkipSpaces;
+    if Len > S.Length then goto 99;
+
+    (* First comma *)
+    if S.Value[Len] <> ',' then goto 99;
+    Len := Len+1; SDTrefSkipSpaces;
+    if Len > S.Length then goto 99;
+
+    (* FileName *)
+    EndFound := false;
+    while not EndFound and (Len <= S.Length) do
+      if S.Value[Len] in [',', ')', '(', ' ', chr(9)] then
+        EndFound := true
+      else
+      begin
+        R.FileName.Length := R.FileName.Length+1;
+        if R.FileName.Length > S.Length then goto 99;
+        R.FileName.Value[R.FileName.Length] := S.Value[Len];
+        Len := Len+1;
+        if Len > S.Length then goto 99;
+      end;
+    SDTrefSkipSpaces;
+    if Len > S.Length then goto 99;
+
+    (* PageName *)
+    if S.Value[Len] = '(' then
+    begin
+      Len := Len+1; SDTrefSkipSpaces;
+      if Len > S.Length then goto 99;
+      EndFound := false;
+      while not EndFound and (Len <= S.Length) do
+        if S.Value[Len] in [',', ')', '(', ' ', chr(9)] then
+          EndFound := true
+        else
+        begin
+          R.PageName.Length := R.PageName.Length+1;
+          if R.PageName.Length > NameStringLength then goto 99;
+          R.PageName.Value[R.PageName.Length] := S.Value[Len];
+          Len := Len+1;
+          if Len > S.Length then goto 99;
+        end;
+      SDTrefSkipSpaces;
+      if Len > S.Length then goto 99;
+      if S.Value[Len] <> ')' then goto 99;
+      Len := Len+1; SDTrefSkipSpaces;
+      if Len > S.Length then goto 99;
+    end;
+    if SDTrefIsEnd then begin ErrorFound := false; goto 99; end;
+
+    if S.Value[Len] <> ',' then goto 99;
+    Len := Len+1; SDTrefSkipSpaces;
+    if Len > S.Length then goto 99;
+
+    (* ObjectId *)
+    R.ObjectId := SDTrefGetInteger;
+    SDTrefSkipSpaces;
+    if Len > S.Length then goto 99;
+
+    (* Object_Coordinates *)
+    if S.Value[Len] = '(' then
+    begin
+      Len := Len+1; SDTrefSkipSpaces;
+      if Len > S.Length then goto 99;
+      R.XCoord := SDTrefGetInteger;
+      SDTrefSkipSpaces;
+      if Len > S.Length then goto 99;
+      if S.Value[Len] <> ',' then goto 99;
+      Len := Len+1; SDTrefSkipSpaces;
+      if Len > S.Length then goto 99;
+      R.YCoord := SDTrefGetInteger;
+      SDTrefSkipSpaces;
+      if Len > S.Length then goto 99;
+      if S.Value[Len] <> ')' then goto 99;
+      Len := Len+1; SDTrefSkipSpaces;
+      if Len > S.Length then goto 99;
+    end;
+    if SDTrefIsEnd then begin ErrorFound := false; goto 99; end;
+
+    if S.Value[Len] <> ',' then goto 99;
+    Len := Len+1; SDTrefSkipSpaces;
+    if Len > S.Length then goto 99;
+
+    (* LineNumber *)
+    R.LineNumber := SDTrefGetInteger;
+    SDTrefSkipSpaces;
+    if Len > S.Length then goto 99;
+    if SDTrefIsEnd then begin ErrorFound := false; goto 99; end;
+
+    if S.Value[Len] <> ',' then goto 99;
+    Len := Len+1; SDTrefSkipSpaces;
+    if Len > S.Length then goto 99;
+
+    (* Column *)
+    R.Column := SDTrefGetInteger;
+    SDTrefSkipSpaces;
+    if Len > S.Length then goto 99;
+    if SDTrefIsEnd then ErrorFound := false;
+  end
+
+  else if S.Value[9] = 'T' then
+  begin
+    Len := 10;
+    R.IsSDTGR := false;
+    if S.Value[10] <> 'E' then goto 99;
+    Len := 11; 
+    if S.Value[11] <> 'X' then goto 99;
+    Len := 12;
+    if S.Value[12] <> 'T' then goto 99;
+    Len := 13; SDTrefSkipSpaces;
+    if Len > S.Length then goto 99;
+
+    (* First comma *)
+    if S.Value[Len] <> ',' then goto 99;
+    Len := Len+1; SDTrefSkipSpaces;
+    if Len > S.Length then goto 99;
+
+    (* FileName *)
+    EndFound := false;
+    while not EndFound and (Len <= S.Length) do
+      if S.Value[Len] in [',', ')', '(', ' ', chr(9)] then
+        EndFound := true
+      else
+      begin
+        R.FileName.Length := R.FileName.Length+1;
+        if R.FileName.Length > S.Length then goto 99;
+        R.FileName.Value[R.FileName.Length] := S.Value[Len];
+        Len := Len+1;
+        if Len > S.Length then goto 99;
+      end;
+    SDTrefSkipSpaces;
+    if Len > S.Length then goto 99;
+    if SDTrefIsEnd then begin ErrorFound := false; goto 99; end;
+
+    if S.Value[Len] <> ',' then goto 99;
+    Len := Len+1; SDTrefSkipSpaces;
+    if Len > S.Length then goto 99;
+
+    (* LineNumber *)
+    R.LineNumber := SDTrefGetInteger;
+    SDTrefSkipSpaces;
+    if Len > S.Length then goto 99;
+    if SDTrefIsEnd then begin ErrorFound := false; goto 99; end;
+
+    if S.Value[Len] <> ',' then goto 99;
+    Len := Len+1; SDTrefSkipSpaces;
+    if Len > S.Length then goto 99;
+
+    (* Column *)
+    R.Column := SDTrefGetInteger;
+    SDTrefSkipSpaces;
+    if Len > S.Length then goto 99;
+    if SDTrefIsEnd then ErrorFound := false;
+  end;
+
+99:
+  if ErrorFound then
+    Error := Len
+  else
+    Error := 0;
+end;
+
+
+procedure SDTrefRecToString  (* (
+  var R : SDTrefRec;
+  var S : SDTrefString) *) ;
+
+(* Converts SDTrefRec R to a string S (SDTrefString). If an error is
+   detected (string is not long enough) S.Length becomes 0 on exit *)
+
+label 99;
+var
+  Len, I : integer;
+  Temp : NameString;
+begin
+  S.Value[1] := '#';
+  S.Value[2] := 'S';
+  S.Value[3] := 'D';
+  S.Value[4] := 'T';
+  S.Value[5] := 'R';
+  S.Value[6] := 'E';
+  S.Value[7] := 'F';
+  S.Value[8] := '(';
+  S.Length := 8;
+  if R.IsSDTGR then
+  begin
+    Temp.Value[1] := 'S';
+    Temp.Value[2] := 'D';
+    Temp.Value[3] := 'L';
+    Temp.Value[4] := ',';
+    Temp.Length := 4;
+    S := Concatenatenamestrings(S, Temp);
+    Len := S.Length;
+    (* FileName *)
+    for I := 1 to R.FileName.Length do
+    begin
+      Len := Len+1;
+      if Len > SDTrefStringLength then goto 99;
+      S.Value[Len] := R.FileName.Value[I];
+    end;
+
+    (* PageName *)
+    if R.PageName.Length > 0 then
+    begin
+      Len := Len+1;
+      if Len > SDTrefStringLength then goto 99;
+      S.Value[Len] := '(';
+      for I := 1 to R.PageName.Length do
+      begin
+        Len := Len+1;
+        if Len > SDTrefStringLength then goto 99;
+        S.Value[Len] := R.PageName.Value[I];
+      end;
+      Len := Len+1;
+      if Len > SDTrefStringLength then goto 99;
+      S.Value[Len] := ')';
+    end;
+
+    (* ObjectId *)
+    if R.ObjectId <> SDTrefUndefInt then
+    begin
+      Len := Len+1;
+      if Len > SDTrefStringLength then goto 99;
+      S.Value[Len] := ',';
+      Temp := integertonmstr(R.ObjectId);
+      for I := 1 to Temp.Length do
+      begin
+        Len := Len+1;
+        if Len > SDTrefStringLength then goto 99;
+        S.Value[Len] := Temp.Value[I];
+      end;
+    end;
+
+    (* Object_Coordinates *)
+    if R.XCoord <> SDTrefUndefInt then
+    begin
+      Len := Len+1;
+      if Len > SDTrefStringLength then goto 99;
+      S.Value[Len] := '(';
+      Temp := integertonmstr(R.XCoord);
+      for I := 1 to Temp.Length do
+      begin
+        Len := Len+1;
+        if Len > SDTrefStringLength then goto 99;
+        S.Value[Len] := Temp.Value[I];
+      end;
+      Len := Len+1;
+      if Len > SDTrefStringLength then goto 99;
+      S.Value[Len] := ',';
+      Temp := integertonmstr(R.YCoord);
+      for I := 1 to Temp.Length do
+      begin
+        Len := Len+1;
+        if Len > SDTrefStringLength then goto 99;
+        S.Value[Len] := Temp.Value[I];
+      end;
+      Len := Len+1;
+      if Len > SDTrefStringLength then goto 99;
+      S.Value[Len] := ')';
+    end;
+
+    (* LineNumber *)
+    if R.LineNumber <> SDTrefUndefInt then
+    begin
+      Len := Len+1;
+      if Len > SDTrefStringLength then goto 99;
+      S.Value[Len] := ',';
+      Temp := integertonmstr(R.LineNumber);
+      for I := 1 to Temp.Length do
+      begin
+        Len := Len+1;
+        if Len > SDTrefStringLength then goto 99;
+        S.Value[Len] := Temp.Value[I];
+      end;
+    end;
+
+    (* Column *)
+    if R.Column <> SDTrefUndefInt then
+    begin
+      Len := Len+1;
+      if Len > SDTrefStringLength then goto 99;
+      S.Value[Len] := ',';
+      Temp := integertonmstr(R.Column);
+      for I := 1 to Temp.Length do
+      begin
+        Len := Len+1;
+        if Len > SDTrefStringLength then goto 99;
+        S.Value[Len] := Temp.Value[I];
+      end;
+    end;
+
+    Len := Len+1;
+    if Len > SDTrefStringLength then goto 99;
+    S.Value[Len] := ')';
+  end
+
+  else  (* if PR *)
+
+  begin
+    Temp.Value[1] := 'T';
+    Temp.Value[2] := 'E';
+    Temp.Value[3] := 'X';
+    Temp.Value[4] := 'T';
+    Temp.Value[5] := ',';
+    Temp.Length := 5;
+    S := Concatenatenamestrings(S, Temp);
+    Len := S.Length;
+    (* FileName *)
+    for I := 1 to R.FileName.Length do
+    begin
+      Len := Len+1;
+      if Len > SDTrefStringLength then goto 99;
+      S.Value[Len] := R.FileName.Value[I];
+    end;
+
+    (* LineNumber *)
+    if R.LineNumber <> SDTrefUndefInt then
+    begin
+      Len := Len+1;
+      if Len > SDTrefStringLength then goto 99;
+      S.Value[Len] := ',';
+      Temp := integertonmstr(R.LineNumber);
+      for I := 1 to Temp.Length do
+      begin
+        Len := Len+1;
+        if Len > SDTrefStringLength then goto 99;
+        S.Value[Len] := Temp.Value[I];
+      end;
+    end;
+
+    (* Column *)
+    if R.Column <> SDTrefUndefInt then
+    begin
+      Len := Len+1;
+      if Len > SDTrefStringLength then goto 99;
+      S.Value[Len] := ',';
+      Temp := integertonmstr(R.Column);
+      for I := 1 to Temp.Length do
+      begin
+        Len := Len+1;
+        if Len > SDTrefStringLength then goto 99;
+        S.Value[Len] := Temp.Value[I];
+      end;
+    end;
+
+    Len := Len+1;
+    if Len > SDTrefStringLength then goto 99;
+    S.Value[Len] := ')';
+  end;
+
+99:
+  if Len > SDTrefStringLength then
+    S.Length := 0
+  else
+    S.Length := Len;
+end;
+
+function NmStrToErrStr;(*(
+  NmStr : NameString) : ErrorString;*)
+var
+  ErrStr : ErrorString;
+  i : integer;
+begin
+  for i := 1 to NmStr.Length do
+    ErrStr.Value[i] := NmStr.Value[i];
+  ErrStr.Length := NmStr.Length;
+  NmStrToErrStr := ErrStr;
+end;
+
+function ErrStrToNmStr;(*(
+  ErrStr : ErrorString) : NameString;*)
+var
+  NmStr : NameString;
+  i : integer;
+  n : integer;
+begin
+  if ErrStr.Length < NameStringLength then
+    n := ErrStr.Length
+  else
+    n := NameStringLength;
+  for i := 1 to n do
+    NmStr.Value[i] := ErrStr.Value[i];
+  NmStr.Length := n;
+  ErrStrToNmStr := NmStr;
+end;
+
+(*------------------------------------------------------------------*)
+(*                   GetTextRef                                     *)
+(*------------------------------------------------------------------*)
+function GetTextRef;(*(
+  FNm : NameString;
+  Ln : integer;
+  Col : integer) : NameString;*)
+var
+  Ref : SDTrefRec;
+  S : NameString;
+begin(* GetTextRef *)
+  Ref.IsSDTGR := false;
+  Ref.FileName := FNm;
+  Ref.LineNumber := Ln;
+  Ref.Column := Col;
+  SDTrefRecToString(Ref, S);
+  GetTextRef := S;
+end; (* GetTextRef *)
+
+ (* module COMMON *)
diff --git a/test/etags/perl-src/htlmify-cystic 
b/test/etags/perl-src/htlmify-cystic
new file mode 100644
index 0000000..de150a7
--- /dev/null
+++ b/test/etags/perl-src/htlmify-cystic
@@ -0,0 +1,382 @@
+#! /uns/bin/perl -w
+
+# htmlify-cystic-l-faq:  turn text version of cystic-l faq into html
+# run like this:   htmlify-cystic-l-faq < cystic-l-faq-all
+
+# Ron Trueworthy should put the date on the FAQ.
+
+use English;
+use Carp;
+use strict;
+
+my @section_name;
+my @appendix_name;
+
+my @section_toc;
+my @appendix_toc;
+
+my $new_tag = "[NEW]";
+
+if (! -d "faq")
+{ die "Can't find faq directory"; }
+
+# Initially undefined
+my $appendix;
+my $section;
+my $subsection;
+my $subsubsection;
+
+my $this_file_toc = "";
+my %file_tocs;
+
+my @output_files = ();
+my $file_index = 0;
+
+my $output_file;
+
+my $line;
+while (defined($line = <>))
+{
+  ### Message headers
+  if ($line =~ /^From /)
+    { while ($line ne "\n")
+       { $line = <>; } }
+
+  if ($line =~ /^See PART ONE of this FAQ for/)
+    { while (defined($line = <>) && ($line ne "\n"))
+       { }
+      next; }
+
+  if ($line =~ /^\s*[-+]+$/)
+    { next; }
+
+  ### File headers
+  if ($line =~ /^\s*CYSTIC-L Frequently Asked Questions - PART (.*)\n$/)
+    { # print "part $1\n";
+      if ($1 ne "ONE")
+       { next; }
+      if ($output_file)
+       { die "output_file shouldn't have been set yet: $output_file"; }
+      $output_file = "faq/index.html";
+      open(OUTPUT, ">$output_file") || die "Couldn't open $output_file";
+      select OUTPUT;
+      print "<HEAD>
+<TITLE>CYSTIC-L FAQ Table of Contents
+</TITLE>
+</HEAD>
+<BODY>
+<H1>CYSTIC-L Frequently Asked Questions</H1>
+<h2>Knowledge Is Power</h2>
+";
+      next; }
+
+  if ($line =~ /^\s*~ Knowledge Is Power ~$/)
+    { next; }
+
+  ### Table of contents
+  if ($line =~ /^\s*~ FAQ Table of Contents ~$/)
+      { read_toc();
+       print "<hr><a href=\"../\">Info-Zone</a> <a 
href=\"../../\">CF-WEB</a>\n";
+       close(OUTPUT);
+       next;
+      }
+
+  if ($line =~ /^PART /)
+    { next; }
+
+  if ($line =~ s/^>?APPENDIX ([A-Z])\.\s*//)
+    { if (!defined($appendix))
+       { if ($1 ne "A")
+           { die "First appendix is $1"; } }
+      elsif ($1 ne chr(ord($appendix)+1))
+       { die "Appendix $1 follows Appendix $appendix"; }
+
+      file_end();
+      close(OUTPUT);
+      $appendix = $1;
+      $section = undef;
+      $subsection = undef;
+      $subsubsection = undef;
+      $output_file = section_url_base();
+      open(OUTPUT, "> faq/$output_file") || die "Can't open faq/$output_file";
+      select OUTPUT;
+
+      chomp($line);
+      print "<title>$line</title>\n<h1>$line</h1>\n";
+      if (defined($file_tocs{$output_file}) && $file_tocs{$output_file})
+       { print "Contents: $file_tocs{$output_file}\n"; }
+      next; }
+
+  if (($line =~ /^>?([0-9]+)\.\s+/) && (!defined($section) || ($1 == 
$section+1)))
+    { $line =~ s/^>?([0-9]+)\.\s+//;
+      if (!defined($appendix))
+       { # should do some more here
+         if (defined($section))
+           { file_end(); }
+         close(OUTPUT); }
+      $section = $1;
+      $subsection = undef;
+      $subsubsection = undef;
+      $output_file = section_url_base();
+      if (!defined($appendix))
+       { open(OUTPUT, "> faq/$output_file") || die "Can't open 
faq/$output_file";
+         select OUTPUT;
+         chomp($line);
+         print "<title>$line</title>\n<h1>$line</h1>\n";
+         if (defined($file_tocs{$output_file}) && $file_tocs{$output_file})
+           { print "Contents: $file_tocs{$output_file}\n"; }
+         next; }
+    }
+
+  if ($line =~ s/^>?o\s+//)
+    { $line =~ s/^>//;         # sometimes the > follows the itemization
+      if (!defined($subsection))
+       { $subsection = 1; }
+      else
+       { $subsection++; }
+      $subsubsection = undef;
+      print "<h2>", section_name($line), "</h2>\n";
+      next; }
+
+  if ($line =~ s/^>?-\s+//)
+    { $line =~ s/^>//;         # sometimes the > follows the itemization
+      if (!defined($subsubsection))
+       { $subsubsection = 1; }
+      else
+       { $subsubsection++; }
+      print "<h3>", section_name($line), "</h3>\n";
+      next; }
+
+  ### A paragraph of ordinary text
+  if ($line !~ /^\s*$/)
+    { print "<p>$line";
+      while (defined($line = <>) && ($line ne "\n"))
+       { print $line; }
+      print "</p>\n";
+    }
+
+}
+file_end();
+
+my $subsection_marker;
+
+my $new;
+
+sub read_toc ()
+{ # These variables are initially undefined
+  if (defined($appendix)
+      || defined($section)
+      || defined($subsection)
+      || defined($subsubsection))
+    { die "some value should have been undefined when calling read_toc: 
`$appendix' `$section' `$subsection' `$subsubsection'"; }
+
+  while (defined($line = <>) && $line)
+    { if ($line =~ /^\s*$/)
+       { next; }
+      if ($line =~ /^\s*\((Portions updated since.*)>\)\n/)
+       { print "$1$new_tag<p>\n";
+         next; }
+      if ($line =~ /^PART (.*)$/)
+       #       { if ($MATCH eq "ONE")
+       #           { print ... }
+       { next; }
+      if ($line eq "APPENDICES\n")
+       { next; }
+      if ($line =~ /^\s*INDEX/)
+       { next; }
+
+      if ($line =~ /^\s*[-+]+$/)
+       { finish_appendices();
+         if (defined($appendix)
+             || defined($section)
+             || defined($subsection)
+             || defined($subsubsection))
+           { die "some value should have been undefined when exiting read_toc: 
`$appendix' `$section' `$subsection' `$subsubsection'"; }
+         return; }
+
+      $new = ($line =~ s/>//);
+
+      # # Not sure if this is the right place to do this.
+      # if (($line !~ /^\s*([-o]|[0-9A-Z]+\.|APPENDIX [A-Z]\.)/)
+      #          && ($line !~ /[ .]*[0-9]+$/))
+      #        { die "What line? $line"; }
+      while (!($line =~ s/[ .]*[0-9]+$//))
+       { $line .= <>; }
+      chomp($line);
+
+      if ($line =~ s/^\s*APPENDIX ([A-Z])\.\s*//)
+       { finish_sections();
+         if (!defined($appendix))
+           { if ($1 ne "A")
+               { die "First appendix is $1"; }
+             print "Appendices\n";
+             print "<ol type=\"A\" start=\"$1\">\n"; }
+         elsif ($1 ne chr(ord($appendix)+1))
+           { die "Appendix $1 follows Appendix $appendix"; }
+         $appendix = $1;
+         $appendix_name[ord($appendix)-ord('A')+1] = $line;
+         my $entry = toc_line($line);
+         print $entry;
+         push(@output_files,section_url_base());
+         next; }
+
+      if ($line =~ s/^\s*([0-9]+)\.\s*//)
+       { finish_subsections();
+         if (!defined($section))
+           { my $entry = "<ol start=$1>\n";
+             print $entry;
+             if (defined($appendix))
+               { $this_file_toc .= $entry; } }
+         elsif ($1 != $section+1)
+           { die "Section $1 follows section $section"; }
+         $section = $1;
+         $section_name[$section] = $line;
+         my $entry = "  " . toc_line($line);
+         print $entry;
+         if (defined($appendix))
+           { $this_file_toc .= $entry; }
+         else
+           { push(@output_files,section_url_base()); }
+         next; }
+
+      if ($line =~ s/^\s*o\s+//)
+       { if (!defined($subsection))
+           { $subsection = 1;
+             my $entry = "  <ul>\n";
+             print $entry;
+             $this_file_toc .= $entry;
+             $subsection_marker = "ul"; }
+         else
+           { finish_subsubsections();
+             $subsection++; }
+         my $entry = "    " . toc_line($line);
+         print $entry;
+         $this_file_toc .= $entry;
+         next; }
+
+      if ($line =~ s/^\s*([A-Z])\.\s+//)
+       { finish_subsubsections();
+         if (!defined($subsection))
+           { my $entry = "  <ol type=\"A\" start=\"$1\">\n";
+             print $entry;
+             $this_file_toc .= $entry;
+             $subsection_marker = "ol"; }
+         else
+           { if ($1 ne chr(ord($subsection)+1))
+               { die "Subsection $1 follows subsection $subsection"; } }
+         $subsection = $1;
+         my $entry = "      " . toc_line($line);
+         print $entry;
+         $this_file_toc .= $entry;
+         next; }
+
+      if ($line =~ s/^\s*-\s+//)
+       { if (!defined($subsubsection))
+           { $subsubsection = 1;
+             my $entry = "    <ul>\n";
+             print $entry;
+             $this_file_toc .= $entry; }
+         else
+           { $subsubsection++; }
+         my $entry = "        " . toc_line($line);
+         print $entry;
+         $this_file_toc .= $entry;
+         next; }
+
+      # Itemized line without leading "o" (grrr).
+       if (!defined($subsection))
+         { my $entry = "  <ul>\n";
+           print $entry;
+           $this_file_toc .= $entry;
+           $subsection = 1;
+           $subsection_marker = "ul"; }
+       else
+         { $subsection++; }
+       $line =~ s/^\s*//;
+      my $entry = "      " . toc_line($line);
+      $this_file_toc .= $entry;
+      print $entry;
+    }
+}
+
+sub finish_subsubsections ()
+{ if (defined($subsubsection))
+    { my $entry = "      </ul>\n";
+      print $entry;
+      $this_file_toc .= $entry;
+      $subsubsection = undef; } }
+
+sub finish_subsections ()
+{ finish_subsubsections();
+  if (defined($subsection))
+    { my $entry = "    </$subsection_marker>\n";
+      print $entry;
+      $this_file_toc .= $entry;
+      $subsection = undef;
+      if (!defined($appendix))
+       { $file_tocs{section_url_base()} = $this_file_toc;
+         $this_file_toc = ""; } } }
+
+sub finish_sections ()
+{ finish_subsections();
+  if (defined($section))
+    { my $entry = "  </ol>\n";
+      print $entry;
+      if (defined($appendix))
+       { $this_file_toc .= $entry;
+         $file_tocs{section_url_base()} = $this_file_toc;
+         $this_file_toc = ""; }
+      $section = undef; } }
+
+sub finish_appendices ()
+{ finish_sections();
+  if (defined($appendix))
+    { print "</ol>\n";
+      $appendix = undef; } }
+
+sub section_url_base ()
+{ if (!defined($appendix) && !defined($section))
+    { die "undefined appendix and section"; }
+  return (defined($appendix) ? "app-$appendix.html" : "sec-$section.html"); }
+
+sub section_url_name ()
+{ my $sans_subsubsection
+    = (defined($appendix)
+       ? (defined($section)
+         ? "sec-$section" . (defined($subsection)
+                               ? "-$subsection" : "")
+         : "")
+       : (defined($subsection) ? "ssec-$subsection" : ""));
+  if (defined($subsubsection))
+    { $sans_subsubsection . "-$subsubsection"; }
+  else
+    { $sans_subsubsection; } }
+
+sub section_url ()
+{ my $base = section_url_base();
+  my $name = section_url_name();
+  if ($name)
+    { return $base . "\#" . $name; }
+  else
+    { return $base; } }
+
+
+sub section_href ($)
+{ my ($text) = @_;
+  return "<a href=\"" . section_url() . "\">$text</a>"; }
+
+sub section_name ($)
+{ my ($text) = @_;
+  return "<a name=\"" . section_url_name() . "\">$text</a>"; }
+
+sub toc_line ($)
+{ return " <LI>" . section_href($line) . ($new ? " $new_tag" : "") . "\n"; }
+
+sub file_end ()
+{ print "\n\n<hr>\n"
+    . (($file_index < $#output_files)
+       ? "<a href=\"$output_files[$file_index+1]\">Next</a> " : "")
+      . (($file_index > 0)
+        ? "<a href=\"$output_files[$file_index-1]\">Previous</a> " : "")
+       . "<a href=\"./\">FAQ</a> <a href=\"../\">Info-Zone</a> <a 
href=\"../../\">CF-WEB</a>\n";
+  $file_index++; }
diff --git a/test/etags/perl-src/kai-test.pl b/test/etags/perl-src/kai-test.pl
new file mode 100644
index 0000000..51b6672
--- /dev/null
+++ b/test/etags/perl-src/kai-test.pl
@@ -0,0 +1,39 @@
+#!/usr/bin/perl
+sub f1 {
+        print "f1\n";
+}
+
+sub main::f2 {
+        print "f2\n";
+}
+
+package Foo;
+
+sub f3 {
+        print "f3\n";
+}
+
+sub Bar::f4 {
+        print "f4\n";
+}
+
+package Bar;
+
+sub f5 {
+        print "f5\n";
+}
+
+package Foo::Bar;
+
+sub f6 {
+        print "f6\n";
+}
+
+package main;
+
+sub f7 {
+        print "f7\n";
+}
+
+exit 0;
+# end of Perl code
diff --git a/test/etags/perl-src/mirror.pl b/test/etags/perl-src/mirror.pl
new file mode 100644
index 0000000..2bbbb76
--- /dev/null
+++ b/test/etags/perl-src/mirror.pl
@@ -0,0 +1,4149 @@
+#!/usr/bin/perl
+# Make local directories mirror images of a remote sites
+#
+#
+# Copyright (C) 1990 - 1998   Lee McLoughlin
+#
+# Permission to use, copy, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice appear in all copies and
+# that both that copyright notice and this permission notice appear
+# in supporting documentation.
+#
+# Permission to modify the software is granted, but not the right to
+# distribute the modified code.  Modifications are to be distributed
+# as patches to released version.
+#
+# This software is provided "as is" without express or implied warranty.
+#
+#
+# The Debian system patched this file after installation to add:
+# ls-lR file patching 2001/09/29
+#      Copyright (C) 1999-2001 Ian Maclaine-cross <address@hidden>
+# and other changes.
+# Debian patches are copyright by their authors and you may use them only
+# under the conditions of the General Public License in file GPL.
+#
+# $Id: mirror.pl,v 2.9 1998/05/29 19:01:07 lmjm Exp lmjm $
+# $Log: mirror.pl,v $
+# Revision 2.9  1998/05/29 19:01:07  lmjm
+# Lots of changes.  See CHANGES since 2.8 file.
+#
+# Revision 2.8  1995/08/06  14:03:52  lmjm
+# Trap a wider range of signals to aid in debugging under perl5
+# Avoid looping processing symlinks.
+#
+# Revision 2.7  1995/08/06  13:59:00  lmjm
+# No longer require socket.ph in this module.
+# Escape at signs and dollars for perl5
+# Make sure  proxy_gateway is at least null.
+# Added ls_fix_mappings, failed_gets_excl, store_remote_listing, passive_ftp
+#  and using_socks.
+# Stop using dollar star as perl5 has dropped it.
+# Process local directory listing before connecting to remote.
+# Allow for remote_account pasword.
+# Only one arg to undef, for early perl5's
+# Use all capitals for file descriptors.
+# Use ftp'close not ftp'quit
+# Avoid file renaming under MACos
+# Corrected file deleting.
+#
+# Revision 2.6  1994/06/10  18:28:27  lmjm
+# Dropped debug statement.
+#
+# Revision 2.5  1994/06/06  18:39:21  lmjm
+# Don't have . in the extra_path.
+# Have 'internet-gateway' as the default proxy_gateway when INTERNET_HOST 
unset.
+# Allow strip_cr (from Andrew).
+# More symlink handling...
+# Set type for vms correctly.
+# Changed response from ftp'delete, also corrected path used.
+#
+# Revision 2.4  1994/04/29  20:11:09  lmjm
+# Use correct variable for hostname
+#
+# Revision 2.3  1994/01/31  18:31:22  lmjm
+# Allow for funny chars in filenames when calling the shell (Erez).
+# Added compress_size_floor to avoid compressing small files (David).
+# Added get_missing to just delete files not on remote system (Pieter).
+# Don't try to delete old dirs if no time set (Pieter).
+# Zap .dir$$ files, and keep then in $big_temp.
+# Pretty print time in comparisons.
+# Move the large comparision conditionals into routines (David).
+# Allow for sites with limited filename lengths.
+# Allow for deleted files when doing deletes.
+# Don't delete dirs that are really symlinks.
+#
+# Revision 2.2  1993/12/14  11:09:15  lmjm
+# Allow for no flock.
+# Use installed socket.ph.
+# Allow for system 5.
+# Use percentage defaults on max_delete_*
+# Checkout regexps before using.
+# Allow for extra leading | in local_ignore.
+# Return better exit codes.
+# Fixups for recurse_hard.
+# Smarter symlink handling.
+#
+# Revision 2.1  1993/06/28  14:59:00  lmjm
+# Full 2.1 release
+#
+#
+
+$#ARGV >= 0 or die("Try `man mirror` for help.\n");  
+
+# Make sure we don't go recursive processing signals
+$sigs = 0;
+$max_sigs = 10;
+
+# Am I on windoze?
+$on_win = ($^O =~ /mswin/i);
+$path_sep = $on_win ? ';' : ':';
+$file_sep = $on_win ? '\\' : '/';
+# Internally mirror uses / but when looking at names from environment allow
+# for either
+$file_sep_pat = $on_win ? "[\\/]" : "/"; # allow for c:\win/fred on windoze
+
+
+# Default settings file loaded from a directory in PERLLIB
+$defaults_file = 'mirror.defaults';
+$load_defaults = 1;
+
+# Try to find the default location of various programs via
+# the users PATH then using $extra_path
+if( ! $on_win ){
+       $extra_path = 
'/usr/local/bin:/usr/new/bin:/usr/public/bin:/usr/ucb:/usr/bin:/bin:/etc:/usr/etc:/usr/local/etc';
+}
+if( $extra_path ne '' ){
+       $ENV{ 'PATH' } .= $path_sep . $extra_path;
+}
+
+&trap_signals();
+
+# If compressing a local file to send need somewhere to store the temp
+# compressed version.
+$big_temp = '/var/tmp';
+
+# Hopefully we have flock.
+$can_flock = 1;
+
+# no debugging by default
+$debug = 0;
+
+# NOTE:
+#  It is not an error for a program not to be found in the path as the user
+# may be setting it as part of the package details or defaults.
+
+# Used by the save_deletes option
+$mv_prog = 'mv -f';
+
+# compress must be able to take the -d arg to cause it to uncompress.
+$sys_compress_prog = &find_prog( 'compress' );
+$sys_compress_suffix = 'Z';
+
+# Like compress gzip must be able to take -d
+if( $gzip_prog = &find_prog( 'gzip' ) ){
+       # Force maximum compression with gzip
+       $gzip_level = ' -9';
+       $gzip_prog .= $gzip_level;
+       $gzip_suffix = 'gz';
+       $old_gzip_suffix = 'z';
+}
+
+# For remote systems with gzipped patches to their ls-lR.gz file.  The
+# gzipped patch file is a unified diff between old and new ls-lR.  The
+# times file has modification times in decimal epoch seconds of the
+# old and new ls-lR file on its first and second lines respectively.
+if( $patch_prog = &find_prog( 'patch' ) ){
+       $patch_local = '-usNT';
+       $patch_UTC = '-usNZ';
+}
+$patch_suffix = '.pth';            # These suffices distinct
+$patch_gzip_suffix = '.patch.gz';  # if truncated locally.
+$times_suffix = '.times';
+
+# A mail program that can be called as: "$mail_prog person_list'
+# Can be overridden with the mail_prog keyword.
+# If you use $mail_subject to pass extra arguments then remember that
+# the mail program will need to know how to handle them.
+$mail_prog = &find_prog( 'mailx' );
+if( ! $mail_prog ){
+       $mail_prog = &find_prog( 'Mail' );
+}
+if( ! $mail_prog ){
+       $mail_prog = &find_prog( 'mail' );
+}
+
+# Used to remove directory heirarchies.  This program is passed the -rf
+# arguments.
+$rm_prog = &find_prog( 'rm' );
+
+# Generate checksums
+$sum_prog = &find_prog( 'sum' );
+
+# SPECIAL NOTE: This is eval'd, so DONT put double-quotes (") in it.
+# You can get local variables to appear as in the second example:
+$mail_subject = '-s \'mirror update\'';
+# $mail_subject = ' -s \'mirror update of $package\'';
+
+# When scanning the local directory, how often to prod the remote
+# system to keep the connection alive
+$prod_interval = 60;
+
+# Put the directory that mirror is actually in at the start of PERLLIB.
+$dir = &real_dir_from_path( $0 );
+unshift( @INC, $dir );
+
+# Debian GNU/Linux stores mirror.defaults in /etc/mirror
+$debian_defs = '/etc/mirror';
+unshift( @INC, $debian_defs ) if -d $debian_defs;
+
+# This, when eval'd, will get the current dir under windows NT/95
+$win_getcwd = 'Win32::GetCwd';
+       
+# Make sure that your PERLLIB environment variable can get you
+# all these or that they are installed.
+require 'ftp.pl';
+require 'lsparse.pl';
+require 'dateconv.pl';
+
+# Find some local details
+# The current directory
+$home = &cwd();
+# The hostname
+$hostname_cmd = &find_prog( 'hostname' );
+if( $hostname_cmd ne '' ){
+       chop( $hostname = `$hostname_cmd` );
+}
+if( $hostname eq '' ){
+       $hostname_cmd = &find_prog( 'uname' );
+       if( $hostname_cmd ne '' ){
+               chop( $hostname = `$hostname_cmd -n` );
+               if( $hostname eq '' ){
+                       chop( $hostname = `$hostname_cmd -l` );
+               }
+       }
+}
+if( $hostname eq '' ){
+       $hostname = 'localhost';
+}
+
+if( $hn = (gethostbyname( "$hostname" ))[ 0 ] ){
+       $hostname = $hn;
+}
+
+# Some systems hold the username in $USER, some in $LOGNAME.
+$me = $ENV{'USER'} || $ENV{'LOGNAME'};
+
+# Files matching this pattern are usually compressed.
+$squished = '\.(Z|z|gz)$';
+
+# special /bin/sh chars that must be escaped.
+$shell_metachars = '\"|\$|`|\\\\';
+
+# Remote directory parsing fail if not given input every readtime seconds.
+$parse_time = 600;
+
+# Timeout are not fatal unless you get more than this number of them.
+$max_timeouts = 20;
+
+# If connected to a site then this holds the site name.
+$connected = '';
+
+# Umask setting.
+$curr_umask = sprintf( "0%o", umask );
+
+# mapping from a pathname to a number - just to make the keys to assoc arrays
+# shorter.
+$map_init = 1; # just so I know 0 is invalid
+
+$tmp = "/tmp";
address@hidden = ( 'local_map', 'remote_map' );
+
+# A reasonable set of defaults
+#   these are in the same order as the documentation - except where order is
+#   important
+$default{ 'hostname' } = $hostname; # The LOCAL hostname
+
+$default{ 'package' } = '';    # should be a unique handle for the "lump" to 
be mirrored
+$default{ 'site' } = '';       # site to connect to
+$default{ 'remote_dir' } = ''; # remote directory to mirror
+$default{ 'local_dir' } = '';  # local directory to copy into
+
+$default{ 'remote_user' } = 'anonymous';  # the remote guest account name
+$default{ 'remote_password' } = "address@hidden";
+$default{ 'remote_account' } = ''; # remote account name/passwd (for systems
+                                  # that use it.)
+# Used for group and gpass.  (As in ftp.1 site group/gpass commands.)
+$default{ 'remote_group' } = '';
+$default{ 'remote_gpass' } = '';
+$default{ 'timeout' } = 120;   # timeout ftp requests after this many seconds
+$default{ 'failed_gets_excl' } = ''; # failed messages to ignore while getting,
+                               # if failed to ftp'get
+$default{ 'ftp_port' } = 21;   # port number of remote ftp daemon
+$default{ 'proxy' } = 0;       # normally use regular ftp
+$default{ 'proxy_ftp_port' } = 4514; # default from Sun
+$default{ 'proxy_gateway' } = "$ENV{ 'INTERNET_HOST' }";
+                               # Gateway to use for proxy
+                               # (Null if environment not set.)
+$default{ 'using_socks' } = 0; # Set the default perl version to the non-SOCKS 
one.
+$default{ 'passive_ftp' } = 0; # Set the default ftp usage not to use passive 
(PASV) ftp.
+$default{ 'retry_call' } = 1;  # Retry the call if it fails first time
+$default{ 'disconnect' } = 0;  # Force close at end of package EVEN if
+                               # next package is to the same site
+$default{ 'remote_idle' } = '';        # Set the remote idle timer to this
+
+$default{ 'get_patt' } = ".";  # regex of pathnames to retrieve
+$default{ 'exclude_patt' } = ''; # regex of pathnames to ignore
+$default{ 'local_ignore' } = ''; # regex of local pathnames to totally ignore
+$default{ 'get_newer' } = 1;   # get remote file if its date is newer than 
local
+$default{ 'get_size_change' } = 1; # get the file if size if different than 
local
+$default{ 'make_bad_symlinks' } = 0; # prevent symlinks to non-existant files
+$default{ 'follow_local_symlinks' } = ''; # Follow symlinks to pathnames 
matching this regexp.
+$default{ 'get_symlink_files' } = 0; # If true gets file and makes symlink 
otherwise bad. 
+$default{ 'get_missing' } = 1; # Set get_missing to 0 to just delete files not 
on remote system
+$default{ 'get_file' } = 1;    # perform get, not put by default
+$default{ 'text_mode' } = 0;   # transfer in binary mode by default
+$default{ 'strip_cr' } = 0;    # Delete \r (usefull when transfering from
+                               # mainframes -- set text_mode and strip_cr)
+$default{ 'vms_keep_versions' } = 1; # Keep multiple VMS versions
+$default{ 'vms_xfer_text' } = 'readme$|info$|listing$|\.c$';
+                               # pattern of VMS files to xfer in TEXT mode
+                               # (Case insensitive)
+$default{ 'name_mappings' } = '';# remote to local pathname mappings
+                               # used to change layout or zap weird chars
+                               # (eg s:old:new)
+$default{ 'external_mapping' } = '';# remote to local mapping by external 
routine
+$default{ 'update_local' } = 0;        # Don't just update local dirs
+$default{ 'max_days' } = 0;    # Ignore age of file
+$default{ 'max_size' } = 0;    # If non-zero dont get files larger than this
+$default{ 'chmod' } = 1;       # perform a chmod after an xfer
+
+$default{ 'user' } = '';       # UID/user name to give to local pathnames
+$default{ 'group' } = '';      # GID/group name to give to local pathnames
+$default{ 'mode_copy' } = 0;   # true indicates to copy the mode bits
+$default{ 'file_mode' } = 0444;        # Mode to give files created locally
+$default{ 'dir_mode' } = 0755; # mode to give directories created locally
+$default{ 'force' } = 0;       # don't force by default
+$default{ 'umask' } = 07000; # DONT allow setuid things by default
+$default{ 'use_timelocal' }  = 1; # Use local time NOT gmt to timestamp files. 
(See also the -T flag.)
+$default{ 'force_times' } = 1; # Force local file times to match the original
+
+$default{ 'do_deletes' } = 0;  # delete dest files if not in src tree
+$default{ 'delete_patt' } = '.';# delete only files which match this pattern
+$default{ 'delete_get_patt' } = 0;# true: set delete_patt to get_patt
+$default{ 'delete_excl' } = ''; # regex of local pathnames to ignore when 
deleting
+$default{ 'max_delete_files' } = '10%'; # Any more than this and DONT delete
+$default{ 'max_delete_dirs' } = '10%'; # Any more than this and DONT delete
+$default{ 'save_deletes' } = 0;        # save local files if not in remote
+$default{ 'save_dir' } = 'Old';        # directory in which to create tree for 
keeping
+                               # files no longer in remote
+$default{ 'store_remote_listing' } = ''; # Where to store remote site listings 
on local system
+
+$default{ 'compress_patt' } = ''; # compress files matching this pattern
+$default{ 'compress_excl' } = $squished; # dont compress regexp (case 
insensitive)
+$default{ 'compress_prog' } = $sys_compress_prog; # Program to compress files.
+$default{ 'compress_suffix' } = $sys_compress_suffix; # Suffix on compressed 
files
+$default{ 'compress_conv_patt' } = '(\.Z|\.taz)$';
+       # compress->gzip files matching this pattern
+$default{ 'compress_conv_expr' } = 's/\.Z$/.gz/;s/\.taz$/.tgz/';
+       # perl expressions to convert names of files from compress->gzip
+$default{ 'compress_size_floor' } = 0;  # don't compress files < this size
+
+$default{ 'split_max' } = 0;   # Files > this size can be split up.
+$default{ 'split_patt' } = '';  # Files must match this pattern to be split
+$default{ 'split_chunk' } = 100 * 1024; # Size of split-up chunks
+
+$default{ 'remote_fs' } = 'unix'; # Remote filestore
+       # Other posibilies dls, netware and vms
+$default{ 'ls_lR_file' } = ''; # remote file containing ls-lR, patch or 
+                               # times - else use remote ls
+$default{ 'local_ls_lR_file' } = ''; # local file containing ls-lR
+                               # used when first copying a large remote package
+                               # or ls_lR_file is a remote ls-lR patch or times
+$default{ 'recursive' } = 1;   # true indicates to do recursive processing
+$default{ 'recurse_hard' } = 0;        # true indicates have to cwd+ls for 
each remote
+                               # subdirectory - AVOID wherever possible.
+$default{ 'flags_recursive' } = '-lRat'; # Flags passed to remote dir
+$default{ 'flags_nonrecursive' } = '-lat'; # Flags passed to remote dir
+$default{ 'ls_fix_mappings' } = '';# Correct pathnames in remote listings
+                               # (eg s:usr/spool/pub/::) to match reality
+
+$default{ 'update_log' } = ''; # Filename where an update report is to be kept
+$default{ 'mail_to' } = '';    # Mail a report to these addresses
+$default{ 'mail_prog' } = $mail_prog; # the mail program (see $mail_prog)
+$default{ 'mail_subject' } = $mail_subject; # Subject passed to mail_prog
+
+$default{ 'comment' } = '';    # General comment used in report
+# If mirroring a VERY large directory then it is best to put the assoc
+# arrays in files (use command line switch -F. to turn on).
+$default{ 'use_files' }  = 0;
+$default{ 'interactive' } = 0; # noninteractive copy default
+$default{ 'skip' } = '';       # If set then skip this entry giving value as 
reason
+$default{ 'verbose' } = 0;     # Verbose messages
+$default{ 'algorithm' } = 0;   # The mirror algorithm to use
+$default{ 'local_dir_check' } = 0; # Check local_dir exists before mirroring?
+
+# I really want to drop this option.
+$default{ 'delete_source' } = 0;# delete source after xfer (default = NO!!!)
+
address@hidden = ( 'get_newer', 'get_size_change', 'do_deletes',
+       'update_local', 'force_times', 'retry_call', 'recursive',
+       'mode_copy', 'disconnect', 'interactive', 'text_mode',
+       'force', 'get_file', 'verbose', 'proxy', 'delete_get_patt',
+       'delete_source', 'save_deletes', 'use_files', 'use_timelocal',
+       'make_bad_symlinks', 'get_symlink_files', 'recurse_hard', 
+       'get_missing', 'strip_cr', 'passive_ftp', 'using_socks', 
+       'local_dir_check' );
+
+%boolean_values = ();
+&set_assoc_from_array( *boolean_values );
+
address@hidden = ( 'get_patt', 'exclude_patt', 'local_ignore',
+                 'delete_patt', 'delete_excl', 'split_patt', 'save_deletes',
+                 'compress_patt', 'compress_excl', 'compress_conv_patt',
+                 'failed_gets_excl', 'store_remote_listing' );
+
+#
+# message levels used by &msg( level, msg )
+# if you call msg as &msg( msg ) the level is presumed to be just $pr.
+$pr = 0;       # Always print out messages
+$log = 1;      # push this messages onto @log
+
+# The max number of directory failures under algorithm 1 before giving up.
+$max_failed_dirs = 5;
+
+#
+# Exit status
+$exit_status = 0;
+$exit_status_xfers = 0;
+
+# "#defines" for the above
+$exit_xfers = 16;  # Add this to the exit code to show xfers took place
+$exit_ok = 0;
+$exit_fail = 1;
+$exit_fail_noconnect = 2;
+
+# -d           Turn on debugging - more -d's means more debugging.
+# -ppattern    Just do packages matching pattern.
+# -Rpattern    Skip till the first package name matches pattern then do all.
+#              it and following packages.
+# -n           Do nothing, just show what would be done.
+# -F           Use files for assoc arrays (see also the variable use_files).
+# -gsite:path
+#              Get all files on given site.  If path matches .*/.+ then
+#              it is the name of the directory and the last part is the
+#              pattern of filenames to get.  If path matches .*/ then
+#              it is the name of a directory and all its contents are 
retrieved.
+#              Otherwise path is the pattern to be used in '/'.
+# -r           Same as "-krecursive=false".
+# -kvar=val    set variable to value.
+# -uusername   Same as "-kremote_user=username", prompts for remote_password.
+# -v           Print version and exit.
+# -T           Dont transfer just force local timestamps to match remote.
+# -N           Don't load mirror.defaults.
+# -L           Generate a pretty list of what is being mirrored.
+# -m           Same as "-kmode_copy=true".
+
+# -Cconfig_file
+# -P           Same as "-kget_file=false -kinteractive=true".
+# -G           Same as "-kget_file=true -kinteractive=true".
+# -t           Same as "-ktext_mode=true".
+# -f           Same as "-kforce=true".
+# -sSITENAME   Same as "-ksite=SITENAME.
+# -ULOGFILE    Set the upload log to LOGILE - if none given uses
+#              the file $home/upload_log.$mday.$mon.$year
+
+# -DUMP                Dump perl - to be later undumped --  THIS DOES NOT YET 
WORK!!!
+
+sub msg_version
+{
+       &msg( '$Id: mirror.pl,v 2.9 1998/05/29 19:01:07 lmjm Exp lmjm $' . "\n" 
);
+       &msg( 'Debian patch version: mirror (2.9-38)  Tue Jan 29 07:06:25 2002 
UTC.' . "\n" );
+       &msg( 'Copyright conditions are in file 
/usr/share/doc/mirror/copyright.' . "\n" );
+}
+
+parse_args:
+while( $ARGV[ 0 ] =~ /^-/ ){
+       local( $arg ) = shift;
+
+       if( $arg eq '-d' ){
+               if( $debug == 2 ){
+                       &msg_version();
+               }
+               $| = 1;
+               $debug++;
+               next;
+       }
+
+       if( $arg =~ /^-(p)(.*)/ || $arg =~ /^-(R)(.*)/ ){
+               local( $flag, $p ) = ($1, $2);
+               if( $flag eq 'R' ){
+                       # Skip all packages till a match is made
+                       # then process ALL further packages
+                       $skip_till = 1;
+               }
+               if( ! $p ){
+                       # Must be -p/-R space arg
+                       $p = shift;
+               }
+               if( $p !~ /[a-zA-Z0-9]/ ){
+                       die "Invalid package name to -p of: $p\n";
+                       next;
+               }
+               # Only mirror the named packages
+               $do_packages{ $p } = 1;
+               $limit_packages = 1;
+               next;
+       }
+
+       if( $arg eq '-n' ){
+               # Do nothing - just show what would be done
+               $dont_do = 1;
+               $debug += 2;
+               $| = 1;
+               next;
+       }
+
+       if( $arg eq '-F' ){
+               # Use files for the dir listings assoc lookups
+               $use_files = 1;
+               $command_line{ 'use_files' } = 1;
+               next;
+       }
+
+       if( $arg eq '-T' ){
+               # Don't actually get any files but just force
+               # local timestamps to be the same on the remote system
+               $timestamp = 1;
+               $command_line{ 'force_times' } = 'true';
+               next;
+       }
+
+       if( $arg =~ /^-g(.*)$/ ){
+               # the next arg is the site:path to get
+               local( $site_path ) = $1;
+
+               if( ! $site_path ){
+                       # Must be -g space arg
+                       $site_path = shift;
+               }
+               
+               # DONT use the system defaults!
+               $load_defaults = 0;
+               
+               # This is probably interactive so print interactively
+               $| = 1;
+               
+               if( $site_path =~ /(.*):(.*)?/ ){
+                       local( $site, $path ) = ($1, $2);
+                       push( @get_sites, $site );
+                       # Find the directory and files
+                       if( $path =~ m|^(.*)/([^/]*)$| ){
+                               if( $1 eq '' && $2 eq '' ){
+                                       push( @get_paths, '/' );
+                                       push( @get_patt, '.' );
+                               }
+                               elsif( $1 eq '' ){
+                                       push( @get_paths, '/' );
+                               }
+                               else {
+                                       push( @get_paths, $1 );
+                               }
+                               if( $2 eq '' ){
+                                       push( @get_patt, '.' );
+                               }
+                               else {
+                                       push( @get_patt, "^$2\$" );
+                               }
+                       }
+                       else {
+                               push( @get_paths, '.' );
+                               push( @get_patt, "^$path\$" );
+                       }
+               }
+               else {
+                       die "expected -gsite:path got $arg";
+               }
+               next;
+       }
+
+       if( $arg eq "-r" ){
+               # no recursive copy
+               $command_line{ 'recursive' } = 0;
+               next;
+       }
+# Debian bug #93853, -k keyword=value did not work, address@hidden 
+       if( $arg =~ /^-k(.*)/ ){
+               local( $key_val ) = $1;
+               if( ! $key_val ){
+                       # Must be -k space key=val
+                       $key_val = shift;
+               }
+               if( $key_val =~ /(.*)=(.*)/ ){ 
+                       # set the keyword = value
+                       if( !defined( $default{ "$1" } ) ){
+                           warn "Invalid keyword $1\n";
+                       } else {
+                           $command_line{ "$1" } = $2;
+                       }
+               }
+               next;
+       }
+
+       if( $arg =~ /^-u(.*)/ ){
+               local( $user ) = $1;
+
+               if( ! $user ){
+                       # must be -u space user
+                       $user = shift;
+               }
+
+               # override the user name
+               $command_line{ 'remote_user' } = $user;
+               # and ask for a password
+               $command_line{ 'remote_password' } = &get_passwd( $user );
+               next;
+       }
+
+       if( $arg eq '-N' ){
+               $load_defaults = 0;
+               next;
+       }
+
+       if( $arg eq '-v' ){
+               &msg_version();
+               exit( 0 );
+       }
+
+        if( $arg eq '-L' ){
+                # Generate a pretty list of what is being mirrored
+                $pretty_print = 1;
+                next;
+        }
+
+        if( $arg eq '-m' ){
+                # propagate the mode
+               $command_line{ 'mode_copy' } = 'true';
+               next;
+        }
+
+       # Old command line interface flags
+       if( $arg =~ /^-C(.*)/ ){
+               # specify the config file
+               local( $c ) = $1;
+               if( $c !~ /./ ){
+                       die "Must give config file name -Cname ($arg)\n";
+               }
+               # Only mirror the named packages
+               push( @config_files, $c);
+               next;
+       }
+
+        if( $arg eq '-P' ){
+                # put files
+               $command_line{ 'get_file' } = 'false';
+               $command_line{ 'interactive' } = 'true';
+               next;
+        }
+
+        if( $arg eq '-G' ){
+                # get files
+               $command_line{ 'get_file' } = 'true';
+               $command_line{ 'interactive' } = 'true';
+               next;
+        }
+
+        if( $arg eq '-t' ){
+                # set the file mode to text
+               $command_line{ 'text_mode' } = 'true';
+               next;
+        }
+
+        if( $arg eq '-f' ){
+                # force file transfers irregardless of date/size matches
+               $command_line{ 'force' } = 'true';
+               next;
+        }
+
+       if( $arg =~ /^-s(.*)/ ){
+               # override the site name
+               $command_line{ 'site' } = $1;
+               next;
+       }
+
+       if( $arg =~ /^-U(.*)/ ){
+               $upload_log = $1;
+               if( $upload_log eq '' ){
+                       local( $sec,$min,$hour,$mday,$mon,$year,
+                               $wday,$yday,$isdst ) 
+                               = localtime( time );
+                       $mon++;
+                       $upload_log = "$home/upload_log.$mday.$mon.$year";
+               }
+                       
+               next;
+       }
+
+       if( $arg eq '-DUMP' ){
+               # THIS DOES NOT YET WORK!!!!!
+               $dumped_version = 1;
+               warn "Dumping perl\n";
+               dump parse_args;
+       }
+
+       warn "Unknown arg $arg, skipping\n";
+}
+
+# Handle multiline buffers in a sane way
+# This is deprecated in perl-5.  Someone should add "/m" modifiers to any
+# regexps that *really* need it, not all.
+# $* = 1;
+
+$interactive = $command_line{ 'interactive' };
+
+if( ! $interactive ){
+       local( $c );
+
+       # The remainder of ARGV are package names
+       foreach $c ( @ARGV ){
+               push( @config_files, $c );
+       }
+}
+
+if( $interactive && $limit_packages){
+       die "Can not mix -p and interactive";
+}
+
+$value{ 'remote_user' } = $default{ 'remote_user' };
+%value = ();
+&set_defaults();
+
+if( $load_defaults ){
+       local( $dir, $mp );
+       foreach $dir ( @INC ){
+               local( $f ) = "$dir/$defaults_file";
+               if( -f $f ){
+                       $mp = $f;
+                       last;
+               }
+       }
+       if( $mp ){
+               &msg( "defaults from $mp\n" ) if $debug > 2;
+               splice( @config_files, 0, 0, $mp );
+       }
+       else {
+               warn "No $defaults_file found in perl library path\n";
+       }
+}
+elsif( $debug > 1 ){
+       &msg( "not loading $defaults_file\n" );
+}
+               
+
+&interpret_config_files();
+
+# Shut down any remaining ftp session
+&disconnect();
+
+&msg( "All done, Exiting\n" ) if $debug;
+exit( $exit_status + $exit_status_xfers );
+
+
+$key = ''; # The current keyword
+$value = ''; # the value for the keyword
+
+sub interpret_config_files
+{
+       local( $fname );
+
+       if( $#get_sites >= 0 ){
+               while( $#get_sites >= 0 ){
+                       $value{ 'site' } = pop( @get_sites );
+                       $value{ 'remote_dir' } = pop( @get_paths );
+                       $value{ 'get_patt' } = pop( @get_patt );
+                       $value{ 'local_dir' } = '.';
+                       $value{ 'remote_user' } = 'anonymous';
+                       $exit_status = &do_mirror();
+               }
+               return;
+       }
+               
+
+       if( $command_line{ 'interactive' } ){
+               # No config file to read
+               $value{ 'package' } = 'interactive';
+               $exit_status = &do_mirror();
+               return;
+       }
+
+       # if no configuration files were specified use standard input
+       @ARGV = @config_files;
+       &interpret_config();
+}
+
+sub interpret_config
+{
+       while( <> ){
+               # Ignore comment and blank lines
+               next if /^\s*#/ || /^\s*$/;
+               
+               &parse_line();
+               
+               # Is this a new package?
+               if( $value{ 'package' } && $key eq 'package' ){
+                       # mirror the existing package
+                       $exit_status = &do_mirror();
+                       
+                       # reset
+                       &set_defaults();
+
+                       # Make sure I'm at the right place for <> to work!
+                       chdir $home;
+               }
+               
+               if( $debug > 3 ){
+                       &msg( "$key \"$value\"\n" );
+               }
+
+               $value{ $key } = $value;
+
+               # do an explicit close for each file so $. gets reset
+               if( eof( ARGV ) ){
+                       if( $debug > 3 ){
+                               &msg( "-- end of config file \"$ARGV\"\n" );
+                       }
+                       close( ARGV );
+               }
+       }
+
+       # Mirror the last package in the file
+       if( $value{ 'package' } ){
+               $exit_status = &do_mirror();
+       }
+}
+
+# parse each line for keyword=value
+sub parse_line
+{
+       local( $eqpl );
+       local( $cont ) = '&';
+
+       chop;
+       if( /^\s*([^\s=+]+)\s*([=+])(.*)?$/ ){
+               ($key, $eqpl, $value) = ($1, $2, $3);
+               # If the value ends in the continuation character then
+               # tag the next line on the end (ignoring any leading ws).
+               while( $value =~ /^(.*)$cont$/o && !eof ){
+                       $_ = <>;
+                       local( $v ) = $1;
+                       if( /^\s*(.*)$/ ){
+                               $value = $v . $1;
+                       }
+               }
+               if( $debug > 3 ){
+                       &msg( "read: $key$eqpl$value\n" );
+               }
+       }
+       else {
+               warn "unknown input in \"$ARGV\" line $. of: $_\n";
+       }
+       if( ! defined( $default{ "$key" } ) ){
+               die "unknown keyword in \"$ARGV\" line $. of: $key\n";
+       }
+       if( $eqpl eq '+' ){
+               $value = $value{ $key } . $value;
+       }
+}
+
+# Initialise the key values to the default settings
+sub set_defaults
+{
+       %value = %default;
+       undef( $uid );
+       undef( $gid );
+}
+
+# Override the current settings with command line values
+sub command_line_override
+{
+       local( $key, $val, $overrides );
+
+       while( ($key, $val) = each %command_line ){
+               $overrides++;
+               if( $boolean_values{ $key } ){
+                       # a boolean value
+                       $value{ $key } = &istrue( $val );
+               } else {
+                       # not a boolean value
+                       $value{ $key } = $val;
+               }
+       }
+
+       if( $debug > 4 ){
+               if( $overrides ){
+                       &pr_variables( "keywords after command line override\n" 
);
+               }
+               else {
+                       &msg( "No command line overrides\n" );
+               }
+       }
+}
+
+# set each variable $key = $value{ $key }
+sub set_variables
+{
+       local( $key, $val );
+
+       while( ($key, $val) = each %value ){
+               # for things like passwords it is nice to have the
+               # real value in a file
+               if( $val =~ /^\<(.*)$/ ){
+                       local( $val_name ) = $1;
+                       open( VAL_FILE, $val_name ) ||
+                               die "can't open value file $val_name\n";
+                       $val = <VAL_FILE>;
+                       close( VAL_FILE );
+                       chop $val if $val =~ /\n$/;
+               }
+
+               if( $boolean_values{ $key } ){
+                       # a boolean value
+                       eval "\$$key = &istrue( $val )";
+               }
+               else {
+                       # not a boolan value
+                       # Change all \ to \\ since \'s will be escaped in
+                       # the following string used in the eval.
+                       $val =~ s/([^\\])(')/$1\\$2/g;
+                       eval "\$$key = '$val'";
+               }
+               if( $key eq 'compress_prog' ){
+                       if( $val eq 'compress' ){
+                               $compress_prog = $sys_compress_prog;
+                               $compress_suffix = $sys_compress_suffix;
+                       }
+                       elsif( $val eq 'gzip' ){
+                               if( ! $gzip_prog ){
+                                       die "Trying to use gzip but not found 
in PATH\n";
+                               }
+                               $compress_prog = $gzip_prog;
+                               $compress_suffix = $gzip_suffix;
+                       }
+                       elsif( $debug > 2 && $compress_prog ne $gzip_prog &&
+                              $compress_prog ne $sys_compress_prog ){
+                               &msg( "compress_prog ($compress_prog) not 
compress or gzip, presuming program name\n" .
+                                     "- user must set compress_suffix\n" );
+                       }
+                       &upd_val( 'compress_prog' );
+                       &upd_val( 'compress_suffix' );
+               }
+       }
+       if( $compress_patt ne '' && $compress_prog eq '' ){
+               &msg( "compress_patt set but no compress_prog so compress_patt 
reset to nothing" );
+               $compress_patt = '';
+       }
+               
+
+       # Reset the umask if needed.
+       # Do it here to try and get it done as early as possible.
+       # If the user doesn't use octal umasks this will cause umask
+       # to be called again unnecessarily - but that is pretty cheap.
+       if( $umask && $umask != $curr_umask ){
+               local( $val ) = $umask;
+               $val = oct( $val ) if $val =~ /^0/;
+               umask( $val );
+               $curr_umask = sprintf( "0%o", umask );
+       }
+
+       &map_user_group();
+}
+
+sub upd_val
+{
+       local( $key ) = @_;
+       if( $package eq 'defaults' ){
+               $default{ $key } = $value{ $key };
+       }
+}
+
+sub pr_variables
+{
+       local( $msg ) = @_;
+       local( $nle ) = 60;
+       local( $out ) = 0;
+       local( $key, $val, $str );
+
+       &msg( $msg );
+       if( $get_file ){
+               &msg( "package=$package  $site:$remote_dir -> $local_dir\n\t" );
+       }
+       else {
+               &msg( "package=$package  $local_dir -> $site:$remote_dir\n\t" );
+       }
+
+       for $key ( sort keys( %value ) ){
+               next if $key eq 'package' ||
+                       $key eq 'site' ||
+                       $key eq 'remote_dir' ||
+                       # Don't show passwords when interactive
+                       ($interactive && $key eq 'remote_password') ||
+                       ($interactive && $key eq 'remote_gpass');
+               # Report the value in the actual variable
+               $val = eval "\$$key";
+               $str = "$key=\"$val\" ";
+               &msg( $str );
+               $out += length( $str );
+               # Output newlines when a line is full
+               if( $out > $nle ){
+                       $out = 0;
+                       &msg( "\n\t" );
+               }
+       }
+       &msg( "\n" );
+}
+
+# Mirror the package, return exit_status
+sub do_mirror
+{
+       local( $get_one_package ) = 0;
+
+       $package = $value{ 'package' };
+       
+       if( $package eq 'defaults' ){
+               # This isn't a real site - just a way to change the defaults
+               %default = %value;
+
+               return $exit_ok;
+       }
+
+       # Only do this package if given by a -Ppack argument
+       if( $limit_packages && ! $do_packages{ $package } ){
+               return;
+       }
+
+       if( $skip_till ){
+               # Found a package so process all packages from now on
+               $skip_till = $limit_packages = 0;
+       }
+       
+       local( $exit_status ) = $exit_fail_noconnect;  # Presume the worse.
+       $timeouts = 0;
+
+       # set things from the command line arguments
+       &command_line_override();
+
+       if( ! &checkout_regexps() ){
+               &msg( "skipping package\n\n" );
+               return $exit_status;
+       }
+
+       # set each variable $key = $value{ $key }
+       &set_variables();
+
+       # don't trash locally glossed over things with stuff from the remote
+       if( $local_ignore ){
+               if( $exclude_patt ){
+                       $exclude_patt .= '|' . $local_ignore;
+               }
+               else {
+                       $exclude_patt = $local_ignore;
+               }
+       }
+
+       if( $debug > 3 ){
+               &pr_variables( "\n" );
+       }
+       elsif( $package && ! $pretty_print ){
+               if( $get_patt ){
+                       &msg( "package=$package $site:$remote_dir -> 
$local_dir\n");
+               }
+               else {
+                       &msg( "package=$package $local_dir -> 
$site:$remote_dir\n" );
+               }
+               &msg( "algorithm=$algorithm\n") if $algorithm != 0;
+       }
+       
+       # Don't bother if trying to mirror here!
+       if( !$interactive && !$force && ((gethostbyname( $site ))[0] eq 
$hostname) ){
+               &msg( "Skipping $site as it is this local site!\n\n" );
+               return $exit_ok;
+       }
+
+       chdir $home;
+
+       $max_age = 0;
+       if( $value{ 'max_days' } ne '0' ){
+               $max_age = time - ($value{ 'max_days' } * 24 * 60 * 60);
+               &msg( "max_age = $max_age\n" ) if $debug > 1;
+       }
+
+       # pull in external code, if required
+       if( $external_mapping ){
+               &msg( "Loading external mapping from $external_mapping.\n" ) if 
$debug > 0 ;
+               do $external_mapping || die "Cannot load from 
$external_mapping";
+       }
+
+       if( $debug ){
+               # Keep the ftp debugging lower than the rest.
+               &ftp'debug( $debug - 1);
+       }
+       else {
+               &ftp'debug( $verbose );
+       }
+
+       if( $recurse_hard ){
+               $recursive = 1;
+       }
+       if( $algorithm == 1 ){
+               $recursive = 0;
+               $make_bad_symlinks = 1;
+               $rem_start_len = length( $remote_dir );
+       }
+
+       if( ! $interactive ){
+               $ftp'showfd = 'STDOUT';
+       }
+       &ftp'set_timeout( $timeout );
+       &ftp'set_signals( "main'msg" );
+
+       # set passive ftp mode
+       if( $passive_ftp ){
+               $ftp'use_pasv = 1;
+       }
+
+       # Are we using the SOCKS version of perl?
+       if( $using_socks ){
+               $chat'using_socks = 1;
+       }
+
+       # Useful string in prints
+       $XFER = $get_file ? "get" : "put";
+
+       # create the list of items to copy
+       @transfer_list = ();
+       if( $interactive ){
+               if( $algorithm == 1 ){
+                       warn "Cannot use algorithm 1 with interactive, using 
0\n";
+                       $algorithm = 0;
+               }
+               # copy the remainder of items from argv to the transfer list
+               while( @ARGV ){
+                       # copy the local directory
+                       if( @ARGV ){
+                               push( @transfer_list, shift( @ARGV ) );
+                       } 
+       
+                       # copy the remote directory
+                       if( @ARGV ){
+                               push( @transfer_list, shift( @ARGV ) );
+                       }
+                       else {
+                               die "remote directory must be specified\n";
+                       }
+       
+                       # copy the pattern, if available
+                       if( @ARGV ){
+                               push( @transfer_list, shift( @ARGV ) );
+                       } else {
+                               push( @transfer_list, $default{ 'get_patt' } );
+                       }
+               }
+       
+               if( $debug > 1 ){
+                       local( @t );
+                       @t  = @transfer_list;
+       
+                       while( @t ){
+                               printf( "local_dir=%s remote_dir=%s patt=%s\n",
+                                       shift( @t ), shift( @t ), shift( @t ) );
+                       }
+               }
+       }
+       else {
+               push( @transfer_list, $local_dir );
+               push( @transfer_list, $remote_dir );
+               push( @transfer_list, $get_patt );
+               if( $algorithm != 1 ){
+                       $get_one_package = 1;
+               }
+        }
+               
+
+       if( $update_local && $get_patt ){
+               if( $get_patt ne $default{ 'get_patt' } ){
+                       &msg( "Cannot mix get_patt and update_local.  get_patt 
ignored\n" );
+               }
+               $get_patt = '';
+       }
+
+       
+       if( !$site || (!$interactive && (!$local_dir || !$remote_dir)) ){
+               &msg( "Insufficient details for package to be fetched\n" );
+               &msg( "Must give at least: site, remote_user, remote_dir and 
local_dir\n\n" );
+               return $exit_status;
+       }
+
+        if( $pretty_print ){
+                # Don't actually mirror just print a pretty list
+                # of what would be mirrored.  This is for mailing to
+                # people
+               if( $skip ){
+                       return $exit_ok;
+               }
+                &msg( "$package  \"$comment\"\n" );
+                &msg( "  $site:$remote_dir  -->  $local_dir\n\n" );
+                return $exit_ok;
+        }
+
+       if( $skip ){
+               &msg( "Skipping $site:$package because $skip\n\n" );
+               return $exit_ok;
+       }
+
+       $split_max = &to_bytes( $split_max );
+       $split_chunk = &to_bytes( $split_chunk );
+
+       if( $split_max && $split_max <= $split_chunk ){
+               &msg( "split_max <= split_chunk - skipping package\n" );
+               &msg( " $split_max <= $split_chunk\n\n" );
+               return $exit_status;
+       }
+
+       if( $split_chunk && ($split_chunk & 511) ){
+               &msg( "split_chunk bad size - skipping package\n" );
+               &msg( " $split_chunk should be a multiple of 512 bytes\n\n" );
+               return $exit_status;
+       }
+
+       if( $local_dir_check && ! -d $local_dir ){
+               &msg( "local_dir $local_dir does not exist - skipping 
package\n" );
+               return $exit_status;
+       }
+
+       if( $get_one_package && $algorithm != 1 ){
+               # If only getting one package may as well parse the
+               # local directory listings before connecting to the
+               # remote site.  (With the status_file stuff this info
+               # can then be reused if something goes wrong.)
+               if( $use_files ){
+                       &create_assocs();
+               }
+
+               if( !&get_local_directory_details() ){
+                       &msg( "Cannot get local directory details 
($local_dir)\n" );
+                       &disconnect();
+                       &msg( "\n" );
+                       return $exit_status;
+               }
+       }
+
+       local( $con ) = &connect();
+       if( $con <= 0 ){
+               &msg( "Cannot connect, skipping package\n" );
+               &disconnect();
+               &msg( "\n" );
+               return $exit_status;
+       }
+
+       if( $con == 1 ){
+               &msg( "login as $remote_user\n" ) if $debug > 1;
+               $curr_remote_user = $remote_user;
+               if( ! &ftp'login( $remote_user, $remote_password, 
$remote_account ) ){
+                       &msg( "Cannot login, skipping package\n" );
+                       &disconnect();
+                       &msg( "\n" );
+                       return $exit_status;
+               }
+               $can_restart = (&ftp'restart(0) == 1);
+               if( $debug > 1 ){
+                       &msg( "Can " . ($can_restart ? '' : "not ") . "do 
restarts\n" );
+
+               }
+       }
+       else {
+               # Already connected to this site - so no need to login again
+               &msg( "Already connected to site $site\n" ) if $debug;
+       }
+
+       if( ! &ftp'type( $text_mode ? 'A' : 'I' ) ){
+               &msg( "Cannot set type\n" );
+       }
+
+       $exit_status = $exit_fail; # ok this is now the worse case
+
+       # Mirror thinks in terms of Unix pathnames.
+       # Ask ftp.pl to map any remote name it is about to use by
+       # setting the namemap functions.
+       if( $remote_fs =~ /vms/i ){
+               $vms = 1;
+               &ftp'set_namemap( "main'unix2vms", "main'vms2unix" );
+       }
+       else {
+               $vms = 0;
+               # No mapping necessary
+               &ftp'set_namemap( '' );
+       }
+
+       if( ! $get_file || $remote_idle ){
+               local( @rhelp ) = &ftp'site_commands();
+               $remote_has_chmod = grep( $_ eq 'CHMOD', @rhelp);
+               $remote_has_rename = grep( $_ eq 'RNFR', @rhelp) && grep( $_ eq 
'RNTO', @rhelp);
+               $remote_has_idle = grep( $_ eq 'IDLE', @rhelp);
+               if( $debug > 2 ){
+                       &msg( "remote site " . ($remote_has_chmod ? "has" : 
"hasn't") . " got chmod\n" );
+                       &msg( "remote site " . ($remote_has_idle ? "has" : 
"hasn't") . " got idle\n" );
+               }
+       }
+       
+       if( $remote_has_idle && $remote_idle ){
+               if( ! &ftp'quote( "site idle $remote_idle" ) ){
+                       &msg( "Cannot set remote idle\n" );
+               }
+               elsif( $debug > 2 ){
+                       &msg( "remote idle has been set to $remote_idle\n" );
+               }
+       }
+
+       if( $remote_group ){
+               if( ! &ftp'quote( "site group $remote_group" ) ){
+                       &msg( "Cannot set remote group\n" );
+               }
+               elsif( $debug > 2 ){
+                       &msg( "remote group has been set to $remote_group\n" );
+               }
+       }
+       
+       if( $remote_gpass ){
+               if( ! &ftp'quote( "site gpass $remote_gpass" ) ){
+                       &msg( "Cannot set remote gpass\n" );
+               }
+               elsif( $debug > 2 ){
+                       &msg( "remote gpass has been set\n" );
+               }
+       }
+
+       @log = ();
+       $cannot = 0;
+
+       local( @sub_dirs );
+       while( @transfer_list ){
+               # get files
+               $local_dir = shift( @transfer_list );
+               $remote_dir = shift( @transfer_list );
+               $get_patt = shift( @transfer_list );
+
+               # Clear all details
+               undef( @xfer_dest );
+               undef( @xfer_src );
+               undef( @xfer_attribs );
+               undef( @things_to_make );
+               undef( @sub_dirs );
+
+               if( ! $get_one_package ){
+                       if( $use_files ){
+                               &create_assocs();
+                       }
+
+                       if( !&get_local_directory_details() ){
+                               &msg( "Cannot get local directory details 
($local_dir)\n" );
+                               &disconnect();
+                               &msg( "\n" );
+                               return $exit_status;
+                       }
+               }
+
+               # Create a get_patt from the contents of the local directory
+               if( $update_local && $#get_top >= 0 ){
+                       $get_patt = '^' . join( '|^', @get_top );
+                       $get_patt =~ s/$squished//g;
+                       &msg( "get_patt = $get_patt\n" ) if $debug;
+               }
+       
+               if( !&get_remote_directory_details() ){
+                       &msg( "Cannot get remote directory details 
($remote_dir)\n" );
+                       if( $algorithm == 1 ){
+                               # Skip this directory.
+                               $cannot++;
+                               if( $cannot < $max_failed_dirs ){
+                                       next;
+                               }
+                               # Too many failed directories.  Fall thru'
+                               # into disconnect.
+                       }
+                       &disconnect();
+                       &msg( "\n" );
+                       return $exit_status;
+               }
+       
+               if( $get_file ){
+                       &compare_dirs(
+                               *remote_sorted,
+                                *remote_map, *remote_time,
+                                 *remote_size, *remote_type,
+                               *local_sorted,
+                                *local_map, *local_time,
+                                 *local_size, *local_type,
+                                  *local_keep, *local_keep_totals );
+               } else {
+                       &compare_dirs(
+                               *local_sorted,
+                                *local_map, *local_time,
+                                 *local_size, *local_type,
+                               *remote_sorted,
+                                *remote_map, *remote_time,
+                                 *remote_size, *remote_type,
+                                  *remote_keep, *remote_keep_totals );
+               }
+
+               if( $timestamp ){
+                       &set_timestamps();
+                       if( $algorithm == 1 ){
+                               foreach $sd ( @sub_dirs ){
+                                       push( @transfer_list, "$local_dir/$sd" 
);
+                                       push( @transfer_list, "$remote_dir/$sd" 
);
+                                       push( @transfer_list, $get_patt );
+                               }
+                       }
+
+                       next;
+               }
+
+               &make_dirs();
+               &do_all_transfers();
+
+               $exit_status = $exit_ok;        # Everything went ok.
+
+               if( $get_file ){
+                       # I must have finished with the remote information
+                       # so clear it out.
+                       &clear_remote();
+               }
+               else {
+                       # clear out local info.
+                       &clear_local();
+               }
+               
+               if( $save_deletes ){
+                       # If $save_dir is null, make $save_dir to be
+                       # subdirectory 'Old' under 
+                       # current path
+                       if( ( ! defined( $save_dir ) ) || ( $save_dir eq '' ) ){
+                               $save_dir = "$cwd/Old";
+                       }
+
+                       # If $save_dir is not absolute, take it as
+                       # subdirectory of current path
+                       if( $save_dir !~ m,^/, ){
+                                       $save_dir = "$cwd/$save_dir";
+                               }
+               }
+
+               if( $do_deletes || $save_deletes ){
+                       if( $get_file ){
+                               &do_deletes(
+                                       *local_sorted,
+                                        *local_map,
+                                         *local_type, *local_keep,
+                                          *local_totals, *local_keep_totals );
+                       }
+                       else {
+                               &do_deletes(
+                                       *remote_sorted,
+                                        *remote_map,
+                                         *remote_type, *remote_keep,
+                                          *remote_totals, *remote_keep_totals 
);
+                       }
+               }
+
+               &make_symlinks();
+               undef( @things_to_make );
+
+               if( $algorithm == 1 ){
+                       foreach $sd ( @sub_dirs ){
+                               push( @transfer_list, "$local_dir/$sd" );
+                               push( @transfer_list, "$remote_dir/$sd" );
+                               push( @transfer_list, $get_patt );
+                       }
+               }
+
+               # No more transfers if the connection has died.
+               last if ! $connected;
+       }
+
+       &clear_local();
+       &clear_remote();
+       
+       if( $use_files ){
+               # Close and zap.
+               &delete_assocs();
+       }
+
+       # Should I force a disconnect now?
+       if( $connected && $disconnect ){
+               &disconnect();
+       }
+
+       if( $dont_do || $timestamp ){
+               # Don't generate logs/email
+               &msg( "\n" );
+               return $exit_status;
+       }
+
+       local( $now ) = &time_to_standard( time );
+       if( $update_log ){
+               if( ! open( LOGG, ">>$update_log" ) ){
+                       &msg( "Cannot append to $update_log because: $!\n\n" );
+                       # Serious but this shouldn't stop mirroring.
+                       # return $exit_fail;
+               }
+               print LOGG "mirroring $package ($site:$remote_dir) completed 
successfully \@ $now\n";
+               print LOGG @log;
+               close( LOGG );
+       }
+
+       if( $#log >= 0 && $mail_prog ne '' && $mail_to =~ /./ ){
+               local( $arg );
+               eval "\$arg = \"$mail_subject\"";
+               if( ! open( MAIL, "|$mail_prog $arg $mail_to" ) ){
+                       &msg( "Cannot run: $com\n\n" );
+                       return $exit_fail;
+               }
+               if( $get_patt ){
+                       print MAIL "Mirrored $package ($site:$remote_dir -> 
$local_dir) $comment \@ $now\n";
+               }
+               else {
+                       print MAIL "Mirrored $package ($local_dir -> 
$site:$remote_dir) $comment \@ $now\n";
+               }
+               print MAIL @log;
+               close( MAIL );
+       }
+       undef( @log );
+
+       &msg( "\n" );
+       return $exit_status;
+}
+
+
+sub disconnect
+{
+       if( $connected ){
+               &msg( "disconnecting from $connected\n" ) if $debug;
+               if( ! $ftp'fatalerror ){
+                       &ftp'close();
+               }
+               else {
+                       &ftp'service_closed();
+               }
+       }
+       $connected = '';
+}
+
+# Connect to the site
+# Return 0 on a fail,
+# 1 if a connection was successfully made,
+# 2 if already connected to the site
+sub connect
+{
+       local( $attempts ) = 1; # Retry ONCE! Be friendly.
+       local( $res );
+
+       if( $connected eq $site && $curr_remote_user eq $remote_user ){
+               # Already connected to this site!
+               return 2;
+       }
+
+       # Clear out any session active session
+       &disconnect();
+
+       if( $proxy ){
+           $ftp'proxy = $proxy;
+           $ftp'proxy_gateway = $proxy_gateway;
+           $ftp'proxy_ftp_port = $proxy_ftp_port;
+       }
+       $res = &ftp'open( $site, $ftp_port, $retry_call, $attempts );
+       if( $res == 1 ){
+               # Connected
+               $connected = $site;
+       }
+       return $res;
+}      
+
+# This just prods the remote ftpd to prevent time-outs
+sub prod
+{
+       return unless $connected;
+
+       if( $debug > 2 ){
+               &msg( " prodding remote ftpd\n" );
+       }
+       &ftp'pwd();
+}
+
+# checkout and fixup any regexps.
+# return 0 on an error
+sub checkout_regexps
+{
+       local( $ret ) = 1;
+       # Check out the regexps
+       local( $t ) = 'x';
+       foreach $r ( @regexp_values ){
+               # regexps should never begin or end with a | or have
+               # two in a row otherwise the pattern matches everything.
+               # Use null to match everything if thats what you mean.
+               $value{ $r } =~ s/\|+/|/g;
+               $value{ $r } =~ s/^\|//;
+               $value{ $r } =~ s/\|$//;
+               local( $val ) = $value{ $r };
+               next if ! $val;
+               eval '$t =~ /$val/';
+               if( $@ ){
+                       local( $err );
+                       chop( $err = $@ );
+                       &msg( "Problem with regexp $r ($err)\n" );
+                       $ret = 0;
+               }
+       }
+       return $ret;
+}
+
+sub clear_local
+{
+       if( ! $use_files ){
+               undef( %local_map );
+       }
+       undef( @local_sorted );
+       undef( @local_time );
+       undef( @local_size );
+       undef( @local_type );
+       undef( @local_mode );
+       undef( @local_keep );
+       undef( @local_totals );
+       undef( @local_keep_totals );
+}
+
+sub clear_remote
+{
+       if( ! $use_files ){
+               undef( %remote_map );
+       }
+       undef( @remote_sorted );
+       undef( @remote_time );
+       undef( @remote_size );
+       undef( @remote_type );
+       undef( @remote_mode );
+       undef( @remote_keep );
+       undef( @remote_totals );
+       undef( @remote_keep_totals );
+}
+
+sub get_local_directory_details
+{
+       local( @dirs, $dir );
+       local( $last_prodded ) = time; # when I last prodded the remote ftpd
+
+       $next_local_mapi = $map_init;
+       
+       &clear_local();
+       
+       # Make sure the first elem is 0.
+       $local_time[ 0 ] = 0;
+       $local_size[ 0 ] = 0;
+       $local_type[ 0 ] = 0;
+       $local_mode[ 0 ] = 0;
+
+       @get_top = ();
+
+       &msg( "Scanning local directory $local_dir\n" ) if $debug;
+       
+       if( ! -d $local_dir ){
+               &msg( "$local_dir no such directory - creating it\n" );
+               if( $dont_do || $timestamp ){
+                       return 1;
+               }
+               if( &mkdirs( $local_dir ) ){
+                       &msg( $log, "Created local dir $local_dir\n" );
+                       $exit_xfer_status |= $exit_xfers;
+               }
+               else {
+                       &msg( $log, "FAILED to create local dir $local_dir\n" );
+               }
+       }
+       if( !chdir( $local_dir ) ){
+               &msg( "Cannot change directory to $local_dir\n" );
+               return 0;
+       }
+
+       if( $local_dir =~ m,^/, ){
+               $cwd = $local_dir;
+       }
+       else {
+               &cwd();
+       }
+
+       # @dirs is the list of all directories to scan
+       # As subdirs are found they are added to the end of the list
+       # and as 
+       @dirs = ( "." );
+       # Most of these variables should be locals in blocks below but
+       # that seems to tickle a perl bug and causes a lot of memory to
+       # be wasted.
+       local( $dir_level ) = 0;
+       local( $i ) = 0;
+       local( $path, $time, $size, $type, $mode, $name, $isdir, $value, 
$follow );
+       local( $dev,$ino,$fmode,$nlink,$uid,$gid,$rdev,$ssize,
+                     $atime,$mtime,$ctime,$blksize,$blocks );
+       while( defined( $dir = shift( @dirs ) ) ){
+
+               if( !opendir( DIR, $dir ) ){
+                       &msg( "Cannot open local directory $dir, skipping it\n" 
);
+                       next;
+               }
+
+               while( defined( $name = readdir( DIR ) ) ){
+                       $isdir = 0;
+
+                       # Prod the remote system from time to time
+                       # To prevent time outs.  Only look once every 50 files
+                       # to save on unnecessary systems calls.
+                       if( ($i % 50 == 0) && time > ($last_prodded + 
$prod_interval) ){
+                               $last_prodded = time;
+                               &prod();
+                       }
+                       $i ++;
+
+                       $path = "$dir/$name";
+                       $path =~ s,(^|/)\./,,;
+                       next if $name eq '.' || $name eq '..' ||
+                               ($local_ignore && $path =~ /$local_ignore/);
+
+                       $follow = ($follow_local_symlinks ne '' && $path =~ 
/$follow_local_symlinks/);
+                       if( !$follow && -l $path ){
+                               $value = readlink( $path );
+                               ( 
$dev,$ino,$fmode,$nlink,$uid,$gid,$rdev,$ssize,
+                                     $atime,$mtime,$ctime,$blksize,$blocks ) =
+                                       lstat( _ );
+                               $size = $ssize;
+                               $time = $mtime;
+                               $type = "l $value";
+                               $mode = $fmode;
+                       }
+                       elsif( ($isdir = ($follow ? (-d $path) : (-d _))) ||
+                                -f _ ){
+                               ( 
$dev,$ino,$fmode,$nlink,$uid,$gid,$rdev,$ssize,
+                                     $atime,$mtime,$ctime,$blksize,$blocks ) =
+                                       stat( _ );
+                               $size = $ssize;
+                               $time = $mtime;
+                               $mode = $fmode;
+                               if( $isdir ){
+                                       push( @dirs, $path ) if $recursive;
+                                       $type = 'd';
+                               }
+                               else {
+                                       $type = 'f';
+                               }
+                               if( $dir_level == 0 && $update_local ){
+                                       push( @get_top, $path );
+                               }
+                       }
+                       else {
+                               &msg( "unknown file type $path, skipping\n" );
+                               next;
+                       }
+                       if( $debug > 2){
+                               printf "local: %s %s %s %s 0%o\n",
+                                       $path, $size, $time, $type, $mode;
+                       }
+                       if( $max_age && $time != 0 && $time < $max_age ){
+                               &msg( "   too old: $path\n" ) if $debug > 1;
+                               next;
+                       }
+
+                       local( $mapi ) = $next_local_mapi++;
+                       # push( @local_sorted, $path );
+                       $local_sorted[ $mapi - 1 ] = $path;
+                       $local_map{ $path } = $mapi;
+                       $local_time[ $mapi ] = $time;
+                       $local_size[ $mapi ] = $size;
+                       $local_type[ $mapi ] = $type;
+                       $local_mode[ $mapi ] = $mode;
+                       if( $type eq 'd' ){
+                               $local_totals[ 0 ]++;
+                       }
+                       else {
+                               $local_totals[ 1 ]++;
+                       }
+               }
+               closedir( DIR );
+               $dir_level++;
+
+               if( ! $recursive ){
+                       last;
+               }
+       }
+       return 1;
+}
+
+# Return true if the remote directory listing was brought back safely.
+sub get_remote_directory_details
+{
+       local( $type_changed ) = 0;
+       local( $udirtmp );
+       local( $storename ) = "/dev/null";
+
+       &msg( "Scanning remote directory $remote_dir\n" ) if $debug;
+       
+       if( $store_remote_listing ){
+               eval "\$storename = \"$store_remote_listing\"";
+       }
+
+       $next_remote_mapi = $map_init;
+       &clear_remote();
+
+       # Make sure the first elem is 0.
+       $remote_time[ 0 ] = 0;
+       $remote_size[ 0 ] = 0;
+       $remote_type[ 0 ] = 0;
+       $remote_mode[ 0 ] = 0;
+
+       if( $remote_fs !~ /cms/ && ! &ftp'cwd( $remote_dir ) ){
+               if( $get_file ){
+                       # no files to get
+                       return 0;
+               }
+
+               &msg( "Failed to change to remote directory ($remote_dir) 
trying to create it\n" );
+               &mkdirs( $remote_dir );
+
+               if( ! &ftp'cwd( $remote_dir ) ){
+                       &msg( "Cannot change to remote directory ($remote_dir) 
because: $ftp'response\n" );
+                       return 0;
+               }
+       }
+
+       local( $rls );
+
+       $use_ls = 0;
+
+       if( $local_ls_lR_file ){
+               local( $dirtmp ) = $local_ls_lR_file;
+               &msg( " Using local file $local_ls_lR_file for remote dir 
listing\n" ) if $debug;
+               local( $unsquish );
+               if( $dirtmp =~ /\.$sys_compress_suffix$/ ){
+                       $unsquish = $sys_compress_prog;
+               }
+               elsif( $dirtmp =~ /\.($gzip_suffix|$old_gzip_suffix)$/ ){
+                       $unsquish = $gzip_prog;
+               }
+               if( defined( $unsquish ) ){
+                       local( $f );
+                       $f = $dirtmp;
+                       $f =~ s/($shell_metachars)/\\$1/g;
+                       $dirtmp = "$unsquish -d < \"$f\" |";
+               }
+               elsif( $ls_lR_file =~ /($times_suffix|$patch_gzip_suffix)$/ ){
+                       return 0 if &patch_ls_lR_file()==0;    
+               }
+               if( ! open( DIRTMP, $dirtmp ) ){
+                       &msg( "Cannot open $dirtmp\n" );
+                       return 0;
+               }
+               $rls = "main'DIRTMP";
+               # Now we don't want to overwrite our input... better test?
+               if( $local_ls_lR_file eq $storename ){
+                       $storename = "/dev/null";
+               }
+       }
+       elsif( $ls_lR_file ){
+               local( $dirtmp );
+               $dirtmp = "$big_temp/.dir$$";
+               if( $ls_lR_file =~ 
/\.($sys_compress_suffix|$gzip_suffix|$old_gzip_suffix)$/ ){
+                       $dirtmp .= ".$1";
+               }
+
+               &msg( " Getting directory listing from remote file 
$ls_lR_file\n" ) if $debug;
+               if( ! &ftp'get( $ls_lR_file, $dirtmp, 0 ) ){
+                       &msg( "Cannot get dir listing file\n" );
+                       return 0;
+               }
+               local( $unsquish );
+               if( $dirtmp =~ /\.$sys_compress_suffix$/ ){
+                       $unsquish = $sys_compress_prog;
+               }
+               elsif( $dirtmp =~ /\.($gzip_suffix|$old_gzip_suffix)$/ ){
+                       $unsquish = $gzip_prog;
+               }
+               if( defined( $unsquish ) ){
+                       local( $f, $uf );
+                       $uf = $udirtmp = $dirtmp;
+                       $dirtmp =~ s/($shell_metachars)/\\$1/g;
+                       $f = $dirtmp;
+                       $dirtmp =~ 
s/\.($sys_compress_suffix|$gzip_suffix|$old_gzip_suffix)$//;
+                       $udirtmp =~ 
s/\.($sys_compress_suffix|$gzip_suffix|$ol_gzip_suffix)$//;
+                       if( &sys( "$unsquish -d < \"$f\" > \"$dirtmp\"" ) != 0 
){
+                               &msg( "Cannot uncompress directory listing\n" );
+                               return 0;
+                       }
+                       unlink( $uf );
+               }
+               else {
+                       $udirtmp = $dirtmp;
+               }
+
+               open( DIRTMP, $dirtmp ) || die "Cannot open $dirtmp";
+               $rls = "main'DIRTMP";
+       }
+       else {
+               $use_ls = 1;
+               if( ! &ftp'type( 'A' ) ){
+                       &msg( "Cannot set type to ascii for dir listing, 
ignored\n" );
+                       $type_changed = 0;
+               }
+               else {
+                       $type_changed = 1;
+               }
+       }
+       
+       $lsparse'fstype = $remote_fs;
+       $lsparse'name = "$site:$package";
+       
+       if( $use_ls ){
+               local( $flags ) = $flags_nonrecursive;
+               if( $recursive && ! $recurse_hard ){
+                       $flags = $flags_recursive;
+               }
+               $lsparse'report_subdirs = (! $recurse_hard && $algorithm == 0);
+               if( !&ftp'dir_open( $flags ) ){
+                       &msg( "Cannot get remote directory listing because: 
$ftp'response\n" );
+                       return 0;
+               }
+               
+               $rls = "ftp'NS";
+       }
+               
+       $rcwd = '';
+       if( $vms ){
+               # Strip this off all pathnames to make them
+               # relative to the remote_dir
+               $rcwd = $remote_dir;
+       }
+       $dateconv'use_timelocal = $use_timelocal;
+       if( !&lsparse'reset( $rcwd ) ){
+               &msg( "$remote_fs: unknown fstype\n" );
+               return 0;
+       }
+       if( $vms ){
+               # Need to get in terms of the full pathname
+               # so add it back in - see unix2vms at end of mirror
+               $vms_dir = $remote_dir;
+       }
+       
+       if( $storename ne "/dev/null" ){
+               open( STORE, ">$storename" ) || die( "Cannot write to 
$storename\n" );
+       }
+
+       local( $parse_state ) = &parse_remote_details();
+
+       close( STORE );
+
+       
+       if( $local_ls_lR_file ){
+               close( DIRTMP );
+       }
+       elsif( $ls_lR_file ){
+               close( DIRTMP );
+               unlink( $udirtmp );
+       }
+       else {
+               # Could optimise this out - but it makes sure that
+               # the other end gets a command straight after a possibly
+               # long dir listing.
+               if( ! &ftp'type( $text_mode ? 'A' : 'I' ) ){
+                       local( $msg ) = "Cannot reset type after dir listing, ";
+                       if( $type_changed ){
+                               # I changed it before - so I must be able to
+                               # change back unless something is wrong
+                               $msg .= "aborting\n";
+                               &msg( $msg );
+                               return 0;
+                       }
+                       else {
+                               $msg .= "ignoring\n";
+                               &msg( $msg );
+                       }
+               }
+       }
+
+       # If the other end dropped part way thru make sure the
+       # higher routines know!
+       return $parse_state;
+}
+
+# Get remote ls-lR times or mirror gzipped patch files.
+sub patch_ls_lR_file
+{
+       if( ! $patch_prog ){
+               &msg( "No patch program on PATH\n" );
+               return 0;
+       }
+       local( $f, $fr, $flb, $flt, $flp, $flz, $frb, $frt );
+       local( $to , $tn );
+       $frb = $frt = $ls_lR_file;
+       $flb = $dirtmp;
+       &msg( "Patching $flb using $frb\n" ) if $debug;
+       local( $tlb ) = -f $flb?(stat($flb))[9]:0;
+       $dateconv'use_timelocal = $use_timelocal;
+       $flp = "$flb$patch_suffix";
+       $flz = "$flb$patch_gzip_suffix";
+       # Get times and patch.
+       if( $frt =~ /$times_suffix$/ ){
+               # Use remote times file.
+               $frb =~ s/$times_suffix$//;
+               $flt = "$flb$times_suffix";
+               &ftp'get( $frt, $flt, 0 ) ?  
+                       &msg( "Got $frt\n" ):
+                       return 0;
+               open( FT, $flt );
+               for( $to, $tn ){
+                       $f = gmtime( <FT> );
+                       $_ = &lstime_to_time( $f );
+               }
+               close( FT );
+               $f = "$frb$patch_gzip_suffix";
+               if( $tlb == $to && &ftp'get( $f, $flz, 0 ) &&
+                       ! &sys("$gzip_prog -df <$flz >$flp") ){
+                       &msg( $log, "Got $f\n" );
+                       unlink $flz if ! $debug;
+               }
+       }
+       else {
+               # Get time of remote patch file.
+               $lsparse'fstype = $remote_fs;
+               $lsparse'name = "$site:$package";
+               &lsparse'reset( $remote_dir );
+               if( ! &ftp'dir_open( "$flags_nonrecursive $frb" ) ){
+                       &msg( "List remote ls-lR patch: $ftp'response\n" );
+                       &ftp'dir_close();
+                       return 0;
+               }
+               local( $p, $s, $trz, $t, $m ) = &lsparse'line( ftp'NS );
+               &msg( "Remote ls-lR patch:\n$p $s $trz $t $m\n" ) if $debug;
+               if( ! &ftp'dir_close() ){
+                       &msg( "List remote ls-lR patch: $ftp'response\n" );
+                       return 0;
+               }
+               # If remote time does not match local get remote patch file.
+               local( $tlz ) = -f $flz?(stat($flz))[9]:0;
+               if( $trz == $tlz ){
+                       &msg( "No new $frb\n" );
+                       &msg( "age $trz same as $flz\n" ) if $debug;
+               }
+               else {
+                       &ftp'get( $frb, $flz, 0 )?
+                       &msg( $log, "Got $frb $s\n" ):
+                       return 0;
+                       &utime( $trz, $trz, $flz );
+               }
+               # unzip patch and read times.
+               $frb =~ s/$patch_gzip_suffix$//;
+               &sys( "$gzip_prog -df <$flz >$flp" ) ?
+                       return 0:
+                       open( FT, $flp );
+               for( $to, $tn ){
+                       ( $fr, $f ) = split( /\t/, <FT> );
+                       $_ = &lstime_to_time( $f );
+               }
+               close( FT );
+       }
+       # Patch or leave or get new local ls-lR file?
+       $f = "$patch_prog ";
+       $f .= $use_timelocal?$patch_local:$patch_UTC;
+       if( $tlb == $to && ! &sys( "$f $flb $flp" ) ){
+               &msg( "$flb patched\n" );
+       }
+       elsif( $tlb == $tn ){
+               &msg( "$flb up to date\n" );
+       }
+       else {
+               $fr = "$frb.$gzip_suffix";
+               $f = "$flb.$gzip_suffix";
+               if( &ftp'get( $fr, $f, 0 ) &&
+                       ! &sys( "$gzip_prog -df $f" ) ){
+                       &utime( $tn, $tn, $flb );
+                       &msg( $log, "Got $fr for $flb\n" );
+               }
+               else {
+                       &msg( "Did not get $fr\nand $ftp'response\n" );
+                       return 0;
+               }
+       }
+       unlink $flp, $flt if ! $debug;
+       if( ! $do_deletes && $exclude_patt =~ /^\.($|\|)/ ){
+               &msg( "$flb check complete\n" );
+               next;
+       }
+       return 1;
+}
+
+sub parse_timeout
+{
+       $parse_timed_out = 1;
+       die "timeout: parse_remote_details";
+}
+
+sub parse_remote_details
+{
+       local( $ret );
+       local( $old_sig );
+
+       $parse_timed_out = 0;
+       
+       if( ! $use_ls ){
+               # No need to bother with the timers
+               return &parse_remote_details_real();
+       }
+       
+       # This may timeout
+       $old_sig = $SIG{ 'ALRM' };
+       $SIG{ 'ALRM' } = "main\'parse_timeout";
+       
+       $ret = eval '&parse_remote_details_real()';
+       
+       &alarm( 0 );
+
+       $SIG{ 'ALRM' } = $old_sig;
+
+       if( $@ =~ /^timeout/ ){
+               &msg( "timed out parsing directory details\n" );
+               return 0;
+       }
+       return $ret;
+}
+
+
+sub parse_remote_details_real
+{
+       local( $path, $size, $time, $type, $mode, $rdir, $rcwd );
+       local( @dir_list );
+       local( $i ) = 0;
+       local( $old_path );
+       
+       if( $use_ls ){
+               &alarm( $parse_time );
+       }
+       
+       # Need to loop in case $recurse_hard
+       while( 1 ){
+               while( !eof( $rls ) ){
+                       ( $path, $size, $time, $type, $mode ) =
+                               &lsparse'line( $rls );
+                       last if $path eq '';
+                       if( $ls_fix_mappings ){
+                               local( $old_path ) = $path;
+                               $_ = $path;
+                               eval $ls_fix_mappings;
+                               if( $_ ne $old_path ){
+                                       $path = $_;
+                               }
+                       }
+                       next if $name eq '.' || $name eq '..';
+                       if( $debug > 2 ){
+                               printf "remote: %s %s %s %s 0%o\n",
+                                       $path, $size, $time, $type, $mode;
+                       }
+                       if( $use_ls ){
+                               # I just got something so shouldn't timeout
+                               &alarm( $parse_time );
+                       }
+                       else {
+                               # Prod the remote system from time to time
+                               # To prevent time outs.  Only look once every
+                               # 50 files
+                               # to save on unnecessary systems calls.
+                               if( ($i % 50 == 0) &&
+                                   time > ($last_prodded + $prod_interval) ){
+                                       $last_prodded = time;
+                                       &prod();
+                               }
+                               $i ++;
+                       }
+                       
+                       if( $algorithm == 1 ){
+                               $path0 = substr( $remote_dir, $rem_start_len );
+                               if( $path0 ne '' ){
+                                       $path0 .= "/";
+                               }
+                               $path0 .= $path;
+                               $path0 =~ s,^/,,;
+                               # &msg( "debug: $path0, $remote_dir, 
$rem_start_len\n" );
+                       }
+                       else {
+                               $path0 = $path;
+                       }
+
+                       if( $exclude_patt && $path0 =~ /$exclude_patt/ ){
+                               &msg( "   exclude: $path0\n" ) if $debug > 1;
+                               next;
+                       }
+
+                       if( $type eq 'd' ){
+                               push( @dir_list, $path0 );
+                       }
+                       
+                       if( $max_age && $time != 0 && $time < $max_age ){
+                               &msg( "   too old: $path0\n" ) if $debug > 1;
+                               next;
+                       }
+                       
+                       # If vms and only keeping the latest version
+                       if( $vms && !$vms_keep_versions ){
+                               # If we already have a file, pick the newer
+                               # TODO: pick the greatest version number
+                               local( $ri ) = $remote_map{ $path };
+                               if( $ri &&
+                                   $time > $remote_time[ $ri ] ){
+                                       $remote_time[ $ri ] = $time;
+                                       $remote_size[ $ri ] = $size;
+                                       $remote_type[ $ri ] = $type;
+                                       $remote_mode[ $ri ] = $mode;
+                                       next;
+                               }
+                       }
+                       
+                       local( $mapi ) = $next_remote_mapi++;
+                       # push( @remote_sorted, $path );
+                       $remote_sorted[ $mapi - 1 ] = $path;
+                       $remote_map{ $path } = $mapi;
+                       $remote_time[ $mapi ] = $time;
+                       $remote_size[ $mapi ] = $size;
+                       $remote_type[ $mapi ] = $type;
+                       $remote_mode[ $mapi ] = $mode;
+                       if( $type eq 'd' ){
+                               $remote_totals[ 0 ]++;
+                       }
+                       else {
+                               $remote_totals[ 1 ]++;
+                       }
+               }
+
+               if( $use_ls ){
+                       if( ! &ftp'dir_close() ){
+                               &msg( "Failure at end of remote directory" .
+                                " ($rdir) because: $ftp'response\n" );
+                               return 0;
+                       }
+               }
+               
+               if( $recurse_hard ){
+                       local( $done ) = 0;
+                       while( 1 ){
+                               if( $#dir_list < 0 ){
+                                       # Make sure we end in the right 
directory.
+                                       if( ! &ftp'cwd( $remote_dir ) ){
+                                               &msg( "Cannot change to remote 
directory" .
+                                                " ($rdir) because: 
$ftp'response\n" );
+                                               return 0;
+                                       }
+                                       $done = 1;
+                                       last;
+                               }
+                               $rcwd = shift( @dir_list );
+                               $rdir = "$remote_dir/$rcwd";
+                               if( $debug > 2 ){
+                                       print "scanning: $remote_dir / $rcwd\n";
+                               }
+                               if( ! &ftp'cwd( $rdir ) ){
+                                       &msg( "Cannot change to remote 
directory" .
+                                        " ($rdir) because: $ftp'response\n" );
+                                       next;
+                               }
+                               last;
+                       }
+                       if( $done ){
+                               last;
+                       }
+                       if( !&ftp'dir_open( $flags_nonrecursive ) ){
+                               &msg( "Cannot get remote directory" .
+                                       " listing because: $ftp'response\n" );
+                               return 0;
+                       }
+                       &lsparse'reset( $rcwd );
+                       
+                       # round the loop again.
+                       next;
+               }
+               
+               # All done - snap the loop
+               last;
+       }
+       return 1;
+}
+
+sub compare_dirs
+{
+       # This declaration must be "local()" because it modifies global data.
+       local( *src_paths,
+               *src_map, *src_time,
+                *src_size, *src_type, 
+              *dest_paths,
+               *dest_map, *dest_time,
+                *dest_size, *dest_type,
+                 *dest_keep, *dest_keep_totals ) = @_;
+       local( $src_path, $dest_path, $i );
+       local( $last_prodded ) = time; # when I last prodded the remote ftpd
+
+       # Most of these variables should be locals in blocks below but
+       # that seems to tickle a perl bug and causes a lot of memory to
+       # be wasted.
+       local( $desti, $srci, $compress, $srciZ, $srcigz, $split, 
$dest_path_real );
+       local( $old_dest_path, $existing_path, $tmp, $restart );
+       local( $sp, $dp ) = ($#src_paths + 1, $#dest_paths + 1);
+       
+       &msg( "compare directories (src $sp, dest $dp)\n" ) if $debug;
+       $total_src_size = 0;
+
+       for( $i = 0; $i <= $#src_paths; $i++ ){
+               $dest_path = $src_path = $src_paths[ $i ];
+               
+               $desti = $dest_map{ $dest_path };
+               $srci = $i + 1;
+
+               # Prod the remote system from time to time
+               # To prevent time outs.  Only look once every 50 files
+               # to save on unnecessary systems calls.
+               if( ($i % 50 == 0) && time > ($last_prodded + $prod_interval) ){
+                       $last_prodded = time;
+                       &prod();
+               }
+
+               if( $debug > 2 ){
+                       &msg( "Compare src $src_path ($srci): " .
+                               &t2str( $src_time[ $srci ] ) );
+                       &msg( " $src_size[ $srci ] $src_type[ $srci ]\n" );
+               }
+
+               # I'm about to do a lot of matching on this
+               study( $src_path );
+
+               # Should I compress this file?
+               #  Don't compress this file if trying to do a compress->gzip
+               # conversion.
+               $compress = 0;
+               if( &will_compress( $src_path, $srci ) ){
+                       if( $dest_path !~ /$squished/o ){
+                               $srciZ = $src_map{ 
"$src_path.$sys_compress_suffix" };
+                               $srcigz = $src_map{ "$src_path.$gzip_suffix" };
+                               if( $srciZ || $srcigz ){
+                                       # There is a compressed version
+                                       # too!  Skip the uncompressed one
+                                       &msg( "   do not xfer, compressed 
version exists: $src_path\n" ) if $debug > 1;
+                                       next;
+                               }
+
+                               $compress = 1;
+                               $dest_path .= '.' . $compress_suffix;
+                               $desti = $dest_map{ $dest_path };
+                       }
+               }
+               # need to adjust the symlink pointer?
+               elsif( $src_type[ $srci ] =~ /^l (.*)/ ){
+                  # Am I going to squish the file this points to?
+                  local( $real, $reali, $reali1 );
+                  local( $count ) = 0;
+                  while( $count++ <= 10 ){
+                       $real = &expand_symlink( $src_path, $1 );
+                       $reali = $src_map{ $real };
+                       # Look out for when the symlink loops on itself
+                       if( defined( $reali1 ) && $reali == $reali1 ){
+                               last;
+                       }
+                       $reali1 = $reali;
+                       last if $src_type[ $reali ] !~ /^l (.*)$/;
+                  }
+                  if( &will_compress( $real, $reali ) ){
+                       # real is going to be (at least) squished so
+                       # suffix the dest
+                       $dest_path .= '.' . $compress_suffix;
+                       $desti = $dest_map{ $dest_path };
+                       $src_type[ $srci ] .= '.' . $compress_suffix;
+                       &msg( "  symlink pointer is now $dest_path\n" ) if 
$debug > 1;
+                       if( $src_map{ $dest_path } ){
+                               &msg( "do not xfer, $dest_path exists\n" ) if 
$debug > 1;
+                               next;
+                       }
+                  }
+                  if( &will_split( $real, $reali ) ){
+                       $src_type[ $srci ] .= '-split/README';
+                       &msg( "  symlink pointer now to $real-split/README'\n" 
) if $debug > 1;
+                  }
+               }
+               
+               # If this is a file that I decided not to compress but the
+               # remote file is compressed and I want a gziped local version
+               # then force compression.
+               # This ignores any compress_excl flags.
+               if( ! $compress &&
+                   $compress_suffix eq $gzip_suffix &&
+                   $compress_conv_patt && $src_path =~ /$compress_conv_patt/ ){
+                       $_ = $dest_path;
+                       eval $compress_conv_expr;
+                       $dest_path = $_;
+                       # check if dest_path exists in the sources.  If it
+                       # does, ignore this file.  This is to avoid the
+                       # double mirroring problem if you are using gzip and
+                       # the source site has both foo.Z and foo.gz.
+                       if( $src_map{ $dest_path } ){
+                               &msg( "Skipping $src_path because remote site 
also has $dest_path\n" ) if $debug > 2;
+                               next;
+                       }
+                       &msg( "   $src_path -> $dest_path\n" ) if $debug > 2;
+                       $desti = $dest_map{ $dest_path };
+                       $compress = 1;
+               }
+
+               # Am I converting the compression on the file this points to?
+               if( $src_type[ $srci ] =~ /^l (.*)/ &&
+                     $compress_suffix eq $gzip_suffix ){
+                       local( $value ) = $1;
+                       local( $real ) = &expand_symlink( $src_path, $value );
+                       local( $reali ) = $src_map{ $real };
+                       if( $src_type[ $reali ] ne 'd' &&
+                           $src_type[ $reali ] ne /^l .*/ &&
+                           $compress_conv_patt && $real =~ 
/$compress_conv_patt/ ){
+                           $dest_path =~ s/$sys_compress_suffix$/$gzip_suffix/;
+                           $desti = $dest_map{ $dest_path };
+                           $value =~ s/$sys_compress_suffix$/$gzip_suffix/;
+                           &msg( "  symlink pointer is now $dest_path 
(conv)\n")
+                                if $debug > 1;
+                       }
+                       if( $name_mappings || $external_mapping ){
+                               local( $old ) = $value;
+                               $value = &map_name( $value );
+                               if( $value ne $old ){
+                                   &msg( "   Mapped symlink value is $value\n" 
) if $debug > 2;
+                               }
+                                   
+                       }
+                       $src_type[ $srci ] = "l ".$value;
+               }
+
+               if( $name_mappings || $external_mapping ){
+                       local( $old_dest_path ) = $dest_path;
+                       $dest_path = &map_name( $dest_path );
+                       if( $dest_path ne $old_dest_path ){
+                               $desti = $dest_map{ $dest_path };
+                               &msg( "   Mapped name is $dest_path\n" ) if 
$debug > 2;
+                       }
+               }
+               
+               # Should this file be split?
+               $split = 0;
+               $dest_path_real = undef;
+               if( &will_split( $src_path, $srci ) ){
+                       $split = 1;
+                       $dest_path_real = $dest_path;
+                       $dest_path .= "-split/part01";
+                       $desti = $dest_map{ $dest_path };
+               }
+
+               if( $debug > 2 ){
+                       &msg( "       dest $dest_path ($desti): " .
+                               &t2str( $dest_time[ $desti ] ) );
+                       &msg( " $dest_size[ $desti ] $dest_type[ $desti ]" );
+                       &msg( " (->$compress_suffix)" ) if $compress;
+                       &msg( " (split)" ) if $split;
+                       &msg( "\n" );
+               }
+               
+               if( $algorithm == 1 ){
+                       $src_path0 = substr( $remote_dir, $rem_start_len );
+                       if( $src_path0 ne '' ){
+                               $src_path0 .= "/";
+                       }
+                       $src_path0 .= $src_path;
+                       $src_path0 =~ s,^/,,;
+                       #&msg( "debug: $src_path0, $remote_dir, 
$rem_start_len\n" );
+               }
+               else {
+                       $src_path0 = $src_path;
+               }
+                       
+               if( $get_patt && $src_path0 !~ /$get_patt/ ){
+                       &msg( "   do not xfer: $src_path0\n" ) if $debug > 1;
+                       next;
+               }
+
+               # Just create any needed directories (the timestamps
+               # should be ignored)
+               if( $src_type[ $srci ] eq 'd' ){
+                       if( $algorithm == 1 ){
+                               if( $exclude_patt && $src_path0 =~ 
/$exclude_patt/ ){
+                                       &msg( "   exclude: $src_path0\n" ) if 
$debug > 1;
+                               }
+                               else {
+                                       $rel_src_path = $src_path;
+                                       $rel_src_path =~ s,.*/,,;
+                                       push( @sub_dirs, $rel_src_path );
+                                       &msg( "   adding $rel_src_path\n" ) if 
$debug;
+                               }
+                       }
+                       if( $dest_type[ $desti ] ne 'd' ){
+                               push( @things_to_make, "d $dest_path" );
+                               &msg( "   need to mkdir $dest_path\n" ) if 
$debug > 1;
+                       }
+                       # keep the directory once made
+                       # (Also if local is really a symlink elsewhere
+                       #  it will be kept.)
+                       &keep( $desti, $dest_path, *dest_keep, 
*dest_keep_totals, *dest_map, 0 );
+                       next;
+               }
+
+               # Well that just leaves files and symlinks.
+               # Do various checks on them.
+
+               if( $desti && ! $dest_keep[ $desti ] ){
+                       &keep( $desti, $dest_path, *dest_keep, 
*dest_keep_totals, *dest_map, 1 );
+                       if( $split ){
+                               # Mark all the split parts as kept
+                               local( $dpp, $dps );
+                               ($dpp, $dps) = ($dest_path =~ 
m,^(.*/)(part[0-9]+)$,);
+                               while( 1 ){
+                                       $dps++;
+                                       if( !($di = $dest_map{ $dpp . $dps }) ){
+                                               last;
+                                       }
+                                       &keep( $di, $dpp . $dps, *dest_keep, 
*dest_keep_totals, *dest_map, 1 );
+                               }
+                               # And the README
+                               $dps = 'README';
+                               $di = $dest_map{ $dpp . $dps };
+                               if( $di ){
+                                       &keep( $di, $dpp . $dps, *dest_keep, 
*dest_keep_totals, *dest_map, 1 );
+                               }
+                               # And the directory
+                               chop( $dpp );
+                               $dps = '';
+                               $di = $dest_map{ $dpp . $dps };
+                               if( $di ){
+                                       &keep( $di, $dpp . $dps, *dest_keep, 
*dest_keep_totals, *dest_map, 0 );
+                               }
+                       }
+               }
+               
+               local( $update ) = 0;
+
+               if( ! $get_missing ){
+                       next;
+               }
+
+               if( ($max_size > 0) && ($src_size[ $srci ] > $max_size) ){
+                       &msg( "   src is too big, no need to xfer it\n" ) if 
$debug > 2;
+                       next;
+               }
+
+               if( $force || ! $dest_type[ $desti ] || $timestamp ){
+                       # Either I'm forcing xfers or the file doesn't exist
+                       # either way I should update
+                       $update = 1;
+               }
+               else {
+                       # Maybe the src is newer?
+                       if( $get_newer &&
+                          &compare_times( $src_time[ $srci ], $dest_time[ 
$desti ] ) ){
+                               &msg( "   src is newer, xfer it\n" ) if $debug 
> 2;
+                               $update = 1;
+                       }
+                       # or maybe its size has changed?
+                       # don't bother if file was compressed or split as the
+                       # size will have changed anyway
+                       if( !$update &&
+                          !$compress && !$split &&
+                          $get_size_change &&
+                          ($src_type[ $srci ] eq 'f') &&
+                          ($src_size[ $srci ] != $dest_size[ $desti ]) ){
+                               $update = 1;
+                               if( $debug > 2 ){
+                                   &msg( "   src is different size, xfer it\n" 
);
+                               }
+                       }
+                       # Maybe it has changed type!
+                       if( !$update &&
+                          $src_type[ $srci ] ne $dest_type[ $desti ] ){
+                               $update = 1;
+                               if( $debug > 2 ){
+                                   &msg( "   src has different type, xfer 
it\n" );
+                               }
+                       }
+               }
+
+               if( ! $update ){
+                       next;
+               }
+
+               if( $src_type[ $srci ] =~ /^l (.*)/ ){
+                       # If the symlink hasn't changed then may as well 
+                       # leave it alone
+                       if( $src_type[ $srci ] eq $dest_type[ $desti ] ){
+                               next;
+                       }
+                       # DONT FORGET TO NAME MAP!!!!
+                       $existing_path = $1;
+
+                       if( $compress_suffix eq $gzip_suffix &&
+                           $compress_conv_patt && $existing_path =~ 
/$compress_conv_patt/ ){
+                               $_ = $existing_path;
+                               eval $compress_conv_expr;
+                               $existing_path = $_;
+                       }
+
+                       push( @things_to_make, "l $dest_path -> $existing_path" 
);
+                       &msg( "   need to symlink $dest_path -> 
$existing_path\n" ) if $debug > 2;
+                       next;
+               }
+
+               # Now that the tests are complete use the real dest.
+               if( defined( $dest_path_real ) ){
+                       $dest_path = $dest_path_real;
+                       $desti = $dest_map{ $dest_path };
+               }
+
+               $total_src_size += $src_size[ $srci ];
+               if( $dont_do ){
+                       &msg("Should ");
+               }
+               &msg( "$XFER file $src_path as $dest_path ($src_size[ $srci ])".
+                       ($compress ? " (->$compress_suffix)" : "") .
+                       ($split ? " (split)" : "") . "\n" ) if $debug > 1;
+               push( @xfer_dest, $dest_path );
+               push( @xfer_src, $src_path );
+
+               # If xfers can be restarted AND
+               # a temporary file exists from a previous attempt at a
+               # transfer  AND
+               # the timestamps of the exising temp file and the original
+               # src file match then flag a restart.
+               $tmp = &filename_to_tempname( '', $dest_path );
+               $tmpi = $dest_map{ $tmp };
+               $restart = '';
+#warn "get_file = $get_file, can_restart = $can_restart, dest_size = 
$dest_size[ $tmpi ], dest_time = $dest_time[ $tmpi ], src_time = $src_time[ 
$srci ]\n";
+               if( $get_file &&
+                  $can_restart &&
+# Debian bug #24243, mirror-2.9 does not restart, address@hidden
+                  $dest_size[ $tmpi ] != 0 ){
+                   if ($dest_time[ $tmpi ] eq $src_time[ $srci ]) {
+                       # Then this is an xfer of the same file
+                       # so just restart where I left off
+                       $restart = 'r';
+                   } elsif ( $debug > 1 ){
+                       &msg ( "Timestamp useless on $tmp\n" );
+                   }
+               }
+               # x for xfer, c for compress, s for split
+               push( @xfer_attribs,
+                    "x$restart" .
+                    ($compress ? "c" : "") .
+                    ($split ? "s" : "") );
+       }
+       &msg( "to $XFER $total_src_size bytes\n" ) if $debug > 2;
+}
+
+sub map_name
+{
+       local( $name ) = @_;
+
+       if( $name_mappings ){
+               local( $old_name ) = $name;
+               $_ = $name;
+               eval $name_mappings;
+               if( $_ ne $old_name ){
+                       $name = $_;
+               }
+       }
+       
+       if( $external_mapping ){
+               $old_name = $name;
+               local( $tmp ) = &extmap'map( $name );
+               if( $tmp ne $old_name ){
+                       $name = $tmp;
+               }
+       }
+       return $name;
+}
+
+
+sub set_timestamps
+{
+       local( $src_path );
+       
+       &msg( "setting timestamps\n" );
+       if( ! $get_file ){
+               &msg( "Cannot set remote timestamps\n" );
+               return;
+       }
+
+       local( $dest_path, $dest_loc_mapi, $src_rem_mapi,  $rtime );
+       
+       foreach $src_path ( @xfer_src ){
+               $dest_path = shift( @xfer_dest );
+               $dest_loc_mapi = $local_map{ $dest_path };
+               $src_rem_mapi = $remote_map{ $src_path };
+
+               $rtime = $remote_time[ $src_rem_mapi ];
+               if( $dest_loc_mapi && $local_time[ $dest_loc_mapi ] ne $rtime ){
+                       &set_timestamp( $dest_path, $rtime );
+               }
+       }
+}
+
+sub set_timestamp
+{
+       local( $path, $time ) =  @_;
+       
+       local( $pr_time ) = &t2str( $time );
+
+       if( $dont_do ){
+               &msg( "Should set time of $path to $pr_time\n" );
+               return;
+       }
+
+       if( $timestamp || $debug > 2 ){
+               &msg( "Setting time of $path to $pr_time\n" );
+       }
+
+       if( ! &utime( $time, $time, $path ) ){
+               &msg( $log, "Cannot set file times for $path to $pr_time 
because: $!\n" );
+       }
+}
+
+sub make_dirs
+{
+       local( $thing );
+
+       foreach $thing ( @things_to_make ){
+               if( $thing !~ /^d (.*)/ ){
+                       next;
+               }
+               if( $dont_do ){
+                       &msg( "Should mkdir $1\n" );
+               }
+               else {
+                       &mkdirs( $1 );
+               }
+       }
+}
+
+sub make_symlinks
+{
+       local( $thing );
+
+       thing:
+       foreach $thing ( @things_to_make ){
+               if( $thing !~ /^l (.*) -> (.*)/ ){
+                       next;
+               }
+               local( $dest, $existing ) = ($1, $2);
+               local( $dirpart ) = &dirpart( $dest );
+               local( $ft ) = &expand_symlink( $dest, $existing ); 
+               if( -e $ft ){
+                       &mkdirs( $dirpart ) if ! -d $dirpart;
+                       # symlink to existing file.
+# Debian bug #85353 "bad symlink stops listing with -n" <address@hidden> 
+                       &mksymlink( $dest, $existing );
+                       next;
+               }
+
+               # The existing file doesn't actually exist!
+               # Has it been compressed, gzipped, split? or worse
+               # compressed/gzipped AND split.  (OK so it could
+               # be another problem, bad symlink on remote host, file
+               # that hasn't been xfer'd yet... but this is as good as
+               # it gets.)
+               local( $p );
+               foreach $p (
+                       "\%s.$sys_compress_suffix",
+                       "\%s.$gzip_suffix",
+                       "\%s/README",
+                       "\%s-split/README",
+                       "\%s-split.$sys_compress_suffix/README",
+                       "\%s-split.$gzip_suffix/README" ){
+                       local( $f ) = sprintf( $p, $existing );
+                       if( -e $f ){
+                               &msg( "using $p\n" ) if $debug > 2;
+                               &mksymlink( $dest, $f );
+                               next thing;
+                       }
+               }
+               if( $make_bad_symlinks ){
+                       &msg( "symlink to non-existant file: $dest -> 
$existing\n" );
+                       &mksymlink( $dest, $existing );
+               }
+               elsif ( $get_symlink_files ){
+# Get file within $local_dir tree and make symlink, address@hidden, 2001/09/22.
+                       if( $ft =~ m|\.\./| ){
+                               &msg( "Not getting path $ft\nas not in 
remote_dir $remote_dir\n" );
+                               &msg( "and not symlinking $dest -> $existing\n" 
);
+                               next thing;
+                       }
+                       local( $dl ) = &dirpart( $ft );
+                       &mkdirs( $dl ) if ! -d $dl;
+                       if( &ftp'get( $ft, $ft, 0 ) ){
+                               &msg( $log, "Got $ft\n" );
+                               &mksymlink( $dest, $existing );
+                       }
+                       else {
+                               &msg( "Did not get $ft\nbecause 
$ftp'response\n" );
+                               &msg( "so not symlinking $dest -> $existing\n" 
);
+                       }
+               }
+               else {
+                       &msg( "Not symlinking $dest -> $existing\n" );
+                       &msg( "as no path $ft\n" );
+               }
+       }
+}
+
+sub do_all_transfers
+{
+       local( $src_path );
+       local( $dest_path, $attribs );
+       local( $srci );
+       
+       if( $#xfer_src < 0 ){
+               &msg( "No files to transfer\n" ) if $algorithm == 0;
+               return;
+       }
+
+       # The Macos ftpd cannot reliably rename files
+       $no_rename = (! $remote_has_rename) || ($remote_fs eq 'macos' && ! 
$get_file);
+
+       foreach $src_path ( @xfer_src ){
+               if( $get_file ){
+                       $srci = $remote_map{ $src_path };
+               }
+               else {
+                       $srci = $local_map{ $src_path };
+               }
+
+               $dest_path = shift( @xfer_dest );
+               $attribs = shift( @xfer_attribs );
+               
+               if( $dont_do ){
+                       # Skip trying to get the file.
+                       next;
+               }
+
+               &msg( "Need to $XFER file $src_path as $dest_path ($attribs)\n" 
) if $debug > 1;
+
+               local( $newpath ) =
+                       &transfer_file( $src_path, $dest_path,
+                                      $attribs, $remote_time[ $srci ] );
+               if( $get_file && $newpath eq '' ){
+                       &msg( $log, "Failed to $XFER file $ftp'response\n" );
+                       if( $ftp'response =~ /timeout|timed out/i ){
+                               $timeouts++;
+                       }
+                       if( $ftp'fatalerror || $timeouts > $max_timeouts ){
+                               &msg( $log, "Fatal error talking to site, 
skipping rest of transfers\n" );
+                               &disconnect();
+                               return;
+                       }
+                       next;
+               }
+
+               # File will now have been split up.
+               if( $attribs =~ /s/ ){
+                       next;
+               }
+
+               &set_attribs( $newpath, $src_path, 'f' );
+
+               # we can only force time for local files
+               if( $force_times && $get_file ){
+                       &set_timestamp( $newpath, $remote_time[ $srci ] );
+               }
+       }
+}
+
+
+sub transfer_file
+{
+       local( $src_path, $dest_path, $attribs, $timestamp ) = @_;
+       local( $dir, $file, $temp, $compress, $split, $restart, $mesg, 
$got_mesg );
+       
+       # Make sure the required directory exists
+       $dir = "";
+       if( $dest_path =~ /^(.+\/)([^\/]+)$/ ){
+               ($dir, $file) = ($1, $2);
+               if( $dest_type[ $dir ] ne 'd' && &mkdirs( $dir ) ){
+                       &msg( $log, "Created dir $dir\n" );
+               }
+       }
+       else {
+               $file = $dest_path;
+       }
+       
+       $temp = &filename_to_tempname( $dir, $file );
+       
+       # Interpret the attrib characters
+       if( $attribs !~ /x/ ){
+               # Not an xfer!
+               return '';
+       }
+       if( $attribs =~ /c/ ){
+               $compress = 1;
+               $mesg = " and compress";
+       }
+       if( $attribs =~ /s/ ){
+               $split = 1;
+               $mesg = " and split";
+       }
+       if( $attribs =~ /r/ ){
+               $restart = 1;
+       }
+       
+       if( $vms ){
+               &ftp'type( ($src_path =~ /$vms_xfer_text/i) ? 'A' : 'I' );
+       }
+       
+       if( $remote_fs eq 'macos' && ! $get_file ){
+               &ftp'type( 'A' );
+       }
+       
+       if( ! $get_file ){
+               # put the file remotely
+               local( $src_file ) = $src_path;
+               local( $comptemp ) = '';
+
+               if( $compress ){
+                       # No easy way to tell wether this was compressed or not
+                       # for now just presume that it is.
+                       local( $f ) = $src_file;
+                       $f =~ s/($shell_metachars)/\\$1/g;
+                       $comptemp = "$big_temp/.out$$";
+                       &sys( "$compress_prog < \"$f\" > \"$comptemp\"" );
+                       $src_file = $comptemp;
+               }
+               
+               if( $no_rename ){
+                       $temp = $dest_path;
+               }
+
+               if( ! &ftp'put( $src_file, $temp, $restart ) ){
+                       &msg( $log, "Failed to put $src_file: $ftp'response\n" 
);
+                       unlink( $comptemp ) if $comptemp;
+                       return '';
+               }
+       
+               unlink( $comptemp ) if $comptemp;
+               if( !$no_rename && ! &ftp'rename( $temp, $dest_path ) ){
+                       &msg( $log, "Failed to remote rename $temp to 
$dest_path: $ftp'response\n" );
+                       return '';
+               }
+
+               local($filesize) = &filesize( $src_file );
+               &msg( $log, "Put $src_file $filesize bytes\n" );
+
+               &log_upload( $src_file, $dest_path, "", $filesize );
+
+               # Some transfers done
+               $exit_xfer_status |= $exit_xfers;
+
+               if( $delete_source ){
+                       unlink( $src_file );
+               }
+               
+               return $dest_path;
+       }
+
+       # Maybe TODO: Paul Szabo suggest that if recurse_hard is set then
+       # mirror should chdir to the directory the file is in before getting
+       # it.
+
+       # Get a file
+       &ftp'dostrip( $strip_cr );
+       $start_time = time;
+       if( ! &ftp'get( $src_path, $temp, $restart ) ){
+               if( !$failed_gets_excl || $ftp'response !~ /$failed_gets_excl/ 
){
+                       &msg( $log, "Failed to get $src_path: $ftp'response\n" 
);
+               }
+
+               # Time stamp the temp file to allow for a restart
+               if( -f $temp ){
+                       &utime( $timestamp, $timestamp, $temp );
+                       # Make sure this file is kept
+                       local( $ti ) = $local_map{ $temp };
+                       &keep( $ti, $temp, *local_keep, *local_keep_totals, 
*local_map, 0 );
+               }
+
+               return '';
+       }
+       
+       # Some transfers done
+       $exit_xfer_status |= $exit_xfers;
+
+       # delete source file after successful transfer
+       if( $delete_source ){
+               if( &ftp'delete( $src_path ) ){
+                       &msg( $log, "Deleted remote $src_path\n");
+               }
+               else {
+                       &msg( $log, "Failed to delete remote $src_path\n");
+               }
+       }
+
+       if( $compress ){
+               # Prevent the shell from expanding characters
+               local( $f ) = $temp;
+               local( $comp );
+               $f =~ s/($shell_metachars)/\\$1/g;
+               $temp = "$f.$compress_suffix";
+               # Am I doing compress to gzip conversion?
+               if( $compress_conv_patt && $src_path =~ /$compress_conv_patt/ &&
+                   $compress_suffix eq $gzip_suffix ){
+                       $comp = "$sys_compress_prog -d < \"$f\" | $gzip_prog > 
\"$temp\"";
+               }
+               else {
+                       $comp = "$compress_prog < \"$f\" > \"$temp\"";
+               }
+               &sys( $comp );
+               $temp =~ s/\\($shell_metachars)/$1/g;
+               $f =~ s/\\($shell_metachars)/$1/g;
+               unlink( $f );
+       }
+
+       local( $filesize ) = &filesize( $temp );
+       local( $sizemsg ) = $filesize;
+       local( $srcsize ) = $remote_size[ $remote_map{ $src_path } ];
+       if( $srcsize > $sizemsg && !$compress ){
+               # should never happen, right?  right ...
+               $sizemsg .= " (file shrunk from $srcsize!)";
+       }
+       elsif( $srcsize < $sizemsg ){
+               # compression wasn't such a great idea
+               $sizemsg .= " (file grew from $srcsize!)";
+       }
+
+       # Ok - chop it up into bits!
+       if( $split ){
+               local( $time ) = 0;
+               if( $force_times ){
+                       $time = $remote_time[ $remote_map{ $src_path } ];
+               }
+               &bsplit( $temp, $dest_path, $time );
+               unlink( $temp );
+               $got_mesg .= " and split";
+       }
+       else {
+               if( -f $dest_path ){
+                       unlink( $dest_path );
+               }
+               if( ! rename( $temp, $dest_path ) ){
+                       &msg( $log, "Cannot rename $temp to $dest_path: $!\n" );
+               }
+       }
+
+       local( $as ) = '';
+       if( $src_path ne $dest_path ){
+               $as = " as $dest_path";
+       }
+       $time_taken = time - $start_time;
+       &msg( $log, "Got $src_path$as$got_mesg $sizemsg $time_taken\n" );
+       # Make sure to keep what you just got!  It may/may not have
+       # been compressed or gzipped..
+       local( $locali ) = $local_map{ $dest_path };
+       &keep( $locali, $dest_path, *local_keep, *local_keep_totals, 
*local_map, 1 );
+
+       &log_upload( $src_path, $dest_path, $got_mesg, $filesize );
+
+       return( $dest_path );
+}
+
+sub filename_to_tempname
+{
+       local( $dir, $file ) = @_;
+
+       local ( $dest_path ) = $file;
+
+       if( $dir eq '' ){
+               if( $dest_path =~ /^(.+\/)([^\/]+)$/ ){
+                       ($dir, $file) = ($1, $2);
+               }
+       }
+       else {
+               $file = $dest_path;
+       }
+
+       # dir 
+# LIMITED NAMELEN
+# if you are really limited in pathname length then
+# change the .in. to just .
+       if( $remote_fs eq 'macos' && ! $get_file ){
+               return $dir . "tmp.$file";
+       }
+       return "$dir.in.$file.";
+}
+
+
+# Open, write, close - to try and ensure that the log will allways be filled
+# in.
+sub log_upload
+{
+       local( $src_path, $dest_path, $got_mesg, $size ) = @_;
+
+       if( ! $upload_log ){
+               return;
+       }
+
+       if( ! open( ULOG, ">>$upload_log" ) ){
+               print STDERR "Cannot write to $upload_log\n";
+               return;
+       }
+
+       &myflock( 'ULOG', $LOCK_EX );
+       if( $get_files ){
+               print ULOG "$site:$remote_dir/$src_path -> 
$local_dir/$dest_path $size ";
+       }
+       else {
+               print ULOG "$local_dir/$dest_path -> 
$site:$remote_dir/$src_path $size ";
+       }
+       if( $got_mesg ){
+               print ULOG "($got_mesg)";
+       }
+       print ULOG "\n";
+       &myflock( 'ULOG', $LOCK_UN );
+       close( ULOG );
+}
+
+sub do_deletes
+{
+       # This declaration must be "local()" because it modifies global data.
+       local( *src_paths,
+               *src_map,
+                *src_type, *src_keep,
+                 *src_totals, *src_keep_totals ) = @_;
+       local( $files_to_go, $dirs_to_go );
+       
+       if( ! ($do_deletes || $save_deletes) ){
+               return;
+       }
+       
+       local( $src_path, $i );
+       local( $orig_do_deletes ) = $do_deletes;
+       local( $orig_save_deletes ) = $save_deletes;
+
+       local( $del_patt ) = $delete_patt;
+       if( $delete_get_patt ){
+               $del_patt = $get_patt;
+       }
+       
+       $files_to_go = $src_totals[ 1 ] - $src_keep_totals[ 1 ];
+       $dirs_to_go = $src_totals[ 0 ] - $src_keep_totals[ 0 ];
+
+       # Adjust totals by considering del_patt
+       for( $i = $#src_paths; $i >= 0; $i-- ){
+               $src_path = $src_paths[ $i ];
+               $srci = $i + 1;
+
+               if( !$src_keep[ $srci ] && $src_path !~ /$del_patt/
+                   || $delete_excl && $src_path =~ /$delete_excl/ ){
+                       if( $src_type[ $srci ] =~ "d" ){
+                               $dirs_to_go--;
+                       }
+                       else {
+                               $files_to_go--;
+                       }
+               }
+       }
+
+       # Check out file deletions
+       if( $max_delete_files =~ /^(\d+)\%$/ ){
+               # There is a % in the value - so its a percentage
+               local( $per ) = $1;
+               if( $per <= 0 || 100 < $per ){
+                       &msg( "silly percentage $max_delete_files, not 
deleting\n" );
+                       $do_deletes = 0;
+                       $save_deletes = 0;
+               }
+               else {
+                       # Don't do more than this percentage of files
+                       # Convert max_delete_files into the number of files
+                       $max_delete_files =
+                               int( $src_totals[ 1 ] * $max_delete_files /100 
);
+               }
+       }
+       if( $files_to_go > $max_delete_files ){
+               &msg( "Too many files to delete, not actually deleting 
($files_to_go > $max_delete_files)\n" );
+               $do_deletes = 0;
+               $save_deletes = 0;
+       }
+
+       # Check out directory deletions
+       if( $max_delete_dirs =~ /^(\d+)%$/ ){
+               # There is a % in the value - so its a percentage
+               local( $per ) = $1;
+               if( $per <= 0 || 100 < $per ){
+                       &msg( "silly percentage $max_delete_dirs, not 
deleting\n" );
+                       $do_deletes = 0;
+                       $save_deletes = 0;
+               }
+               else {
+                       # Don't do more than this percentage of dirs
+                       # Convert max_delete_dirs into the number of dirs
+                       $max_delete_dirs =
+                               int( $src_totals[ 0 ] * $max_delete_dirs / 100 
);
+               }
+       }
+
+       if( $dirs_to_go > $max_delete_dirs ){
+               &msg( "Too many directories to delete, not actually deleting 
($dirs_to_go > $max_delete_dirs)\n" );
+               $do_deletes = 0;
+               $save_deletes = 0;
+       }
+
+       # Scan the list backwards so subdirectories are dealt with first
+       for( $i = $#src_paths; $i >= 0; $i-- ){
+               $src_path = $src_paths[ $i ];
+               $srci = $i + 1;
+       
+               if( $src_keep[ $srci ] ){
+                       # Keep this for sure;
+                       &msg( "Keeping: $src_path\n" ) if $debug > 3;
+                       next;
+               }
+
+               if( $src_path !~ /$del_patt/ ){
+                       &msg( "   not in del_patt: $src_path\n" ) if $debug > 1;
+                       next;
+               }
+
+               if( $delete_excl && $src_path =~ /$delete_excl/ ){
+                       &msg( "   do not delete: $src_path\n" ) if $debug > 1;
+                       next;
+               }
+
+               if( $save_deletes && $save_dir =~ m,$cwd/(.*), ){
+                       local( $save_dir_tail ) = $1;
+                       if( $save_dir_tail && $src_path =~ m,$save_dir_tail/*, 
){
+                               next;
+                       }
+               }
+
+               if( $save_deletes ){
+                       &save_delete( $src_path, $src_type[ $srci ] );
+               }
+               else {
+                       &do_delete( $src_path, $src_type[ $srci ] );
+               }
+       }
+       
+       $do_deletes = $orig_do_deletes;
+       $save_deletes = $orig_save_deletes;
+}
+               
+# Move aside the given file.  Kind is 'd' for dirs and 'f' for files.
+sub save_delete
+{
+       local( $save, $kind ) = @_;
+
+       local( $real_save_dir, $save_dest );
+       eval "\$real_save_dir = \"$save_dir\"";
+
+
+       if( ! $get_file ){
+               &msg( "NEED TO implement remote save_deletes\n" );
+               return;
+       }
+       
+       $save_dest = "$real_save_dir/$save";
+
+       if( $dont_do ){
+               &msg( "Should save_delete $save to $save_dest\n" );
+               return;
+       }
+
+       if( $kind eq 'd' ){
+               $save_dest =~ s,/+$,,;
+               
+               # Make sure it exists
+               &save_mkdir( $save_dest );
+                       
+               # Zap the original
+               if( rmdir( $save ) == 1 ){
+                       &msg( $log, "Removed directory $save\n" );
+               }
+               else {
+                       &msg( $log, "UNABLE TO REMOVE DIRECTORY $save\n" );
+               }
+               return;
+       }
+
+       # Save a file
+
+       # Make the directories under $save_dir
+       local( $dirname );
+       $dirname = $save_dest;
+       $dirname =~ s/\/[^\/]+$//;
+       # Make sure the directory exists to mv the file into.
+       &save_mkdir( $dirname );
+               
+       if( rename( $save, $save_dest ) == 1 ){
+               &msg( $log, "Moved $save to $save_dest\n" );
+       }
+       else {
+               system "$mv_prog '$save' '$save_dest'";
+               if( ( $? >> 8 ) == 0 ){
+                       &msg( $log, "Moved $save to $save_dest\n" );
+               }
+               else {
+                       &msg( $log, "UNABLE TO MOVE $save TO $save_dest\n" );
+               }
+       }
+}
+
+sub save_mkdir
+{
+       local( $dir ) = @_;
+       
+       if( ! -d $dir ){
+               if( &mkdirs( $dir ) ){
+                       &msg( $log, "Created save directory $dir\n" );
+               }
+               else {
+                       &msg( $log, "UNABLE TO CREATE $dir, aborting saves\n" );
+                       $save_deletes = 0;
+               }
+       }
+}
+
+# Delete the given file.  Kind is 'd' for dirs and 'f' for files.
+sub do_delete
+{
+       local( $del, $kind ) = @_;
+       
+       if( $dont_do ){
+               &msg( "Should delete $del\n" );
+               return;
+       }
+
+       if( $kind eq 'd' ){
+               $del =~ s,/+$,,;
+               if( $do_deletes ){
+                       if( $get_file ){
+                               &msg( $log, "rmdir $cwd/$del\n" );
+                               rmdir( "$cwd/$del" ) ||
+                                       &msg( $log, "rmdir $cwd/$del failed: 
$!\n" );
+                       }
+                       else {
+                               &msg( $log, "delete DIR $del\n" );
+                               &ftp'deldir( "$del" ) ||
+                                       &msg( $log, "ftp delete DIR $del 
failed\n" );
+                       }
+               }
+               else {
+                       if( $get_file ){
+                               &msg( $log, "NEED TO rmdir $cwd/$del\n" );
+                       }
+                       else {
+                               &msg( $log, "NEED TO ftp'deldir $del\n" );
+                       }
+               }
+               return;
+       }       
+
+       # Deleting a file.
+       if( $do_deletes ){
+               if( $get_file ){
+                       &msg( $log, "unlink $cwd/$del\n" );
+                       unlink( "$cwd/$del" ) ||
+                               &msg( $log, "unlink $cwd/$del failed: $!\n" );
+               }
+               else {
+                       &msg( $log, "delete FILE $del\n" );
+                       &ftp'delete( "$del" ) ||
+                               &msg( $log, "ftp delete FILE $del failed\n" );
+               }
+       }
+       else {
+               if( $get_file ){
+                       &msg( $log, "NEED TO unlink $cwd/$del\n" );
+               }
+               else {
+                       &msg( $log, "NEED TO ftp'delete $del\n" );
+               }
+       }
+}
+
+sub filesize
+{
+       local( $fname ) = @_;
+
+       if( ! -f $fname ){
+               return -1;
+       }
+
+       return (stat( _ ))[ 7 ];
+       
+}
+
+# Is the value
+sub istrue
+{
+       local( $val ) = @_;
+       
+       return $val eq '1' || $val eq 'yes' || $val eq 'ok' ||
+              $val eq 'true';
+}
+
+sub mksymlink
+{
+       local( $dest_path, $existing_path ) = @_;
+
+       if( ! $get_file ){
+               &msg( "Cannot create symlinks on remote systems ($dest_path -> 
$existing_path)\n" );
+               return;
+       }
+       
+# Debian bug #85353 "bad symlink stops listing with -n" <address@hidden> 
+       if( $dont_do ){
+               &msg( "Should symlink $dest_path to $existing_path\n" );
+               return;
+       }
+
+       # make the symlink locally
+
+       # Zap any exiting file/symlink of that name
+       if( -d $dest_path && ! -l $dest_path ){
+               local( $msg ) = "rmdir( $dest_path ) before symlink";
+               if( ! rmdir( $dest_path ) ){
+                       if( $algorithm == 1 ){
+                               $msg = "rmdir( $local_dir/$dest_path ) before 
symlink";
+                               &msg( "$msg failed: $!\n" );
+                       }
+                       &msg( "$msg failed: $!\n" );
+                       return;
+               }
+               elsif( $debug ){
+                       &msg( "$msg\n" );
+               }
+       }
+       if( -e $dest_path || -l $dest_path ){
+               local( $msg ) = "unlink( $dest_path ) before symlink";
+               if( ! unlink( $dest_path ) ){
+                       &msg( "$msg failed: $!\n" );
+                       return;
+               }
+               elsif( $debug ){
+                       &msg( "$msg\n" );
+               }
+       }
+
+       if( (eval 'symlink("","")', $@ eq '') ){
+               local( $status ) = '';
+               if( ! symlink( $existing_path, $dest_path ) ){
+                       $status = "Failed to ";
+               }
+               &msg( $log, $status . "symlink $existing_path to $dest_path\n" 
);
+               &chown( $uid, $gid, $dest_path );
+       }
+       else {
+               &msg( $log, "Tried to create symlink - but not supported 
locally\n" );
+       }
+}
+
+
+# Make a full directory heirarchy
+# returns true if the directory doesn't exist
+sub mkdirs
+{
+       local( $dir ) = @_;
+       local( @dir, $d, $path );
+
+       # If the target directory already exists but is a symlink then
+       # zap the symlink to recreate it as a directory
+       if( $get_file && -l $dir ){
+               unlink( $dir );
+       }
+
+       # Very often the directory does exist - so return now
+       return 0 if &dir_exists( $dir );
+       
+       # Make sure that the target directory exists
+       @dirs = split( '/', $dir );
+       
+       # the root directory always exists
+       $path = '';
+       if( $dirs[ 0 ] eq '' ){ 
+               shift( @dirs ); 
+               $path = '/';
+       }
+
+       foreach $d ( @dirs ){
+               $path = $path . $d;
+               if( ! &dir_exists( $path ) ){
+                       &msg( "mkdir $path\n" ) if $debug > 2;
+                       if( ! &make_dir( $path, 0755 ) ){
+                               &msg( "make_dir($path,0755) failed with $err\n" 
);
+                               return 0;
+                       }
+                       &set_attribs( $path, $path, 'd' );
+               }
+               $path .= "/";
+       }
+       return 1;
+}
+
+# return 0 on error, 1 on success
+sub make_dir
+{
+       local( $dir, $mode ) = @_;
+       local( $val );
+
+       if( $get_file ){
+               if( $on_win && $dir =~ /^[a-z]:$/i ){
+                       return 1;
+               }
+               # make a local directory
+               if( -e $dir || -l $dir ){
+                       unlink( $dir );
+               }
+               $val = mkdir( $dir, $mode );
+               $err = "$!";
+       }
+       else {
+               # make a remote directory
+               $val = &ftp'mkdir( $dir );
+
+               # The mkdir might have failed due to bad mode
+               # So try to chmod it anyway
+               if( $remote_has_chmod ){
+                       $val = &ftp'chmod( $dir, $mode );
+               }
+       }
+
+       return $val;
+}
+
+# return 1 if $dir exists, 0 if not
+sub dir_exists
+{
+       local( $dir ) = @_;
+       local( $val );
+
+       if( $get_file ){
+               # check if local directory exists
+               $val = (-d $dir);
+       }
+       else {
+               # check if remote directory exists
+               local($old_dir) = &ftp'pwd();           
+               
+               $val = &ftp'cwd($dir);
+
+               # If I didn't manage to change dir should be where I was!
+               if( $val ){
+                       # go back to the original directory
+                       &ftp'cwd($old_dir) || die "Cannot cd to original remote 
directory";
+               }
+       }
+       return $val;
+}
+
+# Set file/directory attributes
+sub set_attribs
+{
+       local( $path, $src_path, $type ) = @_;
+       local( $mode );
+       
+       if( ! $chmod ){
+               &msg( "dont chmod \"$path\"\n" ) if $debug > 2;
+               return;
+       }
+
+       if( $get_file ){
+               local( $pathi ) = $remote_map{ $src_path };
+               $mode = $remote_mode[ $pathi ];
+       }
+       else {
+               local( $pathi ) = $local_map{ $path };
+               $mode = $local_mode[ $pathi ];
+       }
+
+       # If I can't figure out the mode or I'm not copying it
+       # use the default
+       if( !$mode_copy || !$mode ){
+               if( $type eq 'f' ){
+                       $mode = $file_mode;
+               }
+               elsif( $type eq 'd' ){
+                       $mode = $dir_mode;
+               }
+       }
+
+       # Convert from octal
+       # Suggested patch to limit bits being set
+       # $mode = $mode & 0777;
+       $mode = oct( $mode ) if $mode =~ /^0/;
+
+       if( $get_file ){
+               # Change local
+
+               chmod $mode, $path;
+
+               if( $user ne '' && $group ne '' ){
+                       &chown( $uid, $gid, $path );
+               }
+       }
+       else {
+               # change the remote file
+               if( $remote_has_chmod ){
+                       &ftp'chmod( $path, $mode );
+               }
+       }
+}
+
+
+sub get_passwd
+{
+       local( $user ) = @_;
+       local( $pass );
+       local( $| ) = 1;
+
+       # prompt for a password
+       $SIG{ 'INT' } = 'IGNORE';
+       $SIG{ 'QUIT' } = 'IGNORE';
+
+       system "stty -echo </dev/tty >/dev/tty 2>&1";
+       print "Password for $user: ";
+
+       $pass = <STDIN>;
+       print "\n";
+       chop( $pass );
+
+       system "stty echo </dev/tty >/dev/tty 2>&1";
+
+       $SIG{ 'INT' } = 'DEFAULT';
+       $SIG{ 'QUIT' } = 'DEFAULT';
+       
+       return $pass;
+}
+
+sub compare_times
+{
+       # Try and allow for time zone changes (eg when a site
+       # switches from daylight saving to non daylight saving)
+       # by ignoring differences of exactly one hour
+
+       local( $t1, $t2 ) = @_;
+       local( $diff ) = ($t1 > $t2 ? $t1 - $t2 : $t2 - $t1);
+
+       return ($t1 > $t2) && ($diff != 3600);
+}
+
+sub create_assocs
+{
+       local( $map );
+
+       &delete_assocs();
+
+       &msg( "creating assocs ...\n" ) if $debug > 2;
+       foreach $map ( @assocs ){
+               eval "\$$map = \"\$big_temp/$map.$$\"";
+               eval "dbmopen( $map, \$$map, 0644 )";
+       }
+       &msg( "creating assocs done\n" ) if $debug > 2;
+}
+
+sub delete_assocs
+{
+       local( $map );
+
+       &msg( "deleting assocs ...\n" ) if $debug > 2;
+       foreach $map ( @assocs ){
+               eval "\$$map = \"\$big_temp/$map.$$\"";
+               eval "dbmclose( $map )";
+               &unlink_dbm( eval "\$$map" );
+               eval "\%$map = ()";
+       }
+       &msg( "deleting assocs done\n" ) if $debug > 2;
+}
+
+sub unlink_dbm
+{
+       local( $file ) = @_;
+       unlink "$file.pag" if -e "$file.pag";
+       unlink "$file.dir" if -e "$file.dir";
+       unlink "$file.gdbm" if -e "$file.gdbm";
+       unlink "$file" if -e "$file";
+}
+
+# Chop the tmp file up
+sub bsplit
+{
+       local( $temp, $dest_path, $time ) = @_;
+       local( $dest_dir ) = "$dest_path-split";
+       local( $bufsiz ) = 512;
+       local( $buffer, $in, $sofar );
+
+       &msg( "Splitting up $temp into $dest_dir/ ($time)\n" ) if $debug;
+
+       # Stomp on the original directories
+       local( $d ) = $dest_dir;
+       $d =~ s/($shell_metachars)/\\$1/g;
+       &sys( "$rm_prog -rf \"$d\"" );
+
+       &mkdirs( $dest_dir );
+
+       local( $index ) = "00";
+       local( $part );
+       open( TMP, $temp ) || die "Cannot open $temp!";
+       $sofar = $split_chunk; # Force a new file
+       while( ($in = sysread( TMP, $buffer, $bufsiz )) > 0 ){
+               if( $sofar >= $split_chunk ){
+                       if( $part ){
+                               close( PART );
+                               if( $time ){
+                                       &set_timestamp( $part, $time );
+                               }
+                       }
+                       $index++;
+                       $part = "$dest_dir/part$index";
+                       &msg( "creating $part\n" ) if $debug;
+                       open( PART, ">$part" ) || die "Cannot create $part";
+                       # Make sure to keep this!
+                       local( $locali ) = $local_map{ $part };
+                       &keep( $locali, $part, *local_keep, *local_keep_totals, 
*local_map, 1 );
+                       $sofar = 0;
+               }
+               if( ($out = syswrite( PART, $buffer, $in )) != $in ){
+                       die "Failed to write data to $part";
+               }
+               $sofar += $in;
+       }
+       close( PART );
+       if( $time ){
+               &set_timestamp( $part, $time );
+       }
+       close( TMP );
+
+       # Generate a readme file about what is in the split directory
+       local( $readme ) = "$dest_dir/README";
+       open( README, ">$readme" ) || die "Cannot create $readme";
+       print README "This directory contains a splitup version of 
$dest_path\n";
+       print README "to recreate the original simply concatenate all the\n";
+       print README "parts back together.\n\nChecksums are:\n\n";
+       close README;
+       &sys( "(cd \"$d\" ; $sum_prog part*)>> $readme" );
+}
+
+sub sys
+{
+       local( $com ) = @_;
+       &msg( "$com\n" ) if $debug > 2;
+       return system( $com ) / 256;
+}
+
+# Set up an associative array given all an array of keys.
+# @fred = ( 'a' );
+# &set_assoc_from_array( *fred )
+# Creates => $fred{ 'a' } = 1
+#
+sub set_assoc_from_array
+{
+       # This declaration must be "local()" because it modifies global data.
+       local( *things ) = @_;
+       foreach $thing ( @things ){
+               $things{ $thing } = 1;
+       }
+}
+
+sub find_prog
+{
+       local( $prog ) = @_;
+       local( $path ) = $ENV{ 'PATH' };
+
+       foreach $dir ( split( /$path_sep/, $path ) ){
+               local( $path ) = $dir . $file_sep . $prog;
+               if( -x $path ){
+                       return $path;
+               }
+               if( $on_win ){
+                       $path .= ".exe";
+                       if( -x $path ){
+                               return $path;
+                       }
+               }
+       }
+       return '';
+}
+
+sub real_dir_from_path
+{
+       local( $program ) = @_;
+       local( @prog_path ) = split( m:$file_sep_pat: , $program );     # dir 
collection
+       local( $dir );
+
+       while( -l $program ){                           # follow symlink
+               $program = readlink( $program );
+               if( $program =~ m:^$file_sep_pat: ){    # full path?
+                       @prog_path = ();                # start dir collection 
anew
+               }
+               else {
+                       pop( @prog_path );              # discard file name
+               }
+               push( @prog_path, split( m:$file_sep_pat:, $program ) );# add 
new parts
+               $program = join( $file_sep, @prog_path );  # might be a symlink 
again...
+       }
+       pop( @prog_path );
+       $dir = join( $file_sep, @prog_path );
+
+       if( ! $dir ){
+               $dir = '.';
+       }
+       
+       return $dir;
+}
+
+sub msg
+{
+       local( $todo, $msg ) = (0, "");
+
+       if( $#_ == 1 ){
+               ($todo, $msg) = @_;
+       }
+       else {
+               $todo = 0;
+               $msg = $_[ 0 ];
+       }
+
+       # Assign to $0 so when you do a 'ps' it says this!
+       if( defined $package && 
+               defined $site &&
+               defined $remote_dir ){
+               $0 =  "mirror $package:$site:$remote_dir $msg";
+       }
+       else {
+               $0 = "mirror $msg";
+       }
+
+       if( $todo & $log ){
+               push( @log, $msg );
+       }
+# Not sure about this one.  always print the message even if its a log msg.
+#      else {
+               print $msg;
+#      }
+}
+
+sub to_bytes
+{
+       local( $size ) = @_;
+       if( $size =~ /^(\d+)\s*(k|b|m)s*$/i ){
+               $size = $1;
+               if( $2 =~ /[mM]/ ){
+                       $size *= (1024*1024);
+               }
+               elsif( $2 =~ /[bB]/ ){
+                       $size *= 512;
+               }
+               elsif( $2 =~ /[kK]/ ){
+                       $size *= 1024;
+               }
+       }
+       return $size;
+}
+
+# Given a unix filename map it into a vms name.
+# $kind is 'f' for files and 'd' for directories
+sub unix2vms
+{
+       local( $v, $kind ) = @_;
+
+       if( $v eq '.' || $v eq '/' ){
+               return "[]";
+       }
+
+       if( $vms_dir ){
+               $v = $vms_dir . '/' . $v;
+       }
+
+       if( $kind eq 'f' ){
+               # Map a/b/c.txt into [a.b]c.txt
+               if( $v =~ m,(.*)/([^/]+), ){
+                       local( $dir, $rest ) = ($1, $2);
+                       $dir =~ s,/,.,g;
+                       $v = "[$dir]$rest";
+               }
+       }
+       else {
+               # Map a/b/c into [a.b.c]
+               $v =~ s,/,.,g;
+               $v = "[$v]";
+       }
+       return $v;
+}
+
+sub dirpart
+{
+       local( $path ) = @_;
+       if( $path =~ m:/: ){
+               $path =~ s:^(.*)/[^/]+$:$1:;
+       }
+       else {
+               $path = '.';
+       }
+       return $path;
+}
+
+# Given a filename (not a directory) and what path it symlinks to
+# return a, hopefully, non-relative pathname that the symlink
+# really points to.  This is so it can be used to index into the $src_path
+# map.
+sub expand_symlink
+{
+       local( $orig_path, $points_to ) = @_;
+       local( $dirpart ) = &dirpart( $orig_path );
+
+       return &flatten_path( "$dirpart/$points_to" );
+}
+
+# flatten out the effects of dir/.. and /./
+# The problem is not flattening out ../.. into nothing!  Hence
+# the contortions below.
+sub flatten_path
+{
+       local( $path ) = @_;
+       local( $changed ) = 1;
+       local( $i );
+       
+       local( $rooted ) = $path =~ m:^/:;
+       local( $count ) = 0;
+       local( $orig_path ) = $path;
+       
+       $path =~ s:^/::;
+       $path =~ s:(^|/)\.(/|$)::g;
+       $path =~ s:/+:/:g;
+
+       while( $changed ){
+               if( $count++ > 100 ){
+                       &msg( $log, "LOOPING in flatten_path orig = $orig_path, 
path now $path\n" );
+                       last;
+               }
+               local( $in ) = $path;
+               local( @parts ) = split( /\//, $path );
+               for( $i = 0; $i <= $#parts; $i++ ){
+                       if( $parts[ $i ] eq '.' ){
+                               $parts[ $i ] = undef;
+                               next;
+                       }
+                       if( $i > 0 && $parts[ $i ] eq '..' &&
+                          $parts[ $i - 1 ] && $parts[ $i - 1 ] ne '..' ){
+                               $parts[ $i - 1 ] = $parts[ $i ] = undef;
+                               next;
+                       }
+               }
+               $path = '';
+               for( $i = 0; $i <= $#parts; $i++ ){
+                       next unless $parts[ $i ];
+                       $path .= '/' if $path ne '';
+                       $path .= $parts[ $i ];
+               }
+               $changed = $in ne $path;
+       }
+       if( $rooted ){
+               $path = "/$path";
+       }
+       return $path;
+}
+
+
+# Fix up a package name.
+# strip trailing and leading ws and replace awkward characters
+# This doesn't guarentee a unique filename.
+sub fix_package
+{
+       local( $package ) = @_;
+       $package =~ s:[\s/']:_:g;
+       return $package;
+}
+
+sub will_compress
+{
+       $src_type[ $_[1] ] eq 'f' &&
+       $compress_patt && $_[0] =~ /$compress_patt/ &&
+       ( ! $compress_size_floor ||
+         $compress_size_floor < $src_size[ $_[1] ] ) &&
+       !($compress_excl && $_[0] =~ /$compress_excl/i) &&
+       !($compress_suffix eq $gzip_suffix &&
+         $compress_conv_patt && $_[0] =~ /$compress_conv_patt/);
+}
+
+sub will_split
+{
+       $split_max &&
+       $src_size[ $_[1] ] > $split_max &&
+       $src_type[ $_[1] ] eq 'f' &&
+       $split_patt && $_[0] =~ /$split_patt/;
+}
+
+sub myflock
+{
+       local( $file, $kind ) = @_;
+
+       if( ! $can_flock ){
+               return;
+       }
+
+       eval( "flock( \$file, $kind )" );
+       if( $@ =~ /unimplemented/ ){
+               $can_flock = 0;
+               warn "flock not unavialable, running unlocked\n";
+       }
+}
+
+sub t2str
+{
+       local( @t );
+       if( $use_timelocal ){
+               @t = localtime( $_[0] );
+       }
+       else {
+               @t = gmtime( $_[0] );
+       }
+       local($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = @t;
+
+# Debian bug #48611, 1969 appeared as 2069, address@hidden
+       $year += 1900;
+           
+       return sprintf( "%04d/%02d/%02d-%02d:%02d:%02d",
+               $year, $mon + 1, $mday, $hour, $min, $sec );
+}
+
+sub handler
+{
+       $sigs ++;
+       if( $sigs > $max_sigs ){
+               exit( 0 );
+       }
+
+        local( $sig ) = @_;
+        local( $msg ) = "Caught a SIG$sig shutting down";
+        local( $package, $filename, $line ) = caller;
+        warn "$package:$filename:$line $msg";
+        exit( 0 );
+}
+
+sub trap_signals
+{
+       local( $sig );
+        foreach $sig ( 'HUP', 'INT', 'QUIT', 'ILL',
+                        'TRAP', 'IOT', 'BUS', 'FPE',
+                        'USR1', 'SEGV', 'USR2',
+                        'PIPE', 'ALRM', 'TERM' ){
+                $SIG{ $sig } = "main\'handler";
+        }
+}
+
+sub map_user_group
+{
+       if( ! defined( $uid ) ){
+               if( $user =~ /^\d+$/ ){
+                       # User is just a number - presume it is the uid
+                       $uid = $user;
+               }
+               else {
+                       $uid = (getpwnam( $user ))[ 2 ];
+               }
+       }
+       if( ! defined( $gid ) ){
+               if( $group =~ /\d+$/ ){
+                       # Group is just a number - presume it is the gid
+                       $gid = $group;
+               }
+               else {
+                       $gid = (getgrnam( $group ))[ 2 ];
+               }
+       }
+}
+
+sub keep
+{
+       local( $pathi, $path, *keep, *keep_totals, *keep_map, $kind ) = @_;
+       # If pathi is already kept nothing to do
+       if( $pathi eq '' ){
+               &msg( "   keep $path NOTE null pathi\n" ) if $debug > 3;
+               return;
+       }
+       if( $keep[ $pathi ] ){
+               &msg( "   keep $path [$pathi] NOTE already kept\n" ) if $debug 
> 3;
+               return;
+       }
+
+       $keep[ $pathi ] = 1;
+       $keep_totals[ $kind ]++;
+       &msg( "   keep $path\n" ) if $debug > 3;
+
+       # Keep all the parent directories
+       while( $path =~ m,^(.*)/([^/]+)$, ){
+               $path = $1;
+               $pathi = $keep_map{ $path };
+               if( $pathi eq '' ){
+                       &msg( "   keep $path NOTE null pathi\n" ) if $debug > 3;
+                       return;
+               }
+               if( $keep[ $pathi ] ){
+                       &msg( "   keep $path [$pathi] NOTE already kept\n" ) if 
$debug > 3;
+                       return;
+               }
+
+               $keep[ $pathi ] = 1;
+               $keep_totals[ 0 ]++;
+       }
+}
+
+sub alarm
+{
+       local( $time_to_sig ) = @_;
+       eval "alarm( $time_to_sig )";
+}
+
+sub chown
+{
+       local( $uid, $gid, $path ) = @_;
+       eval "chown ( \$uid, \$gid, \$path )";
+}
+
+sub utime
+{
+       local( $atime, $mtime, $path ) = @_;
+       if( ! $on_win ){
+               return utime( $atime, $mtime, $path );
+       }
+       
+       # On windoze I might have set attribs to allow the time to be changed 
first
+       local( $old_mode ) = (stat( $path ))[ 2 ]; 
+       local( $tmp_mode ) = $old_mode;
+       local( $ret );
+
+       $tmp_mode |= 0700;
+       chmod( $tmp_mode, $path );
+       $ret = utime( $atime, $mtime, $path );
+       chmod( $old_mode, $path );
+       return $ret;
+}
+
+sub cwd
+{
+       local( $lcwd ) = '';
+       eval "\$lcwd = $win_getcwd";
+       
+       if( ! ($lcwd eq '' || $lcwd eq $win_getcwd) ){
+               # Must be on windoze!
+               $cwd = $lcwd;
+       }
+       else {
+               # didn't manage it try and run the pwd command instead
+               chop( $cwd = `pwd` );
+       }
+       return $cwd;
+}
diff --git a/test/etags/perl-src/yagrip.pl b/test/etags/perl-src/yagrip.pl
new file mode 100644
index 0000000..be9f09c
--- /dev/null
+++ b/test/etags/perl-src/yagrip.pl
@@ -0,0 +1,54 @@
+#Yet Another Getopt Routine In Perl
+# address@hidden, 89/11/1
+#usage:
+#&getopt("f:bar") ||
+#      die &usage("script","f:bar","oo","[files ...]");
+#
+sub getopt {
+       local($_,$flag,$opt,$f,$r,@temp) = @_;
+       @temp = split(/(.):/);
+       while ($#temp >= $[) {
+               $flag .= shift(@temp);
+               $opt .= shift(@temp);
+       }
+       while ($_ = $ARGV[0], /^-(.)(.*)/ && shift(@ARGV)) {
+               ($f,$r) = ($1,$2);
+               last if $f eq '-';
+               if (index($flag,$f) >= $[) {
+                       eval "\$opt_$f++;";
+                       $r =~ /^(.)(.*)/,redo if $r ne '';
+               }elsif (index($opt,$f) >= $[) {
+                       $r = $r eq '' ? shift(@ARGV) : $r;
+                       eval "\$opt_$f = \$r;";
+               }else{
+                       print STDERR "Unrecognized switch \"-$f\".\n";
+                       return 0;
+               }
+       }
+       return 1;
+}
+
+#usage: usage:
+# &usage(progname,arglist,@names,@last);
+#ex:
+# &usage("script","f:bar","oo","[file ...]");
+#would return
+# "usage: script [-f oo] [-bar] [file ...]"
+#
+sub usage {
+       local($prog,$_,@list) = @_;
+       local($string,$flag,@string,@temp,@last) = ();
+       @temp = split(/(.):/);
+       push(@string,"usage:",$prog);
+       while ($#temp >= $[) {
+               if (($flag = shift(@temp)) ne '') {
+                       push(@string,"[-$flag]");
+               }
+               if (($flag = shift(@temp)) ne '') {
+                       push(@string,sprintf("[-%s %s]",$flag,shift(@list)));
+               }
+       }
+       push(@string,@list) if $#list >= $[;
+       return join(' ',@string) . "\n";
+}
+1;
diff --git a/test/etags/php-src/lce_functions.php 
b/test/etags/php-src/lce_functions.php
new file mode 100644
index 0000000..6573813
--- /dev/null
+++ b/test/etags/php-src/lce_functions.php
@@ -0,0 +1,699 @@
+<?php
+if(!defined("LCE_FUNCTIONS"))
+{
+  define("LCE_FUNCTIONS", 1);
+  include("base.php");
+  include("lce_config.php");
+
+  // Unknown line class
+  define("LCE_UNKNOWN", 0);
+  // pure whitespace
+  define("LCE_WS", 1);
+  // a unqualified comment
+  define("LCE_COMMENT", 2);
+  // a user/translator comment
+  define("LCE_COMMENT_USER", 3);
+  // a tool-generated comment
+  define("LCE_COMMENT_TOOL", 4);
+  // A line containing a MSGID
+  define("LCE_MSGID", 5);
+  // A line containing a MSGSTR
+  define("LCE_MSGSTR", 6);
+  // A quoted text string
+  define("LCE_TEXT", 7);
+
+  define("STATE_ABORT", 0);
+  define("STATE_OK", 1);
+  define("STATE_LOOP", 2);
+
+  class POEntryAD extends AD
+    {
+      function validate($value)
+     {
+       //        print '"<pre>' . $value . '"<br></pre>';
+       $result =  AD::validate(trim($value));
+       //return $result;
+       if($result[0])
+        {
+          $lines = explode("\n", ereg_replace("\r", "", $result[1]));
+          //$lines = explode("\n", $result[1]);
+          /*         print "<pre>";
+          print_r($lines);
+          print "</pre>";*/
+          $res = array();
+          for($i = 0; $i < count($lines); $i++)
+            {
+              if(trim($lines[$i]) != "")
+                $res[] = $lines[$i];
+            }
+          $result[1] = join("\n", $res);
+          /*         print "<pre>";
+          print_r($result[1]);
+          print "</pre>";*/
+
+          $result[0] = $this->checkQuotation($result[1]);
+        }
+       return $result;
+     }
+
+      function checkQuotation($str)
+     {
+       $rex = "\\\\n|\\\\t|\\\\r|\\\\\"";
+       $str = ereg_replace($rex, "", $str);
+       $str = ereg_replace("\\\\\\\\", "", $str);
+       return !(strstr($str, "\"")
+               || strstr($str, "\\"));
+     }
+    }
+
+
+  class CommentAD extends AD
+    {
+      var $prefix;
+      function CommentAD(
+                     $name,                    // the name of the variable
+                     $not_null = 0,
+                     $type = "",       // as returned by gettype
+                     $prefix = "# ")
+     {
+       $this->prefix = $prefix;
+       AD::AD($name, $not_null, $type);
+     }
+
+      function validate($value)
+     {
+       $res = AD::validate($value);
+       return $res;
+       if($res[0] && $res[1] != "")
+        {
+          $mod_lines = array();
+          $lines = explode("\n", $res[1]);
+
+          for($i = 0; $i < count($lines); $i++)
+            {
+              $line = $lines[$i];
+              if(substr($line, 0, 1) != "#")
+                  $line = $this->prefix . $line;
+              $mod_lines[] = $line;
+            }
+          $res[1] = join("\n", $mod_lines);
+        }
+       return $res;
+     }
+    }
+
+  class POEntry extends HtmlValidator
+    {
+      var $msgid;
+      var $msgstr;
+      var $user_comment;
+      var $sys_comment;
+      var $unk_comment;
+
+      var $msgid_lc = 0;
+      var $msgstr_lc = 0;
+      var $user_comment_lc = 0;
+      var $sys_comment_lc = 0;
+      var $unk_comment_lc = 0;
+
+      function POEntry()
+     {
+       $this->atts = array(
+                          new AD("msgid"),
+                          new POEntryAD("msgstr", REQUIRED_ATTRIBUTE),
+                          new CommentAD("user_comment"),
+                          new POEntryAD("sys_comment"),
+                          new POEntryAD("unk_comment"),
+                          new AD("msgid_lc", NOT_REQUIRED_ATTRIBUTE, 0),
+                          new AD("msgstr_lc", NOT_REQUIRED_ATTRIBUTE, 0),
+                          new AD("user_comment_lc", NOT_REQUIRED_ATTRIBUTE, 0),
+                          new AD("sys_comment_lc", NOT_REQUIRED_ATTRIBUTE, 0),
+                          new AD("unk_comment_lc", NOT_REQUIRED_ATTRIBUTE, 0)
+                          );
+     }
+
+      function lineCount($entry)
+     {
+       $lc = count(explode("\n", $entry));
+       return $lc;
+     }
+
+      function serializeToVars($prefix)
+     {
+       $this->user_comment_lc = $this->lineCount($this->user_comment);
+       $this->unk_comment_lc = $this->lineCount($this->sys_comment);
+       $this->sys_comment_lc = $this->lineCount($this->unk_comment);
+       $this->msgid_lc = $this->lineCount($this->msgid);
+       $this->msgstr_lc = $this->lineCount($this->msgstr);
+       return HtmlValidator::serializeToVars($prefix);
+     }
+
+      function write()
+     {
+       $content = "";
+       $content .= $this->user_comment . "\n";
+       $content .= $this->unk_comment . "\n";
+       $content .= $this->sys_comment . "\n";
+       $content .= "msgid \"" . $this->msgid . "\"\n";
+       $content .= 'msgstr "' . join("\"\n\"", explode("\n", $this->msgstr)) . 
"\"" . "\n\n";
+       return $content;
+     }
+    }
+
+  class POReader extends HTMLValidator
+    {
+      var $msgid;
+      var $msgstr;
+      var $user_comment;
+      var $sys_comment;
+      var $unk_comment;
+      var $state;
+      var $ignore_ws;
+      var $po_entries;
+      var $poe_num;
+      var $filename;
+      var $domain;
+
+      function gettext($msgid)
+     {
+       if(isset($this->po_entries[$msgid]))
+        {
+          $po = $this->po_entries[$msgid];
+          return StripCSlashes(join("", explode("\n", $po->msgstr)));
+          //return $po->msgstr;
+        }
+       return $msgid;
+     }
+
+
+      function parseFromVars($prefix)
+     {
+       $res = HtmlValidator::parseFromVars($prefix);
+       if($res[0])
+        {
+          $poe_res = true;
+          $this->po_entries = array();
+          for($i = 0; $i < $this->poe_num; $i++)
+            {
+              $poe = new POEntry;
+              $res = $poe->parseFromVars($prefix . "_POE$i");
+              if($res[0])
+                {
+                  $msgid = $prefix . "_POE" . $i . "_MSGID";
+                  $msgid = $$msgid;
+                  $this->po_entries[$prefix . "_POE" . $i . "_MSGID"] = 
$res[1];
+                }
+              else
+                $poe_res = false;
+            }
+        }
+       if(!$poe_res)
+        $GLOBALS[$prefix . "_ERR"] = 1;
+       return array($poe_res, $this);
+     }
+
+      function serializeToVars($prefix)
+     {
+       HtmlValidator::serializeToVars($prefix);
+       reset($this->po_entries);
+       $i = 0;
+       while($poe = each($this->po_entries))
+        {
+          $poe = $poe[1];
+          $poe->serializeToVars($prefix . "_POE$i");
+          $i++;
+        }
+     }
+
+
+      function POReader($domain, $filename)
+     {
+       $this->domain = $domain;
+       $this->filename = $filename;
+       $this->ignore_ws = true;
+       $this->po_entries = array();
+       $this->atts = array(
+                          new AD("domain", REQUIRED_ATTRIBUTE),
+                          new AD("filename", REQUIRED_ATTRIBUTE),
+                          new AD("poe_num", REQUIRED_ATTRIBUTE, 0)
+                          );
+     }
+
+
+      function read()
+     {
+       if($fh = fopen($this->filename, "r"))
+        {
+          $this->lines = array();
+          while (!feof ($fh))
+            {
+              $line = fgets($fh, 4096);
+              $this->lines[] = $line;
+            }
+          fclose($fh);
+        }
+       $this->createPOEntries();
+       $this->poe_num = count($this->po_entries);
+     }
+
+      function write($save="yes")
+     {
+       reset($this->po_entries);
+       $content = "";
+       while($poe = each($this->po_entries))
+        {
+          $poe = $poe[1];
+          $content .= $poe->write();
+        }
+
+       if(($fh = fopen($this->filename, "w"))
+         && $save == "yes")
+        {
+          fwrite($fh, $content);
+          }
+       return $content;
+     }
+
+      function isComment($class)
+     {
+       if($class == LCE_COMMENT || $class == LCE_COMMENT_USER || $class == 
LCE_COMMENT_TOOL)
+        return true;
+       return false;
+     }
+
+      function comment($line, $class)
+     {
+       if($this->isComment($class))
+        {
+          if($class == LCE_COMMENT_USER)
+            $this->user_comment .= $line;
+          else if($class == LCE_COMMENT_TOOL)
+            $this->sys_comment .= $line;
+          else
+            $this->unk_comment .= $line;
+          return STATE_OK;
+        }
+       if($class == LCE_MSGID)
+        {
+          $this->state = "msgid";
+          return STATE_LOOP;
+        }
+       return STATE_ABORT;
+     }
+
+      function msgid($line, $class)
+     {
+       if($class == LCE_MSGID || $class == LCE_TEXT)
+        {
+          $line = $this->stripLine($line, LCE_MSGID);
+          $this->msgid .= $line;
+          return STATE_OK;
+        }
+       if($class == LCE_MSGSTR)
+        {
+          $this->state = "msgstr";
+          return STATE_LOOP;
+        }
+       return STATE_ABORT;
+     }
+
+      function msgstr($line, $class)
+     {
+       if($class == LCE_MSGSTR || $class == LCE_TEXT)
+        {
+          $line = $this->stripLine($line, $class);
+          $this->msgstr .= $line;
+          return STATE_OK;
+        }
+       // We have a different state, so we have to create a POEntry
+       $poe = new POEntry;
+       $poe->user_comment = trim($this->user_comment);
+       $poe->sys_comment = trim($this->sys_comment);
+       $poe->unk_comment = trim($this->unk_comment);
+       $poe->msgid = trim($this->msgid);
+       $poe->msgstr = trim($this->msgstr);
+       $this->po_entries[trim($this->msgid)] = $poe;
+       $this->state = "start";
+       return STATE_LOOP;
+     }
+
+      function start($line, $class)
+     {
+       $this->user_comment = "";
+       $this->sys_comment = "";
+       $this->unk_comment = "";
+       $this->msgid = "";
+       $this->msgstr = "";
+       if($this->isComment($class))
+        {
+          $this->state = "comment";
+          return STATE_LOOP;
+        }
+       if($class == LCE_MSGID)
+        {
+          $this->state = "msgid";
+          return STATE_LOOP;
+        }
+       return STATE_OK;
+     }
+
+      function createPOEntries()
+     {
+       $this->msgid = "";
+       $this->msgstr = "";
+       $this->user_comment = "";
+       $this->sys_comment = "";
+       $this->state = "start";
+
+       reset($this->lines);
+       for($i = 0; $i < count($this->lines); $i++)
+        {
+          $line = $this->lines[$i];
+          $class = $this->classifyLine($line);
+          if($class != LCE_WS || !$this->ignore_ws)
+            {
+              $state_ret = STATE_LOOP;
+              while($state_ret == STATE_LOOP)
+                {
+                  $state = $this->state;
+                  //print "$this->state $class:$line <br>";
+                  $state_ret = $this->$state($line, $class);
+                }
+              //print "state_ret = $state_ret <br>";
+            }
+          if($state_ret == STATE_ABORT)
+            break;
+        }
+       // Get the last entry
+       if($state_ret != STATE_ABORT)
+        {
+          $this->msgstr("", LCE_UNKNOWN);
+        }
+     }
+
+      function stripLine($line, $class)
+     {
+       switch($class)
+        {
+        case LCE_TEXT:
+          ereg('^"(.*)"', $line, $regs);
+          $line = $regs[1] . "\n";
+          break;
+        case LCE_MSGID:
+          if(substr($line, strlen("msgid")) == "msgid")
+            {
+              $line = substr($line, strlen("msgid") + 1);
+            }
+          ereg('"(.*)"', $line, $regs);
+          $line = $regs[1];
+          break;
+        case LCE_MSGSTR:
+          // TODO: Check if ^ can be removed
+          $line = substr($line, strlen("msgstr") + 1);
+          ereg('^"(.*)"', $line, $regs);
+          $line = $regs[1] . "\n";
+          break;
+
+        }
+       return $line;
+     }
+
+      function printClassification()
+     {
+       reset($this->lines);
+       for($i = 0; $i < count($this->lines); $i++)
+        {
+          $line = $this->lines[$i];
+          $class = $this->classifyLine($line);
+          print "#$i: $class $line<br>";
+        }
+     }
+
+      function classifyLine($line)
+     {
+       if(ereg("^[ \n\r\t]*$", $line))
+        return LCE_WS;
+       if(ereg("^#.*\$", $line))
+        {
+          if(ereg("^[,:-~].*", substr($line, 1)))
+            {
+              return LCE_COMMENT_TOOL;
+            }
+          if(ereg("^[ \n\r\t].*", substr($line, 1)))
+            {
+              return LCE_COMMENT_USER;
+            }
+          return LCE_COMMENT;
+        }
+       if(ereg("^msgid (.*)\$", $line, $regs))
+        {
+          $line = $regs[1];
+          if($this->classifyLine($line) == LCE_TEXT)
+            return LCE_MSGID;
+        }
+       if(ereg("^msgstr (.*)\$", $line, $regs))
+        {
+          $line = $regs[1];
+          if($this->classifyLine($line) == LCE_TEXT)
+            return LCE_MSGSTR;
+        }
+       if(ereg('^".*"', $line))
+        {
+                            // TODO: Check correct escapes
+          return LCE_TEXT;
+        }
+
+       return LCE_UNKNOWN;
+     }
+    }
+
+
+  function getTextDomains($lines)
+    {
+      $default_domain = "";
+      $domains = array();
+      while($gl = each($GLOBALS))
+     {
+       $gname = $gl[0];
+       global $$gname;
+     }
+      for($i = 0; $i < count($lines); $i++)
+     {
+       if(ereg("bindtextdomain\(([^,]+),([^\)]+)\)", $lines[$i], $regs))
+        {
+                            //print "Line:" .  $lines[$i] . " <br>";
+          $name = $regs[1];
+          $ev = "\$directory = ". $regs[2] . ";";
+          print $ev;
+          eval($ev);
+          $domains[] = array($name, $directory);
+        }
+       if(ereg("textdomain\(([^\)]+)\)", $lines[$i], $regs))
+        $default_domain = $regs[1];
+     }
+      return array($default_domain, $domains);
+    }
+
+
+  class PORManager extends HtmlValidator
+    {
+      var      $por_a;
+
+      function PORManager()
+     {
+       $this->por_a = array();
+     }
+
+      function addPOReader($d_name, &$por)
+     {
+       $this->por_a[$d_name] = &$por;
+     }
+
+      function &getPOReader($domain)
+     {
+       return $this->por_a[$domain];
+     }
+
+      function getDomainNames()
+     {
+       return array_keys($this->por_a);
+     }
+    }
+
+  function &loadPORManager()
+    {
+      global $LCE_PORMAN;
+      if(!isset($LCE_PORMAN))
+     {
+       $LCE_PORMAN = new PORManager();
+     }
+      return $LCE_PORMAN;
+    }
+
+
+  // More or less intelligent filename joining
+  // As available in PYTHONs os.path
+  function fileJoin()
+    {
+      $numargs = func_num_args();
+      $args = func_get_args();
+      for($i = 0; $i < $numargs - 1; $i++)
+     {
+       if(substr($args[$i], -1) != "/")
+        $args[$i] = $args[$i] . "/";
+       if($i > 0)
+        {
+          if(substr($args[$i],0 , 1) == "/")
+            $args[$i] = substr($args[$i], 1);
+        }
+
+     }
+      return join("", $args);
+    }
+
+  if(defined("LCE_TESTSERVER"))
+    {
+
+      function lce_bindtextdomain($d_name, $d_path)
+     {
+       global $LANG, $LC_MESSAGES, $LC_ALL, $LCE_LANG;
+       global $LCE_ERR;
+       global $LCE_PO_SUFFIX;
+       global $LCE_MANAGER;
+
+       $path_orig = $d_path;
+       // This is not complete and reflects
+       // my not very far going understanding of the
+       // different $LC_x thingies.
+       if(isset($LC_MESSAGES))
+        {
+                            //print "LC_MESSAGES<br>";
+          $lang_suffix = $LC_MESSAGES;
+        }
+       else if(isset($LC_ALL))
+        {
+                            //print "LC_ALL<br>";
+          $lang_suffix = $LC_ALL;
+        }
+       else if(isset($LANG))
+        {
+                            //print "LANG<br>";
+          $lang_suffix = $LANG;
+        }
+       else
+        {
+                            //print "LCE_LANG<br>";
+          $lang_suffix = $LCE_LANG;
+        }
+
+       //print "LangSuffix: $lang_suffix \n";
+       //print "D_Path: " . fileJoin($d_path, $lang_suffix, "LC_MESSAGES", 
$d_name . $LCE_PO_SUFFIX) . "<br>";
+       // First try: the whole lang_suffix
+
+       if(file_exists(fileJoin($d_path, $lang_suffix, "LC_MESSAGES", $d_name . 
$LCE_PO_SUFFIX)))
+        $d_path = fileJoin($d_path, $lang_suffix, "LC_MESSAGES", $d_name . 
$LCE_PO_SUFFIX);
+       else
+        {
+          $lang_suffix = substr($lang_suffix, 0, 2);
+          if(file_exists(fileJoin($d_path, $lang_suffix, "LC_MESSAGES", 
$d_name. $LCE_PO_SUFFIX)))
+            $d_path = fileJoin(fileJoin($d_path, $lang_suffix, "LC_MESSAGES", 
$d_name . $LCE_PO_SUFFIX));
+          else
+            {
+              $LCE_ERR = "No PO-file found";
+              return false;
+            }
+        }
+       //print "D_Path: $d_path \n";
+       $por = new POReader($d_name, $d_path, $path_orig);
+       $por->read();
+       $porman =& loadPORManager();
+       $porman->addPOReader($d_name, $por);
+       return true;
+     }
+
+      function lce_textdomain($domain)
+     {
+       global $LCE_DOMAIN;
+       $LCE_DOMAIN = $domain;
+     }
+
+      function lce_gettext($msgid)
+     {
+       global $LCE_DOMAIN;
+       return lce_dgettext($LCE_DOMAIN, $msgid);
+     }
+
+      function lce_dgettext($domain, $msgid)
+     {
+       $porman =& loadPORManager();
+       if($por = &$porman->getPOReader($domain))
+        return $por->gettext($msgid);
+       return $msgid;
+     }
+
+      function lce()
+     {
+       global $LCE_LCEDITLOC;
+       $porman =& loadPORManager();
+       $domains = $porman->getDomainNames();
+       for($i = 0; $i < count($domains); $i++)
+        {
+          $por =& $porman->getPOReader($domains[$i]);
+          $domain = "domain=" . urlencode($por->domain);
+          $filename = "filename=" . urlencode($por->filename);
+          $url = $LCE_LCEDITLOC . "?" . $domain . "&" . $filename;
+          print "<a target=\"_blank\" href=\"" . $url . "\">Domain: 
$por->domain</a><br>";
+        }
+     }
+    }
+  else
+    {
+      function lce_bindtextdomain($domain, $path)
+     {
+       bindtextdomain($domain, $path);
+     }
+
+      function lce_textdomain($domain)
+     {
+       textdomain($domain);
+     }
+
+      function lce_gettext($msgid)
+     {
+       return gettext($msgid);
+     }
+
+      function lce_dgettext($domain, $msgid)
+     {
+       return dgettext($domain, $msgid);
+     }
+      function lce()
+     {
+     }
+    }
+
+
+  function lce_geteditcode($type, $name, $text, $rows=2)
+    {
+      global $LCE_EDIT_LEVEL;
+      $level_map = array("msgid" => 4,
+                     "sys_comment" => 3,
+                     "user_comment" => 2,
+                     "msgstr" => 1
+                     );
+      if($level_map[$type] > $LCE_EDIT_LEVEL)
+     {
+       return "<input type=\"hidden\" name=\"" . $name . "\" value=\"" . $text 
. "\"><pre>\n" . $text . "\n</pre>";
+     }
+      else
+     {
+       return "<textarea name=\"" . $name . "\" rows=\"" . $rows . "\" 
cols=\"60\">" . $text . "</textarea>";
+     }
+    }
+}
+/*
+  ;;; Local Variables: ***
+  ;;; mode:C ***
+  ;;; End: ***
+*/
+?>
diff --git a/test/etags/php-src/ptest.php b/test/etags/php-src/ptest.php
new file mode 100644
index 0000000..9893839
--- /dev/null
+++ b/test/etags/php-src/ptest.php
@@ -0,0 +1,18 @@
+define("TEST", 0);
+
+class
+test 
+extends base
+{
+       // use --member to tag
+       var $member;
+       var $memassign="hallo";
+       var $memassign_space ="hallo";
+       // Syntactical wrong, but tagged
+       var $test
+}
+
+function 
+foo()
+{
+}
diff --git a/test/etags/php-src/sendmail.php b/test/etags/php-src/sendmail.php
new file mode 100644
index 0000000..1d15e4a
--- /dev/null
+++ b/test/etags/php-src/sendmail.php
@@ -0,0 +1,527 @@
+<?php
+
+/*
+  Classe creata da Santoro Diego.
+  Per aiuti nella programmazione in PHP, PERL, C e ECMAScript contattatemi
+  e-Mail address@hidden oppure address@hidden
+  La classe ? ancora in fase beta.
+*/
+
+final class sendMail {
+
+  const eMailAddressErrorMessage="L' e-Mail indicata non rispetta un formato 
valido.";
+  const defaultSubject="this is the subject.";
+  const defaultTextMessage="this is text message.";
+  const defaultHtmlMessage="this is html message.";
+  const defaultHeaderMessage="this is a multi-part message in MIME format.";
+
+  private static $messageProperties=array(
+    "charset" => array(
+        "modifiable" => true,
+        "values" => array(
+            "iso-8859-1",
+            "iso-8859-15",
+            "utf-8",
+            "utf-16"
+        )
+    ),
+    "content-transfer-encoding" => array(
+        "modifiable" => true,
+        "values" => array(
+            "7bit",
+            "8bit",
+            "quoted-printable"
+        )
+    )
+  );
+
+  private $attachmentProperties=array(
+    "content-type" => array(
+        "modifiable" => false,
+         "values" => array(
+            "application/octet-stream"
+        )
+    ),
+    "content-transfer-encoding" => array(
+        "modifiable" => false,
+        "values" => array(
+            "base64"
+        )
+    ),
+    "content-disposition" => array(
+        "modifiable" => true,
+        "values" => array(
+            "attachment",
+            "inline"
+        )
+    )
+  );
+
+  private static $relatedProperties=array(
+    "content-transfer-encoding" => array(
+        "modifiable" => false,
+        "values" => array(
+            "base64"
+        )
+    )
+  );
+
+  private $html;
+  private $text;
+
+  private $related;
+  private $attachments;
+
+  public static function valid_eMailAddress($eMailAddress) {
+   if(ereg("^[^@ address@hidden@ ]+\.[^@ ]+$", $eMailAddress))
+    return true;
+   else
+    return false;
+  }
+
+  public static function validContentId($contentId) {
+   if(ereg("^[a-zA-Z0-9]+$", $contentId))
+    return true;
+   else
+    return false;
+  }
+
+  public static function validContentKey($contentKey) {
+   if(ereg("^[a-zA-Z0-9]+$", $contentKey))
+    return true;
+   else
+    return false;
+  }
+
+  public static function mime_content_type($filename) {
+   $mime=array(
+    '.3dmf' => 'x-world/x-3dmf',
+    '.a' => 'application/octet-stream',
+    '.aab' => 'application/x-authorware-bin',
+    '.xwd' => 'image/x-xwd',
+    '.xyz' => 'chemical/x-pdb',
+    '.z' => 'application/x-compressed',
+    '.zip' => 'application/x-zip-compressed',
+    '.zoo' => 'application/octet-stream',
+    '.zsh' => 'text/x-script.zsh',
+    '.css' => 'text/css'
+   );
+   return $mime[strrchr($filename, '.')];
+  }
+
+  private $from;
+  private $to;
+  private $subject;
+
+  private $finalized;
+
+  private $headerMessage;
+  private $bodyMessage;
+
+  private $boundaries;
+
+  public function __construct($from, $to, $subject=self::defaultSubject) {
+
+   // set from
+   if(!self::valid_eMailAddress($from))
+    die(self::eMailAddressErrorMessage);
+   else
+    $this->from=$from;
+
+   // set to
+   if(!self::valid_eMailAddress($to))
+    die(self::eMailAddressErrorMessage);
+   else
+    $this->to=$to;
+
+   // set subject
+   $this->subject=$subject;
+
+   // set text
+   $this->text=array(
+    "message" => self::defaultTextMessage,
+    "properties" => array(
+        "charset" => self::$messageProperties["charset"]["values"][0],
+        "content-transfer-encoding" => 
self::$messageProperties["content-transfer-encoding"]["values"][0]
+    )
+   );
+
+   // set html
+   $this->html=array(
+    "message" => self::defaultHtmlMessage,
+    "properties" => array(
+        "charset" => self::$messageProperties["charset"]["values"][0],
+        "content-transfer-encoding" => 
self::$messageProperties["content-transfer-encoding"]["values"][1]
+    )
+   );
+
+   // set related and attachments
+   $this->related=array();
+   $this->attachments=array();
+
+   // set finalizater counter
+   $this->finalized=false;
+
+   $this->headerMessage="";
+   $this->bodyMessage="";
+
+   $this->boundaries=array(
+    "multipart/alternative" => md5(uniqid(microtime())),
+    "multipart/related" => md5(uniqid(microtime())),
+    "multipart/mixed" => md5(uniqid(microtime()))
+   );
+
+  }
+
+  public function setTo($to, &$errorString) {
+   if(self::valid_eMailAddress($to)) {
+    $this->to=$to;
+    return true;
+   } else {
+    $errorString=eMailAddressErrorMessage;
+    return false;
+   }
+  }
+
+  public function setFrom($from, &$errorString) {
+   if(self::valid_eMailAddress($from)) {
+    $this->from=$from;
+    return true;
+   } else {
+    $errorString=eMailAddressErrorMessage;
+    return false;
+   }
+  }
+
+  public function setSubject($subject=self::defaultSubject) {
+   $this->subject=$subject;
+  }
+
+  public function setTextMessage($textMessage=self::defaultTextMessage) {
+   $this->text["message"]=$textMessage;
+  }
+
+  public function setTextMessageProperty($key, $value, &$errorString) {
+
+   $key=strtolower($key);
+   $value=strtolower($value);
+
+   if(isset(self::$messageProperties[$key])) {
+    if(in_array($value, self::$messageProperties[$key]["values"])) {
+     if(self::$messageProperties[$key]["modifiable"]) {
+       $this->text["properties"][$key]=$value;
+       return true;
+     } else {
+      $errorString="Il valore della propriet? indicata non ? modificabile.";
+      return false;
+     }
+    } else {
+     $errorString="Il valore indicato per questa propriet? non ? valido.";
+     return false;
+    }
+   } else {
+    $errorString="Non esiste questa propriet? per i messaggi html.";
+    return false;
+   }
+  }
+
+  public function setHtmlMessage($htmlMessage=self::defaultHtmlMessage) {
+   $this->html["message"]=$htmlMessage;
+  }
+
+  public function setHtmlMessageProperty($key, $value, &$errorString) {
+
+   $key=strtolower($key);
+   $value=strtolower($value);
+
+   if(isset(self::$messageProperties[$key])) {
+    if(in_array($value, self::$messageProperties[$key]["values"])) {
+     if(self::$messageProperties[$key]["modifiable"]) {
+      $this->html["properties"][$key]=$value;
+      return true;
+     } else {
+      $errorString="Il valore della propriet? indicata non ? modificabile.";
+      return false;
+     }
+    } else {
+     $errorString="Il valore indicato per questa propriet? non ? valido.";
+     return false;
+    }
+   } else {
+    $errorString="Non esiste questa propriet? per i messaggi html.";
+    return false;
+   }
+  }
+
+  public function addRelated($fileName, $relatedKey, $contentId, 
&$errorString) {
+   if(is_file($fileName)) {
+    if($fileHandle=fopen($fileName, "r")) {
+     if(self::validContentId($contentId)) {
+      if(!isset($this->related[$relatedKey])) {
+       if(self::validContentKey($relatedKey)) {
+        $this->related[$relatedKey]=array(
+    "fileName" => basename($fileName),
+    "properties" => array(
+        "content-type" => self::mime_content_type($fileName),
+        "content-transfer-encoding" => 
self::$relatedProperties["content-transfer-encoding"]["values"][0],
+        "content-id" => $contentId
+    ),
+    "source" => base64_encode(
+        fread($fileHandle, filesize($fileName))
+    )
+        );
+        return true;
+       } else {
+        $errorString="L' id specificato non ? valido.";
+        return false;
+       }
+      } else {
+       $errorString="La chiave specificata ? gi? associata ad un altro 
related.";
+       return false;
+      }
+     } else {
+      $errorString="La chiave specificata per il related non ? valida.";
+      return false;
+     }
+    } else {
+     $errorString="Non ? possibile aprire il file indicato.";
+     return false;
+    }
+   } else {
+    $errorString="Il nome del file indicato non ? valido.";
+    return false;
+   }
+  }
+
+  public function setRelatedProperty($relatedKey, $key, $value, &$errorString) 
{
+
+   $key=strtolower($key);
+   $value=strtolower($value);
+  
+   if(isset(self::$relatedProperties[$key])) {
+    if(in_array($value, self::$relatedProperties[$key]["values"])) {
+     if(self::$relatedProperties[$key]["modifiable"]) {
+      if(isset($this->related[$relatedKey])) {
+       $this->related[$relatedKey]["properties"][$key]=$value;
+       return true;
+      } else {
+       $errorString="Il related indicato non esiste.";
+       return false;
+      }
+     } else {
+      $errorString="Il valore della propriet? indicata non ? modificabile.";
+      return false;
+     }
+    } else {
+     $errorString="Il valore indicato per questa propriet? non ? valido.";
+     return false;
+    }
+   } else {
+    $errorString="Non esiste questa propriet? per i related.";
+    return false;
+   }
+  }
+
+  public function addAttachment($fileName, $attachmentKey, &$errorString) {
+   if(is_file($fileName)) {
+    if($fileHandle=fopen($fileName, "r")) {
+     if(self::validContentKey($attachmentKey)) {
+      if(!isset($this->attachments[$attachmentKey])) {
+       $this->attachments[$attachmentKey]=array(
+    "fileName" => basename($fileName),
+    "properties" => array(
+        "content-type" => 
self::$attachmentProperties["content-type"]["values"][0],
+        "content-disposition" => 
self::$attachmentProperties["content-disposition"]["values"][0],
+        "content-transfer-encoding" => 
self::$attachmentProperties["content-transfer-encoding"]["values"][0]
+    ),
+    "source" => base64_encode(
+        fread($fileHandle, filesize($fileName))
+    )
+       );
+       return true;
+      } else {
+       $errorString="La chiave specificata ? gi? associata ad un altro 
allegato.";
+       return false;
+      }
+     } else {
+      $errorString="La chiave specificata per l'allegato non ? valida.";
+      return false;
+     }
+    } else {
+     $errorString="Non ? possibile aprire il file indicato.";
+     return false;
+    }
+   } else {
+    $errorString="Il nome del file indicato non ? valido.";
+    return false;
+   }
+  }
+
+  public function setAttachmentProperty($attachmentKey, $key, $value, 
&$errorString) {
+
+   $key=strtolower($key);
+   $value=strtolower($value);
+
+   if(isset(self::$attachmentProperties[$key])) {
+    if(in_array($value, self::$attachmentProperties[$key]["values"])) {
+     if(self::$attachmentProperties[$key]["modifiable"]) {
+      if(isset($this->attachments[$attachmentKey])) {
+       $this->attachments[$attachmentKey]["properties"][$key]=$value;
+       return true;
+      } else {
+       $errorString="L'allegato indicato non esiste.";
+       return false;
+      }
+     } else {
+      $errorString="Il valore della propriet? indicata non ? modificabile.";
+      return false;
+     }
+    } else {
+     $errorString="Il valore indicato per questa propriet? non ? valido.";
+     return false;
+    }
+   } else {
+    $errorString="Non esiste questa propriet? per gli allegati.";
+    return false;
+   }
+  }
+
+  public function finalize(&$errorString) {
+   if(!$this->finalized) {
+    $this->headerMessage="from: ".($this->from)."\n";
+    $this->headerMessage.="to: ".($this->to)."\n";
+    $this->headerMessage.="subject: ".($this->subject)."\n";
+    $this->headerMessage.="mime-version: 1.0\n";
+
+    if(($countAttachments=count($this->attachments))>0) {
+     $this->headerMessage.="content-type: multipart/mixed; 
boundary=\"".($this->boundaries["multipart/mixed"])."\"\n\n";
+     $this->headerMessage.=self::defaultHeaderMessage;
+     $this->headerMessage.="\n\n";
+
+     $this->bodyMessage="--".($this->boundaries["multipart/mixed"])."\n";
+
+     if(($countRelated=count($this->related))>0) {
+      $this->bodyMessage.="content-type: multipart/related; 
type=\"multipart/alternative\"; 
boundary=\"".($this->boundaries["multipart/related"])."\"\n\n";
+
+      $this->bodyMessage.="--".($this->boundaries["multipart/related"])."\n";
+
+      $this->bodyMessage.="content-type: multipart/alternative; 
boundary=\"".($this->boundaries["multipart/alternative"])."\"\n\n";
+      
$this->createMultipartAlternativeMessage($this->boundaries["multipart/alternative"]);
+      
$this->bodyMessage.="--".($this->boundaries["multipart/alternative"])."--\n\n";
+
+      // aggiungere i related e chiudere
+
+      $relatedCounter=0;
+      while(list($key,)=each($this->related)) {
+       $relatedCounter++;
+      
+       $this->bodyMessage.="--".$this->boundaries["multipart/related"]."\n";
+       $this->createMultipartRelatedMessage($key);
+       if($relatedCounter!=$countRelated) 
$this->bodyMessage.="--".($this->boundaries["multipart/related"])."\n";
+       else 
$this->bodyMessage.="--".($this->boundaries["multipart/related"])."--\n\n";
+      }
+     } else {
+      $this->bodyMessage.="content-type: multipart/alternative; 
boundary=\"".($this->boundaries["multipart/alternative"])."\"\n\n";
+      $this->createMultipartAlternativeMessage();
+      
$this->bodyMessage.="--".($this->boundaries["multipart/alternative"])."--\n\n";
+     }
+
+     $attachmentsCounter=0;
+     while(list($key,)=each($this->attachments)) {
+      $attachmentsCounter++;
+      $this->bodyMessage.="--".($this->boundaries["multipart/mixed"])."\n";
+      $this->createMultipartMixedMessage($key);
+      if($attachmentsCounter!=$countAttachments) 
$this->bodyMessage.="--".($this->boundaries["multipart/mixed"])."\n";
+      else 
$this->bodyMessage.="--".($this->boundaries["multipart/mixed"])."--\n\n";
+     }
+    } else {
+     if(($countRelated=count($this->related))>0) {
+      $this->headerMessage.="content-type: multipart/related; 
type=\"multipart/alternative\"; 
boundary=\"".($this->boundaries["multipart/related"])."\"\n\n";
+      $this->headerMessage.=self::defaultHeaderMessage;
+      $this->headerMessage.="\n\n";
+
+      $this->bodyMessage="--".($this->boundaries["multipart/related"])."\n";
+      $this->bodyMessage.="content-type: multipart/alternative; 
boundary=\"".($this->boundaries["multipart/alternative"])."\"\n\n";
+      $this->createMultipartAlternativeMessage();
+      
$this->bodyMessage.="--".($this->boundaries["multipart/alternative"])."--\n\n";
+
+      $relatedCounter=0;
+      while(list($key,)=each($this->related)) {
+       $relatedCounter++;
+       $this->bodyMessage.="--".$this->boundaries["multipart/related"]."\n";
+       $this->createMultipartRelatedMessage($key);
+       if($relatedCounter!=$countRelated) 
$this->bodyMessage.="--".($this->boundaries["multipart/related"])."\n";
+       else 
$this->bodyMessage.="--".($this->boundaries["multipart/related"])."--\n\n";
+      }
+     } else {
+      $this->headerMessage.="content-type: multipart/alternative; 
boundary=\"".($this->boundaries["multipart/alternative"])."\"\n\n";
+      $this->headerMessage.=self::defaultHeaderMessage;
+      $this->headerMessage.="\n\n";
+
+      $this->createMultipartAlternativeMessage();
+      
$this->bodyMessage.="--".($this->boundaries["multipart/alternative"])."--";
+
+     }
+    }
+    $this->finalized=true;
+    return true;
+   } else {
+    $errorString="Al momento non ? possibile finalizzare.";
+    return false;
+   }
+  }
+
+  private function createMultipartAlternativeMessage() {
+   $multipartAlternativeBoundary=$this->boundaries["multipart/alternative"];
+   $this->bodyMessage.="--$multipartAlternativeBoundary\n";
+   $this->bodyMessage.="content-type: text/plain; 
charset=\"".($this->text["properties"]["charset"])."\"\n";
+   $this->bodyMessage.="content-transfer-encoding: 
".($this->text["properties"]["content-transfer-encoding"])."\n\n";
+   $this->bodyMessage.=$this->text["message"];
+   $this->bodyMessage.="\n\n";
+   $this->bodyMessage.="--$multipartAlternativeBoundary\n";
+   $this->bodyMessage.="content-type: text/html; 
charset=\"".($this->html["properties"]["charset"])."\"\n";
+   $this->bodyMessage.="content-transfer-encoding: 
".($this->html["properties"]["content-transfer-encoding"])."\n\n";
+   $this->bodyMessage.=$this->html["message"];
+   $this->bodyMessage.="\n\n";
+  }
+
+  private function createMultipartRelatedMessage($key) {
+   $obj=$this->related[$key];
+   $this->bodyMessage.="content-type: 
".($obj["properties"]["content-type"])."; name=\"".($obj["fileName"])."\"\n";
+   $this->bodyMessage.="content-transfer-encoding: 
".($obj["properties"]["content-transfer-encoding"])."\n";
+   $this->bodyMessage.="content-id: 
<".($obj["properties"]["content-id"]).">\n\n";
+   $this->bodyMessage.=$obj["source"];
+   $this->bodyMessage.="\n\n";
+  }
+
+  private function createMultipartMixedMessage($key) {
+   $obj=$this->attachments[$key];
+   $this->bodyMessage.="content-type: 
".($obj["properties"]["content-type"])."; name=\"".($obj["fileName"])."\"\n";
+   $this->bodyMessage.="content-transfer-encoding: 
".($obj["properties"]["content-transfer-encoding"])."\n";
+   $this->bodyMessage.="content-disposition: 
".($obj["properties"]["content-disposition"])."; 
filename=\"".($obj["fileName"])."\"\n\n";
+   $this->bodyMessage.=$obj["source"];
+   $this->bodyMessage.="\n\n";
+  }
+
+  public function getSource(&$errorString) {
+   if($this->finalized) {
+    return ($this->headerMessage).($this->bodyMessage);
+   } else {
+    $errorString="Ancora non ? avvenuta la finalizzazione.";
+    return false;
+   }
+  }
+
+  public function sendMail(&$errorString) {
+   if($this->finalized) {
+    mail($this->to, $this->subject, $this->bodyMessage, $this->headerMessage);
+    $this->finalized=false;
+    return true;
+   } else {
+    $errorString="Ancora non ? avvenuta la finalizzazione.";
+    return false;
+   }
+  }
+}
+
+?>
diff --git a/test/etags/prol-src/natded.prolog 
b/test/etags/prol-src/natded.prolog
new file mode 100644
index 0000000..f0ee6b4
--- /dev/null
+++ b/test/etags/prol-src/natded.prolog
@@ -0,0 +1,1545 @@
+% $Id: natded.pl,v 1.7 2001/04/26 12:22:56 geertk Exp geertk $
+% NATURAL DEDUCTION CG PARSER WITH SEMANTICS
+% ========================================================================= 
+% Bob CARPENTER
+% Computational Linguistics Program, Department of Philosophy
+% Carnegie Mellon University, Pittsburgh, PA  15213
+% Net: address@hidden  
+% Voice: (412) 268-8043      Fax: (412) 268-1440
+
+% Copyright 1995, Bob Carpenter
+
+% Written: 12 March 1993
+% Revised: 4 February 1994
+% Further Revised: 2 May 1994
+% Revised for CGI: 16 November 1995
+% Revised for Lambek notation: ? Novemeber 1995
+% Revised again: 30 November 1995
+
+
+% Library Includes
+% ========================================================================= 
+
+:- use_module(library(system)).
+% :- use_module(library(random)).
+
+
+% Data Types
+% ========================================================================= 
+
+% <lambda_term> ::=  <lambda_var>
+%                 |  <lambda_con>
+%                 |  <lambda_term>@<lambda_term>
+%                 |  <lambda_var>^<lambda_term>
+
+% <lambda_var> ::= var(<prolog_var>)
+
+% <lambda_con> ::= con(<prolog_atom>)
+
+% <tree> ::= tree(<rule>,<cat>,<list(<tree>)>)
+%          | ass(<syn>,<var>,<index>)
+%          | leaf(<word>)
+
+% <rule> ::= <prolog_atom>
+
+% <cat> ::= <syn> : <lambda_term>
+
+% <syn> ::= <basic_syn>
+%         | <syn> / <syn>  |  <syn> \ <syn> 
+%         | scop(<syn>,<syn>) 
+%         | <syn> - <syn>
+
+% <basic_syn> ::= bas(<prolog_term>)
+
+% <grammar> ::= <sequence(<lex_entry>)> 
+%               <sequence(<empty_category>)>
+%               <sequence(<grammar_rule>)>
+
+% <lex_entry> ::=  <word> ==> <cat>.
+
+% <empty_category> ::= empty <cat>.
+
+% <grammar_rule> ::= <cat> ===> <list(<cat>)> if <prolog_goal>.
+
+% <index> ::= <integer>
+
+% <word> ::= <prolog_atom>
+
+% <chart_edge> ::= edge(<int>, <int>, <cat>)
+
+% Operator Declarations
+% ========================================================================= 
+
+  :-op(150,yfx,@).      % function application
+% :-op(200,xfy,^).      % lambda abstraction
+% :-op(400,yfx,/).      % forward slash
+  :-op(350,yfx,\).      % backward slash
+  :-op(500,xfx,:).      % category constructor
+  :-op(600,xfx,==>).    % lexical rewriting
+  :-op(600,xfx,===>).   % grammar rule
+  :-op(600,fx,empty).   % empty categories
+  :- op(600,xfx,macro). % lexical macros
+  :- op(600,xfx,means). % meaning postulates
+  :-op(1200,xfx,if).    % conditions on rule schemes
+
+:- dynamic edge/3.
+:- dynamic emptyedge/1.
+:- dynamic active/3.
+
+
+
+
+% Lambda Calculus
+% ========================================================================= 
+
+% expandmng(+M:<term>, -MExp:<term>)
+% ----------------------------------------------------------------------
+% MExp is the result of recursively replacing constants with their
+% definitions in M; disallows non-determinism
+% ----------------------------------------------------------------------
+expandmng(var(V),var(V)).
+expandmng(con(C),MExp):-
+  con(C) means M, !,
+  expandmng(M,MExp).
+expandmng(con(C),con(C)).
+expandmng(V^M,V^MExp):-
+  expandmng(M,MExp).
+expandmng(address@hidden,address@hidden):-
+  expandmng(M,MExp),
+  expandmng(N,NExp).
+
+
+% normalize(+M:<term>, -MNorm:<term>)
+% ----------------------------------------------------------------------
+% MNorm is the normal form of M; all bound variables renamed
+% ----------------------------------------------------------------------
+normalize(M,MNorm):-
+  fresh_vars(M,MFr),
+  normalize_fresh(MFr,MNorm).
+
+% fresh_vars(+M:<term>, -MFr:<term>)
+% ----------------------------------------------------------------------
+% MFr is the result of renaming all bound variables
+% in M to fresh instances, using alpha-reduction
+% ----------------------------------------------------------------------
+fresh_vars(var(V),var(V)).
+fresh_vars(con(C),con(C)).
+fresh_vars(address@hidden,address@hidden):-
+  fresh_vars(M,MFr),
+  fresh_vars(N,NFr).
+fresh_vars(X^M,var(Y)^MFr):-
+  subst(M,X,var(Y),M2),
+  fresh_vars(M2,MFr).
+
+% substitute(+M:<term>, +X:<var>, +N:<term>, -L:<term>)
+% ----------------------------------------------------------------------
+% L = M[X |--> N]
+% ----------------------------------------------------------------------
+subst(var(Y),var(X),M,N):-
+  ( X == Y
+    -> N=M
+  ; N = var(Y)
+  ).
+subst(con(C),_,_,con(C)).
+subst(address@hidden,X,N,address@hidden):-
+  subst(M,X,N,M2),
+  subst(L,X,N,L2).
+subst(Y^M,X,N,Y^M2):-
+  ( Y == X
+    -> M2 = M
+  ; subst(M,X,N,M2)
+  ).
+
+% normalize_fresh(+M:<term>, -N:<term>)
+% ----------------------------------------------------------------------
+% M is normalized to N 
+% -- all bound variables are made fresh
+% -- cut corresponds to leftmost normalization
+% ----------------------------------------------------------------------
+normalize_fresh(M,N):-
+  reduce_subterm(M,L),
+  !, normalize_fresh(L,N).
+normalize_fresh(M,M).
+
+% reduce_subterm(+M:<term>, -N:<term>)
+% ----------------------------------------------------------------------
+% N is the result of performing one beta- or 
+% eta-reduction on some subterm of M;
+% -- reduces leftmost subterm first, but provides 
+%    all reductions on backtracking
+% ----------------------------------------------------------------------
+reduce_subterm(M,M2):-
+  reduce(M,M2).
+reduce_subterm(address@hidden,address@hidden):-
+  reduce_subterm(M,M2).
+reduce_subterm(address@hidden,address@hidden):-
+  reduce_subterm(N,N2).
+reduce_subterm(X^M,X^N):-
+  reduce_subterm(M,N).
+
+% reduce(+M:<term>, -N:<term>)
+% ----------------------------------------------------------------------
+% reduces M to N using beta- or eta-reduction
+% -- assumes no variable clashes
+% ----------------------------------------------------------------------
+reduce((X^M)@N,L):-     % beta reduction
+  subst(M,X,N,L).
+reduce(X^(address@hidden),M):-     % eta reduction
+  X == Y,
+  \+ ( free_var(M,Z),
+       Z == X ).
+
+% free_var(+M:<term>, -X:<var>)
+% ----------------------------------------------------------------------
+% X is free in M
+% ----------------------------------------------------------------------
+free_var(var(V),var(V)).
+free_var(address@hidden,X):-
+  ( free_var(M,X)
+  ; free_var(N,X)
+  ).
+free_var(X^M,Y):-
+  free_var(M,Y),
+  Y \== X.
+
+% free_for(+N:<term>, +X:<var>, +M:<term>)
+% ----------------------------------------------------------------------
+% M is free for X in N
+% ----------------------------------------------------------------------
+free_for(var(_),_,_).
+free_for(con(_),_,_).
+free_for(address@hidden,X,M):-
+  free_for(L,X,M),
+  free_for(K,X,M).
+free_for(Y^L,X,M):-
+  free_for(L,X,M),
+  ( \+ free_var(L,X)
+  ; \+ free_var(M,Y)
+  ).
+
+
+% Right-Left, Bottom-Up Dynamic Chart Parser (after ALE)
+% =========================================================================
+
+% Lexical Compiler
+% ----------------------------------------------------------------------
+
+% compile_lex(+File:<file>)
+% ----------------------------------------------------------------------
+% compiles lexical entries into file 
+% ----------------------------------------------------------------------
+compile_lex(File):-
+  tell(File),
+  write('% Lexical Entries'), nl,
+  write('% ---------------'), nl, nl,
+  lex(W,Syn,Sem),
+  numbervars(lexentry(W,Syn,Sem),0,_),
+  write('lexentry(\''), write(W), write('\','),
+  write(Syn),write(','), write(Sem), write(').'), nl,
+  fail.
+compile_lex(File):-
+  told,
+  compile(File).
+
+% consult_lex  
+% ----------------------------------------------------------------------
+% consults lexicon in place
+% ----------------------------------------------------------------------
+consult_lex:-
+  retractall(lexentry(_,_,_)),
+  lex(W,Syn,Sem),
+  assert(lexentry(W,Syn,Sem)),
+  fail.
+consult_lex.
+
+% lex(?W:<word>, ?Syn:<syn>, ?Sem:<lambda_term>)
+% ----------------------------------------------------------------------
+% word W has syntactic category Syn and smenantic term Sem
+% ----------------------------------------------------------------------
+lex(W,SynOut,Sem):-
+  W ==> Syn : Sem,
+  expandsyn(Syn,SynOut).
+
+% expandsyn(+SynIn:<syn>, ?SynOut:<syn>)
+% ----------------------------------------------------------------------
+% the category SynIn is macro expanded recursively to SynOut 
+% ----------------------------------------------------------------------
+expandsyn(Syn,Syn):-
+  var(Syn), !.
+expandsyn(SynIn,SynOut):-
+  macro(SynIn,SynMid),   % cut means unique macro expansion
+  !, expandsyn(SynMid,SynOut).
+expandsyn(Syn1/Syn2,Syn1Out/Syn2Out):-
+  !, expandsyn(Syn1,Syn1Out), 
+  expandsyn(Syn2,Syn2Out).
+expandsyn(Syn1\Syn2,Syn1Out\Syn2Out):-
+  !, expandsyn(Syn1,Syn1Out), 
+  expandsyn(Syn2,Syn2Out).
+expandsyn(Syn1-Syn2,Syn1Out-Syn2Out):-
+  !, expandsyn(Syn1,Syn1Out), 
+  expandsyn(Syn2,Syn2Out).
+expandsyn(q(Syn1,Syn2,Syn3),q(Syn1Out,Syn2Out,Syn3Out)):-
+  !, expandsyn(Syn1,Syn1Out), 
+  expandsyn(Syn2,Syn2Out),
+  expandsyn(Syn3,Syn3Out).
+expandsyn(Syn,Syn):-
+  bas_syn(Syn).
+
+% bas_syn(?Syn:<syn>)
+% ----------------------------------------------------------------------
+% Syn is a basic syntactic category
+% ----------------------------------------------------------------------
+bas_syn(n(_)).
+bas_syn(np(_,_)).
+bas_syn(s(_)).
+bas_syn(coor).
+bas_syn(sc(_)).
+bas_syn(ex(_)).
+
+
+
+
+% Empty Edge Compilation
+% ----------------------------------------------------------------------
+
+% compile_empty
+% ----------------------------------------------------------------------
+% compiles empty categories, asserting all active and inactive edges
+% they can produce by themselves; always succeeds
+% ----------------------------------------------------------------------
+compile_empty:-
+  retractall(emptyedge(_)), retractall(active(_,_,_)),
+  empty SynIn:Sem,
+  expandsyn(SynIn,Syn),
+  complete(cat(Syn,Sem,[],[],empty(Syn,Sem))).
+compile_empty:-
+  bagof(C,emptyedge(C),Cs),
+  length(Cs,N),  
+  nl, write(N), write(' complete empty edges'), nl,
+  bagof(D-Ds,G^active(Ds,D,G),Es),
+  length(Es,M),  
+  write(M), write(' active rules with empty starts'), nl.
+
+% complete_cat(Cat:+<cat>)
+% ----------------------------------------------------------------------
+% Cat is asserted as empty, and all current active edges are tested to
+% see if Cat can extend them; fails for looping
+% ----------------------------------------------------------------------
+complete(Cat):-
+  assert(emptyedge(Cat)),
+  ( (CatM ===> [Cat|Cats] if Goal)
+  ; active(CatM,[Cat|Cats],Goal)
+  ),
+  add_active(Cats,CatM,Goal).
+
+% add_active(Cats:+<list(<cat>)>, +Cat:<cat>, +Goal:<goal>)
+% ----------------------------------------------------------------------
+% the active edge Cat --> . Cats is asserted, and any extensions
+% computed and themselves asserted;  fails for looping
+% ----------------------------------------------------------------------
+add_active([],Cat,Goal):-
+  call(Goal),
+  assert(emptyedge(Cat)),
+  complete(Cat).
+add_active([Cat|Cats],CatM,Goal):-
+  assert(active([Cat|Cats],CatM,Goal)),
+  emptyedge(Cat),
+  add_active(Cats,CatM,Goal).
+
+% parse(Ws:+<list(<word>)>, Cat:?<cat>)
+% ----------------------------------------------------------------------
+% Cat can be derived from Ws
+% ----------------------------------------------------------------------
+parse(Ws,Cat):-
+  derived_analyses(Ws,WsMid),
+  retractall(edge(_,_,_)),
+  reverse(WsMid,[],WsRev),
+  build(WsRev,0,Length),
+  edge(Length,0,Cat).
+
+% derived_analyses(WsIn:+<list(<word>)>, WsOut:-<list(<word>)>)
+% ----------------------------------------------------------------------
+% computes subderivations of WsIn
+% ----------------------------------------------------------------------
+derived_analyses([],[]).
+derived_analyses([der(Ws)|Ws2],[der(Ws,Ass,Syn,Sem)|DerWs2]):-
+  !, parse(Ws,cat(Syn,Sem,Ass,[],_)),
+  \+ member(abs(_,_,_),Ass),
+  derived_analyses(Ws2,DerWs2).
+derived_analyses([W|Ws],[W|DerWs]):-
+  derived_analyses(Ws,DerWs).
+
+% build(Ws:+<list(<word>)>, Right:+<int>, Left:-<int>)
+% ----------------------------------------------------------------------
+% finishes building chart with Ws as remaing word, starting from
+% right position Right and finishing on left position Left
+%      -- counts backwards, so Left > Right
+% ----------------------------------------------------------------------
+build([],Left,Left).
+build([W|Ws],Right,FinalLeft):-
+  RightPlus1 is Right+1,
+  ( buildact(W,Right,RightPlus1)
+  ; build(Ws,RightPlus1,FinalLeft)
+  ).
+
+% build_act(+W:<inputword>, +Left:<int>, +Right:<int>)
+% ----------------------------------------------------------------------
+% take action basedon whether input W is:
+%       [SynCat]     assume hypothetical category with syntax SynCat
+%       der(WsSub,Ass,Syn,Sem)  add derived result
+%       W            treat as input word
+% ----------------------------------------------------------------------
+buildact([SynIn],Right,RightPlus1):-
+  mapsyn(SynIn,Syn),   % add unspecified features
+  !,     add_edge(RightPlus1,Right,cat(Syn,var(X),[abs(Syn,var(X),N)],[],
+                                  ass(Syn,var(X),N))).
+buildact(der(WsSub,Ass,Syn,Sem),Right,RightPlus1):-
+  !,  add_edge(RightPlus1,Right,cat(Syn,Sem,Ass,[],
+                                  tree(der,Syn:Sem,[ders(WsSub)]))).
+buildact(W,Right,RightPlus1):-
+  lexentry(W,Syn,Sem),
+  add_edge(RightPlus1,Right,cat(Syn,Sem,[l],[],tree(lex,Syn:Sem,[leaf(W)]))).
+buildact(W,_,_):-
+    \+ (W ==> _), 
+    nl, write('Input not recognized: '), write(W), write('<br>').
+
+% mapsyn(+SynCat:<syncat>, -SynCatOut:<syncat)
+% ----------------------------------------------------------------------
+% SynCatOut is result of adding default features to subcategories of
+% SynCat if any are missing;  allows [SynCat] to specify cats without 
+% features for input;  ones with features will be passed along
+% ----------------------------------------------------------------------
+mapsyn(A/B,AM/BM):-
+  mapsyn(A,AM), mapsyn(B,BM).
+mapsyn(A\B,AM\BM):-
+  mapsyn(A,AM), mapsyn(B,BM).
+mapsyn(A-B,AM-BM):-
+  mapsyn(A,AM), mapsyn(B,BM).
+mapsyn(scop(A,B),scop(AM,BM)):-
+  mapsyn(A,AM), mapsyn(B,BM).
+mapsyn(q(A,B,C),q(AM,BM,CM)):-
+  mapsyn(A,AM), mapsyn(B,BM), mapsyn(C,CM).
+mapsyn(s,s(_)).
+mapsyn(n,n(ind(sng))).
+mapsyn(np,np(ind(sng),nm(_))).
+mapsyn(np(X,Y),np(X,Y)).
+mapsyn(n(X),n(X)).
+mapsyn(s(X),s(X)).
+
+% add_edge(Left:+<int>, Right:+<int>, Cat:+<cat>)
+% ----------------------------------------------------------------------
+% asserts edge into chart and then tries to extend it in all possible ways
+%     -- always fails to force backgracking
+% ----------------------------------------------------------------------
+add_edge(Left,Right,Cat):-
+  asserta(edge(Left,Right,Cat)),
+  ( (MotherCat ===> [Cat|Cats] if Goal)
+  ; active([Cat|Cats],MotherCat,Goal)
+  ),
+  findcats(Cats,Right,NewRight),
+  call(Goal),
+  add_edge(Left,NewRight,MotherCat).
+
+% findcats(Left:+<int>, Cats:+<cats>, Right:-<int>)
+% ----------------------------------------------------------------------
+% Cats is a list of categories spanning Left to Right
+% ----------------------------------------------------------------------
+findcats([],Left,Left).
+findcats([Cat|Cats],Left,Right):-
+  ( edge(Left,Mid,Cat),
+    findcats(Cats,Mid,Right)
+  ; emptyedge(Cat),
+    findcats(Cats,Left,Right)
+  ).
+
+% edge(Left:?<nat>, Right:?<nat>, Cat:?<cat>)                     (dynamic)
+% ----------------------------------------------------------------------
+% There is an edge with category Cat from Left to Right;
+% ----------------------------------------------------------------------
+
+% normalize_tree(+TreeIn:<tree>, -TreeOut:<tree>)
+% ----------------------------------------------------------------------
+% TreeOut is isomorphic to TreeIn, with normalized semantics at
+% every node
+% ----------------------------------------------------------------------
+normalize_tree(tree(Rule,Syn:Sem,Trees),
+               tree(Rule,Syn:SemNorm,TreesNorm)):-
+  normalize_fresh(Sem,SemNorm),
+  normalize_trees(Trees,TreesNorm).
+normalize_tree(ass(Syn,Var,Index),ass(Syn,Var,Index)).
+normalize_tree(leaf(Word),leaf(Word)).
+normalize_tree(ders(Word),ders(Word)).
+normalize_tree(empty(Syn,Sem),empty(Syn,SemNorm)):-
+  normalize_fresh(Sem,SemNorm).
+
+normalize_trees([],[]).
+normalize_trees([T|Ts],[TNorm|TsNorm]):-
+  normalize_tree(T,TNorm),
+  normalize_trees(Ts,TsNorm).
+
+
+% expandmng_tree(+TreeIn:<tree>, -TreeOut:<tree>)
+% ----------------------------------------------------------------------
+% TreeOut is isomorphic to TreeIn, with expanded semantics
+% every node
+% ----------------------------------------------------------------------
+expandmng_tree(tree(Rule,Syn:Sem,Trees),
+               tree(Rule,Syn:SemNorm,TreesNorm)):-
+  expandmng(Sem,SemNorm),
+  expandmng_trees(Trees,TreesNorm).
+expandmng_tree(ass(Syn,Var,Index),ass(Syn,Var,Index)).
+expandmng_tree(leaf(Word),leaf(Word)).
+expandmng_tree(ders(Word),ders(Word)).
+expandmng_tree(empty(Syn,Sem),empty(Syn,SemNorm)):-
+  expandmng(Sem,SemNorm).
+
+expandmng_trees([],[]).
+expandmng_trees([T|Ts],[TExp|TsExp]):-
+  expandmng_tree(T,TExp),
+  expandmng_trees(Ts,TsExp).
+
+
+% Grammar Rules
+% ========================================================================= 
+
+% C:<-cat> ===> Cs:<+list(<cat>)>
+% ----------------------------------------------------------------------
+% C can be composed of Cs; may be conditions
+
+% / elimination
+% -------------
+cat(A, address@hidden, Ass3, Qs3, tree(fe,A:address@hidden,[T1,T2]))
+===>
+[ cat(A/B, Alpha, Ass1, Qs1, T1),
+  cat(B, Beta, Ass2, Qs2, T2)
+] if
+     append(Ass1,Ass2,Ass3),
+     append(Qs1,Qs2,Qs3).
+
+% \ elimination
+% -------------
+cat(A, address@hidden, Ass3, Qs3, tree(be,A:address@hidden,[T1,T2]))
+===>
+[ cat(B, Beta, Ass1, Qs1, T1),
+  cat(B\A, Alpha, Ass2, Qs2, T2)
+] if
+     append(Ass1,Ass2,Ass3),
+     append(Qs1,Qs2,Qs3).
+
+% \ introduction
+% --------------
+cat(B\A, X^Alpha, Ass, Qs, tree(bi(N),B\A:X^Alpha,[T1]))
+===>
+[  cat(A, Alpha, [abs(B,X,N)|Ass], Qs, T1)
+] if
+    \+ T1 = tree(be,_,[_,ass(_,_,N)]),   % normal
+    at_least_one_member(l,Ass),  % non-empty condition
+     \+ ( subtree(tree(AssumeM,_,Ts),T1),      % properly nested
+          member(TMid,Ts), 
+          subtree(ass(_,_,'$VAR'(J)),TMid), 
+          J == N,
+          hypothetical_mem(AssumeM,Ass,Qs) ).
+
+% / introduction
+% --------------
+cat(A/B, X^Alpha, Ass2, Qs, tree(fi(N),A/B:X^Alpha,[T1]))
+===>
+[ cat(A,Alpha,Ass1,Qs,T1)
+] if
+     \+ T1 = tree(fe,_,[_,ass(_,_,N)]),    % normal
+     at_least_one_member(l,Ass1), % non-empty condition
+     select_last(Ass1,abs(B,X,N),Ass2),
+     \+ ( subtree(tree(AssumeM,_,Ts),T1),   % properly nested
+          member(TMid,Ts), 
+          subtree(ass(_,_,'$VAR'(J)),TMid), 
+          J == N,
+          hypothetical_mem(AssumeM,Ass1,Qs) ).
+
+% - introduction
+% --------------
+cat(A-B, X^Alpha, Ass2, Qs, tree(gi(N),(A-B):X^Alpha,[T1]))
+===>
+[ cat(A, Alpha, Ass1, Qs, T1)
+] if
+     at_least_one_member(l,Ass1),  % non-empty condition
+     select(abs(B,X,N),Ass1,Ass2),
+     \+ ( subtree(tree(AssumeM,_,Ts),T1),  % normalized?
+          member(TMid,Ts), 
+          subtree(ass(_,_,'$VAR'(J)),TMid), 
+          J == N,
+          hypothetical_mem(AssumeM,Ass1,Qs) ).
+
+
+% q quantifier pushing (q-elimination part 1)
+% ----------------------------------------------------------------------
+cat(C, var(X), Ass, [gq(B,A,Q,var(X),N)|Qs],
+          tree(qqpush(N),C:var(X),[T1]))
+===>
+[ cat(q(C,B,A), Q, Ass, Qs, T1)
+] if
+  \+ T1 = tree(qqi,_,_).     % normal
+
+% q quantifier popping (q-elimination part 2)
+% ----------------------------------------------------------------------
+cat(A, Q@(X^Alpha), Ass, Qs2, tree(qqpop(N),A:Q@(X^Alpha),[T1]))
+===>
+[ cat(B,Alpha,Ass,Qs1,T1)
+] if
+     select(gq(B,A,Q,X,N),Qs1,Qs2),
+     \+ ( subtree(tree(AssumeM,_,Ts),T1),
+          member(TMid,Ts), 
+          subtree(tree(qqpush(J),_,_),TMid), 
+          J == N,
+          hypothetical_mem(AssumeM,Ass,Qs1) ).
+
+% q quantifier introduction [restricted to q(np,s,s)]
+% ----------------------------------------------------------------------
+% restricted to A = s(_), B=np case for termination
+cat(q(np(ind(Num),Case),s(VF),s(VF)), var(P)^(var(P)@Alpha), Ass, Qs1,
+    tree(qqi,q(np(ind(Num),Case),s(VF),s(VF)):var(P)^var(P)@Alpha,[T1]))
+===>
+[ cat(np(ind(Num),Case),Alpha,Ass,Qs1,T1) 
+] if 
+  true.
+
+% coordination elimination
+% ----------------------------------------------------------------------
+cat(C, Sem, [], [], tree(coel,C:Sem,[T1,T2,T3]))
+===>
+[ cat(C, Sem1, Ass1, [], T1),
+  cat(coor, Alpha, Ass2, [],T2),
+  cat(C, Sem2, Ass3, [], T3)
+] if
+     \+ member(abs(_,_,_),Ass1),        % coordination condition
+     \+ member(abs(_,_,_),Ass2),
+     \+ member(abs(_,_,_),Ass3),
+     \+ T1 = tree(coel,_,_),
+     \+ T2 = tree(coel,_,_),
+     make_coor(C,Alpha,Sem1,Sem2,Sem).
+
+% non-boolean coordination
+% ----------------------------------------------------------------------
+%cat(np(pl,-), con(union)@address@hidden, [], [],
+%    tree(nbc,np(pl,-):con(union)@address@hidden,[T1,T2,T3]))
+%===>
+%[ cat(NP1, Alpha1, Ass1, [], T1),
+%  cat(coor, nbc, Ass2, [],T2),
+%  cat(NP3, Alpha3, Ass3, [], T3)
+% ]:-  
+%      \+ member(abs(_,_,_),Ass1),        % coordination condition
+%      \+ member(abs(_,_,_),Ass2),
+%      \+ member(abs(_,_,_),Ass3),
+%      make_nb_coor(NP1,Alpha1,Alpha1P),
+%      make_nb_coor(NP3,Alpha3,Alpha3P).
+% 
+% make_nb_coor(np,Alpha,con(singleton)@Alpha).
+% make_nb_coor(np(pl,+),Alpha,con(singleton)@Alpha).
+% make_nb_coor(np(pl,-),Alpha,Alpha).
+
+
+% subtree(-TSub:<tree>, +T:<tree>)
+% ----------------------------------------------------------------------
+% TSub is a subtree of T
+% ----------------------------------------------------------------------
+subtree(T,T).
+subtree(T,tree(_,_,Ts)):-
+  member(T2,Ts),
+  subtree(T,T2).
+
+% hypothetical_mem(Rule,Assumptions,Qs)
+% ----------------------------------------------------------------------
+% Rule is a member of the assumptions
+% ----------------------------------------------------------------------
+hypothetical_mem(fi(N),Ass,_):-
+  member(abs(_,_,M),Ass), N == M.
+hypothetical_mem(bi(N),Ass,_):-
+  member(abs(_,_,M),Ass), N == M.
+hypothetical_mem(gi(N),Ass,_):-
+  member(abs(_,_,M),Ass), N == M.
+hypothetical_mem(qqpush(N),_,Qs):-
+  member(gq(_,_,_,_,M),Qs), N == M.
+
+% make_coor(Cat,CoorSem,Sem1,Sem2,SemOut)
+% ----------------------------------------------------------------------
+% generalized coordination semantics CoorSem is applied to
+% Sem1 and Sem2 of type Cat, with result SemOut
+% ----------------------------------------------------------------------
+make_coor(s(_),Alpha,Sem1,Sem2,address@hidden@Sem2).
+make_coor(n(_),Alpha,Sem1,Sem2,var(X)^Alpha@(address@hidden(X))@(address@hidden(X))).
+make_coor(A/_,Alpha,Sem1,Sem2,var(X)^Sem):-
+  make_coor(A,Alpha,address@hidden(X),address@hidden(X),Sem).
+make_coor(_\A,Alpha,Sem1,Sem2,var(X)^Sem):-
+  make_coor(A,Alpha,address@hidden(X),address@hidden(X),Sem).
+make_coor(A-_,Alpha,Sem1,Sem2,var(X)^Sem):-
+  make_coor(A,Alpha,address@hidden(X),address@hidden(X),Sem).
+make_coor(q(_,_,A),Alpha,Sem1,Sem2,var(X)^Sem):-
+  make_coor(A,Alpha,address@hidden(X),address@hidden(X),Sem).
+
+
+% General CGI Handling
+% ========================================================================= 
+
+% start_up
+% ----------------------------------------------------------------------
+% executed when saved state is restarted;
+% tokenizes, parses and sends off input for handling;
+% halts on termination
+% ----------------------------------------------------------------------
+start_up:-
+%    getenv('QUERY_STRING', Arg),
+    prolog_flag(argv,[Arg]),
+
+                            %           write('<p>'), write(Arg), nl, ttyflush,
+  ( tokenizeatom(Arg,TokenList)
+        %                               ,write('<p>'), write(TokenList), 
ttyflush
+  ; write('Input '), write(Arg), write(' could not be tokenized'), ttyflush, 
halt
+  ),
+  ( parse_cgi(TokenList,KeyVals)
+         %                              , write('<p>'), write(KeyVals), 
ttyflush
+  ; write('Tokens '), write(TokenList), write(' could not be parsed'), halt
+  ),
+  ( action(KeyVals)
+  ; told, write('Action '), write(KeyVals), write(' could not be executed')
+  ),
+  halt.
+
+% tokenizeatom(+Input:<atom>, -Tokens:<list(<token>)>)  
+% ----------------------------------------------------------------------
+% breaks input Input into list of tokens;  
+% ----------------------------------------------------------------------
+tokenizeatom(Atom,Ws):-
+  name(Atom,Cs),
+  tokenize(Cs,Xs-Xs,Ws).
+ 
+% tokenize(+Chars:<list(<char>)>, +CharsSoFar:<d_list(<char>)>,
+%          -Tokens:<list(<token>)>)
+% ----------------------------------------------------------------------
+% Tokens is the list of tokens retrieved from Chars; ChrsSoFar 
+% accumulates prefixes of atoms being recognized
+% ----------------------------------------------------------------------
+tokenize([C1,C2,C3|Cs],Xs-Ys,TsResult):-     % special symbol
+  name('%',[C1]),
+  specialsymbol(C2,C3,SpecialSymbol),
+  !, 
+  ( Xs = []
+    -> TsResult = [SpecialSymbol|TsOut]
+  ; Ys = [],
+    name(CsAtom,Xs),
+    TsResult = [CsAtom,SpecialSymbol|TsOut]
+  ), 
+  tokenize(Cs,Zs-Zs,TsOut).
+tokenize([C|Cs],Xs-Ys,TsResult):-           % one-character operator
+  isoperator(C),
+  !, name(OpToken,[C]),
+  ( Xs = []
+    -> TsResult = [OpToken|Ts]
+  ; Ys = [],
+    name(CsAtom,Xs),
+    TsResult = [CsAtom,OpToken|Ts]
+  ),
+  tokenize(Cs,Zs-Zs,Ts).
+tokenize([C|Cs],Xs-[C|Ys],Ts):-             % more of string
+  tokenize(Cs,Xs-Ys,Ts).
+tokenize([],Xs-_,[]):-                      % no more input; nothing accum.
+  Xs = [], !.
+tokenize([],Xs-[],[CsAtom]):-               % no more input; stringg accum.
+  name(CsAtom,Xs).
+
+% isoperator(+Char:<char>)
+% ----------------------------------------------------------------------
+% Char is the name of an operator character
+% ----------------------------------------------------------------------
+isoperator(Char):-
+  name(Op,[Char]),
+  isoptab(Op).
+
+isoptab('%').
+isoptab('+').
+isoptab('&').
+isoptab('=').
+
+% specialsymbol(+C1:<char>, +C2:<char>, -S:<token>)
+% ----------------------------------------------------------------------
+% C1 and C2 are the names of characters completing a % special symbol
+% ----------------------------------------------------------------------
+specialsymbol(C1,C2,S):-
+  name(N1,[C1]), name(N2,[C2]),
+  ( sstab(N1,N2,S), !
+  ; S = spec(N1,N2)
+  ).
+
+sstab(2,'C',',').
+sstab(2,'F','/').
+sstab(2,8,'(').
+sstab(2,9,')').
+sstab(5,'B','[').
+sstab(5,'C','\\').
+sstab(5,'D',']').
+sstab(3,'D','=').
+sstab(3,'E','>').
+
+
+% parse_cgi(+TokenList:<list(<token>)>, -KeyVals:<list(<keyval>)>)
+% ----------------------------------------------------------------------
+% KeyVals is Key/Val list resulting from parsing TokenList using
+% the compiled DCG to perform a top-down parse
+% ----------------------------------------------------------------------
+parse_cgi(TokenList,KeyVals):-
+    keyvalseq(KeyVals,TokenList,[]).
+
+% Grammar for Parser
+% ----------------------------------------------------------------------
+keyvalseq([KeyVal|KeyVals]) --> 
+   keyval(KeyVal), andkeyvalseq(KeyVals). 
+keyvalseq([]) --> [].
+
+andkeyvalseq(KeyVals) --> ['&'], keyvalseq(KeyVals).
+andkeyvalseq([]) --> [].
+
+keyval(key(Key,Val)) --> [Key,'='], valseq(Val).
+
+% valseq(rec(Ws,Cat)) --> valseq(Ws), as(Cat).
+
+% as('$ANY') --> [].
+% as(Cat) --> optplus, ['=','>'], optplus, val(Cat).
+
+% valseq([]) --> [].   % subsumed by plusvalseq([]) --> []
+valseq([Val|Vals]) --> val(Val), plusvalseq(Vals).
+valseq(Vals) --> plusvalseq(Vals).
+
+plusvalseq([]) --> [].
+plusvalseq(Vals) --> ['+'], valseq(Vals).
+
+optplus --> [].
+optplus --> ['+'].
+
+val(X) --> ['['], valseq(X), [']'].
+val(der(X)) --> [der,'('], valseq(X), [')'].
+val(X) --> atomval(X).
+val(X/Y) --> atomval(X), ['/'], atomval(Y).
+val(Y\X) --> atomval(Y), ['\\'], atomval(X).
+val(X-Y) --> atomval(Y), ['-'], atomval(X).
+val(Term) --> atom(Fun), ['('], argvals(Args), [')'],   {Term =.. [Fun|Args]}.
+
+argvals([]) --> [].
+argvals([Arg|Args]) -->
+  val(Arg), commaargvals(Args).
+
+commaargvals(Args) -->
+  [','], argvals(Args).
+commaargvals([]) -->
+  [].
+
+atomval(X) --> atom(X).
+atomval(X) --> ['('], val(X), [')'].
+
+atom(X) --> [X], {atomic(X)}.
+
+
+% Specific CGI Query Handling
+% ========================================================================= 
+
+% action(+KeyVals:<list(<keyval>)>)
+% ----------------------------------------------------------------------
+% take an action based on list of KeyVals
+% ----------------------------------------------------------------------
+action(KeyVals):-
+    retractall(keyvalscgi(_)),
+    assert(keyvalscgi(KeyVals)),
+    member(key(inputfrom,[InputFrom]),KeyVals),
+    ( InputFrom = 'Typing'
+      -> member(key(parsestringone,Ws),KeyVals)
+    ; InputFrom = 'Corpus' 
+      -> member(key(parsestringtwo,Ws),KeyVals)
+    ), 
+%                                 write('<p>'), write(Ws), nl,
+    nl, write('P<font size=-1>ARSE</font> R<font size=-1>ESULTS FOR:</font> 
<cite>'),
+    writelist(Ws),
+    write('</cite><br><br>'), nl,
+    member(key(outputform,[OutForm]),KeyVals),
+    member(key(outputsyn,OutSynSym),KeyVals),
+    outsyn(OutSynSym,OutSyn),
+    act(OutForm,OutSyn,Ws).
+  
+keyvalcgi(Key,Val):-
+keyvalscgi(KeyVals),
+  member(key(Key,Val),KeyVals).  
+
+outsyn(['Any'],_).
+outsyn(['Finite','S'],s(fin)).
+outsyn(['Noun','Phrase'],np(_,_)).
+
+% act(+Form:<form>, ?Syn:<syn>, +Ws:<list(<word>)>)
+% ----------------------------------------------------------------------
+% the input Ws is parsed and output in form Form;
+% ----------------------------------------------------------------------
+act(OutForm,OutSyn,Ws):-
+    findall(Tree, ( parse(Ws,cat(OutSyn,_,Ass,[],Tree)),
+                   \+ member(abs(_,_,_),Ass) ),     Trees),  % all parses
+    ( Trees = [],
+      !, write('<BR> No Parses Found')                       % none found
+    ; ( keyvalcgi(expandmng,['Yes']),
+        !, expandmng_trees(Trees,Trees2)
+      ; Trees2 = Trees
+      ),
+      ( keyvalcgi(normalize,['Yes']),
+        !, normalize_trees(Trees2,Trees3)
+      ; Trees3 = Trees2
+      ),
+        write('parse('),
+        write_term(Ws,[quoted(true)]),
+        write(',Cat).<br>'), nl,
+      actout(OutForm,Trees3)
+   ).
+
+
+
+% actout(+Form:<form>, +Ts:<list(<tree>)>)
+% ----------------------------------------------------------------------
+% return output for list of trees Ts in form Form
+% ----------------------------------------------------------------------
+actout('Text',Trees):-
+  write('<PRE>'), nl,  
+  texttreelist(Trees),
+  nl, write('</PRE>').
+actout('Prawitz',Ts):-
+  htmltreelist(Ts).  
+actout('Fitch',Ts):-
+  fitchtreelist(Ts).
+
+
+
+texttreelist([]).
+texttreelist([T|Ts]):-
+  pp_tree(T),
+  nl, write('<BR>'), nl,
+  texttreelist(Ts).
+
+htmltreelist([]).
+htmltreelist([T|Ts]):-
+  pp_html_table_tree(T),
+  nl, write('<BR>'), nl,
+  htmltreelist(Ts).  
+
+fitchtreelist([]).
+fitchtreelist([T|Ts]):-
+  pp_html_table_fitch_tree(T),
+  nl, write('<BR>'), nl,
+  fitchtreelist(Ts).
+
+
+% PRETTY PRINTING ROUTINES
+% ======================================================================
+
+% pp_html_table_tree(+Tree:<tree>)
+% ----------------------------------------------------------------------
+% Tree is output as an HTML table;  first numbered
+% ----------------------------------------------------------------------
+pp_html_table_tree(T):-
+  numbervars(T),
+%   nl, 
+%   write_term(T,[quoted(true)]), 
+%   nl, write('<P>'),
+  pp_html_tree(T).
+
+% pp_html_tree(+Tree:<tree>)
+% ----------------------------------------------------------------------
+% Tree is output as an HTML table;  assume numbered
+% ----------------------------------------------------------------------
+pp_html_tree(ass(Syn,V,'$VAR'(N))):-
+  write('['), pp_cat(Syn:V), write(']<sup>'), write(N), write('</sup>').
+pp_html_tree(leaf(Word)):-
+  pp_word(Word).
+pp_html_tree(ders(Words)):-
+  pp_word_list(Words).
+pp_html_tree(empty(Syn,Sem)):-
+  nl, write('<TABLE BORDER=1>'), nl,
+  write('<TR VALIGN=bottom>
+         <TD ALIGN=CENTER>-</TD>
+         <TD ROWSPAN=2 ALIGN=CENTER>Nil</TD>
+         </TR>'), 
+  nl,
+  write('<TR VALIGN=bottom>
+         <TD ALIGN=CENTER>'), 
+  pp_cat(Syn:Sem), 
+  write('</TD></TR>'),
+  nl,
+  write('</TABLE>').
+pp_html_tree(tree(Rule,Root,SubTrees)):-
+  nl, write('<TABLE BORDER=1>'), nl,
+  write('<TR VALIGN=bottom>'), nl,
+  pp_html_trees(SubTrees,0,N),
+  nl, 
+  ( Rule = lex 
+    -> true
+  ; write('<TD ROWSPAN=2 ALIGN=CENTER>'), pp_rule(Rule), write('</TD>')
+  ),
+  write('</TR>'),
+  write('<TR VALIGN=bottom><TD ALIGN=CENTER COLSPAN='), write(N), write('>'), 
+  pp_cat(Root),
+  write('</TD></TR>'),
+  nl, write('</TABLE>').
+
+% pp_html_trees(+Trees: <list(<tree>)>,+N:<int>,-M:<int>)
+% ----------------------------------------------------------------------
+% prints the trees in Trees, where (M-N) is the length of the list (N
+% acts as an accumulator, initialized to 0
+% ----------------------------------------------------------------------
+pp_html_trees([T|Ts],N,M):-
+  write('<TD ALIGN=center>'), pp_html_tree(T),
+  write('</TD>'),
+  K is N+1,
+  pp_html_trees(Ts,K,M).
+pp_html_trees([],N,N).
+
+% pp_html_table_fitch_tree(+T:<tree>)
+% ----------------------------------------------------------------------
+% T is numbered and output as a table Fitch-style
+% ----------------------------------------------------------------------
+pp_html_table_fitch_tree(T):-
+  numbervars(T),
+  nl, write('<TABLE BORDER=1>'), 
+  pp_html_fitch_tree(T,1,_,_,_,[],_),
+  nl, write('</TABLE>').
+
+% pp_html_fitch_tree(+Tree:<tree>, +Start:<int>, -Next:<int>, -Me:<int>,
+%                    +Exp:<exp>, 
+%                    +AssIn:<list(<assgn>)>, -AssOut:<list(<assgn>)>)
+% ----------------------------------------------------------------------
+% the rows of the table for Tree are printed;
+% Start is where the numbering begins; Next is the next available number
+% after last one used; Me is the row representing the output of the 
+% derivation;  Exp is the expression corresponding to Tree;
+% AssIn are existing assignments coming in and AssOut are assignments 
+% going out (an <assgn> is a pair ass(M,X) where M is a row number on the
+% table and X is the abstracted variable)
+% ----------------------------------------------------------------------
+pp_html_fitch_tree(tree(der,Root,[ders(Words)]),M,N,M,Exp,Ass,Ass):-
+  !, nl, write('<TR><TD>'), 
+  write(M), write('</TD><TD>'), 
+  map_word(Words,Exp), pp_exp(Exp), 
+  write('-'), pp_cat(Root), 
+  write('</TD><TD>'), write('Der'), write('</TD></TR>'), nl,
+  N is M+1.
+pp_html_fitch_tree(tree(lex,Root,[leaf(Word)]),M,N,M,Word,Ass,Ass):-
+  !, nl, write('<TR><TD>'), 
+  write(M), write('</TD><TD>'), pp_exp(Word), write('-'), pp_cat(Root), 
+  write('</TD><TD>'), write('Lex'), write('</TD></TR>'), nl,
+  N is M+1.
+pp_html_fitch_tree(tree(fe,Root,[T1,T2]),M,N,L,Exp1+Exp2,AssIn,AssOut):-
+  !, pp_html_fitch_tree(T1,M,K,Source1,Exp1,AssIn,AssMid),
+  pp_html_fitch_tree(T2,K,L,Source2,Exp2,AssMid,AssOut),
+  nl, write('<TR><TD>'), 
+  write(L), write('</TD><TD>'), pp_exp(Exp1+Exp2), write('-'), pp_cat(Root), 
+  write('</TD><TD>'), write('E/ '), write((Source1,Source2)), 
write('</TD></TR>'), nl, 
+  N is L + 1.
+pp_html_fitch_tree(tree(be,Root,[T1,T2]),M,N,L,Exp1+Exp2,AssIn,AssOut):-
+  !, pp_html_fitch_tree(T1,M,K,Source1,Exp1,AssIn,AssMid),
+  pp_html_fitch_tree(T2,K,L,Source2,Exp2,AssMid,AssOut),
+  nl, write('<TR><TD>'), 
+  write(L), write('</TD><TD>'), pp_exp(Exp1+Exp2), write('-'), pp_cat(Root), 
+  write('</TD><TD>'), write('E\\ '), write((Source1,Source2)), 
write('</TD></TR>'), nl,
+  N is L + 1.
+pp_html_fitch_tree(tree(qqi,Root,[T]),M,Next,Me,Exp,AssIn,AssOut):-
+  !, pp_html_fitch_tree(T,M,Me,Source,Exp,AssIn,AssOut),
+  nl, write('<TR><TD>'), 
+  write(Me), write('</TD><TD>'), pp_exp(Exp), write('-'), pp_cat(Root), 
+  write('</TD><TD>'), write('q I '), write(Source), write('</TD></TR>'), nl,
+  Next is Me+1.
+pp_html_fitch_tree(tree(coel,Root,[T1,T2,T3]),M,N,L,Exp1+Exp2+Exp3,AssIn,AssOut):-
+  !, pp_html_fitch_tree(T1,M,K,Source1,Exp1,AssIn,AssMid),
+  pp_html_fitch_tree(T2,K,L1,Source2,Exp2,AssMid,AssMid2),
+  pp_html_fitch_tree(T3,L1,L,Source3,Exp3,AssMid2,AssOut),
+  nl, write('<TR><TD>'), 
+  write(L), write('</TD><TD>'), pp_exp(Exp1+Exp2+Exp3), write('-'), 
pp_cat(Root), 
+  write('</TD><TD>'), write('E co '), write((Source1,Source2,Source3)), 
write('</TD></TR>'), nl,
+  N is L + 1.
+pp_html_fitch_tree(tree(fi(_),(C1/C2):(var(X)^Sem),[T]),M,Q,N,ExpNew,AssIn,AssOut):-
+    K is M+1,
+    write('<TR><TD COLSPAN=3><TABLE BORDER=1>'),
+    write('<TR><TD>'), write(M), write('</TD><TD>'),
+    X = '$VAR'(Num), 
+  cat_atoms(Num,'</sub>',ExpMid),
+  cat_atoms('e<sub>',ExpMid,ExpNum),
+    pp_exp(ExpNum),  write(' - '),
+    pp_cat(C2:var(X)), write('</TD><TD>'), write('Assume</TD></TR>'),
+    pp_html_fitch_tree(T,K,N,L, Exp, [ass(M,X)|AssIn],AssOut),
+    write('<TR><TD>'), write(N), write('</TD><TD>'),
+    removeexp(ExpNum,Exp,ExpNew),
+    pp_exp(ExpNew), write(' - '), pp_cat(C1/C2:var(X)^Sem), write('</TD><TD>'),
+    write('/I '), write((M,L)), write('</TD></TR>'),
+    write('</TD></TR></TABLE>'),
+    Q is N+1.
+pp_html_fitch_tree(tree(bi(_),(C2\C1):(var(X)^Sem),[T]),M,Q,N,ExpNew,AssIn,AssOut):-
+    K is M+1,
+    write('<TR><TD COLSPAN=3><TABLE BORDER=1>'),
+    write('<TR><TD>'), write(M), write('</TD><TD>'),
+    X = '$VAR'(Num), 
+  cat_atoms(Num,'</sub>',ExpMid),
+  cat_atoms('e<sub>',ExpMid,ExpNum),
+    pp_exp(ExpNum),  write(' - '),
+    pp_cat(C2:var(X)), write('</TD><TD>'), write('Assume</TD></TR>'),
+    pp_html_fitch_tree(T,K,N,L, Exp, [ass(M,X)|AssIn],AssOut),
+    write('<TR><TD>'), write(N), write('</TD><TD>'),
+    removeexp(ExpNum,Exp,ExpNew),
+    pp_exp(ExpNew), write(' - '), pp_cat(C2\C1:var(X)^Sem), write('</TD><TD>'),
+    write('/I '), write((M,L)), write('</TD></TR>'),
+    write('</TD></TR></TABLE>'),
+    Q is N+1.
+pp_html_fitch_tree(tree(gi(_),(C1-C2):var(X)^Sem,[T]),M,Q,N,ExpNew,AssIn,AssOut):-
+  K is M+1,
+    write('<TR><TD COLSPAN=3><TABLE BORDER=1>'),
+    write('<TR><TD>'), write(M), write('</TD><TD>'),
+    X = '$VAR'(Num), 
+  cat_atoms(Num,'</sub>',ExpMid),
+  cat_atoms('e<sub>',ExpMid,ExpNum),
+    pp_exp(ExpNum),  write(' - '),
+    pp_cat(C2:var(X)), write('</TD><TD>'), write('Assume</TD></TR>'),
+    pp_html_fitch_tree(T,K,N,L,Exp, [ass(M,X)|AssIn],AssOut),
+    write('<TR><TD>'), write(N), write('</TD><TD>'),
+    splitexp(ExpNum,Exp,ExpNew),
+    pp_exp(ExpNew), write(' - '),
+    pp_cat((C1-C2):var(X)^Sem), write('</TD><TD>'), 
+    write('I- '), write((M,L)), write('</TD></TR>'),
+    write('</TD></TR></TABLE>'),
+    Q is N+1.
+% pp_html_fitch_tree(tree(qqpop(N),A:(Q@(X^Alpha)),[T1]),M,N,K,Exp,Ass,Ass):-
+%   !, replace_qtree(qqpush(N),T1,T1Mid,T1Extract),
+%   pp_html_fitch_tree(T1Extract,M,L,J,_,_,_),
+%   pp_html_fitch_tree(T1Mid,L,P,I,_,_,_),
+%   write('<TR><TD>'), write(P), write('</TD><TD>'),
+%   pp_exp(Exp), write(' - '), 
+%   pp_cat(A:(Q@(X^Alpha))), write('</TD><TD>'),
+%   write(' '). 
+pp_html_fitch_tree(empty(Syn,Sem),M,N,M,[],Ass,Ass):-
+  !, nl, write('<TR><TD>'), 
+  write(M), write('</TD><TD>'), write('NIL'), write(' '), pp_cat(Syn:Sem), 
+  write('</TD><TD>'), write('Empty'), write('</TD></TR>'), nl,
+  N is M+1.
+pp_html_fitch_tree(ass(_Syn,var(Var),_),N,N,M,Exp,Ass,Ass):-
+  member(ass(M,Var),Ass),
+  Var = '$VAR'(Num),
+  cat_atoms(Num,'</sub>',ExpMid),
+  cat_atoms('e<sub>',ExpMid,Exp).
+
+% removexp(+ExpRem:<exp>,+Exp:<exp>,-ExpOut:<exp>)
+% ----------------------------------------------------------------------
+% he expression ExpRem is removed from Exp with result ExpOut
+% ----------------------------------------------------------------------
+removeexp(E,E,'NIL'):-!.
+removeexp(E,E+E2,E2):-!.
+removeexp(E,E2+E,E2):-!.
+removeexp(E,E2+E3,E2New+E3New):-
+  !, removeexp(E,E2,E2New),
+  removeexp(E,E3,E3New).
+removeexp(_,E2,E2).
+
+% splitexp(+ExpRem:<exp>, +Exp:<exp>, -ExpOut:<exp>)
+% ----------------------------------------------------------------------
+% ExpRem is removed from Exp with ExpOut left over;  the extraction
+% site is represented as a split point
+% ----------------------------------------------------------------------
+splitexp(E,E,('NIL','NIL')):-!.
+splitexp(E,E+E2,('NIL',E2)):-!.
+splitexp(E,E2+E,(E2,'NIL')):-!.
+splitexp(E,E1+E2,(E3,E4+E2)):-
+  splitexp(E,E1,(E3,E4)), !.
+splitexp(E,E1+E2,(E1+E3,E4)):-
+  splitexp(E,E2,(E3,E4)).
+
+% pp_exp(+Exp:<exp>)
+% ----------------------------------------------------------------------
+% the expression Exp is output;  concatenations are represented as
+% spaces and split points by (_,_) and empty by '0'
+% ----------------------------------------------------------------------
+pp_exp('NIL'):-
+  !, write(0).
+pp_exp(A+'NIL'):-
+  !, pp_exp(A).
+pp_exp(B+'NIL'):-
+  !, pp_exp(B).
+pp_exp(A+B):-
+  !, pp_exp(A), write(' '), pp_exp(B).
+pp_exp((A,B)):-
+  !, write('('), pp_exp(A), write(', '), pp_exp(B), write(')').
+pp_exp(A):-
+  pp_word(A).
+
+map_word([[_]|Ws],Exp):-
+  !, map_word(Ws,Exp).
+map_word([W|Ws],Exp):-
+  map_word(Ws,W,Exp).
+map_word([],'NIL').
+
+map_word(Ws,[_],W):-
+ !, map_word(Ws,W).
+map_word([],W,W).
+map_word([W|Ws],W1,W1+Exp):-
+  map_word(Ws,W,Exp).
+
+pp_exps([]).
+pp_exps([Exp|Exps]):-
+  pp_exp(Exp), write('+'), pp_exp(Exps).
+
+% pp_tree(+T:<tree>)
+% ----------------------------------------------------------------------
+% tree T is output in indented list notation; first number
+% ----------------------------------------------------------------------
+pp_tree(T):-
+  numbervars(T),
+  pp_tree(T,0).
+
+% pp_tree(+T:<tree>, +Col:<int>)
+% ----------------------------------------------------------------------
+% print tree T beginning at column Col
+% ----------------------------------------------------------------------
+pp_tree(empty(Syn,Sem),Col):-
+  nl, tab(Col), pp_cat(Syn:Sem), write(' via empty').
+pp_tree(ass(Syn,V,'$VAR'(N)),Column):-
+  nl, tab(Column), write('['), pp_cat(Syn:V), write(']'), 
+  write('<SUP>'), write(N), write('</SUP>').
+pp_tree(leaf(Word),Column):-
+  nl, tab(Column), pp_word(Word).
+pp_tree(ders(Words),Column):-
+  nl, tab(Column), pp_word_list(Words).
+pp_tree(tree(Rule,Root,SubTrees),Column):-
+  nl, tab(Column),
+  pp_cat(Root),
+  write(' via '), pp_rule(Rule),
+  NewColumn is Column + 2,
+  pp_trees(SubTrees,NewColumn).
+
+% pp_trees(+Ts:<list(<tree>)>, +Col:<int>)
+% ----------------------------------------------------------------------
+% print tree list Ts beginning at column Col
+% ----------------------------------------------------------------------
+pp_trees([T|Ts],Column):-
+  pp_tree(T,Column),
+  pp_trees(Ts,Column).
+pp_trees([],_).
+
+% pp_word_list(+Ws:<list(<word>)>)
+% ----------------------------------------------------------------------
+% the list of words Ws is output, ignoring non-atoms
+% ----------------------------------------------------------------------
+pp_word_list([]).
+pp_word_list([W|Ws]):-
+  atom(W), !, pp_word(W), pp_word_list_rest(Ws).
+pp_word_list([_|Ws]):-
+  pp_word_list(Ws).
+
+pp_word(W):-
+  write('<I>'), write(W), write('</I>').
+
+% pp_word_list_rest(+Ws:<list(<word>)>)
+% ----------------------------------------------------------------------
+% word list Ws is output with an initial blank if Ws is non-empty
+% ----------------------------------------------------------------------
+pp_word_list_rest([]).
+pp_word_list_rest([W|Ws]):-
+  atom(W), !, write(' '), pp_word(W), pp_word_list_rest(Ws).
+pp_word_list_rest([_|Ws]):-
+  pp_word_list_rest(Ws).
+
+% pp_cat(Cat:<cat>)
+% ----------------------------------------------------------------------
+% pretty print category Cat
+% ----------------------------------------------------------------------
+pp_cat(Syn:Sem):-
+  pp_lam(Sem), write(' : '), pp_syn(Syn).
+
+% pp_syn(SynCat:<syncat>)
+% ----------------------------------------------------------------------
+% pretty print syntactic category
+% ----------------------------------------------------------------------
+pp_syn(A/B):-
+  !, pp_syn(A), write('/'), pp_syn_paren(B).
+pp_syn(A-B):-
+  !, pp_syn(A), write('-'), pp_syn_paren(B).
+pp_syn(B\A):-
+  !, pp_syn_paren(B), write('\\'), pp_syn_back(A).
+pp_syn(q(A,B,B)):-
+  !, pp_syn(scop(A,B)).
+pp_syn(q(A,B,C)):-
+  !, write('q('), pp_syn(A), write(','), pp_syn(B), write(','), 
+  pp_syn(C), write(')'). 
+pp_syn(scop(A,B)):-
+  !, pp_syn(A), write('^^'), pp_syn(B).
+pp_syn(C):-
+  pp_bas_cat(C).
+
+% pp_syn_paren(SynCat:<syncat>)
+% ----------------------------------------------------------------------
+% pretty print syntactic category with enclosing parens if it
+% is functional (used for arguments)
+% ----------------------------------------------------------------------
+pp_syn_paren(A/B):-
+  !, pp_paren(A/B).
+pp_syn_paren(A-B):-
+  !, pp_paren(A-B).
+pp_syn_paren(B\A):-
+  !, pp_paren(B\A).
+pp_syn_paren(q(A,B,B)):-
+  !, pp_paren(q(A,B,B)).
+pp_syn_paren(q(A,B,C)):-
+  !, pp_syn(q(A,B,C)).
+pp_syn_paren(C):-
+  pp_bas_cat(C).
+
+% pp_paren(+C:<cat>)
+% ----------------------------------------------------------------------
+% category Cat is pretty printed with surrounding parens
+% ----------------------------------------------------------------------
+pp_paren(C):-
+  write('('), pp_syn(C), write(')').
+
+% pp_syn_back(+Cat:<cat>)
+% ----------------------------------------------------------------------
+% Cat is pretty printed as the result of a backward functor
+% ----------------------------------------------------------------------
+pp_syn_back(A/B):-
+  !, pp_syn_paren(A/B).
+pp_syn_back(A-B):-
+  !, pp_syn_paren(A-B).
+pp_syn_back(A):-
+  pp_syn(A).
+
+% pp_bas_cat(+BasCat:<bascat>)
+% ----------------------------------------------------------------------
+% the basic category BasCat is pretty printed
+% ----------------------------------------------------------------------
+pp_bas_cat(Cat):-
+  writecat(Cat,Atom,Subs,Sups),
+  write(Atom),
+  writesubs(Subs),
+  writesups(Sups).
+  
+% writecat(+BasCat:<bascat>,-Root:<atom>,-Subs:<list>,-Sups:<list>)
+% ----------------------------------------------------------------------
+% basic category BasCat is printed as Root with superscripts Sups
+% and subscripts Subs
+% ----------------------------------------------------------------------
+writecat(np(ind(sng),nm(_)),np,[],[]):-!.
+writecat(np(ind(sng),pp(C)),np,[C],[]):-!.
+writecat(np(ind(plu),nm(_)),np,[p],[]):-!.
+writecat(np(ind(plu),pp(C)),np,[p,C],[]):-!.
+writecat(np(ind(_),nm(_)),np,[],[]):-!.
+writecat(np(set,nm(_)),np,[p],['*']):-!.
+writecat(np(set,pp(C)),np,[p,C],['*']):-!.
+writecat(np(_,_),np,[],[]):-!.
+writecat(s(fin),s,[],[]):-!.
+writecat(s('$VAR'(_)),s,[],[]):-!.
+writecat(s(V),s,[V],[]):-!.
+writecat(n(ind(plu)),n,[p],[]):-!.
+writecat(n(set),n,[p],['*']):-!.
+writecat(n(ind(sng)),n,[],[]):-!.
+writecat(n(_),n,[],[]):-!.
+writecat(sc(th(fin)),sc,[th,fin],[]):-!.
+writecat(sc(th(bse)),sc,[th,bse],[]):-!.
+writecat(sc(wh),sc,[wh],[]):-!.
+writecat(sc(if),sc,[if],[]):-!.
+writecat(sc(_),sc,[],[]):-!.
+writecat(ex(it),ex,[it],[]):-!.
+writecat(ex(th(_)),ex,[th],[]):-!.
+writecat(ex(_),ex,[],[]):-!.
+writecat(C,C,[],[]).
+
+% writesubs(+List:<list>)
+% ----------------------------------------------------------------------
+% List is output as a subscript
+% ----------------------------------------------------------------------
+writesubs([]).
+writesubs([X|Xs]):-
+  write('<SUB>'),
+  writelistsubs(Xs,X),
+  write('</SUB>').
+
+% writesups(+List:<list>)
+% ----------------------------------------------------------------------
+% List is output as a superscript
+% ----------------------------------------------------------------------
+writesups([]).
+writesups([X|Xs]):-
+  write('<SUP>'),
+  writelistsubs(Xs,X),
+  write('</SUP>').
+
+% writelistsubs(+Xs:<list>, +X:<term>)
+% ----------------------------------------------------------------------
+% Xs is written as a list with commas as separators
+% ----------------------------------------------------------------------
+writelistsubs([],X):-
+ write(X).
+writelistsubs([X|Xs],Y):-
+  write(Y), write(' ,'), writelistsubs(Xs,X).
+
+% pp_lam(+Term:<lambdaterm>)
+% ----------------------------------------------------------------------
+% lambda term Term is pretty printed
+% ----------------------------------------------------------------------
+pp_lam(Var^Alpha):-
+  !, pp_lam(Var), write('<B>. </B>'), pp_lam(Alpha). 
+pp_lam(con(and)@address@hidden):-
+  !, pp_lam_paren(Alpha), write(' &amp '), pp_lam_paren(Beta).
+pp_lam(con(or)@address@hidden):-
+  !, pp_lam_paren(Alpha), write(' <b>or</b> '), pp_lam_paren(Beta).
+pp_lam(con(not)@Alpha):-
+  !, write(' &#172 '), write('('), pp_lam_paren(Alpha), write(')').
+pp_lam(address@hidden):-
+  !, pp_lam_bracket(Alpha),
+  write('('),
+  pp_lam(Beta),
+  write(')').
+pp_lam(var('$VAR'(N))):-
+  !, write('<I>'), write(x), write('<SUB>'), write(N), write('</SUB></I>').
+pp_lam(con(Con)):-
+  write('<B>'), write(Con), write('</B>').
+
+pp_lam_bracket(A^B):-
+  !, write('('), pp_lam(A^B), write(')').
+pp_lam_bracket(A):-
+  pp_lam(A).
+
+% pp_lam_paren(+Term:<lambdaterm>)
+% ----------------------------------------------------------------------
+% lambda term Term is pretty printed
+% ----------------------------------------------------------------------
+pp_lam_paren(Var^Alpha):-
+  !, pp_lam(Var), write('<B>. </B>'), pp_lam(Alpha). 
+pp_lam_paren(con(and)@address@hidden):-
+  !, write('('), pp_lam_paren(Alpha), write(' &amp '), pp_lam_paren(Beta), 
write(')').
+pp_lam_paren(con(or)@address@hidden):-
+  !, write('('), pp_lam_paren(Alpha), write(' <b>or</b> '), 
pp_lam_paren(Beta), write(')').
+pp_lam_paren(con(not)@Alpha):-
+  !, write(' &#172 '), write('('), pp_lam_paren(Alpha), write(')').
+pp_lam_paren(address@hidden):-
+  !, pp_lam(Alpha),
+  write('('),
+  pp_lam(Beta),
+  write(')').
+pp_lam_paren(var('$VAR'(N))):-
+  !, write('<I>'), write(x), write('<SUB>'), write(N), write('</SUB></I>').
+pp_lam_paren(con(Con)):-
+  write('<B>'), write(Con), write('</B>').
+
+% pp_rule(+Rule:<rulename>)
+% ----------------------------------------------------------------------
+% rule Rule is pretty printed
+% ----------------------------------------------------------------------
+pp_rule(fe):-write('/E').
+pp_rule(be):-write('\\E').
+pp_rule(fi('$VAR'(N))):-write('/I<sup>'), write(N), write('</sup>').
+pp_rule(bi('$VAR'(N))):-write('\\I<sup>'), write(N), write('</sup>').
+pp_rule(gi('$VAR'(N))):-write('-I<sup>'), write(N), write('</sup>').
+pp_rule(qqpush('$VAR'(N))):-write('qE<sup>'), write(N), write('</sup>').
+pp_rule(qqpop('$VAR'(N))):-write(N).
+pp_rule(qqi):-write(qI).
+pp_rule(coel):-write('coE').
+pp_rule(lex):-write('L').
+pp_rule(der):-write('D').
+pp_rule(nbc):-write('NBC').
+pp_rule(qi):-write('qI').
+
+
+% Standard Utilities
+% ======================================================================
+
+member(X,[X|_]).
+member(X,[_|Xs]):-
+  member(X,Xs).
+
+append_list([],[]).
+append_list([Xs|Xss],Ys):-
+  append(Xs,Zs,Ys),
+  append_list(Xss,Zs).
+
+append([],Xs,Xs).
+append([X|Xs],Ys,[X|Zs]):-
+  append(Xs,Ys,Zs).
+
+at_least_one_member(X,[X|_]):-!.
+at_least_one_member(X,[_|Xs]):-
+  at_least_one_member(X,Xs).
+
+numbervars(X):-
+  numbervars(X,0,_).
+
+reverse([],Ws,Ws).
+reverse([W|Ws],WsAcc,WsRev):-
+  reverse(Ws,[W|WsAcc],WsRev).
+
+select(X,[X|Xs],Xs).
+select(X,[Y|Xs],[Y|Zs]):-
+  select(X,Xs,Zs).
+
+select_last([X],X,[]).
+select_last([X|Xs],Y,[X|Zs]):-
+  select_last(Xs,Y,Zs).
+
+cat_atoms(A1,A2,A3):-
+  name(A1,L1),
+  name(A2,L2),
+  append(L1,L2,L3),
+  name(A3,L3).
+
+writelist([der(Ws)|Ws2]):-
+  !, writelist(Ws), write(' '), writelist(Ws2).
+writelist([W|Ws]):-
+  write(W), write(' '),
+  writelist(Ws).
+writelist([]).
+
+write_lex_cat(File):-
+  tell(File),
+  write('<HTML><HEAD><TITLE>Natural Deduction CG 
Parser</TITLE></HEAD><BODY><b> L<FONT SIZE = -1>EXICON</FONT> </b><br><br><FONT 
SIZE=-1>'), nl, nl,
+  setof(lexe(W,Syn:Sem),lexentry(W,Syn,Sem),Ws),
+  !,   writebreaklex(Ws),
+  nl, write('</FONT></HEAD></HTML>'), nl,
+  told.
+       
+writebreaklex([]).
+writebreaklex([W|Ws]):-
+  writebreaklex(Ws,W).
+
+writebreaklex([],lexe(W,Cat)):-
+  write(W), write(' ==> '), 
+  pp_cat(Cat), nl.
+writebreaklex([W2|Ws],lexe(W,Cat)):-
+  write(W), write(' ==> '), 
+  pp_cat(Cat), 
+  write(' <BR> '), nl,
+  writebreaklex(Ws,W2).
+
+write_lex(File):-
+  tell(File),
+  write('<HTML><HEAD><TITLE>Natural Deduction CG 
Parser</TITLE></HEAD><BODY><b> L<FONT SIZE = -1>EXICON</FONT> </b><br><FONT 
SIZE=-1><BR>'), nl,
+  setof(W,C^(W==>C),Ws),
+  !,   writebreak(Ws),
+  nl, write('</FONT></HEAD></HTML>'), nl,
+  told.
+
+writebreak([]).
+writebreak([W|Ws]):-
+  writebreak(Ws,W).
+
+writebreak([],W):-
+  write(W), nl.
+writebreak([W2|Ws],W):-
+  write(W), write(' <BR> '), nl,
+  writebreak(Ws,W2).
+
+tt:-
+  consult(natded), consult(lexicon), consult_lex, compile_empty.
+
+mt:-
+  consult(natded), consult(lexicon), consult_lex, compile_empty, save(test3), 
start_up.
+
+cmt:-
+  compile(natded), compile(lexicon), compile_lex('compilelex.pl'), 
compile_empty, save(test3), start_up.
+
+
+%%% Local Variables:
+%%% mode: prolog
+%%% prolog-indent-width: 2
+%%% tab-width: 2
+%%% End:
diff --git a/test/etags/prol-src/ordsets.prolog 
b/test/etags/prol-src/ordsets.prolog
new file mode 100644
index 0000000..7192129
--- /dev/null
+++ b/test/etags/prol-src/ordsets.prolog
@@ -0,0 +1,337 @@
+/* Copyright(C) 1988, Swedish Institute of Computer Science */
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%   File   : ORDSETS.PL                                                        
      %
+%   Author : Lena Flood                                                        
      %
+%   Updated: 9 September 1988                                                %
+%   Purpose: Ordered set manipulation utilities                                
      %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+:- module(ordsets, [
+       is_ordset/1,
+       list_to_ord_set/2,
+       ord_add_element/3,
+       ord_del_element/3,
+       ord_disjoint/2,
+       ord_intersect/2,
+       ord_intersection/3,
+       ord_intersection/4,
+       ord_intersection/2,
+       ord_member/2,
+       ord_seteq/2,
+       ord_setproduct/3,
+       ord_subset/2,
+       ord_subtract/3,
+       ord_symdiff/3,
+       ord_union/3,
+       ord_union/4,
+       ord_union/2
+                  ]).
+
+%   Adapted from shared code written by Richard A O'Keefe. 
+
+%   In this package, sets are represented by ordered lists with no
+%   duplicates.         Thus {c,r,a,f,t} would be [a,c,f,r,t].  The ordering
+%   is defined by the @< family of term comparison predicates, which
+%   is the ordering used by sort/2 and setof/3.
+
+%   The benefit of the ordered representation is that the elementary
+%   set operations can be done in time proportional to the Sum of the
+%   argument sizes rather than their Product.  
+
+
+
+%   is_ordset(+Set)
+%   is true when Set is an ordered set.
+
+is_ordset(X) :- var(X), !, fail.
+is_ordset([]).
+is_ordset([Head|Tail]) :-
+       is_ordset(Tail, Head).
+
+is_ordset(X, _) :- var(X), !, fail.
+is_ordset([], _).
+is_ordset([Head|Tail], Left) :-
+       Left @< Head,
+       is_ordset(Tail, Head).
+
+
+%   list_to_ord_set(+List, ?Set)
+%   is true when Set is the ordered representation of the set represented
+%   by the unordered representation List.  
+
+list_to_ord_set(List, Set) :-
+       sort(List, Set).
+
+
+%   ord_add_element(+Set1, +Element -Set2)
+%   is true when Set2 is Set1 with Element inserted in it, preserving
+%   the order.
+
+ord_add_element([], Element, [Element]).
+ord_add_element([Head|Tail], Element, Set) :-
+       compare(Order, Head, Element),
+       ord_add_element(Order, Head, Tail, Element, Set).
+
+ord_add_element(<, Head, Tail, Element, [Head|Set]) :-
+       ord_add_element(Tail, Element, Set).
+ord_add_element(=, Head, Tail, _, [Head|Tail]).
+ord_add_element(>, Head, Tail, Element, [Element,Head|Tail]).
+
+
+%   ord_del_element(+Set1, +Element, ?Set2)
+%   is true when Set2 is Set1 but with Element removed.
+
+ord_del_element([], _, []).
+ord_del_element([Head|Tail], Element, Set) :-
+       compare(Order, Head, Element),
+       ord_del_element(Order, Head, Tail, Element, Set).
+
+ord_del_element(<, Head, Tail, Element, [Head|Set]) :-
+       ord_del_element(Tail, Element, Set).
+ord_del_element(=, _, Tail, _, Tail).
+ord_del_element(>, Head, Tail, _, [Head|Tail]).
+
+
+
+%   ord_disjoint(+Set1, +Set2)
+%   is true when the two ordered sets have no element in common.  
+
+ord_disjoint(Set1, Set2) :-
+       \+ ord_intersect(Set1, Set2).
+
+
+
+%   ord_intersect(+Set1, +Set2)
+%   is true when the two ordered sets have at least one element in common.
+
+ord_intersect([Head1|Tail1], [Head2|Tail2]) :-
+       compare(Order, Head1, Head2),
+       ord_intersect(Order, Head1, Tail1, Head2, Tail2).
+
+ord_intersect(<, _, [Head1|Tail1], Head2, Tail2) :-
+       compare(Order, Head1, Head2),
+       ord_intersect(Order, Head1, Tail1, Head2, Tail2).
+ord_intersect(=, _, _, _, _).
+ord_intersect(>, Head1, Tail1, _, [Head2|Tail2]) :-
+       compare(Order, Head1, Head2),
+       ord_intersect(Order, Head1, Tail1, Head2, Tail2).
+
+
+
+%   ord_intersection(+Set1, +Set2, ?Intersection)
+%   is true when Intersection is the intersecton of Set1
+%   and Set2, provided that Set1 and Set2 are ordered sets.
+
+ord_intersection([], _, []).
+ord_intersection([Head1|Tail1], Set2, Intersection) :-
+       ord_intersection3(Set2, Head1, Tail1, Intersection).
+
+ord_intersection3(<, _, Set1, Head2, Tail2, Intersection) :-
+       ord_intersection3(Set1, Head2, Tail2, Intersection).
+ord_intersection3(=, Head, Tail1, _, Tail2, [Head|Intersection]) :-
+       ord_intersection(Tail1, Tail2, Intersection).
+ord_intersection3(>, Head1, Tail1, _, Set2, Intersection) :-
+       ord_intersection3(Set2, Head1, Tail1, Intersection).
+
+% could be a disjunction, but is used in three places
+ord_intersection3([], _, _, []).
+ord_intersection3([Head2|Tail2], Head1, Tail1, Intersection) :-
+       compare(Order, Head1, Head2),
+       ord_intersection3(Order, Head1, Tail1, Head2, Tail2, Intersection).
+
+
+
+%   ord_intersection(+Set1, +Set2, ?Intersection, ?Difference)
+%   is true when Intersection is the intersection of Set1 and Set2, 
+%   and Differens is Set2 \ Set1 (like in ord_union/4),
+%    provided that Set1 and Set2 are ordered sets.
+
+ord_intersection([], Set2, [], Set2).
+ord_intersection([Head1|Tail1], Set2, Intersection, Difference) :-
+       ord_intersection4(Set2, Head1, Tail1, Intersection, Difference).
+
+ord_intersection4(<, _, Set1, Head2, Tail2, Intersection, Difference) :-
+       (   Set1 = [], Intersection = [], Difference = [Head2|Tail2]
+       ;   Set1 = [Head1|Tail1],
+           compare(Order, Head1, Head2),
+           ord_intersection4(Order, Head1, Tail1, Head2, Tail2, Intersection, 
Difference)
+       ).
+ord_intersection4(=, Head, Tail1, _, Tail2, [Head|Intersection], Difference) :-
+       ord_intersection(Tail1, Tail2, Intersection, Difference).
+ord_intersection4(>, Head1, Tail1, Head2, Set2, Intersection, 
[Head2|Difference]) :-
+       ord_intersection4(Set2, Head1, Tail1, Intersection, Difference).
+
+ord_intersection4([], _, _, [], []).
+ord_intersection4([Head2|Tail2], Head1, Tail1, Intersection, Difference) :-
+       compare(Order, Head1, Head2),
+       ord_intersection4(Order, Head1, Tail1, Head2, Tail2, Intersection, 
Difference).
+
+
+
+%   ord_intersection(+Sets, ?Intersection)
+%   is true when Intersection is the ordered set representation of the
+%   intersection of all the sets in Sets.
+
+ord_intersection(Sets, Intersection) :- 
+       length(Sets, NumberOfSets),
+       NumberOfSets > 0,
+       ord_intersection2(NumberOfSets, Sets, Intersection, []).
+
+ord_intersection2(1, [Set|Sets], Set0, Sets0) :- !,
+       Set = Set0,
+       Sets = Sets0.
+ord_intersection2(2, [Set,Set2|Sets], Intersection, Sets0) :- !,
+       Sets = Sets0,
+       ord_intersection2(Set, Set2, Intersection).
+ord_intersection2(N, Sets0, Intersection, Sets) :-
+%      N > 2,
+       A is N>>1,
+       Z is N-A,
+       ord_intersection2(A, Sets0, X, Sets1),
+       ord_intersection2(Z, Sets1, Y, Sets),
+       ord_intersection(X, Y, Intersection).
+
+
+
+%   ord_member(+Elt, +Set)
+%   is true when Elt is a member of Set.  Suggested by Mark Johnson.
+
+ord_member(X, [E|Es]) :-
+        compare(C, X, E),
+        ord_member(C, X, Es).
+
+ord_member(=, _X, _Es).
+ord_member(>, X, [E|Es]) :-
+        compare(C, X, E),
+        ord_member(C, X, Es).
+
+
+
+%   ord_seteq(+Set1, +Set2)
+%   is true when the two arguments represent the same set.  Since they
+%   are assumed to be ordered representations, they must be identical.
+
+
+ord_seteq(Set1, Set2) :-
+       Set1 == Set2.
+
+
+%   ord_setproduct(+Set1, +Set2, ?SetProduct)
+%   is true when SetProduct is the cartesian product of Set1 and Set2. The
+%   product is represented as pairs Elem1-Elem2, where Elem1 is an element
+%   from Set1 and Elem2 is an element from Set2.
+
+ord_setproduct([], _, []).
+ord_setproduct([Head|Tail], Set, SetProduct)  :-
+       ord_setproduct(Set, Head, SetProduct, Rest),
+       ord_setproduct(Tail, Set, Rest).
+
+ord_setproduct([], _, Set, Set).
+ord_setproduct([Head|Tail], X, [X-Head|TailX], Tl) :-
+       ord_setproduct(Tail, X, TailX, Tl).
+
+
+
+%   ord_subset(+Set1, +Set2)
+%   is true when every element of the ordered set Set1 appears in the
+%   ordered set Set2.
+
+ord_subset([], _).
+ord_subset([Head1|Tail1], [Head2|Tail2]) :-
+       compare(Order, Head1, Head2),
+       ord_subset(Order, Head1, Tail1, Tail2).
+
+ord_subset(=, _, Tail1, Tail2) :-
+       ord_subset(Tail1, Tail2).
+ord_subset(>, Head1, Tail1, [Head2|Tail2]) :-
+       compare(Order, Head1, Head2),
+       ord_subset(Order, Head1, Tail1, Tail2).
+
+
+
+%   ord_subtract(+Set1, +Set2, ?Difference)
+%   is true when Difference contains all and only the elements of Set1
+%   which are not also in Set2, i.e. Set1 \ Set2.
+
+ord_subtract(Set1, Set2, Union) :-
+       prolog:subtract(Set1, Set2, Union).
+
+
+
+%   ord_symdiff(+Set1, +Set2, ?Difference)
+%   is true when Difference is the symmetric difference of Set1 and Set2.
+
+ord_symdiff([], Set2, Set2).
+ord_symdiff([Head1|Tail1], Set2, Symdiff) :-
+       ord_symdiff(Set2, Head1, Tail1, Symdiff).
+
+ord_symdiff(<, Head1, Set1, Head2, Tail2, [Head1|Symdiff]) :-
+       ord_symdiff(Set1, Head2, Tail2, Symdiff).
+ord_symdiff(=, _, Tail1, _, Tail2, Symdiff) :-
+       ord_symdiff(Tail1, Tail2, Symdiff).
+ord_symdiff(>, Head1, Tail1, Head2, Set2, [Head2|Symdiff]) :-
+       ord_symdiff(Set2, Head1, Tail1, Symdiff).
+
+% could be a disjunction, but is used in three places
+ord_symdiff([], Head1, Tail1, [Head1|Tail1]).
+ord_symdiff([Head2|Tail2], Head1, Tail1, Symdiff) :-
+       compare(Order, Head1, Head2),
+       ord_symdiff(Order, Head1, Tail1, Head2, Tail2, Symdiff).
+
+
+
+%   ord_union(+Set1, +Set2, ?Union)
+%   is true when Union is the union of Set1 and Set2.  Note that when
+%   something occurs in both sets, we want to retain only one copy.
+
+ord_union(Set1, Set2, Union) :-
+       prolog:merge(Set1, Set2, Union).
+
+
+
+%   ord_union(+Set1, +Set2, ?Union, ?New)
+%   is true when Union is the union of Set1 and Set2, and New is
+%   Set2 \ Set1.  This is useful if you
+%   are accumulating members of a set and you want to process new
+%   elements as they are added to the set.
+
+ord_union([], Set2, Set2, Set2).
+ord_union([Head1|Tail1], Set2, Union, Difference) :-
+       ord_union4(Set2, Head1, Tail1, Union, Difference).
+
+ord_union4(<, Head, Set1, Head2, Tail2, [Head|Union], Difference) :-
+       (   Set1 = [], Union = [Head2|Tail2], Difference = [Head2|Tail2]
+       ;   Set1 = [Head1|Tail1],
+           compare(Order, Head1, Head2),
+           ord_union4(Order, Head1, Tail1, Head2, Tail2, Union, Difference)
+       ).
+ord_union4(=, Head, Tail1, _, Tail2, [Head|Union], Difference) :-
+       ord_union(Tail1, Tail2, Union, Difference).
+ord_union4(>, Head1, Tail1, Head2, Set2, [Head2|Union], [Head2|Difference]) :-
+       ord_union4(Set2, Head1, Tail1, Union, Difference).
+
+ord_union4([], Head1, Tail1, [Head1|Tail1], []).
+ord_union4([Head2|Tail2], Head1, Tail1, Union, Difference) :-
+       compare(Order, Head1, Head2),
+       ord_union4(Order, Head1, Tail1, Head2, Tail2, Union, Difference).
+
+
+
+%   ord_union(+Sets, ?Union) 
+%   is true when Union is the union of all the sets in Sets. 
+
+ord_union([], Union) :- !, Union = [].
+ord_union(Sets, Union) :-
+       length(Sets, NumberOfSets),
+       ord_union_all(NumberOfSets, Sets, Union, []).
+
+ord_union_all(1, [Set|Sets], Set, Sets) :- !.
+ord_union_all(2, [Set,Set2|Sets], Union, Sets) :- !,
+       ord_union(Set, Set2, Union).
+ord_union_all(N, Sets0, Union, Sets) :-
+       A is N>>1,
+       Z is N-A,
+       ord_union_all(A, Sets0, X, Sets1),
+       ord_union_all(Z, Sets1, Y, Sets),
+       ord_union(X, Y, Union).
diff --git a/test/etags/ps-src/rfc1245.ps b/test/etags/ps-src/rfc1245.ps
new file mode 100644
index 0000000..ad2244f
--- /dev/null
+++ b/test/etags/ps-src/rfc1245.ps
@@ -0,0 +1,2085 @@
+%!
+%%BoundingBox: (atend)
+%%Pages: (atend)
+%%DocumentFonts: (atend)
+%%EndComments
+%
+% FrameMaker PostScript Prolog 2.0, for use with FrameMaker 2.0
+% Copyright (c) 1986,87,89 by Frame Technology, Inc.  All rights reserved.
+%
+% Known Problems:
+%      Due to bugs in Transcript, the 'PS-Adobe-' is omitted from line 1
+/FMversion (2.0) def 
+% Set up Color vs. Black-and-White
+       /FMPrintInColor systemdict /colorimage known def
+% Uncomment this line to force b&w on color printer
+%   /FMPrintInColor false def
+/FrameDict 190 dict def 
+systemdict /errordict known not {/errordict 10 dict def
+               errordict /rangecheck {stop} put} if
+% The readline in 23.0 doesn't recognize cr's as nl's on AppleTalk
+FrameDict /tmprangecheck errordict /rangecheck get put 
+errordict /rangecheck {FrameDict /bug true put} put 
+FrameDict /bug false put 
+mark 
+% Some PS machines read past the CR, so keep the following 3 lines together!
+currentfile 5 string readline
+00
+0000000000
+cleartomark 
+errordict /rangecheck FrameDict /tmprangecheck get put 
+FrameDict /bug get { 
+       /readline {
+               /gstring exch def
+               /gfile exch def
+               /gindex 0 def
+               {
+                       gfile read pop 
+                       dup 10 eq {exit} if 
+                       dup 13 eq {exit} if 
+                       gstring exch gindex exch put 
+                       /gindex gindex 1 add def 
+               } loop
+               pop 
+               gstring 0 gindex getinterval true 
+               } def
+       } if
+/FMVERSION {
+       FMversion ne {
+               /Times-Roman findfont 18 scalefont setfont
+               100 100 moveto
+               (FrameMaker version does not match postscript_prolog!)
+               dup =
+               show showpage
+               } if
+       } def 
+/FMLOCAL {
+       FrameDict begin
+       0 def 
+       end 
+       } def 
+       /gstring FMLOCAL
+       /gfile FMLOCAL
+       /gindex FMLOCAL
+       /orgxfer FMLOCAL
+       /orgproc FMLOCAL
+       /organgle FMLOCAL
+       /orgfreq FMLOCAL
+       /yscale FMLOCAL
+       /xscale FMLOCAL
+       /manualfeed FMLOCAL
+       /paperheight FMLOCAL
+       /paperwidth FMLOCAL
+/FMDOCUMENT { 
+       array /FMfonts exch def 
+       /#copies exch def
+       FrameDict begin
+       0 ne dup {setmanualfeed} if
+       /manualfeed exch def
+       /paperheight exch def
+       /paperwidth exch def
+       setpapername
+       manualfeed {true} {papersize} ifelse 
+       {manualpapersize} {false} ifelse 
+       {desperatepapersize} if
+       /yscale exch def
+       /xscale exch def
+       currenttransfer cvlit /orgxfer exch def
+       currentscreen cvlit /orgproc exch def
+       /organgle exch def /orgfreq exch def
+       end 
+       } def 
+       /pagesave FMLOCAL
+       /orgmatrix FMLOCAL
+       /landscape FMLOCAL
+/FMBEGINPAGE { 
+       FrameDict begin 
+       /pagesave save def
+       3.86 setmiterlimit
+       /landscape exch 0 ne def
+       landscape { 
+               90 rotate 0 exch neg translate pop 
+               }
+               {pop pop}
+               ifelse
+       xscale yscale scale
+       /orgmatrix matrix def
+       gsave 
+       } def 
+/FMENDPAGE {
+       grestore 
+       pagesave restore
+       end 
+       showpage
+       } def 
+/FMDEFINEFONT { 
+       FrameDict begin
+       findfont 
+       ReEncode 
+       2 index exch 
+       definefont exch 
+       scalefont 
+       FMfonts 3 1 roll 
+       put
+       end 
+       } bind def
+/FMNORMALIZEGRAPHICS { 
+       newpath
+       0.0 0.0 moveto
+       1 setlinewidth
+       0 setlinecap
+       0 0 0 sethsbcolor
+       0 setgray 
+       } bind def
+       /fx FMLOCAL
+       /fy FMLOCAL
+       /fh FMLOCAL
+       /fw FMLOCAL
+       /llx FMLOCAL
+       /lly FMLOCAL
+       /urx FMLOCAL
+       /ury FMLOCAL
+/FMBEGINEPSF { 
+       end 
+       /FMEPSF save def 
+       /showpage {} def 
+       FMNORMALIZEGRAPHICS 
+       [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall 
+       fx fy translate 
+       rotate
+       fw urx llx sub div fh ury lly sub div scale 
+       llx neg lly neg translate 
+       } bind def
+/FMENDEPSF {
+       FMEPSF restore
+       FrameDict begin 
+       } bind def
+FrameDict begin 
+/setmanualfeed {
+%%BeginFeature *ManualFeed True
+        statusdict /manualfeed true put
+%%EndFeature
+       } def
+/max {2 copy lt {exch} if pop} bind def
+/min {2 copy gt {exch} if pop} bind def
+/inch {72 mul} def
+/pagedimen { 
+       paperheight sub abs 16 lt exch 
+       paperwidth sub abs 16 lt and
+       {/papername exch def} {pop} ifelse
+       } def
+       /papersizedict FMLOCAL
+/setpapername { 
+       /papersizedict 14 dict def 
+       papersizedict begin
+       /papername /unknown def 
+               /Letter 8.5 inch 11.0 inch pagedimen
+               /LetterSmall 7.68 inch 10.16 inch pagedimen
+               /Tabloid 11.0 inch 17.0 inch pagedimen
+               /Ledger 17.0 inch 11.0 inch pagedimen
+               /Legal 8.5 inch 14.0 inch pagedimen
+               /Statement 5.5 inch 8.5 inch pagedimen
+               /Executive 7.5 inch 10.0 inch pagedimen
+               /A3 11.69 inch 16.5 inch pagedimen
+               /A4 8.26 inch 11.69 inch pagedimen
+               /A4Small 7.47 inch 10.85 inch pagedimen
+               /B4 10.125 inch 14.33 inch pagedimen
+               /B5 7.16 inch 10.125 inch pagedimen
+       end
+       } def
+/papersize {
+       papersizedict begin
+               /Letter {lettertray} def
+               /LetterSmall {lettertray lettersmall} def
+               /Tabloid {11x17tray} def
+               /Ledger {ledgertray} def
+               /Legal {legaltray} def
+               /Statement {statementtray} def
+               /Executive {executivetray} def
+               /A3 {a3tray} def
+               /A4 {a4tray} def
+               /A4Small {a4tray a4small} def
+               /B4 {b4tray} def
+               /B5 {b5tray} def
+               /unknown {unknown} def
+       papersizedict dup papername known {papername} {/unknown} ifelse get
+       end
+       /FMdicttop countdictstack 1 add def
+       statusdict begin stopped end 
+       countdictstack -1 FMdicttop {pop end} for
+       } def
+/manualpapersize {
+       papersizedict begin
+               /Letter {letter} def
+               /LetterSmall {lettersmall} def
+               /Tabloid {11x17} def
+               /Ledger {ledger} def
+               /Legal {legal} def
+               /Statement {statement} def
+               /Executive {executive} def
+               /A3 {a3} def
+               /A4 {a4} def
+               /A4Small {a4small} def
+               /B4 {b4} def
+               /B5 {b5} def
+               /unknown {unknown} def
+       papersizedict dup papername known {papername} {/unknown} ifelse get
+       end
+       stopped 
+       } def
+/desperatepapersize {
+       statusdict /setpageparams known
+               {
+               paperwidth paperheight 0 1 
+               statusdict begin
+               {setpageparams} stopped pop 
+               end
+               } if
+       } def
+/savematrix {
+       orgmatrix currentmatrix pop
+       } bind def
+/restorematrix {
+       orgmatrix setmatrix
+       } bind def
+/dmatrix matrix def
+/dpi    72 0 dmatrix defaultmatrix dtransform
+    dup mul exch   dup mul add   sqrt def
+/freq dpi 18.75 div 8 div round dup 0 eq {pop 1} if 8 mul dpi exch div def
+/sangle 1 0 dmatrix defaultmatrix dtransform exch atan def
+/DiacriticEncoding [
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl
+/numbersign /dollar /percent /ampersand /quotesingle /parenleft
+/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
+/two /three /four /five /six /seven /eight /nine /colon /semicolon
+/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K
+/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash
+/bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h
+/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar
+/braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute
+/Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis
+/atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis
+/iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve
+/ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex
+/udieresis /dagger /.notdef /cent /sterling /section /bullet
+/paragraph /germandbls /registered /copyright /trademark /acute
+/dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef
+/yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown
+/exclamdown /logicalnot /.notdef /florin /.notdef /.notdef
+/guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde
+/Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright
+/quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis
+/fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl
+/periodcentered /quotesinglbase /quotedblbase /perthousand
+/Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute
+/Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve
+/Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron
+/breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron
+] def
+/ReEncode { 
+       dup 
+       length 
+       dict begin 
+       {
+       1 index /FID ne 
+               {def} 
+               {pop pop} ifelse 
+       } forall
+       Encoding StandardEncoding eq 
+       {
+               /Encoding DiacriticEncoding def
+       }if
+       currentdict 
+       end 
+       } bind def
+/graymode true def
+       /bwidth FMLOCAL
+       /bpside FMLOCAL
+       /bstring FMLOCAL
+       /onbits FMLOCAL
+       /offbits FMLOCAL
+       /xindex FMLOCAL
+       /yindex FMLOCAL
+       /x FMLOCAL
+       /y FMLOCAL
+/setpattern {
+        /bwidth  exch def
+        /bpside  exch def
+        /bstring exch def
+        /onbits 0 def  /offbits 0 def
+        freq sangle landscape {90 add} if 
+               {/y exch def
+                /x exch def
+                /xindex x 1 add 2 div bpside mul cvi def
+                /yindex y 1 add 2 div bpside mul cvi def
+                bstring yindex bwidth mul xindex 8 idiv add get
+                1 7 xindex 8 mod sub bitshift and 0 ne
+                {/onbits  onbits  1 add def 1}
+                {/offbits offbits 1 add def 0}
+                ifelse
+               }
+               setscreen
+        {} settransfer
+        offbits offbits onbits add div FMsetgray
+       /graymode false def
+       } bind def
+/grayness {
+       FMsetgray
+       graymode not {
+               /graymode true def
+               orgxfer cvx settransfer
+               orgfreq organgle orgproc cvx setscreen
+               } if
+       } bind def
+       /HUE FMLOCAL
+       /SAT FMLOCAL
+       /BRIGHT FMLOCAL
+       /Colors FMLOCAL
+FMPrintInColor 
+       
+       {
+       /HUE 0 def
+       /SAT 0 def
+       /BRIGHT 0 def
+       % array of arrays Hue and Sat values for the separations [HUE BRIGHT]
+       /Colors   
+       [[0    0  ]    % black
+        [0    0  ]    % white
+        [0.00 1.0]    % red
+        [0.37 1.0]    % green
+        [0.60 1.0]    % blue
+        [0.50 1.0]    % cyan
+        [0.83 1.0]    % magenta
+        [0.16 1.0]    % comment / yellow
+        ] def
+      
+       /BEGINBITMAPCOLOR { 
+               BITMAPCOLOR} def
+       /BEGINBITMAPCOLORc { 
+               BITMAPCOLORc} def
+       /K { 
+               Colors exch get dup
+               0 get /HUE exch store 
+               1 get /BRIGHT exch store
+                 HUE 0 eq BRIGHT 0 eq and
+                       {1.0 SAT sub setgray}
+                       {HUE SAT BRIGHT sethsbcolor} 
+                 ifelse
+               } def
+       /FMsetgray { 
+               /SAT exch 1.0 exch sub store 
+                 HUE 0 eq BRIGHT 0 eq and
+                       {1.0 SAT sub setgray}
+                       {HUE SAT BRIGHT sethsbcolor} 
+                 ifelse
+               } bind def
+       }
+       
+       {
+       /BEGINBITMAPCOLOR { 
+               BITMAPGRAY} def
+       /BEGINBITMAPCOLORc { 
+               BITMAPGRAYc} def
+       /FMsetgray {setgray} bind def
+       /K { 
+               pop
+               } def
+       }
+ifelse
+/normalize {
+       transform round exch round exch itransform
+       } bind def
+/dnormalize {
+       dtransform round exch round exch idtransform
+       } bind def
+/lnormalize { 
+       0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop
+       } bind def
+/H { 
+       lnormalize setlinewidth
+       } bind def
+/Z {
+       setlinecap
+       } bind def
+/X { 
+       fillprocs exch get exec
+       } bind def
+/V { 
+       gsave eofill grestore
+       } bind def
+/N { 
+       stroke
+       } bind def
+/M {newpath moveto} bind def
+/E {lineto} bind def
+/D {curveto} bind def
+/O {closepath} bind def
+       /n FMLOCAL
+/L { 
+       /n exch def
+       newpath
+       normalize
+       moveto 
+       2 1 n {pop normalize lineto} for
+       } bind def
+/Y { 
+       L 
+       closepath
+       } bind def
+       /x1 FMLOCAL
+       /x2 FMLOCAL
+       /y1 FMLOCAL
+       /y2 FMLOCAL
+       /rad FMLOCAL
+/R { 
+       /y2 exch def
+       /x2 exch def
+       /y1 exch def
+       /x1 exch def
+       x1 y1
+       x2 y1
+       x2 y2
+       x1 y2
+       4 Y 
+       } bind def
+/RR { 
+       /rad exch def
+       normalize
+       /y2 exch def
+       /x2 exch def
+       normalize
+       /y1 exch def
+       /x1 exch def
+       newpath
+       x1 y1 rad add moveto
+       x1 y2 x2 y2 rad arcto
+       x2 y2 x2 y1 rad arcto
+       x2 y1 x1 y1 rad arcto
+       x1 y1 x1 y2 rad arcto
+       closepath
+       16 {pop} repeat
+       } bind def
+/C { 
+       grestore
+       gsave
+       R 
+       clip
+       } bind def
+/U { 
+       grestore
+       gsave
+       } bind def
+/F { 
+       FMfonts exch get
+       setfont
+       } bind def
+/T { 
+       moveto show
+       } bind def
+/RF { 
+       rotate
+       0 ne {-1 1 scale} if
+       } bind def
+/TF { 
+       gsave
+       moveto 
+       RF
+       show
+       grestore
+       } bind def
+/P { 
+       moveto
+       0 32 3 2 roll widthshow
+       } bind def
+/PF { 
+       gsave
+       moveto 
+       RF
+       0 32 3 2 roll widthshow
+       grestore
+       } bind def
+/S { 
+       moveto
+       0 exch ashow
+       } bind def
+/SF { 
+       gsave
+       moveto
+       RF
+       0 exch ashow
+       grestore
+       } bind def
+/B { 
+       moveto
+       0 32 4 2 roll 0 exch awidthshow
+       } bind def
+/BF { 
+       gsave
+       moveto
+       RF
+       0 32 4 2 roll 0 exch awidthshow
+       grestore
+       } bind def
+       /x FMLOCAL
+       /y FMLOCAL
+       /dx FMLOCAL
+       /dy FMLOCAL
+       /dl FMLOCAL
+       /t FMLOCAL
+       /t2 FMLOCAL
+       /Cos FMLOCAL
+       /Sin FMLOCAL
+       /r FMLOCAL
+/W { 
+       dnormalize
+       /dy exch def
+       /dx exch def
+       normalize
+       /y  exch def
+       /x  exch def
+       /dl dx dx mul dy dy mul add sqrt def
+       dl 0.0 gt {
+               /t currentlinewidth def
+               savematrix
+               /Cos dx dl div def
+               /Sin dy dl div def
+               /r [Cos Sin Sin neg Cos 0.0 0.0] def
+               /t2 t 2.5 mul 3.5 max def
+               newpath
+               x y translate
+               r concat
+               0.0 0.0 moveto
+               dl t 2.7 mul sub 0.0 rlineto
+               stroke
+               restorematrix
+               x dx add y dy add translate
+               r concat
+               t 0.67 mul setlinewidth
+               t 1.61 mul neg  0.0 translate
+               0.0 0.0 moveto
+               t2 1.7 mul neg  t2 2.0 div     moveto
+               0.0 0.0 lineto
+               t2 1.7 mul neg  t2 2.0 div neg lineto
+               stroke
+               t setlinewidth
+               restorematrix
+               } if
+       } bind def
+/G { 
+       gsave
+       newpath
+       normalize translate 0.0 0.0 moveto 
+       dnormalize scale 
+       0.0 0.0 1.0 5 3 roll arc 
+       closepath fill
+       grestore
+       } bind def
+/A { 
+       gsave
+       savematrix
+       newpath
+       2 index 2 div add exch 3 index 2 div sub exch 
+       normalize 2 index 2 div sub exch 3 index 2 div add exch 
+       translate 
+       scale 
+       0.0 0.0 1.0 5 3 roll arc 
+       restorematrix
+       stroke
+       grestore
+       } bind def
+       /x FMLOCAL
+       /y FMLOCAL
+       /w FMLOCAL
+       /h FMLOCAL
+       /xx FMLOCAL
+       /yy FMLOCAL
+       /ww FMLOCAL
+       /hh FMLOCAL
+       /FMsaveobject FMLOCAL
+       /FMoptop FMLOCAL
+       /FMdicttop FMLOCAL
+/BEGINPRINTCODE { 
+       /FMdicttop countdictstack 1 add def 
+       /FMoptop count 4 sub def 
+       /FMsaveobject save def
+       userdict begin 
+       /showpage {} def 
+       FMNORMALIZEGRAPHICS 
+       3 index neg 3 index neg translate
+       } bind def
+/ENDPRINTCODE {
+       count -1 FMoptop {pop pop} for 
+       countdictstack -1 FMdicttop {pop end} for 
+       FMsaveobject restore 
+       } bind def
+/gn { 
+       0 
+       {       46 mul 
+               cf read pop 
+               32 sub 
+               dup 46 lt {exit} if 
+               46 sub add 
+               } loop
+       add 
+       } bind def
+       /str FMLOCAL
+/cfs { 
+       /str sl string def 
+       0 1 sl 1 sub {str exch val put} for 
+       str def 
+       } bind def
+/ic [ 
+       0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
+       0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
+       0
+       {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx}
+       {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx}
+       {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12}
+       {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh}
+       {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh}
+       {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl}
+       {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl}
+       {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl}
+       {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl}
+       ] def
+       /sl FMLOCAL
+       /val FMLOCAL
+       /ws FMLOCAL
+       /im FMLOCAL
+       /bs FMLOCAL
+       /cs FMLOCAL
+       /len FMLOCAL
+       /pos FMLOCAL
+/ms { 
+       /sl exch def 
+       /val 255 def 
+       /ws cfs 
+       /im cfs 
+       /val 0 def 
+       /bs cfs 
+       /cs cfs 
+       } bind def
+400 ms 
+/ip { 
+       is 
+       0 
+       cf cs readline pop 
+       {       ic exch get exec 
+               add 
+               } forall 
+       pop 
+       
+       } bind def
+/wh { 
+       /len exch def 
+       /pos exch def 
+       ws 0 len getinterval im pos len getinterval copy pop
+       pos len 
+       } bind def
+/bl { 
+       /len exch def 
+       /pos exch def 
+       bs 0 len getinterval im pos len getinterval copy pop
+       pos len 
+       } bind def
+/s1 1 string def
+/fl { 
+       /len exch def 
+       /pos exch def 
+       /val cf s1 readhexstring pop 0 get def
+       pos 1 pos len add 1 sub {im exch val put} for
+       pos len 
+       } bind def
+/hx { 
+       3 copy getinterval 
+       cf exch readhexstring pop pop 
+       } bind def
+       /h FMLOCAL
+       /w FMLOCAL
+       /d FMLOCAL
+       /lb FMLOCAL
+       /bitmapsave FMLOCAL
+       /is FMLOCAL
+       /cf FMLOCAL
+/wbytes { 
+       dup 
+       8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse
+       } bind def
+/BEGINBITMAPBWc { 
+       1 {} COMMONBITMAPc
+       } bind def
+/BEGINBITMAPGRAYc { 
+       8 {} COMMONBITMAPc
+       } bind def
+/BEGINBITMAP2BITc { 
+       2 {} COMMONBITMAPc
+       } bind def
+/COMMONBITMAPc { 
+       /r exch def
+       /d exch def
+       gsave
+       translate rotate scale /h exch def /w exch def
+       /lb w d wbytes def 
+       sl lb lt {lb ms} if 
+       /bitmapsave save def 
+       r                    
+       /is im 0 lb getinterval def 
+       ws 0 lb getinterval is copy pop 
+       /cf currentfile def 
+       w h d [w 0 0 h neg 0 h] 
+       {ip} image 
+       bitmapsave restore 
+       grestore
+       } bind def
+/BEGINBITMAPBW { 
+       1 {} COMMONBITMAP
+       } bind def
+/BEGINBITMAPGRAY { 
+       8 {} COMMONBITMAP
+       } bind def
+/BEGINBITMAP2BIT { 
+       2 {} COMMONBITMAP
+       } bind def
+/COMMONBITMAP { 
+       /r exch def
+       /d exch def
+       gsave
+       translate rotate scale /h exch def /w exch def
+       /bitmapsave save def 
+       r                    
+       /is w d wbytes string def
+       /cf currentfile def 
+       w h d [w 0 0 h neg 0 h] 
+       {cf is readhexstring pop} image
+       bitmapsave restore 
+       grestore
+       } bind def
+       /proc1 FMLOCAL
+       /proc2 FMLOCAL
+       /newproc FMLOCAL
+/Fmcc {
+    /proc2 exch cvlit def
+    /proc1 exch cvlit def
+    /newproc proc1 length proc2 length add array def
+    newproc 0 proc1 putinterval
+    newproc proc1 length proc2 putinterval
+    newproc cvx
+} bind def
+/ngrayt 256 array def
+/nredt 256 array def
+/nbluet 256 array def
+/ngreent 256 array def
+       /gryt FMLOCAL
+       /blut FMLOCAL
+       /grnt FMLOCAL
+       /redt FMLOCAL
+       /indx FMLOCAL
+       /cynu FMLOCAL
+       /magu FMLOCAL
+       /yelu FMLOCAL
+       /k FMLOCAL
+       /u FMLOCAL
+/colorsetup {
+       currentcolortransfer
+       /gryt exch def
+       /blut exch def
+       /grnt exch def
+       /redt exch def
+       0 1 255 {
+               /indx exch def
+               /cynu 1 red indx get 255 div sub def
+               /magu 1 green indx get 255 div sub def
+               /yelu 1 blue indx get 255 div sub def
+               /k cynu magu min yelu min def
+               /u k currentundercolorremoval exec def
+               nredt indx 1 0 cynu u sub max sub redt exec put
+               ngreent indx 1 0 magu u sub max sub grnt exec put
+               nbluet indx 1 0 yelu u sub max sub blut exec put
+               ngrayt indx 1 k currentblackgeneration exec sub gryt exec put
+       } for
+       {255 mul cvi nredt exch get}
+       {255 mul cvi ngreent exch get}
+       {255 mul cvi nbluet exch get}
+       {255 mul cvi ngrayt exch get}
+       setcolortransfer
+       {pop 0} setundercolorremoval
+       {} setblackgeneration
+       } bind def
+       /tran FMLOCAL
+/fakecolorsetup {
+       /tran 256 string def
+       0 1 255 {/indx exch def 
+               tran indx
+               red indx get 77 mul
+               green indx get 151 mul
+               blue indx get 28 mul
+               add add 256 idiv put} for
+       currenttransfer
+       {255 mul cvi tran exch get 255.0 div}
+       exch Fmcc settransfer
+} bind def
+/BITMAPCOLOR { 
+       /d 8 def
+       gsave
+       translate rotate scale /h exch def /w exch def
+       /bitmapsave save def 
+       colorsetup
+       /is w d wbytes string def
+       /cf currentfile def 
+       w h d [w 0 0 h neg 0 h] 
+       {cf is readhexstring pop} {is} {is} true 3 colorimage 
+       bitmapsave restore 
+       grestore
+       } bind def
+/BITMAPCOLORc { 
+       /d 8 def
+       gsave
+       translate rotate scale /h exch def /w exch def
+       /lb w d wbytes def 
+       sl lb lt {lb ms} if 
+       /bitmapsave save def 
+       colorsetup
+       /is im 0 lb getinterval def 
+       ws 0 lb getinterval is copy pop 
+       /cf currentfile def 
+       w h d [w 0 0 h neg 0 h] 
+       {ip} {is} {is} true 3 colorimage
+       bitmapsave restore 
+       grestore
+       } bind def
+/BITMAPGRAY { 
+       8 {fakecolorsetup} COMMONBITMAP
+       } bind def
+/BITMAPGRAYc { 
+       8 {fakecolorsetup} COMMONBITMAPc
+       } bind def
+/ENDBITMAP {
+       } bind def
+end 
+%%EndProlog
+%%BeginSetup
+(2.0) FMVERSION
+1 1 612 792 0 1 7 FMDOCUMENT
+/fillprocs 32 array def
+fillprocs 0 { 0.000000 grayness } put
+fillprocs 1 { 0.100000 grayness } put
+fillprocs 2 { 0.300000 grayness } put
+fillprocs 3 { 0.500000 grayness } put
+fillprocs 4 { 0.700000 grayness } put
+fillprocs 5 { 0.900000 grayness } put
+fillprocs 6 { 0.970000 grayness } put
+fillprocs 7 { 1.000000 grayness } put
+fillprocs 8 {<0f87c3e1f0783c1e> 8 1 setpattern } put
+fillprocs 9 {<0f1e3c78f0e1c387> 8 1 setpattern } put
+fillprocs 10 {<cccccccccccccccc> 8 1 setpattern } put
+fillprocs 11 {<ffff0000ffff0000> 8 1 setpattern } put
+fillprocs 12 {<8142241818244281> 8 1 setpattern } put
+fillprocs 13 {<8040201008040201> 8 1 setpattern } put
+fillprocs 14 {<03060c183060c081> 8 1 setpattern } put
+fillprocs 15 {} put
+fillprocs 16 { 1.000000 grayness } put
+fillprocs 17 { 0.900000 grayness } put
+fillprocs 18 { 0.700000 grayness } put
+fillprocs 19 { 0.500000 grayness } put
+fillprocs 20 { 0.300000 grayness } put
+fillprocs 21 { 0.100000 grayness } put
+fillprocs 22 { 0.030000 grayness } put
+fillprocs 23 { 0.000000 grayness } put
+fillprocs 24 {<f0783c1e0f87c3e1> 8 1 setpattern } put
+fillprocs 25 {<f0e1c3870f1e3c78> 8 1 setpattern } put
+fillprocs 26 {<3333333333333333> 8 1 setpattern } put
+fillprocs 27 {<0000ffff0000ffff> 8 1 setpattern } put
+fillprocs 28 {<7ebddbe7e7dbbd7e> 8 1 setpattern } put
+fillprocs 29 {<7fbfdfeff7fbfdfe> 8 1 setpattern } put
+fillprocs 30 {<fcf9f3e7cf9f3f7e> 8 1 setpattern } put
+fillprocs 31 {} put
+%%EndSetup
+0 12 /Times-Roman FMDEFINEFONT
+1 24 /Times-Roman FMDEFINEFONT
+2 16 /Times-Bold FMDEFINEFONT
+%%Page: "1" 1
+%%BeginPaperSize: Letter
+%%EndPaperSize
+612 792 0 FMBEGINPAGE
+72 675 540 720 R
+7 X
+0 K
+V
+0 F
+0 X
+(Network Working Group) 72 712 T
+(J. Moy, Editor) 470.7 712 T
+(Request for Comments: 1245) 72 698 T
+(Proteon, Inc.) 478.38 698 T
+(July 1991) 493.02 684 T
+72 72 540 83.95 R
+7 X
+V
+0 X
+([Moy]) 72 75.95 T
+([Page 1]) 499.7 75.95 T
+72 117 540 603 R
+7 X
+V
+1 F
+0 X
+(OSPF protocol analysis) 192.72 587 T
+2 F
+(Status of this Memo) 72 514.33 T
+0 F
+-0.23 (This memo provides information for the Internet community) 72 487 P
+-0.23 (. It does not specify any Internet stan-) 360.42 487 P
+(dard. Distribution of this memo is unlimited.) 72 473 T
+2 F
+(Abstract) 72 447 T
+0 F
+-0.11 (This is the \336rst of two reports on the OSPF protocol. These reports 
are required by the IAB/IESG ) 72 421 P
+(in order for an Internet routing protocol to advance to Draft Standard 
Status. OSPF is a TCP/IP ) 72 407 T
+-0.28 (routing protocol, designed to be used internal to an Autonomous System 
\050in other words, OSPF is ) 72 393 P
+(an Interior Gateway Protocol\051.) 72 379 T
+-0.09 (V) 72 353 P
+-0.09 (ersion 1 of the OSPF protocol was published in RFC 1) 79.33 353 P
+-0.09 (131. Since then OSPF version 2 has been ) 339.85 353 P
+-0.22 (developed. V) 72 339 P
+-0.22 (ersion 2 has been documented in RFC 1247. The changes between version 1 
and ver-) 134.4 339 P
+-0 (sion 2 of the OSPF protocol are explained in Appendix F of RFC 1247. It is 
OSPF V) 72 325 P
+-0 (ersion 2 that ) 477.72 325 P
+(is the subject of this report.) 72 311 T
+(This report attempts to summarize the key features of OSPF V2. It also 
attempts to analyze how ) 72 285 T
+(the protocol will perform and scale in the Internet.) 72 271 T
+(Please send comments to address@hidden) 72 245 T
+(.umd.edu.) 258.27 245 T
+FMENDPAGE
+%%EndPage: "1" 2
+1 10 /Times-Roman FMDEFINEFONT
+%%Page: "2" 2
+612 792 0 FMBEGINPAGE
+72 702 540 720 R
+7 X
+0 K
+V
+0 F
+0 X
+(RFC 1245) 72 712 T
+(OSPF protocol analysis) 249.36 712 T
+(July 1991) 493.02 712 T
+72 69.05 540 81 R
+7 X
+V
+0 X
+([Moy]) 72 73 T
+([Page 2]) 499.7 73 T
+72 108 540 684 R
+7 X
+V
+2 F
+0 X
+(T) 72 673.33 T
+(able of Contents) 81.19 673.33 T
+0 F
+(1.0) 72 650 T
+(Introduction) 108 650 T
+(..............................................................................................................)
 167.91 650 T
+(3) 498 650 T
+1 F
+(1.1) 108 635.33 T
+(Acknowledgments) 144 635.33 T
+(...............................................................................................................)
 219.88 635.33 T
+(3) 499 635.33 T
+0 F
+(2.0) 72 616 T
+(Key features of the OSPF protocol) 108 616 T
+(..........................................................................) 
275.85 616 T
+(4) 498 616 T
+(3.0) 72 596 T
+(Cost of the protocol) 108 596 T
+(..................................................................................................)
 203.89 596 T
+(7) 498 596 T
+1 F
+(3.1) 108 581.33 T
+( Operational data) 144 581.33 T
+(.................................................................................................................)
 214.88 581.33 T
+(7) 499 581.33 T
+(3.2) 108 567.33 T
+(Link bandwidth) 144 567.33 T
+(...................................................................................................................)
 209.88 567.33 T
+(9) 499 567.33 T
+(3.3) 108 553.33 T
+(Router memory) 144 553.33 T
+(....................................................................................................................)
 207.39 553.33 T
+(9) 499 553.33 T
+(3.4) 108 539.33 T
+(Router CPU) 144 539.33 T
+(.......................................................................................................................)
 194.89 539.33 T
+(10) 494.01 539.33 T
+(3.5) 108 525.33 T
+(Role of Designated Router) 144 525.33 T
+(................................................................................................)
 252.36 525.33 T
+(1) 494.38 525.33 T
+(1) 499 525.33 T
+(3.6) 108 511.33 T
+(Summary) 144 511.33 T
+(...........................................................................................................................)
 184.9 511.33 T
+(1) 494.38 511.33 T
+(1) 499 511.33 T
+0 F
+(4.0) 72 492 T
+(Suitable environments) 108 492 T
+(............................................................................................)
 215.88 492 T
+(13) 492.01 492 T
+(5.0) 72 472 T
+(Unsuitable environments) 108 472 T
+(.......................................................................................)
 230.87 472 T
+(13) 492.01 472 T
+(6.0) 72 452 T
+(Reference Documents) 108 452 T
+(............................................................................................)
 215.88 452 T
+(14) 492.01 452 T
+FMENDPAGE
+%%EndPage: "2" 3
+3 14 /Times-Bold FMDEFINEFONT
+%%Page: "3" 3
+612 792 0 FMBEGINPAGE
+72 702 540 720 R
+7 X
+0 K
+V
+0 F
+0 X
+(RFC 1245) 72 712 T
+(OSPF protocol analysis) 249.36 712 T
+(July 1991) 493.02 712 T
+72 69.05 540 81 R
+7 X
+V
+0 X
+([Moy]) 72 73 T
+([Page 3]) 499.7 73 T
+72 108 540 684 R
+7 X
+V
+2 F
+0 X
+(1.0  Intr) 72 673.33 T
+(oduction) 127.23 673.33 T
+0 F
+-0.02 (This document addresses, for OSPF V2, the requirements set forth by the 
IAB/IESG for an Inter-) 72 646 P
+-0.19 (net routing protocol to advance to Draft Standard state. This 
requirements are brie\337y summarized ) 72 632 P
+(below) 72 618 T
+(. The remaining sections of this report document how OSPF V2 satis\336es 
these require-) 100.53 618 T
+(ments:) 72 604 T
+(\245) 72 584 T
+(What are the key features and algorithms of the protocol?) 85.54 584 T
+(\245) 72 564 T
+(How much link bandwidth, router memory and router CPU cycles does the 
protocol consume ) 85.54 564 T
+(under normal conditions?) 85.54 550 T
+(\245) 72 530 T
+(For these metrics, how does the usage scale as the routing environment grows? 
This should ) 85.54 530 T
+(include topologies at least an order of magnitude lar) 85.54 516 T
+(ger than the current environment.) 335.14 516 T
+(\245) 72 496 T
+(What are the limits of the protocol for these metrics? \050i.e., when will 
the routing protocol ) 85.54 496 T
+(break?\051 ) 85.54 482 T
+(\245) 72 462 T
+(For what environments is the protocol well suited, and for what is it not 
suitable? ) 85.54 462 T
+3 F
+(1.1  Acknowledgments) 72 428.67 T
+0 F
+-0.03 (The OSPF protocol has been developed by the OSPF W) 72 402 P
+-0.03 (orking Group of the Internet Engineering ) 339.64 402 P
+(T) 72 388 T
+(ask Force. ) 78.49 388 T
+FMENDPAGE
+%%EndPage: "3" 4
+4 12 /Times-Bold FMDEFINEFONT
+%%Page: "4" 4
+612 792 0 FMBEGINPAGE
+72 702 540 720 R
+7 X
+0 K
+V
+0 F
+0 X
+(RFC 1245) 72 712 T
+(OSPF protocol analysis) 249.36 712 T
+(July 1991) 493.02 712 T
+72 69.05 540 81 R
+7 X
+V
+0 X
+([Moy]) 72 73 T
+([Page 4]) 499.7 73 T
+72 108 540 684 R
+7 X
+V
+2 F
+0 X
+(2.0  Key featur) 72 673.33 T
+(es of the OSPF pr) 172.97 673.33 T
+(otocol) 293.49 673.33 T
+0 F
+(This section summarizes the key features of the OSPF protocol. OSPF is an) 72 
646 T
+4 F
+( Internal gateway ) 434.78 646 T
+-0.2 (pr) 72 632 P
+-0.2 (otocol) 83.78 632 P
+0 F
+-0.2 (; it is designed to be used internal to a single Autonomous System. OSPF 
uses) 114.42 632 P
+4 F
+-0.2 ( link-state ) 486.43 632 P
+-0.36 (or SPF-based) 72 618 P
+0 F
+-0.36 ( technology \050as compared to the distance-vector or Bellman-Ford 
technology found ) 140.6 618 P
+-0.48 (in routing protocols such as RIP\051. Individual ) 72 604 P
+4 F
+-0.48 (link state advertisements \050LSAs\051) 285.2 604 P
+0 F
+-0.48 ( describe pieces of ) 449.99 604 P
+-0.13 (the OSPF routing domain \050Autonomous System\051. These LSAs are 
\337ooded throughout the routing ) 72 590 P
+(domain, forming the ) 72 576 T
+4 F
+(link state database) 173.27 576 T
+0 F
+(. Each router has an identical link state database; syn-) 268.56 576 T
+(chronization of link state databases is maintained via a ) 72 562 T
+4 F
+(r) 336.81 562 T
+(eliable \337ooding algorithm) 341.92 562 T
+0 F
+(. From this ) 473.2 562 T
+(link state database, each router builds a routing table by calculating a 
shortest-path tree, with the ) 72 548 T
+(root of the tree being the calculating router itself. This calculation is 
commonly referred to as the ) 72 534 T
+4 F
+(Dijkstra pr) 72 520 T
+(ocedur) 129.41 520 T
+(e) 164.51 520 T
+0 F
+(.) 169.83 520 T
+(Link state advertisements are small. Each advertisement describes a small 
pieces of the OSPF ) 72 494 T
+(routing domain, namely either: the neighborhood of a single router) 72 480 T
+(, the neighborhood of a single ) 391.97 480 T
+(transit network, a single inter) 72 466 T
+(-area route \050see below\051 or a single external route.) 212 466 T
+(The other key features of the OSPF protocol are:) 72 440 T
+(\245) 72 420 T
+4 F
+-0.31 (Adjacency bringup) 85.54 420 P
+0 F
+-0.31 (. ) 183.51 420 P
+4 F
+-0.31 (Certain pairs of OSPF r) 189.2 420 P
+-0.31 (outers become \322adjacent\323) 311.01 420 P
+0 F
+-0.31 (. As an adjacency is ) 442.96 420 P
+(formed, the two routers synchronize their link state databases by ) 85.54 406 
T
+4 F
+(exchanging database sum-) 397.64 406 T
+(maries) 85.54 392 T
+0 F
+( in the form of OSPF Database Exchange packets. Adjacent routers then 
maintain syn-) 120.17 392 T
+(chronization of their link state databases through the ) 85.54 378 T
+4 F
+(r) 340.02 378 T
+(eliable \337ooding algorithm) 345.13 378 T
+0 F
+(. Routers ) 476.41 378 T
+-0.27 (connected by serial lines always become adjacent. On multi-access 
networks \050e.g., ethernets or ) 85.54 364 P
+(X.25 PDNs\051, all routers attached to the network become adjacent to both 
the Designated ) 85.54 350 T
+(Router and the Backup Designated router) 85.54 336 T
+(.) 283.73 336 T
+(\245) 72 316 T
+4 F
+-0.02 (Designated r) 85.54 316 P
+-0.02 (outer) 150.26 316 P
+-0.02 (.) 176.46 316 P
+0 F
+-0.02 ( A Designated Router is elected on all multi-access networks \050e.g., 
ether-) 179.46 316 P
+(nets or X.25 PDNs\051. The network\325) 85.54 302 T
+(s Designated Router ) 250.42 302 T
+4 F
+(originates the network LSA) 350.69 302 T
+0 F
+( describ-) 492.27 302 T
+(ing the network\325) 85.54 288 T
+(s local environment. It also plays a ) 164.15 288 T
+4 F
+(special r) 334.04 288 T
+(ole in the \337ooding algorithm) 376.8 288 T
+0 F
+(, ) 521.4 288 T
+(since all routers on the network are synchronizing their link state databases 
by sending and ) 85.54 274 T
+(receiving LSAs to/from the Designated Router during the \337ooding process.) 
85.54 260 T
+(\245) 72 240 T
+4 F
+-0.46 (Backup Designated Router) 85.54 240 P
+0 F
+-0.46 (. A Backup Designated Router is elected on multi-access networks ) 
221.87 240 P
+(to speed/ease the transition of Designated Routers when the current 
Designated Router disap-) 85.54 226 T
+(pears. In that event, the Backup DR takes over) 85.54 212 T
+(, and does not need to go through the adjacency ) 308.22 212 T
+-0.13 (bringup process on the LAN \050since it already had done this in its 
Backup capacity\051. Also, even ) 85.54 198 P
+(before the disappearance of the Designated Router is noticed, the Backup DR 
will enable the ) 85.54 184 T
+(reliable \337ooding algorithm to proceed in the DR\325) 85.54 170 T
+(s absence.) 320.39 170 T
+FMENDPAGE
+%%EndPage: "4" 5
+%%Page: "5" 5
+612 792 0 FMBEGINPAGE
+72 702 540 720 R
+7 X
+0 K
+V
+0 F
+0 X
+(RFC 1245) 72 712 T
+(OSPF protocol analysis) 249.36 712 T
+(July 1991) 493.02 712 T
+72 69.05 540 81 R
+7 X
+V
+0 X
+([Moy]) 72 73 T
+([Page 5]) 499.7 73 T
+72 108 540 684 R
+7 X
+V
+0 X
+(\245) 72 676 T
+4 F
+(Non-br) 85.54 676 T
+(oadcast multi-access network support.) 122.63 676 T
+0 F
+( OSPF treats these networks \050e.g., X.25 ) 318.51 676 T
+-0.01 (PDNs\051 pretty much as if they were LANs \050i.e., a DR is elected, 
and a network LSA is gener-) 85.54 662 P
+-0.29 (ated\051. Additional con\336guration information is needed however for 
routers attached to these net-) 85.54 648 P
+(work to initially \336nd each other) 85.54 634 T
+(.) 236.45 634 T
+(\245) 72 614 T
+4 F
+(OSPF ar) 85.54 614 T
+(eas) 130.29 614 T
+0 F
+(. OSPF allows the Autonomous Systems to be broken up into regions call areas. 
) 146.28 614 T
+(This is useful for several reasons. First, it provides an extra level of ) 
85.54 600 T
+4 F
+(r) 411.64 600 T
+(outing pr) 416.75 600 T
+(otection) 464.18 600 T
+0 F
+(: rout-) 504.81 600 T
+-0.29 (ing within an area is protected from all information external to the 
area. Second, by splitting an ) 85.54 586 P
+-0.3 (Autonomous System into areas the ) 85.54 572 P
+4 F
+-0.3 (cost of the Dijkstra pr) 254.27 572 P
+-0.3 (ocedur) 365.44 572 P
+-0.3 (e ) 400.53 572 P
+0 F
+-0.3 (\050in terms of CPU cycles\051 is ) 408.55 572 P
+(reduced.) 85.54 558 T
+(\245) 72 538 T
+4 F
+(Flexible import of external r) 85.54 538 T
+(outing information.) 230.55 538 T
+0 F
+( In OSPF) 330.5 538 T
+(, ) 374.19 538 T
+4 F
+(each external r) 380.19 538 T
+(oute) 456.58 538 T
+0 F
+( is imported ) 478.56 538 T
+(into the Autonomous System in ) 85.54 524 T
+4 F
+(a separate LSA) 240.47 524 T
+0 F
+(. This reduces the amount of \337ooding traf) 319.08 524 T
+(\336c ) 518.07 524 T
+(\050since external routes change often, and you want to only \337ood the 
changes\051. It also enables ) 85.54 510 T
+4 F
+-0.43 (partial r) 85.54 496 P
+-0.43 (outing table updates) 127.86 496 P
+0 F
+-0.43 ( when only a single external route changes. OSPF external LSAs ) 230.96 
496 P
+(also provide the following features. A ) 85.54 482 T
+4 F
+(forwarding addr) 270.4 482 T
+(ess) 355.81 482 T
+0 F
+( can be included in the external ) 370.46 482 T
+(LSA, eliminating extra-hops at the edge of the Autonomous System. There are 
two levels of ) 85.54 468 T
+(external metrics that can be speci\336ed, ) 85.54 454 T
+4 F
+(type 1) 269.06 454 T
+0 F
+( and ) 300.04 454 T
+4 F
+(type 2) 323.35 454 T
+0 F
+(. Also, external routes can be tagged ) 354.33 454 T
+(with a 32-bit number \050the ) 85.54 440 T
+4 F
+(external r) 211.12 440 T
+(oute tag) 261.19 440 T
+0 F
+(; commonly used as an AS number of the route\325) 302.16 440 T
+(s ) 531.68 440 T
+(origin\051, simplifying external route management in a transit Autonomous 
System.) 85.54 426 T
+(\245) 72 406 T
+4 F
+(Four level r) 85.54 406 T
+(outing hierar) 145.27 406 T
+(chy) 212.69 406 T
+0 F
+(. OSPF has a four level routing hierarchy) 229.9 406 T
+(, or trust model: ) 426.32 406 T
+4 F
+(intra-) 505.94 406 T
+(ar) 85.54 392 T
+(ea) 96.64 392 T
+0 F
+(, ) 107.96 392 T
+4 F
+(inter) 113.96 392 T
+(-ar) 138.16 392 T
+(ea) 153.26 392 T
+0 F
+(, ) 164.59 392 T
+4 F
+(external type 1) 170.58 392 T
+0 F
+( and ) 246.52 392 T
+4 F
+(external type 2) 269.84 392 T
+0 F
+( routes. This enables multiple levels of ) 345.78 392 T
+(routing protection, and simpli\336es routing management in an Autonomous 
System.) 85.54 378 T
+(\245) 72 358 T
+4 F
+(V) 85.54 358 T
+(irtual links) 93.75 358 T
+0 F
+(. By allowing the con\336guration of virtual links, OSPF ) 150.07 358 T
+4 F
+(r) 410.94 358 T
+(emoves topological ) 416.05 358 T
+(r) 85.54 344 T
+(estrictions) 90.64 344 T
+0 F
+( on area layout in an Autonomous System.) 143.27 344 T
+(\245) 72 324 T
+4 F
+-0.32 (Authentication of r) 85.54 324 P
+-0.32 (outing pr) 182.62 324 P
+-0.32 (otocol exchanges) 229.74 324 P
+0 F
+-0.32 (. Every time an OSPF router receives a routing ) 315.03 324 P
+(protocol packet, it authenticates the packet before processing it further) 
85.54 310 T
+(.) 422.61 310 T
+(\245) 72 290 T
+4 F
+-0.03 (Flexible r) 85.54 290 P
+-0.03 (outing metric.) 134.26 290 P
+0 F
+-0.03 ( In OSPF) 206.18 290 P
+-0.03 (, metric are assigned to outbound router interfaces. The cost ) 249.82 
290 P
+(of a path is then the sum of the path\325) 85.54 276 T
+(s component interfaces. The routing metric itself can be ) 260.42 276 T
+(assigned by the system administrator to indicate any combination of network 
characteristics ) 85.54 262 T
+(\050e.g., delay) 85.54 248 T
+(, bandwidth, dollar cost, etc.\051.) 138.04 248 T
+(\245) 72 228 T
+4 F
+-0.09 (Equal-cost multipath.) 85.54 228 P
+0 F
+-0.09 ( When multiple best cost routes to a destination exist, OSPF \336nds 
them ) 196.73 228 P
+(and they can be then used to load share traf) 85.54 214 T
+(\336c to the destination.) 292.82 214 T
+(\245) 72 194 T
+4 F
+(T) 85.54 194 T
+(OS-based r) 93.32 194 T
+(outing.) 150.74 194 T
+0 F
+( Separate sets of routes can be calculated for each IP type of service. For ) 
186.4 194 T
+(example, low delay traf) 85.54 180 T
+(\336c could be routed on one path, while high bandwidth traf) 198.56 180 T
+(\336c is routed ) 477.16 180 T
+-0.39 (on another) 85.54 166 P
+-0.39 (. This is done by \050optionally\051 assigning, to each outgoing router 
interface, one metric ) 135.44 166 P
+(for each IP T) 85.54 152 T
+(OS.) 148.26 152 T
+(\245) 72 132 T
+4 F
+(V) 85.54 132 T
+(ariable-length subnet support.) 93.09 132 T
+0 F
+( OSPF includes support for variable-length subnet masks by ) 248.02 132 T
+(carrying a network mask with each advertised destination.) 85.54 118 T
+FMENDPAGE
+%%EndPage: "5" 6
+%%Page: "6" 6
+612 792 0 FMBEGINPAGE
+72 702 540 720 R
+7 X
+0 K
+V
+0 F
+0 X
+(RFC 1245) 72 712 T
+(OSPF protocol analysis) 249.36 712 T
+(July 1991) 493.02 712 T
+72 69.05 540 81 R
+7 X
+V
+0 X
+([Moy]) 72 73 T
+([Page 6]) 499.7 73 T
+72 108 540 684 R
+7 X
+V
+0 X
+(\245) 72 676 T
+4 F
+-0.08 (Stub ar) 85.54 676 P
+-0.08 (ea support. ) 123.56 676 P
+0 F
+-0.08 (T) 183.69 676 P
+-0.08 (o support routers having insuf) 190.18 676 P
+-0.08 (\336cient memory) 333.53 676 P
+-0.08 (, areas can be con\336gured as ) 405.63 676 P
+(stubs. External LSAs \050often making up the bulk of the Autonomous 
System\051 are not \337ooded ) 85.54 662 T
+(into/throughout stub areas. Routing to external destinations in stub areas is 
based solely on ) 85.54 648 T
+(default.) 85.54 634 T
+FMENDPAGE
+%%EndPage: "6" 7
+%%Page: "7" 7
+612 792 0 FMBEGINPAGE
+72 702 540 720 R
+7 X
+0 K
+V
+0 F
+0 X
+(RFC 1245) 72 712 T
+(OSPF protocol analysis) 249.36 712 T
+(July 1991) 493.02 712 T
+72 69.05 540 81 R
+7 X
+V
+0 X
+([Moy]) 72 73 T
+([Page 7]) 499.7 73 T
+72 108 540 684 R
+7 X
+V
+2 F
+0 X
+(3.0  Cost of the pr) 72 673.33 T
+(otocol) 193.4 673.33 T
+0 F
+-0.1 (This section attempts to analyze how the OSPF protocol will perform and 
scale in the Internet. In ) 72 646 P
+(this analysis, we will concentrate on the following four areas:) 72 632 T
+(\245) 72 612 T
+4 F
+(Link bandwidth) 85.54 612 T
+0 F
+(. In OSPF) 168.53 612 T
+(, a reliable \337ooding mechanism is used to ensure that router link ) 215.22 
612 T
+(state databases are remained synchronized. Individual components of the link 
state databases ) 85.54 598 T
+-0.17 (\050the LSAs\051 are refreshed infrequently \050every 30 minutes\051, 
at least in the absence of topological ) 85.54 584 P
+(changes. Still, as the size of the database increases, the amount of link 
bandwidth used by the ) 85.54 570 T
+(\337ooding procedure also increases.) 85.54 556 T
+(\245) 72 536 T
+4 F
+-0.03 (Router memory) 85.54 536 P
+0 F
+-0.03 (. The size of an OSPF link state database can get quite lar) 166.32 536 
P
+-0.03 (ge, especially in the ) 441.86 536 P
+(presence of many external LSAs. This imposes requirements on the amount of 
router memory ) 85.54 522 T
+(available.) 85.54 508 T
+(\245) 72 488 T
+4 F
+(CPU usage) 85.54 488 T
+0 F
+(. In OSPF) 141.83 488 T
+(, this is dominated by the length of time it takes to run the shortest path ) 
188.52 488 T
+(calculation \050Dijkstra procedure\051. This is a function of the number of 
routers in the OSPF sys-) 85.54 474 T
+(tem.) 85.54 460 T
+(\245) 72 440 T
+4 F
+(Role of the Designated Router) 85.54 440 T
+(.) 238.32 440 T
+0 F
+( The Designated router receives and sends more packets on a ) 241.32 440 T
+-0.46 (multi-access networks than the other routers connected to the network. 
Also, there is some time ) 85.54 426 P
+(involved in cutting over to a new Designated Router after the old one fails 
\050especially when ) 85.54 412 T
+(both the Backup Designated Router and the Designated Router fail at the same 
time\051. For this ) 85.54 398 T
+-0.27 (reason, it is possible that you may want to limit the number of routers 
connected to a single net-) 85.54 384 P
+(work.) 85.54 370 T
+(The remaining section will analyze these areas, estimating how much resources 
the OSPF proto-) 72 344 T
+-0.05 (col will consume, both now and in the future. T) 72 330 P
+-0.05 (o aid in this analysis, the next section will present ) 298.93 330 P
+(some data that have been collected in actual OSPF \336eld deployments.) 72 
316 T
+3 F
+(3.1   Operational data) 72 282.67 T
+0 F
+-0.44 (The OSPF protocol has been deployed in a number of places in the 
Internet. For a summary of this ) 72 256 P
+(deployment, see [1]. Some statistics have been gathered from this operational 
experience, via ) 72 242 T
+-0.03 (local network management facilities. Some of these statistics are 
presented in the following table:) 72 228 P
+FMENDPAGE
+%%EndPage: "7" 8
+5 10 /Times-Bold FMDEFINEFONT
+%%Page: "8" 8
+612 792 0 FMBEGINPAGE
+72 702 540 720 R
+7 X
+0 K
+V
+0 F
+0 X
+(RFC 1245) 72 712 T
+(OSPF protocol analysis) 249.36 712 T
+(July 1991) 493.02 712 T
+72 69.05 540 81 R
+7 X
+V
+0 X
+([Moy]) 72 73 T
+([Page 8]) 499.7 73 T
+72 108 540 684 R
+7 X
+V
+72 666.01 540 674 C
+72 671.98 540 671.98 2 L
+0.5 H
+0 Z
+0 X
+0 K
+N
+0 0 612 792 C
+5 F
+0 X
+0 K
+(T) 72 677.33 T
+(ABLE 1. Pertinent operational statistics) 77.93 677.33 T
+(Statistic) 72 655.34 T
+(BARRNet) 216 655.34 T
+(NSI) 324 655.34 T
+(OARnet) 432 655.34 T
+1 F
+(Data gathering \050duration\051) 72 638.34 T
+(99 hours) 216 638.34 T
+(277 hours) 324 638.34 T
+(28 hours) 432 638.34 T
+(Dijkstra frequency) 72 622.34 T
+(50 minutes) 216 622.34 T
+(25 minutes) 324 622.34 T
+(13 minutes) 432 622.34 T
+(External incremental frequency) 72 606.34 T
+(1.2 minutes) 216 606.34 T
+(.98 minutes) 324 606.34 T
+(not gathered) 432 606.34 T
+(Database turnover) 72 590.34 T
+(29.7 minutes) 216 590.34 T
+(30.9 minutes) 324 590.34 T
+(28.2 minutes) 432 590.34 T
+(LSAs per packet) 72 574.34 T
+(3.38) 216 574.34 T
+(3.16) 324 574.34 T
+(2.99) 432 574.34 T
+(Flooding retransmits) 72 558.34 T
+(1.3%) 216 558.34 T
+(1.4%) 324 558.34 T
+(.7%) 432 558.34 T
+0 F
+(The \336rst line in the above table show the length of time that statistics 
were gathered on the three ) 72 533.01 T
+(networks. A brief description of the other statistics follows:) 72 519.01 T
+(\245) 72 499.01 T
+4 F
+(Dijkstra fr) 85.54 499.01 T
+(equency) 140.27 499.01 T
+(. ) 181.59 499.01 T
+0 F
+(In OSPF) 187.59 499.01 T
+(, the Dijkstra calculation involves only those routers and transit ) 228.28 
499.01 T
+-0.14 (networks belonging to the AS. The Dijkstra is run only when something 
in the system changes ) 85.54 485.01 P
+(\050like a serial line between two routers goes down\051. Note that in these 
operational systems, the ) 85.54 471.01 T
+(Dijkstra process runs only infrequently \050the most frequent being every 13 
minutes\051.) 85.54 457.01 T
+(\245) 72 437.01 T
+4 F
+(External incr) 85.54 437.01 T
+(emental fr) 153.61 437.01 T
+(equency) 206.35 437.01 T
+0 F
+(. In OSPF) 247.54 437.01 T
+(, when an external route changes only its entry in ) 294.23 437.01 T
+-0.13 (the routing table is recalculated. These are called external 
incremental updates. Note that these ) 85.54 423.01 P
+(happen much more frequently than the Dijkstra procedure. \050in other words, 
incremental ) 85.54 409.01 T
+(updates are saving quite a bit of processor time\051.) 85.54 395.01 T
+(\245) 72 375.01 T
+4 F
+-0.45 (Database turnover) 85.54 375.01 P
+-0.45 (.) 179.58 375.01 P
+0 F
+-0.45 ( In OSPF) 182.58 375.01 P
+-0.45 (, link state advertisements are refreshed at a minimum of every 30 ) 
225.36 375.01 P
+(minutes. New advertisement instances are sent out more frequently when some 
part of the ) 85.54 361.01 T
+-0.2 (topology changes. The table shows that, even taking topological changes 
into account, on aver-) 85.54 347.01 P
+(age an advertisement is updated close to only every 30 minutes. This 
statistic will be used in ) 85.54 333.01 T
+(the link bandwidth calculations below) 85.54 319.01 T
+(. Note that NSI actually shows advertisements updated ) 267.31 319.01 T
+(every 30.7 \050> 30\051 minutes. This probably means that at one time earlier 
in the measurement ) 85.54 305.01 T
+(period, NSI had a smaller link state database that it did at the end.) 85.54 
291.01 T
+(\245) 72 271.01 T
+4 F
+-0.39 (LSAs per packet.) 85.54 271.01 P
+0 F
+-0.39 ( In OSPF) 173.04 271.01 P
+-0.39 (, multiple LSAs can be included in either Link State Update or Link ) 
215.95 271.01 P
+-0.35 (State Acknowledgment packets.The table shows that, on average, around 3 
LSAs are carried in ) 85.54 257.01 P
+(a single packet. This statistic is used when calculating the header overhead 
in the link band-) 85.54 243.01 T
+(width calculation below) 85.54 229.01 T
+(. This statistic was derived by diving the number of LSAs \337ooded by ) 
200.01 229.01 T
+(the number of \050non-hello\051 multicasts sent.) 85.54 215.01 T
+(\245) 72 195.01 T
+4 F
+(Flooding r) 85.54 195.01 T
+(etransmits.) 138.97 195.01 T
+0 F
+( This counts both retransmission of LS Update packets and Link State ) 195.92 
195.01 T
+(Acknowledgment packets, as a percentage of the original multicast \337ooded 
packets. The table ) 85.54 181.01 T
+(shows that \337ooding is working well, and that retransmits can be ignored in 
the link bandwidth ) 85.54 167.01 T
+(calculation below) 85.54 153.01 T
+(.) 169.69 153.01 T
+FMENDPAGE
+%%EndPage: "8" 9
+%%Page: "9" 9
+612 792 0 FMBEGINPAGE
+72 702 540 720 R
+7 X
+0 K
+V
+0 F
+0 X
+(RFC 1245) 72 712 T
+(OSPF protocol analysis) 249.36 712 T
+(July 1991) 493.02 712 T
+72 69.05 540 81 R
+7 X
+V
+0 X
+([Moy]) 72 73 T
+([Page 9]) 499.7 73 T
+72 108 540 684 R
+7 X
+V
+3 F
+0 X
+(3.2  Link bandwidth) 72 674.67 T
+0 F
+-0.02 (In this section we attempt to calculate how much link bandwidth is 
consumed by the OSPF \337ood-) 72 648 P
+(ing process. The amount of link bandwidth consumed increases linearly with 
the number of ) 72 634 T
+(advertisements present in the OSPF database.W) 72 620 T
+(e assume that the majority of advertisements in ) 300.88 620 T
+(the database will be AS external LSAs \050operationally this is true, see 
[1]\051.) 72 606 T
+(From the statistics presented in Section 3.1, any particular advertisement is 
\337ooded \050on average\051 ) 72 580 T
+(every 30 minutes. In addition, three advertisements \336t in a single packet. 
\050This packet could be ) 72 566 T
+(either a Link State Update packet or a Link State Acknowledgment packet; in 
this analysis we ) 72 552 T
+(select the Link State Update packet, which is the lar) 72 538 T
+(ger\051. An AS external LSA is 36 bytes long. ) 320.93 538 T
+(Adding one third of a packet header \050IP header plus OSPF Update packet\051 
yields 52 bytes. T) 72 524 T
+(rans-) 515.59 524 T
+(mitting this amount of data every 30 minutes gives an average rate of 23/100 
bits/second.) 72 510 T
+-0.05 (If you want to limit your routing traf) 72 484 P
+-0.05 (\336c to 5% of the link\325) 247.03 484 P
+-0.05 (s total bandwidth, you get the following ) 345.75 484 P
+(maximums for database size:) 72 470 T
+72 434.01 540 442 C
+72 439.98 540 439.98 2 L
+0.5 H
+0 Z
+0 X
+0 K
+N
+0 0 612 792 C
+5 F
+0 X
+0 K
+(T) 72 445.33 T
+(ABLE 2. Database size as a function of link speed \0505% utilization\051) 
77.93 445.33 T
+(Speed) 180 423.34 T
+(# external advertisements) 288 423.34 T
+1 F
+(9.6 Kb) 180 406.34 T
+(2087) 288 406.34 T
+(56 Kb) 180 390.34 T
+(12,174) 288 390.34 T
+0 F
+-0.46 (Higher line speeds have not been included, because other factors will 
then limit database size \050like ) 72 365.01 P
+-0.12 (router memory\051 before line speed becomes a factor) 72 351.01 P
+-0.12 (. Note that in the above calculation, the size of ) 315.32 351.01 P
+-0.06 (the data link header was not taken into account. Also, note that while 
the OSPF database is likely ) 72 337.01 P
+(to be mostly external LSAs, other LSAs have a size also. As a ballpark 
estimate, router links and ) 72 323.01 T
+-0.01 (network links are generally three times as lar) 72 309.01 P
+-0.01 (ge as an AS external link, with summary link adver-) 287.18 309.01 P
+(tisements being the same size as external link LSAs.) 72 295.01 T
+(OSPF consumes considerably less link bandwidth than RIP) 72 269.01 T
+(. This has been shown experimentally ) 355.51 269.01 T
+(in the NSI network. See Jef) 72 255.01 T
+(frey Bur) 203.69 255.01 T
+(gan\325) 243.77 255.01 T
+(s \322NASA Sciences Internet\323 report in [3].) 264.42 255.01 T
+3 F
+(3.3  Router memory) 72 221.67 T
+0 F
+-0.1 (Memory requirements in OSPF are dominated by the size of the link state 
database. As in the pre-) 72 195.01 P
+(vious section, it is probably safe to assume that most of the advertisements 
in the database are ) 72 181.01 T
+(external LSAs. While an external LSA is 36 bytes long, it is generally stored 
by an OSPF imple-) 72 167.01 T
+-0.34 (mentation together with some support data. So a good estimate of router 
memory consumed by an ) 72 153.01 P
+(external LSA is probably 64 bytes. So a database having 10,000 external LSAs 
will consume ) 72 139.01 T
+(640K bytes of router memory) 72 125.01 T
+(. OSPF de\336nitely requires more memory than RIP) 213.79 125.01 T
+(.) 452.98 125.01 T
+FMENDPAGE
+%%EndPage: "9" 10
+%%Page: "10" 10
+612 792 0 FMBEGINPAGE
+72 702 540 720 R
+7 X
+0 K
+V
+0 F
+0 X
+(RFC 1245) 72 712 T
+(OSPF protocol analysis) 249.36 712 T
+(July 1991) 493.02 712 T
+72 69.05 540 81 R
+7 X
+V
+0 X
+([Moy]) 72 73 T
+([Page 10]) 493.7 73 T
+72 108 540 684 R
+7 X
+V
+0 X
+-0.35 (Using the Proteon P4200 implementation as an example, the P4200 has 
2Mbytes of memory) 72 676 P
+-0.35 (. This ) 510.38 676 P
+-0.02 (is shared between instruction, data and packet buf) 72 662 P
+-0.02 (fer memory) 310.78 662 P
+-0.02 (. The P4200 has enough memory to ) 366.26 662 P
+(store 10, 000 external LSAs, and still have enough packet buf) 72 648 T
+(fer memory available to run a rea-) 367.58 648 T
+(sonable number of interfaces.) 72 634 T
+(Also, note that while the OSPF database is likely to be mostly external LSAs, 
other LSAs have a ) 72 608 T
+-0.06 (size also. As a ballpark estimate, router links and network links 
consume generally three times as ) 72 594 P
+(much memory as an AS external link, with summary link advertisements being 
the same size as ) 72 580 T
+(external link LSAs.) 72 566 T
+3 F
+(3.4  Router CPU) 72 532.67 T
+0 F
+(Assume that, as the size of the OSPF routing domain grows, the number of 
interfaces per router ) 72 506 T
+(stays bounded. Then the Dijkstra calculation is of order \050n * log 
\050n\051\051, where n is the number of ) 72 492 T
+(routers in the routing domain. \050This is the complexity of the Dijkstra 
algorithm in a sparse net-) 72 478 T
+(work\051. Of course, it is implementation speci\336c as to how expensive the 
Dijkstra really is.) 72 464 T
+(W) 72 438 T
+(e have no experimental numbers for the cost of the Dijkstra calculation in a 
real OSPF imple-) 82.36 438 T
+(mentation. However) 72 424 T
+(, Steve Deering presented results for the Dijkstra calculation in the 
\322MOSPF ) 169.45 424 T
+(meeting report\323 in [3]. Steve\325) 72 410 T
+(s calculation was done on a DEC 5000 \05010 mips processor\051, using ) 212.9 
410 T
+(the Stanford internet as a model. His graphs are based on numbers of 
networks, not number of ) 72 396 T
+(routers. However) 72 382 T
+(, if we extrapolate that the ratio of routers to networks remains the same, 
the ) 154.78 382 T
+(time to run Dijkstra for 200 routers in Steve\325) 72 368 T
+(s implementation was around 15 milliseconds.) 285.87 368 T
+-0.46 (This seems a reasonable cost, particularly when you notice that the 
Dijkstra calculation is run very ) 72 342 P
+(infrequently in operational deployments. In the three networks presented in 
Section 3.1, Dijkstra ) 72 328 T
+-0.35 (was run on average only every 13 to 50 minutes. Since the Dijkstra is 
run so infrequently) 72 314 P
+-0.35 (, it seems ) 493.06 314 P
+-0.02 (likely that OSPF overall consumes less CPU than RIP \050because of 
RIP\325) 72 300 P
+-0.02 (s frequent updates, requir-) 413.95 300 P
+(ing routing table lookups\051.) 72 286 T
+(As another example, the routing algorithm in MILNET is SPF-based. MILNET\325) 
72 260 T
+(s current size is ) 456.42 260 T
+-0.02 (230 nodes, and the routing calculation still consumes less than 5% of 
the MILNET switches\325 pro-) 72 246 P
+(cessor bandwidth [4]. Because the routing algorithm in the MILNET adapts to 
network load, it ) 72 232 T
+(runs the Dijkstra process quite frequently \050on the order of seconds as 
compared to OSPF\325) 72 218 T
+(s min-) 499.7 218 T
+(utes\051. However) 72 204 T
+(, it should be noted that the routing algorithm in MILNET incrementally 
updates ) 144.79 204 T
+(the SPF-tree, while OSPF rebuilds it from scratch at each Dijkstra 
calculation) 72 190 T
+(OSPF\325) 72 164 T
+(s Area capability provides a way to reduce Dijkstra overhead, if it becomes a 
burden. The ) 104 164 T
+-0 (routing domain can be split into areas. The extent of the Dijkstra 
calculation \050and its complexity\051 ) 72 150 P
+(is limited to a single area at a time.) 72 136 T
+FMENDPAGE
+%%EndPage: "10" 11
+%%Page: "11" 11
+612 792 0 FMBEGINPAGE
+72 702 540 720 R
+7 X
+0 K
+V
+0 F
+0 X
+(RFC 1245) 72 712 T
+(OSPF protocol analysis) 249.36 712 T
+(July 1991) 493.02 712 T
+72 69.05 540 81 R
+7 X
+V
+0 X
+([Moy]) 72 73 T
+([Page 11]) 493.7 73 T
+72 108 540 684 R
+7 X
+V
+3 F
+0 X
+(3.5  Role of Designated Router) 72 674.67 T
+0 F
+(This section explores the number of routers that can be attached to a single 
network. As the num-) 72 648 T
+-0.36 (ber of routers attached to a network grows, so does the amount of OSPF 
routing traf) 72 634 P
+-0.36 (\336c seen on the ) 469.48 634 P
+(network. Some of this is Hello traf) 72 620 T
+(\336c, which is generally multicast by each router every 10 sec-) 238.01 620 T
+-0.07 (onds. This burden is borne by all routers attached to the network. 
However) 72 606 P
+-0.07 (, because of its special ) 429.77 606 P
+-0.08 (role in the \337ooding process, the Designated router ends up sending 
more Link State Updates than ) 72 592 P
+(the other routers on the network. Also, the Designated Router receives Link 
State Acknowledg-) 72 578 T
+-0.15 (ments from all attached routers, while the other routers just receive 
them from the DR. \050Although ) 72 564 P
+(it is important to note that the rate of Link State Acknowledgments will 
generally be limited to ) 72 550 T
+(one per second from each router) 72 536 T
+(, because acknowledgments are generally delayed.\051) 226.38 536 T
+-0.22 (So, if the amount of protocol traf) 72 510 P
+-0.22 (\336c on the LAN becomes a limiting factor) 228.71 510 P
+-0.22 (, the limit is likely to be ) 424.24 510 P
+(detected in the Designated Router \336rst. However) 72 496 T
+(, such a limit is not expected to be reached in ) 305.68 496 T
+(practice. The amount of routing protocol traf) 72 482 T
+(\336c generated by OSPF has been shown to be small ) 286.62 482 T
+-0.11 (\050see Section 3.2\051. Also, if need be OSPF\325) 72 468 P
+-0.11 (s hello timers can be con\336gured to reduce the amount of ) 268.43 468 
P
+(protocol traf) 72 454 T
+(\336c on the network. Note that more than 50 routers have been simulated 
attached to a ) 131.4 454 T
+(single LAN \050see [1]\051. Also, in interoperability testing 13 routers have 
been attached to a single ) 72 440 T
+(ethernet with no problems encountered.) 72 426 T
+-0.02 (Another factor in the number of routers attached to a single network is 
the cutover time when the ) 72 400 P
+-0.17 (Designated Router fails. OSPF has a Backup Designated Router so that 
the cutover does not have ) 72 386 P
+-0.31 (to wait for the new DR to synchronize \050the adjacency bring-up 
process mentioned earlier\051 with all ) 72 372 P
+-0.43 (the other routers on the LAN; as a Backup DR it had already 
synchronized. However) 72 358 P
+-0.43 (, in those rare ) 473.46 358 P
+-0.33 (cases when both DR and Backup DR crash at the same time, the new DR 
will have to synchronize ) 72 344 P
+(\050via the adjacency bring-up process\051 with all other routers before 
becoming functional. Field ) 72 330 T
+-0.44 (experience show that this synchronization process takes place in a 
timely fashion \050see the OARnet ) 72 316 P
+(report in [1]\051. However) 72 302 T
+(, this may be an issue in systems that have many routers attached to a sin-) 
183.42 302 T
+(gle network.) 72 288 T
+-0.15 (In the unlikely event that the number of routers attached to a LAN 
becomes a problem, either due ) 72 262 P
+(to the amount of routing protocol traf) 72 248 T
+(\336c or the cutover time, the LAN can be split into separate ) 251 248 T
+(pieces \050similar to splitting up the AS into separate areas\051.) 72 234 T
+3 F
+(3.6  Summary) 72 200.67 T
+0 F
+(In summary) 72 174 T
+(, it seems like the most likely limitation to the size of an OSPF system is 
available ) 128.85 174 T
+-0.4 (router memory) 72 160 P
+-0.4 (. W) 142.43 160 P
+-0.4 (e have given as 10,000 as the number of external LSAs that can be 
supported by ) 158.39 160 P
+(the memory available in one con\336guration of a particular implementation 
\050the Proteon P4200\051. ) 72 146 T
+-0.09 (Other implementations may vary; nowadays routers are being built with 
more and more memory) 72 132 P
+-0.09 (. ) 534.09 132 P
+FMENDPAGE
+%%EndPage: "11" 12
+%%Page: "12" 12
+612 792 0 FMBEGINPAGE
+72 702 540 720 R
+7 X
+0 K
+V
+0 F
+0 X
+(RFC 1245) 72 712 T
+(OSPF protocol analysis) 249.36 712 T
+(July 1991) 493.02 712 T
+72 69.05 540 81 R
+7 X
+V
+0 X
+([Moy]) 72 73 T
+([Page 12]) 493.7 73 T
+72 108 540 684 R
+7 X
+V
+0 X
+(Note that 10,000 routes is considerably lar) 72 676 T
+(ger than the lar) 275.31 676 T
+(gest \336eld implementation \050BARRNet; ) 347.37 676 T
+(which at 1816 external LSAs is still very lar) 72 662 T
+(ge\051.) 283.65 662 T
+(Note that there may be ways to reduce database size in a routing domain. 
First, the domain can ) 72 636 T
+-0.19 (make use of default routing, reducing the number of external routes 
that need to be imported. Sec-) 72 622 P
+(ondly) 72 608 T
+(, an EGP can be used that will transport its own information through the AS 
instead of rely-) 98.54 608 T
+-0.21 (ing on the IGP \050OSPF in this case\051 to do transfer the information 
for it \050the EGP\051. Thirdly) 72 594 P
+-0.21 (, routers ) 498.11 594 P
+(having insuf) 72 580 T
+(\336cient memory may be able to be assigned to stub areas \050whose databases 
are drasti-) 131.41 580 T
+(cally smaller\051. Lastly) 72 566 T
+(, if the Internet went away from a \337at address space the amount of 
external ) 172.82 566 T
+(information imported into an OSPF domain could be reduced drastically) 72 552 
T
+(.) 418.67 552 T
+(While not as likely) 72 526 T
+(, there could be other issues that would limit the size of an OSPF routing ) 
162.17 526 T
+(domain. If there are slow lines \050like 9600 baud\051, the size of the 
database will be limited \050see Sec-) 72 512 T
+(tion 3.2\051. Dijkstra may get to be expensive when there are hundreds of 
routers in the OSPF ) 72 498 T
+(domain; although at this point the domain can be split into areas. Finally) 
72 484 T
+(, when there are many ) 418.69 484 T
+(routers attached to a single network, there may be undue burden imposed upon 
the Designated ) 72 470 T
+(Router; although at that point a LAN can be split into separate LANs.) 72 456 
T
+FMENDPAGE
+%%EndPage: "12" 13
+%%Page: "13" 13
+612 792 0 FMBEGINPAGE
+72 702 540 720 R
+7 X
+0 K
+V
+0 F
+0 X
+(RFC 1245) 72 712 T
+(OSPF protocol analysis) 249.36 712 T
+(July 1991) 493.02 712 T
+72 69.05 540 81 R
+7 X
+V
+0 X
+([Moy]) 72 73 T
+([Page 13]) 493.7 73 T
+72 108 540 684 R
+7 X
+V
+2 F
+0 X
+(4.0  Suitable envir) 72 673.33 T
+(onments) 195.21 673.33 T
+0 F
+-0.14 (Suitable environments for the OSPF protocol range from lar) 72 646 P
+-0.14 (ge to small. OSPF is particular suited ) 359.11 646 P
+(for transit Autonomous Systems for the following reasons. OSPF can 
accommodate a lar) 72 632 T
+(ge num-) 497.84 632 T
+(ber of external routes. In OSPF the import of external information is very 
\337exible, having provi-) 72 618 T
+-0.39 (sions for a forwarding address, two levels of external metrics, and the 
ability to tag external routes ) 72 604 P
+-0.29 (with their AS number for easy management. Also OSPF\325) 72 590 P
+-0.29 (s ability to do partial updates when exter-) 343.17 590 P
+(nal information changes is very useful on these networks.) 72 576 T
+(OSPF is also suited for smaller) 72 550 T
+(, either stand alone or stub Autonomous Systems, because of its ) 220.44 550 T
+(wide array of features: fast conver) 72 536 T
+(gence, equal-cost-multipath, T) 235.96 536 T
+(OS routing, areas, etc.) 382.3 536 T
+2 F
+(5.0  Unsuitable envir) 72 469.33 T
+(onments) 212.98 469.33 T
+0 F
+-0.22 (OSPF has a very limited ability to express policy) 72 442 P
+-0.22 (. Basically) 304.62 442 P
+-0.22 (, its only policy mechanisms are in the ) 354.25 442 P
+(establishment of a four level routing hierarchy: intra-area, inter) 72 428 T
+(-area, type 1 and type 2 external ) 374.52 428 T
+(routes. A system wanting more sophisticated policies would have to be split 
up into separate ) 72 414 T
+(ASes, running a policy-based EGP between them.) 72 400 T
+FMENDPAGE
+%%EndPage: "13" 14
+%%Page: "14" 14
+612 792 0 FMBEGINPAGE
+72 702 540 720 R
+7 X
+0 K
+V
+0 F
+0 X
+(RFC 1245) 72 712 T
+(OSPF protocol analysis) 249.36 712 T
+(July 1991) 493.02 712 T
+72 69.05 540 81 R
+7 X
+V
+0 X
+([Moy]) 72 73 T
+([Page 14]) 493.7 73 T
+72 108 540 684 R
+7 X
+V
+2 F
+0 X
+(6.0  Refer) 72 673.33 T
+(ence Documents) 137.87 673.33 T
+0 F
+(The following documents have been referenced by this report:) 72 646 T
+([1]) 72 626 T
+(Moy) 108 626 T
+(, J., \322Experience with the OSPF protocol\323, RFC 1246, July 1991.) 129.88 
626 T
+([2]) 72 608 T
+(Moy) 108 608 T
+(, J., \322OSPF V) 129.88 608 T
+(ersion 2\323, RFC 1247, July 1991.) 193.85 608 T
+([3]) 72 590 T
+(Corporation for National Research Initiatives, \322Proceedings of the 
Eighteenth Internet ) 108 590 T
+(Engineering T) 108 576 T
+(ask Force\323, University of British Columbia, July 30-August 3, 1990.) 
176.11 576 T
+FMENDPAGE
+%%EndPage: "14" 15
+%%Page: "15" 15
+612 792 0 FMBEGINPAGE
+72 702 540 720 R
+7 X
+0 K
+V
+0 F
+0 X
+(RFC 1245) 72 712 T
+(OSPF protocol analysis) 249.36 712 T
+(July 1991) 493.02 712 T
+72 69.05 540 81 R
+7 X
+V
+0 X
+([Moy]) 72 73 T
+([Page 15]) 493.7 73 T
+72 108 540 684 R
+7 X
+V
+2 F
+0 X
+(Security Considerations) 72 673.33 T
+0 F
+(Security issues are not discussed in this memo.) 72 646 T
+2 F
+(Author) 72 617.33 T
+(\325) 122.04 617.33 T
+(s Addr) 126.77 617.33 T
+(ess) 173.13 617.33 T
+0 F
+(John Moy) 72 590 T
+(Proteon Inc.) 72 576 T
+(2 T) 72 562 T
+(echnology Drive) 87.48 562 T
+(W) 72 548 T
+(estborough, MA 01581) 82.36 548 T
+(Phone: \050508\051 898-2800) 72 522 T
+(Email: address@hidden) 72 508 T
+FMENDPAGE
+%%EndPage: "15" 16
+%%Trailer
+%%BoundingBox: 0 0 612 792
+%%Pages: 15 1
+%%DocumentFonts: Times-Roman
+%%+ Times-Bold
diff --git a/test/etags/pyt-src/server.py b/test/etags/pyt-src/server.py
new file mode 100644
index 0000000..68aa29a
--- /dev/null
+++ b/test/etags/pyt-src/server.py
@@ -0,0 +1,819 @@
+#!/usr/bin/python
+#
+# NOTE: THIS PROGRAM DOES NOT WORK!
+# It is intended as a regression test source for the Python support in etags.
+# If you want a working version, you'll find it in the fetchmail distribution.
+#
+
+from Tkinter import *
+from Dialog import *
+import sys
+import time
+import os
+
+#
+# Define the data structures the GUIs will be tossing around
+#
+class Controls:
+    def __init__(self):
+       self.foreground = FALSE;        # Run in background
+       self.daemon = 300               # Default to 5-minute timeout
+       self.syslog = FALSE             # Use syslogd for logging?
+       self.logfile = None             # No logfile, initially
+
+    def __repr__(self):
+       str = "";
+       if self.syslog:
+          str = str + ("set syslog\n")
+       elif self.logfile:
+           str = str + ("set logfile \"%s\"\n" % (self.logfile,));
+       if not self.foreground and self.daemon:
+           str = str + ("set daemon %s\n" % (self.daemon,))
+       return str + "\n"
+
+    def __str__(self):
+       return "[Server: " + repr(self) + "]"
+
+class Server:
+    def __init__(self):
+       self.pollname = None            # Poll label
+       self.via = None                 # True name of host
+       self.active = TRUE              # Poll status
+       self.interval = 0               # Skip interval
+       self.protocol = 'auto'          # Default to auto protocol
+       self.port = 0                   # Port number to use
+       self.uidl = FALSE               # Don't use RFC1725 UIDLs by default
+       self.auth = "password"          # Default to password authentication
+       self.timeout = 300              # 5-minute timeout
+       self.envelope = "Received"      # Envelope-address header
+       self.aka = []                   # List of DNS aka names
+       self.dns = TRUE                 # Enable DNS lookup on multidrop
+       self.localdomains = []          # Domains to be considered local
+       self.interface = None           # IP address and range
+       self.monitor = None             # IP address and range
+       self.userlist = []              # List of user entries for site
+       self.typemap = (
+           ('pollname',  'String'),
+           ('via',       'String'),
+           ('active',    'Boolean'),
+           ('interval',  'Int'),
+           ('protocol',  'String'),
+           ('interval',  'Int'),
+           ('port',      'Int'),
+           ('uidl',      'Boolean'),
+           ('auth',      'String'),
+           ('timeout',   'Int'),
+           ('envelope',  'String'),
+           # leave aka out
+           ('dns',       'Boolean'),
+           # leave localdomains out
+           ('interface', 'String'),
+           ('monitor',   'String'))
+
+    def dump(self, folded):
+       str = ""
+       if self.active:   str = str + "poll"
+       else:             str = str + "skip"
+       str = str + (" " + self.pollname)
+       if self.via != self.pollname:
+           str = str + " via " + self.via
+       if self.protocol != ServerDefaults.protocol:
+           str = str + " with proto " + self.protocol 
+       if self.port != defaultports[self.protocol]:
+           str = str + " port " + `self.port`
+       if self.timeout != ServerDefaults.timeout:
+           str = str + " timeout " + `self.timeout`
+       if self.interval != ServerDefaults.interval: 
+           str = str + " interval " + `self.interval` 
+       if self.envelope != ServerDefaults.envelope:
+           str = str + " envelope " + self.envelope
+       if self.auth != ServerDefaults.auth:
+           str = str + " auth " + self.auth
+       if self.dns != ServerDefaults.dns or self.uidl != ServerDefaults.uidl:
+           str = str + " and options"
+       if self.dns != ServerDefaults.dns:
+           str = str + flag2str(self.dns, 'dns')
+       if self.uidl != ServerDefaults.uidl:
+           str = str + flag2str(self.uidl, 'uidl')
+       if folded:        str = str + "\n\t"
+       else:             str = str + " "
+
+       if self.aka:
+            str = str + "aka"
+            for x in self.aka:
+               str = str + " " + x
+       if self.aka and self.localdomains: str = str + " "
+       if self.localdomains:
+            str = str + ("localdomains")
+            for x in self.localdomains:
+               str = str + " " + x
+        if (self.aka or self.localdomains):
+           if folded:
+               str = str + "\n\t"
+           else:
+               str = str + " "
+
+       if self.interface: str = str + " interface " + self.interface
+       if self.monitor: str = str + " monitor " + self.monitor
+       if (self.interface or self.monitor):
+           if folded:
+               str = str + "\n"
+
+       if str[-1] == "\t": str = str[0:-1]
+       return str;
+
+    def __repr__(self):
+       return self.dump(TRUE)
+
+    def __str__(self):
+       return "[Server: " + self.dump(FALSE) + "]"
+
+class User:
+    def __init__(self):
+       self.username = ""              # Remote username
+       self.localnames = None          # Local names
+       self.password = ""              # Password for mail account access
+       self.smpthost = 'localhost'     # Host to forward to
+       self.mda = ""                   # Mail Delivery Agent
+       self.preconnect = ""            # Connection setup
+       self.postconnect = ""           # Connection wrapup
+       self.keep = FALSE               # Keep messages
+       self.flush = FALSE              # Flush messages
+       self.fetchall = FALSE           # Fetch old messages
+       self.rewrite = TRUE             # Rewrite message headers
+       self.forcecr = FALSE            # Force LF -> CR/LF
+       self.stripcr = FALSE            # Strip CR
+       self.pass8bits = FALSE          # Force BODY=7BIT
+       self.dropstatus = FALSE         # Force BODY=7BIT
+       self.limit = 0                  # Message size limit
+       self.fetchlimit = 0             # Max messages fetched per batch
+       self.batchlimit = 0             # Max message forwarded per batch
+       self.typemap = (
+           ('username',    'String')
+           ('folder',      'String')
+           # leave out localnames
+           ('password',    'String')
+           ('smtphost',    'String')
+           ('preconnect',  'String')
+           ('postconnect', 'String')
+           ('mda',         'String')
+           ('keep',        'Boolean')
+           ('flush',       'Boolean')
+           ('fetchall',    'Boolean')
+           ('rewrite',     'Boolean')
+           ('forcecr',     'Boolean')
+           ('stripcr',     'Boolean')
+           ('pass8bits',   'Boolean')
+           ('dropstatus',  'Boolean')
+           ('limit',       'Int')
+           ('fetchlimit',  'Int')
+           ('batchlimit',  'Int'))
+
+    def __repr__(self):
+       str = ""
+       str = str + "user " + self.user;
+       if self.password: str = str + "with password " + self.password
+       if self.localnames:
+            str = str + "localnames"
+            for x in self.localnames:
+               str = str + " " + x
+       if (self.keep or self.flush or self.fetchall or self.rewrite or
+          self.forcecr or self.stripcr or self.pass8bits or self.dropstatus):
+           str = str + " options"
+       if self.keep != UserDefaults.keep:
+           str = str + flag2str(self.keep, 'keep')
+       if self.flush != UserDefaults.flush:
+           str = str + flag2str(self.flush, 'flush')
+       if self.fetchall != UserDefaults.fetchall:
+           str = str + flag2str(self.fetchall, 'fetchall')
+       if self.rewrite != UserDefaults.rewrite:
+           str = str + flag2str(self.rewrite, 'rewrite')
+       if self.forcecr != UserDefaults.forcecr:
+           str = str + flag2str(self.forcecr, 'forcecr')
+       if self.stripcr != UserDefaults.stripcr:
+           str = str + flag2str(self.stripcr, 'stripcr')
+       if self.pass8bits != UserDefaults.pass8bits:
+           str = str + flag2str(self.pass8bits, 'pass8bits')
+       if self.dropstatus != UserDefaults.dropstatus:
+           str = str + flag2str(self.dropstatus, 'dropstatus')
+       if self.limit != UserDefaults.limit:
+           str = str + " limit " + `self.limit`
+       if self.fetchlimit != UserDefaults.fetchlimit:
+           str = str + " fetchlimit " + `self.fetchlimit`
+       if self.batchlimit != UserDefaults.batchlimit:
+           str = str + " batchlimit " + `self.batchlimit`
+
+    def __str__(self):
+       return "[User: " + repr(self) + "]"
+    
+#
+# Helper code
+#
+
+defaultports = {"auto":0,
+               "POP2":109, 
+               "POP3":110, "APOP":110, "KPOP":1109, "IMAP":143,
+               "IMAP-K4":143,
+               "ETRN":25}
+
+protolist = ("auto", "POP2", "POP3", "APOP", "KPOP", "IMAP", "IMAP-K4", "ETRN")
+
+authlist = ("password", "kerberos")
+
+def flag2str(value, string):
+# make a string representation of a .fetchmailrc flag or negated flag
+    str = ""
+    if value != None:
+       str = str + (" ")
+       if value == FALSE: str = str + ("no ")
+       str = str + string;
+    return str
+
+class LabeledEntry(Frame):
+# widget consisting of entry field with caption to left
+    def bind(self, key, action):
+       self.E.bind(key, action)
+    def focus_set(self):
+       self.E.focus_set()
+    def __init__(self, Master, text, textvar, width):
+       Frame.__init__(self, Master)
+       self.L = Label(self, {'text':text, 'width':width, 'anchor':'w'})
+       self.E = Entry(self, {'textvar':textvar})
+       self.L.pack({'side':'left'})
+       self.E.pack({'side':'left', 'expand':'1', 'fill':'x'})
+
+def ButtonBar(frame, legend, ref, alternatives, command):
+# horizontal bar of radio buttons, caption to left, picking from a string list
+    bar = Frame(frame)
+    Label(bar, text=legend).pack(side=LEFT)
+    for alt in alternatives:
+       Radiobutton(bar,
+               {'text':alt, 'variable':ref, 'value':alt, 
'command':command}).pack(side=LEFT)
+    bar.pack(side=TOP);
+    return bar
+
+def helpwin(helpdict):
+# help message window with a self-destruct button
+    helpwin = Toplevel()
+    helpwin.title(helpdict['title']) 
+    helpwin.iconname(helpdict['title'])
+    Label(helpwin, text=helpdict['banner']).pack()
+    textwin = Message(helpwin, text=helpdict['text'], width=600)
+    textwin.pack()
+    Button(helpwin, text='Done', 
+          command=lambda x=helpwin: Widget.destroy(x),
+          relief=SUNKEN, bd=2).pack()
+
+class ListEdit(Frame):
+# edit a list of values (duplicates not allowed) with a supplied editor hook 
+    def __init__(self, newlegend, list, editor, master):
+       self.editor = editor
+       self.list = list
+
+       # Set up a widget to accept new sites
+       self.newval = StringVar(master)
+       newwin = LabeledEntry(master, newlegend, self.newval, '16')
+       newwin.bind('<Double-1>', self.handleNew)
+       newwin.bind('<Return>', self.handleNew)
+       newwin.pack(side=TOP, fill=X, anchor=E)
+
+       # Create the sitelist for site-configuration selection
+       listframe = Frame(master)
+       scroll = Scrollbar(listframe)
+       listwidget = Listbox(listframe, height=0, selectmode='browse')
+       if list:
+           for dnsname in list:
+               listwidget.insert('end', dnsname)
+       listframe.pack(side=TOP, expand=YES, fill=BOTH)
+       listwidget.config(yscrollcommand=scroll.set, relief=SUNKEN)
+       listwidget.pack(side=LEFT, expand=YES, fill=BOTH)
+       scroll.config(command=listwidget.yview, relief=SUNKEN)
+       scroll.pack(side=RIGHT, fill=BOTH)
+       listwidget.config(selectmode=SINGLE, setgrid=TRUE)
+       listwidget.bind('<Double-1>', self.handleList);
+       listwidget.bind('<Return>', self.handleList);
+       self.listwidget = listwidget
+
+       bf = Frame(master);
+       if self.editor:
+           Button(bf, text='Edit',   command=self.editItem).pack(side=LEFT)
+       Button(bf, text='Delete', command=self.deleteItem).pack(side=RIGHT)
+       bf.pack(fill=X)
+
+    def handleList(self, event):
+       self.editItem();
+
+    def handleNew(self, event):
+       item = self.newval.get()
+       entire = self.listwidget.get(0, self.listwidget.index('end'));
+       if item and (not entire) or (not item in self.listwidget.get(0, 
self.listwidget.index('end'))):
+           self.listwidget.insert('end', item)
+           if self.list != None: self.list.append(item)
+       self.newval.set('')
+
+    def editItem(self):
+       index = self.listwidget.curselection()[0]
+       if index and self.editor:
+           label = self.listwidget.get(index);
+           apply(self.editor, (label,))
+
+    def deleteItem(self):
+       index = self.listwidget.curselection()[0]
+       if index:
+           self.listwidget.delete(index)
+           if self.list != None: del self.list[index]
+
+def ConfirmQuit(frame, context):
+    ans = Dialog(frame, 
+                title = 'Quit?',
+                text = 'Really quit ' + context + ' without saving?',
+                bitmap = 'question',
+                strings = ('Yes', 'No'),
+                default = 1)
+    return ans.num == 0
+#
+# First, code to set the global fetchmail run controls.
+#
+
+confighelp = {
+    'title' : 'Fetchmail configurator help',
+    'banner': 'Configurator help',
+    'text' : """
+In the `Configurator Controls' panel, you can:
+
+Press `Save' to save the new fetchmail configuration you have created.
+Press `Quit' to exit without saving.
+Press `Help' to bring up this help message.
+
+In the `Configurator Controls' panel, you can set the following options that
+control how fetchmail runs:
+
+Poll interval
+        Number of seconds to wait between polls in the background.
+        Ignored if the `Run in Foreground?' option is on.
+
+Logfile
+        If empty, emit progress and error messages to stderr.
+        Otherwise this gives the name of the files to write to.
+        This field is ignored if the "Log to syslog?" option is on.
+
+In the `Remote Mail Configurations' panel, you can:
+
+1. Enter the name of a new remote mail server you want fetchmail to query.
+
+To do this, simply enter a label for the poll configuration in the
+`New Server:' box.  The label should be a DNS name of the server (unless
+you are using ssh or some other tunneling method and will fill in the `via'
+option on the site configuration screen).
+
+2. Change the configuration of an existing site.
+
+To do this, find the site's label in the listbox and double-click it.
+This will take you to a site configuration dialogue.
+"""}
+
+class ControlEdit(Frame):
+    def PostControls(self):
+       self.foreground = BooleanVar(self)
+       self.foreground.set(self.controls.foreground)
+       self.daemon = StringVar(self)
+       self.daemon.set(`self.controls.daemon`)
+       self.syslog = BooleanVar(self)
+       self.syslog.set(self.controls.syslog);
+       self.logfile = StringVar(self)
+       if self.controls.logfile: self.logfile.set(self.controls.logfile);
+
+       gf = Frame(self, relief=RAISED, bd = 5)
+
+       Label(gf,
+               text='Fetchmail Run Controls', 
+               bd=2).pack(side=TOP, pady=10)
+
+       df = Frame(gf, relief=RAISED, bd=2)
+
+       # Run in foreground?
+       Checkbutton(df,
+               {'text':'Run in foreground?',
+               'variable':self.foreground,
+               'relief':GROOVE}).pack(side=LEFT,anchor=W)
+
+       # Set the poll interval
+       de = LabeledEntry(df, '     Poll interval:', self.daemon, '14')
+       de.pack(side=RIGHT, anchor=E)
+
+       df.pack();
+
+       sf = Frame(gf, relief=RAISED, bd=2)
+
+       # Use syslog for logging?
+       Checkbutton(sf,
+               {'text':'Log to syslog?',
+               'variable':self.syslog,
+               'relief':GROOVE}).pack(side=LEFT, anchor=W)
+
+       # Set the logfile
+       log = LabeledEntry(sf, '     Logfile:', self.logfile, '14')
+       log.pack(side=RIGHT, anchor=E)
+
+       sf.pack(fill=X)
+       gf.pack(fill=X)
+
+    def GatherControls(self):
+       self.controls.daemon = self.daemon.get()
+       self.controls.foreground = self.foreground.get()
+       self.controls.logfile = self.logfile.get()
+       self.controls.syslog = self.syslog.get()
+
+#
+# Server editing stuff.
+#
+serverhelp = {
+    'title' : 'Server options help',
+    'banner': 'Server Options',
+    'text' : """
+The server options screen controls fetchmail 
+options that apply to one of your mailservers.
+
+Once you have a mailserver configuration set
+up as you like it, you can select `Save' to
+store it in the server list maintained in
+the main configuration window.
+
+If you wish to discard changes to a server 
+configuration, select `Quit'.
+"""}
+
+controlhelp = {
+    'title' : 'Run Control help',
+    'banner': 'Run Controls',
+    'text' : """
+If the `Poll normally' checkbox is on, the host is polled as part of
+the normal operation of fetchmail when it is run with no arguments.
+If it is off, fetchmail will only query this host when it is given as
+a command-line argument.
+
+The `True name of server' box should specify the actual DNS name
+to query. By default this is the same as the poll name.
+
+Normally each host described in the file is queried once each 
+poll cycle. If `Cycles to skip between polls' is greater than 0,
+that's the number of poll cycles that are skipped between the
+times this post is actually polled.
+
+The `Server timeout' is the number of seconds fetchmail will wait
+for a reply from the mailserver before concluding it is hung and
+giving up.
+"""}
+
+protohelp = {
+    'title' : 'Protocol and Port help',
+    'banner': 'Protocol and Port',
+    'text' : """
+These options control the remote-mail protocol
+and TCP/IP service port used to query this
+server.
+
+The `Protocol' button bar offers you a choice of
+all the different protocols available.  The `auto'
+protocol is a special mode that probes the host
+ports for POP3 and IMAP to see if either is
+available.
+
+Normally the TCP/IP service port to use is 
+dictated by the protocol choice.  The `Port'
+field lets you set a non-standard port.
+"""}
+
+sechelp = {
+    'title' : 'Security option help',
+    'banner': 'Security',
+    'text' : """
+These options control the security procedure used
+to protect mail transfer
+
+Normally the mail fetch is validated using an 
+ordinary password logon.  If your server speaks
+MIT Kerberos IV it is possible to pre-authenticate
+the exxchange with a Kerberos ticket.
+
+The `interface' and `monitor' options are available
+only for Linux systems.  See the fetchmail manual page
+for details on these.
+"""}
+
+multihelp = {
+    'title' : 'Multidrop option help',
+    'banner': 'Multidrop',
+    'text' : """
+These options are only useful with multidrop mode.
+See the manual page for extended discussion.
+"""}
+
+class ServerEdit(Frame):
+    def __init__(self, host, sitelist, master=None):
+       Frame.__init__(self, master)
+       Pack.config(self)
+       self.master.title('Fetchmail host ' + host);
+       self.master.iconname('Fetchmail host ' + host);
+       self.server = Server()
+       self.server.pollname = host
+       self.server.via = host
+       self.sitelist = sitelist
+       self.post()
+       self.createWidgets(host)
+
+    def post(self):
+       # we can't abstract this away, execs would happen in the wrong scope
+       for x in self.server.typemap:
+           target = "self." + x[0]
+           source = "self.server." + x[0]
+           if x[1] == 'Boolean':
+               exec target + " = BooleanVar(self)"
+               if eval(source):
+                   exec target + ".set(" + source + ")"
+           elif x[1] == 'String':
+               exec target + " = StringVar(self)"
+               if eval(source):
+                   exec target + ".set(" + source + ")"
+           elif x[1] == 'Int':
+               exec target + " = IntVar(self)"
+               if eval(source):
+                   exec target + ".set(" + source + ")"
+
+    def gather(self):
+       for x in self.server.typemap:
+           setattr(self.server, x[0], getattr(self, x[0]).get())
+
+    def nosave(self):
+       if ConfirmQuit(self, 'server option editing'):
+           Widget.destroy(self.master)
+
+    def save(self):
+       self.gather()
+       self.sitelist.append(self.server) 
+       Widget.destroy(self.master)
+
+    def refreshPort(self):
+       proto = self.protocol.get()
+       self.port.set(defaultports[proto])
+       if not proto in ("POP3", "APOP", "KPOP"): self.uidl = FALSE
+
+    def createWidgets(self, host):
+       topwin = Frame(self, relief=RAISED, bd=5)
+       Label(topwin, text="Server options for " + host).pack(side=TOP,pady=10)
+       Button(topwin, text='Save', fg='blue',
+               command=self.save).pack(side=LEFT)
+       Button(topwin, text='Quit', fg='blue',
+               command=self.nosave).pack(side=LEFT)
+       Button(topwin, text='Help', fg='blue',
+              command=lambda: helpwin(serverhelp)).pack(side=RIGHT)
+       topwin.pack(fill=X)
+
+       ctlwin = Frame(self, relief=RAISED, bd=5)
+       Label(ctlwin, text="Run Controls").pack(side=TOP)
+       Checkbutton(ctlwin, text='Poll ' + host + ' normally?', 
variable=self.active).pack(side=TOP)
+       LabeledEntry(ctlwin, 'True name of ' + host + ':',
+                     self.via, '30').pack(side=TOP, fill=X)
+       LabeledEntry(ctlwin, 'Cycles to skip between polls:',
+                     self.interval, '30').pack(side=TOP, fill=X)
+       LabeledEntry(ctlwin, 'Server timeout (seconds):',
+                     self.timeout, '30').pack(side=TOP, fill=X)
+       Button(ctlwin, text='Help', fg='blue',
+              command=lambda: helpwin(controlhelp)).pack(side=RIGHT)
+       ctlwin.pack(fill=X)
+
+       protwin = Frame(self, relief=RAISED, bd=5)
+       Label(protwin, text="Protocol and Port").pack(side=TOP)
+       pb = ButtonBar(protwin, 'Protocol:', self.protocol, protolist, 
self.refreshPort) 
+       LabeledEntry(protwin, 'TCP/IP service port to query:',
+                     self.port, '30').pack(side=TOP, fill=X)
+       Checkbutton(protwin,
+               text="Track seen POP3 messages with client-side UIDL list?",
+               variable=self.uidl).pack(side=TOP)   
+       Button(protwin, text='Help', fg='blue',
+              command=lambda: helpwin(protohelp)).pack(side=RIGHT)
+       protwin.pack(fill=X)
+
+       secwin = Frame(self, relief=RAISED, bd=5)
+       Label(secwin, text="Security").pack(side=TOP)
+       ButtonBar(secwin, 'Authorization mode:',
+                 self.auth, authlist, None).pack(side=TOP)
+
+       if os.popen("uname").readlines()[0] == 'Linux\n':
+           LabeledEntry(secwin, 'Interface to check before polling:',
+                        self.interface, '30').pack(side=TOP, fill=X)
+           LabeledEntry(secwin, 'IP addresses to watch for activity:',
+                        self.monitor, '30').pack(side=TOP, fill=X)
+
+       Button(secwin, text='Help', fg='blue',
+              command=lambda: helpwin(sechelp)).pack(side=RIGHT)
+       secwin.pack(fill=X)
+
+       mdropwin = Frame(self, relief=RAISED, bd=5)
+       Label(mdropwin, text="Multidrop options").pack(side=TOP)
+       LabeledEntry(mdropwin, 'Envelope address header:',
+                     self.envelope, '30').pack(side=TOP, fill=X)
+       Checkbutton(mdropwin, text="Enable multidrop DNS lookup?",
+                   variable=self.dns).pack(side=TOP)
+       Label(mdropwin, text="DNS aliases").pack(side=TOP)
+       ListEdit("New site alias: ", self.server.aka, None, mdropwin)
+       Label(mdropwin, text="Domains to be considered local").pack(side=TOP)
+       ListEdit("New local domain: ", self.server.localdomains, None,mdropwin)
+       Button(mdropwin, text='Help', fg='blue',
+              command=lambda: helpwin(multihelp)).pack(side=RIGHT)
+       mdropwin.pack(fill=X)
+
+       userwin = Frame(self, relief=RAISED, bd=5)
+       Label(userwin, text="User entries for " + host).pack(side=TOP)
+       ListEdit("New user: ", None, self.edituser, userwin)
+       userwin.pack(fill=X)
+
+    def edituser(self, user):
+       UserEdit(user, self.server.userlist, Toplevel())
+
+#
+# User editing stuff
+#
+
+userhelp = {
+    'title' : 'User option help',
+    'banner': 'User options',
+    'text' : """
+FIXME
+"""}
+
+class UserEdit(Frame):
+    def __init__(self, user, userlist, master=None):
+       Frame.__init__(self, master)
+       Pack.config(self)
+       self.master.title('Fetchmail user ' + user);
+       self.master.iconname('Fetchmail user ' + user);
+       self.user = User()
+       self.user.remote = user
+       self.user.localnames = [user]
+       self.userlist = userlist
+       self.post()
+       self.createWidgets(user)
+
+    def post(self):
+       # we can't abstract this away, execs would happen in the wrong scope
+       for x in self.user.typemap:
+           target = "self." + x[0]
+           source = "self.user." + x[0]
+           if x[1] == 'Boolean':
+               exec target + " = BooleanVar(self)"
+               if eval(source):
+                   exec target + ".set(" + source + ")"
+           elif x[1] == 'String':
+               exec target + " = StringVar(self)"
+               if eval(source):
+                   exec target + ".set(" + source + ")"
+           elif x[1] == 'Int':
+               exec target + " = IntVar(self)"
+               if eval(source):
+                   exec target + ".set(" + source + ")"
+
+    def gather(self):
+       for x in self.user.typemap:
+           setattr(self.user, x[0], getattr(self, x[0]).get())
+
+    def nosave(self):
+       if ConfirmQuit(self, 'user option editing'):
+           Widget.destroy(self.master)
+
+    def save(self):
+       self.gather()
+       self.userlist.append(self.user) 
+       Widget.destroy(self.master)
+
+    def createWidgets(self):
+       topwin = Frame(self, relief=RAISED, bd=5)
+       Label(topwin, 
+             text="User options for " + 
self.user.remote).pack(side=TOP,pady=10)
+       Button(topwin, text='Save', fg='blue',
+               command=self.save).pack(side=LEFT)
+       Button(topwin, text='Quit', fg='blue',
+               command=self.nosave).pack(side=LEFT)
+       Button(topwin, text='Help', fg='blue',
+              command=lambda: helpwin(userhelp)).pack(side=RIGHT)
+       topwin.pack(fill=X)
+
+       secwin = Frame(self, relief=RAISED, bd=5)
+       Label(secwin, text="Authentication").pack(side=TOP)
+       LabeledEntry(mdropwin, 'Password:',
+                     self.password, '30').pack(side=TOP, fill=X)
+       LabeledEntry(mdropwin, 'Remote folder:',
+                    self.folder, '30').pack(side=TOP, fill=X)
+       secwin.pack(fill=X)
+
+       names = Frame(self, relief=RAISED, bd=5)
+       Label(names, text="Local names").pack(side=TOP)
+       ListEdit("New local name: ", self.localnames, None, names)
+       names.pack(fill=X)
+
+       targwin = Frame(self, relief=RAISED, bd=5)
+       Label(targwin, text="Forwarding Options").pack(side=TOP)
+       LabeledEntry(targwin, 'System to forward to:',
+                    self.smtphost, '30').pack(side=TOP, fill=X)
+       LabeledEntry(targwin, 'Connection setup command:',
+                    self.preconnect, '30').pack(side=TOP, fill=X)
+       LabeledEntry(targwin, 'Connection wrapup command:',
+                    self.postconnect, '30').pack(side=TOP, fill=X)
+       LabeledEntry(targwin, 'Local delivery agent:',
+                    self.mda, '30').pack(side=TOP, fill=X)
+       targwin.pack(fill=X)
+
+       optwin = Frame(self, relief=RAISED, bd=5)
+       Checkbutton(optwin, "Suppress deletion of messages after reading",
+                   self.keep)
+       Checkbutton(optwin, "Flush seen messages before retrieval", 
+                   self.flush)
+       Checkbutton(optwin, "Fetch old messages as well as new",
+                   self.fetchall)
+       Checkbutton(optwin, "Rewrite To/Cc/Bcc messages to enable reply", 
+                   self.rewrite)
+       Checkbutton(optwin, "Force CR/LF at end of each line",
+                   self.forcecr)
+       Checkbutton(optwin, "Strip CR from end of eacgh line",
+                   self.stripcr)
+       Checkbutton(optwin, "Pass 8 bits even theough SMTP says 7BIT",
+                   self.pass8bits)
+       Checkbutton(optwin, "Drop Status lines from forwarded messages", 
+                   self.dropstatus)
+       optwin.pack(fill=X)
+
+       limwin = Frame(self, relief=RAISED, bd=5)
+       Label(limwin, text="Resource Limits").pack(side=TOP)
+       LabeledEntry(limwin, 'Message size limit:',
+                     self.limit, '30').pack(side=TOP, fill=X)
+       LabeledEntry(limwin, 'Maximum messages to fetch each poll:',
+                     self.fetchlimit, '30').pack(side=TOP, fill=X)
+       LabeledEntry(limwin, 'Maximum messages to forward each poll:',
+                     self.batchlimit, '30').pack(side=TOP, fill=X)
+       limwin.pack(fill=X)
+
+#
+# Configure drives the configuration dialogue.  It may call multiple
+# instances of ServerEdit to do its job.
+#
+
+class Configure(Frame, ControlEdit):
+    def __init__(self, master=None):
+       Frame.__init__(self, master)
+       self.master.title('fetchmail configurator');
+       self.master.iconname('fetchmail configurator');
+       Pack.config(self)
+       self.MakeDispose()
+       self.controls = Controls()
+       self.PostControls()
+       self.MakeSitelist(master)
+       self.sites = []
+
+    def MakeDispose(self):
+       # Set the disposal of the given configuration
+       dispose = Frame(self, relief=RAISED, bd=5);
+       Label(dispose,
+               text='Configurator Controls', 
+               bd=2).pack(side=TOP, pady=10)
+       Button(dispose, text='Save', fg='blue',
+               command=self.save).pack(side=LEFT)
+       Button(dispose, text='Quit', fg='blue',
+               command=self.nosave).pack(side=LEFT)
+       Button(dispose, text='Help', fg='blue',
+              command=lambda: helpwin(confighelp)).pack(side=RIGHT)
+       dispose.pack(side=TOP, fill=X);
+
+    def MakeSitelist(self, master):
+       lf = Frame(master, relief=RAISED, bd=5)
+       Label(lf,
+             text='Remote Mail Server Configurations', 
+             bd=2).pack(side=TOP, pady=10)
+       ListEdit('New Server:', None, self.editsite, lf)
+       lf.pack(fill=X)
+
+    def editsite(self, site):
+       ServerEdit(site, self.sites, Toplevel())
+
+    def save(self):
+       self.GatherControls()
+       sys.stdout.write("# Configuration created %s\n" % 
time.ctime(time.time()))
+       sys.stdout.write(`self.controls`)
+       for site in self.sites:
+           sys.stdout.write(`site`)
+           for user in self.sites.userlist:
+               sys.stdout.write(`user`)
+       self.quit()
+
+    def nosave(self):
+       if ConfirmQuit(self, "configuration editor"):
+           self.quit()
+
+if __name__ == '__main__': 
+    ServerDefaults = Server()
+    UserDefaults = User()
+    Configure().mainloop()
+
+# The following sets edit modes for GNU EMACS
+# Local Variables:
+# mode:python
+# End:
diff --git a/test/etags/tex-src/gzip.texi b/test/etags/tex-src/gzip.texi
new file mode 100644
index 0000000..07be371
--- /dev/null
+++ b/test/etags/tex-src/gzip.texi
@@ -0,0 +1,479 @@
+\input texinfo @c -*-texinfo-*-
address@hidden %**start of header
address@hidden gzip.info
address@hidden Gzip User's Manual
address@hidden
address@hidden odd
address@hidden %**end of header
+
address@hidden
+This file documents the the GNU @code{gzip} command for compressing files.
+
+Copyright (C) 1992-1993 Jean-loup Gailly
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
address@hidden
+Permission is granted to process this file through TeX and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
address@hidden ignore
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Foundation.
address@hidden ifinfo
+
address@hidden
address@hidden gzip
address@hidden The data compression program
address@hidden Edition 1.2.4, for Gzip Version 1.2.4
address@hidden July 1993
address@hidden by Jean-loup Gailly
+
address@hidden
address@hidden 0pt plus 1filll
+Copyright @copyright{} 1992-1993 Jean-loup Gailly
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Foundation.
address@hidden titlepage
+
address@hidden Top, , , (dir)
+
address@hidden
+This file documents the @code{gzip} command to compress files.
address@hidden ifinfo
+
address@hidden
+* Copying::            How you can copy and share @code{gzip}.
+* Overview::           Preliminary information.
+* Sample::             Sample output from @code{gzip}.
+* Invoking gzip::      How to run @code{gzip}.
+* Advanced usage::     Concatenated files.
+* Environment::                The @code{GZIP} environment variable
+* Tapes::               Using @code{gzip} on tapes.
+* Problems::           Reporting bugs.
+* Concept Index::      Index of concepts.
address@hidden menu
+
address@hidden Copying, Overview, , Top
address@hidden gpl.texinfo
+
address@hidden Overview, Sample, Copying, Top
address@hidden Overview
address@hidden overview
+
address@hidden reduces the size of the named files using Lempel-Ziv coding
+(LZ77).  Whenever possible, each file is replaced by one with the
+extension @samp{.gz}, while keeping the same ownership modes, access and
+modification times.  (The default extension is @samp{-gz} for VMS,
address@hidden for MSDOS, OS/2 FAT and Atari.)  If no files are specified or
+if a file name is "-", the standard input is compressed to the standard
+output. @code{gzip} will only attempt to compress regular files.  In
+particular, it will ignore symbolic links.
+
+If the new file name is too long for its file system, @code{gzip}
+truncates it.  @code{gzip} attempts to truncate only the parts of the
+file name longer than 3 characters.  (A part is delimited by dots.) If
+the name consists of small parts only, the longest parts are truncated.
+For example, if file names are limited to 14 characters, gzip.msdos.exe
+is compressed to gzi.msd.exe.gz.  Names are not truncated on systems
+which do not have a limit on file name length.
+
+By default, @code{gzip} keeps the original file name and timestamp in
+the compressed file. These are used when decompressing the file with the
address@hidden option. This is useful when the compressed file name was
+truncated or when the time stamp was not preserved after a file
+transfer.
+
+Compressed files can be restored to their original form using @samp{gzip -d}
+or @code{gunzip} or @code{zcat}.  If the original name saved in the
+compressed file is not suitable for its file system, a new name is
+constructed from the original one to make it legal.
+
address@hidden takes a list of files on its command line and replaces
+each file whose name ends with @samp{.gz}, @samp{.z}, @samp{.Z},
address@hidden, @samp{-z} or @samp{_z} and which begins with the correct
+magic number with an uncompressed file without the original extension.
address@hidden also recognizes the special extensions @samp{.tgz} and
address@hidden as shorthands for @samp{.tar.gz} and @samp{.tar.Z}
+respectively. When compressing, @code{gzip} uses the @samp{.tgz}
+extension if necessary instead of truncating a file with a @samp{.tar}
+extension.
+
address@hidden can currently decompress files created by @code{gzip},
address@hidden, @code{compress} or @code{pack}. The detection of the input
+format is automatic.  When using the first two formats, @code{gunzip}
+checks a 32 bit CRC (cyclic redundancy check). For @code{pack},
address@hidden checks the uncompressed length. The @code{compress} format
+was not designed to allow consistency checks. However @code{gunzip} is
+sometimes able to detect a bad @samp{.Z} file. If you get an error when
+uncompressing a @samp{.Z} file, do not assume that the @samp{.Z} file is
+correct simply because the standard @code{uncompress} does not complain.
+This generally means that the standard @code{uncompress} does not check
+its input, and happily generates garbage output.  The SCO @samp{compress
+-H} format (@code{lzh} compression method) does not include a CRC but
+also allows some consistency checks.
+
+Files created by @code{zip} can be uncompressed by @code{gzip} only if
+they have a single member compressed with the 'deflation' method. This
+feature is only intended to help conversion of @code{tar.zip} files to
+the @code{tar.gz} format. To extract @code{zip} files with several
+members, use @code{unzip} instead of @code{gunzip}.
+
address@hidden is identical to @samp{gunzip -c}.  @code{zcat}
+uncompresses either a list of files on the command line or its standard
+input and writes the uncompressed data on standard output.  @code{zcat}
+will uncompress files that have the correct magic number whether they
+have a @samp{.gz} suffix or not.
+
address@hidden uses the Lempel-Ziv algorithm used in @code{zip} and PKZIP.
+The amount of compression obtained depends on the size of the input and
+the distribution of common substrings.  Typically, text such as source
+code or English is reduced by 60-70%.  Compression is generally much
+better than that achieved by LZW (as used in @code{compress}), Huffman
+coding (as used in @code{pack}), or adaptive Huffman coding
+(@code{compact}).
+
+Compression is always performed, even if the compressed file is slightly
+larger than the original. The worst case expansion is a few bytes for
+the @code{gzip} file header, plus 5 bytes every 32K block, or an expansion
+ratio of 0.015% for large files. Note that the actual number of used
+disk blocks almost never increases. @code{gzip} preserves the mode,
+ownership and timestamps of files when compressing or decompressing.
+
address@hidden Sample, Invoking gzip, Overview, Top
address@hidden Sample Output
address@hidden sample
+
+Here are some realistic examples of running @code{gzip}.
+
+This is the output of the command @samp{gzip -h}:
+
address@hidden
+gzip 1.2.4 (18 Aug 93)
+usage: gzip [-cdfhlLnNrtvV19] [-S suffix] [file ...]
+ -c --stdout      write on standard output, keep original files unchanged
+ -d --decompress  decompress
+ -f --force       force overwrite of output file and compress links
+ -h --help        give this help
+ -l --list        list compressed file contents
+ -L --license     display software license
+ -n --no-name     do not save or restore the original name and time stamp
+ -N --name        save or restore the original name and time stamp
+ -q --quiet       suppress all warnings
+ -r --recursive   operate recursively on directories
+ -S .suf  --suffix .suf     use suffix .suf on compressed files
+ -t --test        test compressed file integrity
+ -v --verbose     verbose mode
+ -V --version     display version number
+ -1 --fast        compress faster
+ -9 --best        compress better
+ file...          files to (de)compress. If none given, use standard input.
address@hidden example
+
+This is the output of the command @samp{gzip -v texinfo.tex}:
+
address@hidden
+texinfo.tex:             71.6% -- replaced with texinfo.tex.gz
address@hidden example
+
+The following command will find all @code{gzip} files in the current
+directory and subdirectories, and extract them in place without
+destroying the original:
+
address@hidden
+find . -name '*.gz' -print | sed 's/^\(.*\)[.]gz$/gunzip < "&" > "\1"/' | sh
address@hidden example
+
address@hidden Invoking gzip, Advanced usage, Sample, Top
address@hidden Invoking @code{gzip}
address@hidden invoking
address@hidden options
+
+The format for running the @code{gzip} program is:
+
address@hidden
+gzip @var{option} @dots{}
address@hidden example
+
address@hidden supports the following options:
+
address@hidden @samp
address@hidden --stdout
address@hidden --to-stdout
address@hidden -c
+Write output on standard output; keep original files unchanged.
+If there are several input files, the output consists of a sequence of
+independently compressed members. To obtain better compression,
+concatenate all input files before compressing them.
+
address@hidden --decompress
address@hidden --uncompress
address@hidden -d
+Decompress.
+
address@hidden --force
address@hidden -f
+Force compression or decompression even if the file has multiple links
+or the corresponding file already exists, or if the compressed data
+is read from or written to a terminal. If the input data is not in
+a format recognized by @code{gzip}, and if the option --stdout is also
+given, copy the input data without change to the standard ouput: let
address@hidden behave as @code{cat}. If @samp{-f} is not given, and
+when not running in the background, @code{gzip} prompts to verify
+whether an existing file should be overwritten.
+
address@hidden --help
address@hidden -h
+Print an informative help message describing the options then quit.
+
address@hidden --list
address@hidden -l
+For each compressed file, list the following fields:
+
address@hidden
+compressed size: size of the compressed file
+uncompressed size: size of the uncompressed file
+ratio: compression ratio (0.0% if unknown)
+uncompressed_name: name of the uncompressed file
address@hidden example
+
+The uncompressed size is given as @samp{-1} for files not in @code{gzip}
+format, such as compressed @samp{.Z} files. To get the uncompressed size for
+such a file, you can use:
+
address@hidden
+zcat file.Z | wc -c
address@hidden example
+
+In combination with the --verbose option, the following fields are also
+displayed:
+
address@hidden
+method: compression method (deflate,compress,lzh,pack)
+crc: the 32-bit CRC of the uncompressed data
+date & time: time stamp for the uncompressed file
address@hidden example
+
+The crc is given as ffffffff for a file not in gzip format.
+
+With --verbose, the size totals and compression ratio for all files
+is also displayed, unless some sizes are unknown. With --quiet,
+the title and totals lines are not displayed.
+
address@hidden --license
address@hidden -L
+Display the @code{gzip} license then quit.
+
address@hidden --no-name
address@hidden -n
+When compressing, do not save the original file name and time stamp by
+default. (The original name is always saved if the name had to be
+truncated.) When decompressing, do not restore the original file name
+if present (remove only the @code{gzip}
+suffix from the compressed file name) and do not restore the original
+time stamp if present (copy it from the compressed file). This option
+is the default when decompressing.
+
address@hidden --name
address@hidden -N
+When compressing, always save the original file name and time stamp; this
+is the default. When decompressing, restore the original file name and
+time stamp if present. This option is useful on systems which have
+a limit on file name length or when the time stamp has been lost after
+a file transfer.
+
address@hidden --quiet
address@hidden -q
+Suppress all warning messages.
+
address@hidden --recursive
address@hidden -r
+Travel the directory structure recursively. If any of the file names
+specified on the command line are directories, @code{gzip} will descend
+into the directory and compress all the files it finds there (or
+decompress them in the case of @code{gunzip}).
+
address@hidden --suffix @var{suf}
address@hidden -S @var{suf}
+Use suffix @address@hidden instead of @samp{.gz}. Any suffix can be
+given, but suffixes other than @samp{.z} and @samp{.gz} should be
+avoided to avoid confusion when files are transferred to other systems.
+A null suffix forces gunzip to try decompression on all given files
+regardless of suffix, as in:
+
address@hidden
+gunzip -S "" *        (*.* for MSDOS)
address@hidden example
+
+Previous versions of gzip used the @samp{.z} suffix. This was changed to
+avoid a conflict with @code{pack}.
+
address@hidden --test
address@hidden -t
+Test. Check the compressed file integrity.
+
address@hidden --verbose
address@hidden -v
+Verbose. Display the name and percentage reduction for each file compressed.
+
address@hidden --version
address@hidden -V
+Version. Display the version number and compilation options, then quit.
+
address@hidden --fast
address@hidden --best
address@hidden address@hidden
+Regulate the speed of compression using the specified digit @var{n},
+where @samp{-1} or @samp{--fast} indicates the fastest compression
+method (less compression) and @samp{--best} or @samp{-9} indicates the
+slowest compression method (optimal compression).  The default
+compression level is @samp{-6} (that is, biased towards high compression at
+expense of speed).
address@hidden table
+
address@hidden Advanced usage, Environment, Invoking gzip, Top
address@hidden Advanced usage
address@hidden concatenated files
+
+Multiple compressed files can be concatenated. In this case,
address@hidden will extract all members at once. If one member is
+damaged, other members might still be recovered after removal of the
+damaged member. Better compression can be usually obtained if all
+members are decompressed and then recompressed in a single step.
+
+This is an example of concatenating @code{gzip} files:
+
address@hidden
+gzip -c file1  > foo.gz
+gzip -c file2 >> foo.gz
address@hidden example
+
+Then
+
address@hidden
+gunzip -c foo
address@hidden example
+
+is equivalent to
+
address@hidden
+cat file1 file2
address@hidden example
+
+In case of damage to one member of a @samp{.gz} file, other members can
+still be recovered (if the damaged member is removed). However,
+you can get better compression by compressing all members at once:
+
address@hidden
+cat file1 file2 | gzip > foo.gz
address@hidden example
+
+compresses better than
+
address@hidden
+gzip -c file1 file2 > foo.gz
address@hidden example
+
+If you want to recompress concatenated files to get better compression, do:
+
address@hidden
+zcat old.gz | gzip > new.gz
address@hidden example
+
+If a compressed file consists of several members, the uncompressed
+size and CRC reported by the @samp{--list} option applies to the last member
+only. If you need the uncompressed size for all members, you can use:
+
address@hidden
+zcat file.gz | wc -c
address@hidden example
+
+If you wish to create a single archive file with multiple members so
+that members can later be extracted independently, use an archiver such
+as @code{tar} or @code{zip}. GNU @code{tar} supports the @samp{-z}
+option to invoke @code{gzip} transparently. @code{gzip} is designed as a
+complement to @code{tar}, not as a replacement.
+
address@hidden Environment, Tapes, Advanced usage, Top
address@hidden Environment
address@hidden Environment
+
+The environment variable @code{GZIP} can hold a set of default options for
address@hidden  These options are interpreted first and can be overwritten by
+explicit command line parameters.  For example:
+
address@hidden
+for sh:    GZIP="-8v --name"; export GZIP
+for csh:   setenv GZIP "-8v --name"
+for MSDOS: set GZIP=-8v --name
address@hidden example
+
+On Vax/VMS, the name of the environment variable is @code{GZIP_OPT}, to
+avoid a conflict with the symbol set for invocation of the program.
+
address@hidden Tapes, Problems, Environment, Top
address@hidden Using @code{gzip} on tapes
address@hidden tapes
+
+When writing compressed data to a tape, it is generally necessary to pad
+the output with zeroes up to a block boundary. When the data is read and
+the whole block is passed to @code{gunzip} for decompression,
address@hidden detects that there is extra trailing garbage after the
+compressed data and emits a warning by default. You have to use the
address@hidden option to suppress the warning. This option can be set in the
address@hidden environment variable, as in:
+
address@hidden
+for sh:    GZIP="-q"  tar -xfz --block-compress /dev/rst0
+for csh:   (setenv GZIP "-q"; tar -xfz --block-compress /dev/rst0)
address@hidden example
+
+In the above example, @code{gzip} is invoked implicitly by the @samp{-z}
+option of GNU @code{tar}.  Make sure that the same block size (@samp{-b}
+option of @code{tar}) is used for reading and writing compressed data on
+tapes.  (This example assumes you are using the GNU version of
address@hidden)
+
address@hidden Problems, Concept Index, Tapes, Top
address@hidden Reporting Bugs
address@hidden bugs
+
+If you find a bug in @code{gzip}, please send electronic mail to
address@hidden@samp{jloup@@chorus.fr}} or, if this fails, to
address@hidden@samp{bug-gnu-utils@@prep.ai.mit.edu}}.  Include the version 
number,
+which you can find by running @address@hidden -V}}.  Also include in your
+message the hardware and operating system, the compiler used to compile
address@hidden,
+a description of the bug behavior, and the input to @code{gzip} that triggered
+the address@hidden
+
address@hidden Concept Index, , Problems, Top
address@hidden Concept Index
+
address@hidden cp
+
address@hidden
address@hidden
diff --git a/test/etags/tex-src/nonewline.tex b/test/etags/tex-src/nonewline.tex
new file mode 100644
index 0000000..8cc01ce
--- /dev/null
+++ b/test/etags/tex-src/nonewline.tex
@@ -0,0 +1 @@
+% This comment does not end with newline
\ No newline at end of file
diff --git a/test/etags/tex-src/testenv.tex b/test/etags/tex-src/testenv.tex
new file mode 100644
index 0000000..efb83cb
--- /dev/null
+++ b/test/etags/tex-src/testenv.tex
@@ -0,0 +1,15 @@
+\documentclass[11pt]{report}
+\usepackage{verbatim,amsmath,amssymb,morehelp}
+
+\newcommand{\nm}[2]{\nomenclature{#1}{#2}}
+
+
+\begin{document}
+\section{blah}
+
+MAKE PICTURE
+
+To develop notation, we examine a few particular cases. 
+
+
+\end{document}
diff --git a/test/etags/tex-src/texinfo.tex b/test/etags/tex-src/texinfo.tex
new file mode 100644
index 0000000..203dca7
--- /dev/null
+++ b/test/etags/tex-src/texinfo.tex
@@ -0,0 +1,3350 @@
+%% TeX macros to handle texinfo files
+
+%   Copyright (C) 1985, 1986, 1988, 1990, 1991 Free Software Foundation, Inc.
+
+%This texinfo.tex file is free software; you can redistribute it and/or
+%modify it under the terms of the GNU General Public License as
+%published by the Free Software Foundation; either version 2, or (at
+%your option) any later version.
+
+%This texinfo.tex file is distributed in the hope that it will be
+%useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+%of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+%General Public License for more details.
+
+%You should have received a copy of the GNU General Public License
+%along with this texinfo.tex file; see the file COPYING.  If not, write
+%to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
+%USA.
+
+
+%In other words, you are welcome to use, share and improve this program.
+%You are forbidden to forbid anyone else to use, share and improve
+%what you give them.   Help stamp out software-hoarding!
+
+\def\texinfoversion{2.73}
+\message{Loading texinfo package [Version \texinfoversion]:}
+\message{}
+
+% Print the version number if in a .fmt file.
+\everyjob{\message{[Texinfo version \texinfoversion]}\message{}}
+
+% Save some parts of plain tex whose names we will redefine.
+
+\let\ptexlbrace=\{
+\let\ptexrbrace=\}
+\let\ptexdots=\dots
+\let\ptexdot=\.
+\let\ptexstar=\*
+\let\ptexend=\end
+\let\ptexbullet=\bullet
+\let\ptexb=\b
+\let\ptexc=\c
+\let\ptexi=\i
+\let\ptext=\t
+\let\ptexl=\l
+\let\ptexL=\L
+
+\def\tie{\penalty 10000\ }     % Save plain tex definition of ~.
+
+\message{Basics,}
+\chardef\other=12
+
+% If this character appears in an error message or help string, it
+% starts a new line in the output.
+\newlinechar = `^^J
+
+\hyphenation{ap-pen-dix}
+\hyphenation{mini-buf-fer mini-buf-fers}
+\hyphenation{eshell}
+
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen \bindingoffset  \bindingoffset=0pt
+\newdimen \normaloffset   \normaloffset=\hoffset
+\newdimen\pagewidth \newdimen\pageheight
+\pagewidth=\hsize \pageheight=\vsize
+
+% Sometimes it is convenient to have everything in the transcript file
+% and nothing on the terminal.  We don't just call \tracingall here,
+% since that produces some useless output on the terminal.
+%
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\def\loggingall{\tracingcommands2 \tracingstats2 
+   \tracingpages1 \tracingoutput1 \tracinglostchars1 
+   \tracingmacros2 \tracingparagraphs1 \tracingrestores1 
+   \showboxbreadth\maxdimen\showboxdepth\maxdimen
+}%
+
+%---------------------Begin change-----------------------
+%
+%%%% For @cropmarks command.
+% Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986
+%
+\newdimen\cornerlong \newdimen\cornerthick
+\newdimen \topandbottommargin
+\newdimen \outerhsize \newdimen \outervsize
+\cornerlong=1pc\cornerthick=.3pt       % These set size of cropmarks
+\outerhsize=7in
+%\outervsize=9.5in
+% Alternative @smallbook page size is 9.25in
+\outervsize=9.25in
+\topandbottommargin=.75in
+%
+%---------------------End change-----------------------
+
+% \onepageout takes a vbox as an argument.  Note that \pagecontents
+% does insertions itself, but you have to call it yourself.
+\chardef\PAGE=255  \output={\onepageout{\pagecontents\PAGE}}
+\def\onepageout#1{\hoffset=\normaloffset
+\ifodd\pageno  \advance\hoffset by \bindingoffset
+\else \advance\hoffset by -\bindingoffset\fi
+{\escapechar=`\\\relax % makes sure backslash is used in output files.
+\shipout\vbox{{\let\hsize=\pagewidth \makeheadline} \pagebody{#1}%
+{\let\hsize=\pagewidth \makefootline}}}%
+\advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
+
+%%%% For @cropmarks command %%%%
+
+% Here is a modification of the main output routine for Near East Publications
+% This provides right-angle cropmarks at all four corners.
+% The contents of the page are centerlined into the cropmarks,
+% and any desired binding offset is added as an \hskip on either
+% site of the centerlined box.  (P. A. MacKay, 12 November, 1986)
+%
+\def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up
+                \shipout
+                \vbox to \outervsize{\hsize=\outerhsize
+                 \vbox{\line{\ewtop\hfill\ewtop}}
+                 \nointerlineskip
+                 \line{\vbox{\moveleft\cornerthick\nstop}
+                       \hfill
+                       \vbox{\moveright\cornerthick\nstop}}
+                 \vskip \topandbottommargin
+                 \centerline{\ifodd\pageno\hskip\bindingoffset\fi
+                       \vbox{
+                       {\let\hsize=\pagewidth \makeheadline}
+                       \pagebody{#1}
+                       {\let\hsize=\pagewidth \makefootline}}
+                       \ifodd\pageno\else\hskip\bindingoffset\fi}
+                \vskip \topandbottommargin plus1fill minus1fill
+                 \boxmaxdepth\cornerthick
+                 \line{\vbox{\moveleft\cornerthick\nsbot}
+                       \hfill
+                       \vbox{\moveright\cornerthick\nsbot}}
+                 \nointerlineskip
+                 \vbox{\line{\ewbot\hfill\ewbot}}
+       }
+  \advancepageno 
+  \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
+%
+% Do @cropmarks to get crop marks
+\def\cropmarks{\let\onepageout=\croppageout }
+
+\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+{\catcode`\@ =11
+\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
address@hidden \unvbox#1
+\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
address@hidden \kern-\dimen@ \vfil \fi}
+}
+
+%
+% Here are the rules for the cropmarks.  Note that they are
+% offset so that the space between them is truly \outerhsize or \outervsize
+% (P. A. MacKay, 12 November, 1986)
+%
+\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
+\def\nstop{\vbox
+  {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
+\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
+\def\nsbot{\vbox
+  {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
+
+% Parse an argument, then pass it to #1.
+% The argument can be delimited with [...] or with "..." or braces
+% or it can be a whole line.
+% #1 should be a macro which expects
+% an ordinary undelimited TeX argument.
+
+\def\parsearg #1{\let\next=#1\begingroup\obeylines\futurelet\temp\parseargx}
+
+\def\parseargx{%
+\ifx \obeyedspace\temp \aftergroup\parseargdiscardspace \else%
+\aftergroup \parseargline %
+\fi \endgroup}
+
+{\obeyspaces %
+\gdef\parseargdiscardspace {\begingroup\obeylines\futurelet\temp\parseargx}}
+
+\gdef\obeyedspace{\ }
+
+\def\parseargline{\begingroup \obeylines \parsearglinex}
+{\obeylines %
+\gdef\parsearglinex #1^^M{\endgroup \next {#1}}}
+
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+
+%% These are used to keep @begin/@end levels from running away
+%% Call \inENV within environments (after a \begingroup)
+\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
+\def\ENVcheck{%
+\ifENV\errmessage{Still within an environment.  Type Return to continue.}
+\endgroup\fi} % This is not perfect, but it should reduce lossage
+
+% @begin foo  is the same as @foo, for now.
+\newhelp\EMsimple{Type <Return> to continue}
+
+\outer\def\begin{\parsearg\beginxxx}
+
+\def\beginxxx #1{%
+\expandafter\ifx\csname #1\endcsname\relax
+{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
+\csname #1\endcsname\fi}
+
+%% @end foo executes the definition of \Efoo.
+%% foo can be delimited by doublequotes or brackets.
+
+\def\end{\parsearg\endxxx}
+
+\def\endxxx #1{%
+\expandafter\ifx\csname E#1\endcsname\relax
+\expandafter\ifx\csname #1\endcsname\relax
+\errmessage{Undefined command @end #1}\else
+\errorE{#1}\fi\fi
+\csname E#1\endcsname}
+\def\errorE#1{
+{\errhelp=\EMsimple address@hidden #1 not within #1 environment}}}
+
+% Single-spacing is done by various environments.
+
+\newskip\singlespaceskip \singlespaceskip = \baselineskip
+\def\singlespace{%
+{\advance \baselineskip by -\singlespaceskip
+\kern \baselineskip}%
+\baselineskip=\singlespaceskip
+}
+
+%% Simple single-character @ commands
+
+% @@ prints an @
+% Kludge this until the fonts are right (grr).
address@hidden \char '100}}
+
+% Define @` and @' to be the same as ` and '
+% but suppressing ligatures.
+\def\`{{`}}
+\def\'{{'}}
+
+% Used to generate quoted braces.
+
+\def\mylbrace {{\tt \char '173}}
+\def\myrbrace {{\tt \char '175}}
+\let\{=\mylbrace
+\let\}=\myrbrace
+
+% @: forces normal size whitespace following.
+\def\:{\spacefactor=1000 }
+
+% @* forces a line break.
+\def\*{\hfil\break\hbox{}\ignorespaces}
+
+% @. is an end-of-sentence period.
+\def\.{.\spacefactor=3000 }
+
+% @w prevents a word break.  Without the \leavevmode, @w at the
+% beginning of a paragraph, when TeX is still in vertical mode, would
+% produce a whole line of output instead of starting the paragraph.
+\def\w#1{\leavevmode\hbox{#1}}
+
+% @group ... @end group forces ... to be all on one page, by enclosing
+% it in a TeX vbox.  We use \vtop instead of \vbox to construct the box
+% to keep its height that of a normal line.  According to the rules for
+% \topskip (p.114 of the TeXbook), the glue inserted is
+% max (\topskip - \ht (first item), 0).  If that height is large,
+% therefore, no glue is inserted, and the space between the headline and
+% the text is small, which looks bad.
+% 
+\def\group{\begingroup
+  \ifnum\catcode13=\active \else
+    \errhelp = \groupinvalidhelp
+    address@hidden invalid in context where filling is enabled}%
+  \fi
+  \def\Egroup{\egroup\endgroup}%
+  \vtop\bgroup
+}
+%
+% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+% message, so this ends up printing address@hidden can only ...'.
+% 
+\newhelp\groupinvalidhelp{%
+group can only be used in environments such as @example,^^J%
+where each line of input produces a line of output.}
+
+% @need space-in-mils
+% forces a page break if there is not space-in-mils remaining.
+
+\newdimen\mil  \mil=0.001in
+
+\def\need{\parsearg\needx}
+
+% Old definition--didn't work.
+%\def\needx #1{\par %
+%% This method tries to make TeX break the page naturally
+%% if the depth of the box does not fit.
+%{\baselineskip=0pt%
+%\vtop to #1\mil{\vfil}\kern -#1\mil\penalty 10000
+%\prevdepth=-1000pt
+%}}
+
+\def\needx#1{%
+  % Go into vertical mode, so we don't make a big box in the middle of a
+  % paragraph.
+  \par
+  %
+  % Don't add any leading before our big empty box, but allow a page
+  % break, since the best break might be right here.
+  \allowbreak
+  \nointerlineskip
+  \vtop to #1\mil{\vfil}%
+  % 
+  % TeX does not even consider page breaks if a penalty added to the
+  % main vertical list is 10000 or more.  But in order to see if the
+  % empty box we just added fits on the page, we must make it consider
+  % page breaks.  On the other hand, we don't want to actually break the
+  % page after the empty box.  So we use a penalty of 9999.
+  % 
+  % There is an extremely small chance that TeX will actually break the
+  % page at this \penalty, if there are no other feasible breakpoints in
+  % sight.  (If the user is using lots of big @group commands, which
+  % almost-but-not-quite fill up a page, TeX will have a hard time doing
+  % good page breaking, for example.)  However, I could not construct an
+  % example where a page broke at this \penalty; if it happens in a real
+  % document, then we can reconsider our strategy.
+  \penalty9999
+  %
+  % Back up by the size of the box, whether we did a page break or not.
+  \kern -#1\mil
+  %
+  % Do not allow a page break right after this kern.
+  \nobreak
+}
+
+% @br   forces paragraph break
+
+\let\br = \par
+
+% @dots{}  output some dots
+
+\def\dots{$\ldots$}
+
+% @page    forces the start of a new page
+
+\def\page{\par\vfill\supereject}
+
+% @exdent text....
+% outputs text on separate line in roman font, starting at standard page margin
+
+% This records the amount of indent in the innermost environment.
+% That's how much \exdent should take out.
+\newskip\exdentamount
+
+% This defn is used inside fill environments such as @defun.
+\def\exdent{\parsearg\exdentyyy}
+\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
+
+% This defn is used inside nofill environments such as @example.
+\def\nofillexdent{\parsearg\nofillexdentyyy}
+\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
+\leftline{\hskip\leftskip{\rm#1}}}}
+
+%\hbox{{\rm#1}}\hfil\break}}
+
+% @include file    insert text of that file as input.
+
+\def\include{\parsearg\includezzz}
+\def\includezzz #1{{\def\thisfile{#1}\input #1
+}}
+
+\def\thisfile{}
+
+% @center line   outputs that line, centered
+
+\def\center{\parsearg\centerzzz}
+\def\centerzzz #1{{\advance\hsize by -\leftskip
+\advance\hsize by -\rightskip
+\centerline{#1}}}
+
+% @sp n   outputs n lines of vertical space
+
+\def\sp{\parsearg\spxxx}
+\def\spxxx #1{\par \vskip #1\baselineskip}
+
+% @comment ...line which is ignored...
+% @c is the same as @comment
+% @ignore ... @end ignore  is another way to write a comment
+
+\def\comment{\catcode 64=\other \catcode 123=\other \catcode 125=\other%
+\parsearg \commentxxx}
+
+\def\commentxxx #1{\catcode 64=0 \catcode 123=1 \catcode 125=2 }
+
+\let\c=\comment
+
+% Prevent errors for section commands.
+% Used in @ignore and in failing conditionals.
+\def\ignoresections{%
+\let\chapter=\relax
+\let\unnumbered=\relax
+\let\top=\relax
+\let\unnumberedsec=\relax
+\let\unnumberedsection=\relax
+\let\unnumberedsubsec=\relax
+\let\unnumberedsubsection=\relax
+\let\unnumberedsubsubsec=\relax
+\let\unnumberedsubsubsection=\relax
+\let\section=\relax
+\let\subsec=\relax
+\let\subsubsec=\relax
+\let\subsection=\relax
+\let\subsubsection=\relax
+\let\appendix=\relax
+\let\appendixsec=\relax
+\let\appendixsection=\relax
+\let\appendixsubsec=\relax
+\let\appendixsubsection=\relax
+\let\appendixsubsubsec=\relax
+\let\appendixsubsubsection=\relax
+\let\contents=\relax
+\let\smallbook=\relax
+\let\titlepage=\relax
+}
+
+\def\ignore{\begingroup\ignoresections
+% Make sure that spaces turn into tokens that match what \ignorexxx wants.
+\catcode32=10
+\ignorexxx}
+\long\def\ignorexxx #1\end ignore{\endgroup\ignorespaces}
+
+\def\direntry{\begingroup\direntryxxx}
+\long\def\direntryxxx #1\end direntry{\endgroup\ignorespaces}
+
+% Conditionals to test whether a flag is set.
+
+\def\ifset{\begingroup\ignoresections\parsearg\ifsetxxx}
+
+\def\ifsetxxx #1{\endgroup
+\expandafter\ifx\csname IF#1\endcsname\relax \let\temp=\ifsetfail
+\else \let\temp=\relax \fi
+\temp}
+\def\Eifset{}
+\def\ifsetfail{\begingroup\ignoresections\ifsetfailxxx}
+\long\def\ifsetfailxxx #1\end ifset{\endgroup\ignorespaces}
+
+\def\ifclear{\begingroup\ignoresections\parsearg\ifclearxxx}
+
+\def\ifclearxxx #1{\endgroup
+\expandafter\ifx\csname IF#1\endcsname\relax \let\temp=\relax
+\else \let\temp=\ifclearfail \fi
+\temp}
+\def\Eifclear{}
+\def\ifclearfail{\begingroup\ignoresections\ifclearfailxxx}
+\long\def\ifclearfailxxx #1\end ifclear{\endgroup\ignorespaces}
+
+% @set foo     to set the flag named foo.
+% @clear foo   to clear the flag named foo.
+\def\set{\parsearg\setxxx}
+\def\setxxx #1{
+\expandafter\let\csname IF#1\endcsname=\set}
+
+\def\clear{\parsearg\clearxxx}
+\def\clearxxx #1{
+\expandafter\let\csname IF#1\endcsname=\relax}
+
+% Some texinfo constructs that are trivial in tex
+
+\def\iftex{}
+\def\Eiftex{}
+\def\ifinfo{\begingroup\ignoresections\ifinfoxxx}
+\long\def\ifinfoxxx #1\end ifinfo{\endgroup\ignorespaces}
+
+\long\def\menu #1\end menu{}
+\def\asis#1{#1}
+
+% @math means output in math mode.
+% We don't use $'s directly in the definition of \math because control
+% sequences like \math are expanded when the toc file is written.  Then,
+% we read the toc file back, the $'s will be normal characters (as they
+% should be, according to the definition of Texinfo).  So we must use a
+% control sequence to switch into and out of math mode.
+% 
+% This isn't quite enough for @math to work properly in indices, but it
+% seems unlikely it will ever be needed there.
+% 
+\let\implicitmath = $
+\def\math#1{\implicitmath #1\implicitmath}
+
+\def\node{\ENVcheck\parsearg\nodezzz}
+\def\nodezzz#1{\nodexxx [#1,]}
+\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
+\let\lastnode=\relax
+
+\def\donoderef{\ifx\lastnode\relax\else
+\expandafter\expandafter\expandafter\setref{\lastnode}\fi
+\let\lastnode=\relax}
+
+\def\unnumbnoderef{\ifx\lastnode\relax\else
+\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi
+\let\lastnode=\relax}
+
+\def\appendixnoderef{\ifx\lastnode\relax\else
+\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi
+\let\lastnode=\relax}
+
+\let\refill=\relax
+  
+% @setfilename is done at the beginning of every texinfo file.
+% So open here the files we need to have open while reading the input.
+% This makes it possible to make a .fmt file for texinfo.
+\def\setfilename{%
+   \readauxfile
+   \opencontents
+   \openindices
+   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
+   \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
+   \comment % Ignore the actual filename.
+}
+
+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+\def\inforef #1{\inforefzzz #1,,,,**}
+\def\inforefzzz #1,#2,#3,#4**{See Info file \file{\losespace#3{}},
+  node \samp{\losespace#1{}}}
+\def\losespace #1{#1}
+
+\message{fonts,}
+
+% Font-change commands.
+
+% Texinfo supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf analogous to plain's \rm, etc.
+\newfam\sffam
+\def\sf{\fam=\sffam \tensf}
+\let\li = \sf % Sometimes we call it \li, not \sf.
+
+%% Try out Computer Modern fonts at \magstephalf
+\let\mainmagstep=\magstephalf
+
+\ifx\bigger\relax
+\let\mainmagstep=\magstep1
+\font\textrm=cmr12
+\font\texttt=cmtt12
+\else
+\font\textrm=cmr10 scaled \mainmagstep
+\font\texttt=cmtt10 scaled \mainmagstep
+\fi
+% Instead of cmb10, you many want to use cmbx10.
+% cmbx10 is a prettier font on its own, but cmb10
+% looks better when embedded in a line with cmr10.
+\font\textbf=cmb10 scaled \mainmagstep 
+\font\textit=cmti10 scaled \mainmagstep
+\font\textsl=cmsl10 scaled \mainmagstep
+\font\textsf=cmss10 scaled \mainmagstep
+\font\textsc=cmcsc10 scaled \mainmagstep
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+
+% A few fonts for @defun, etc.
+\font\defbf=cmbx10 scaled \magstep1 %was 1314
+\font\deftt=cmtt10 scaled \magstep1
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
+
+% Fonts for indices and small examples.
+% We actually use the slanted font rather than the italic, 
+% because texinfo normally uses the slanted fonts for that.
+% Do not make many font distinctions in general in the index, since they
+% aren't very useful.
+\font\ninett=cmtt9
+\font\indrm=cmr9
+\font\indit=cmsl9
+\let\indsl=\indit
+\let\indtt=\ninett
+\let\indsf=\indrm
+\let\indbf=\indrm
+\let\indsc=\indrm
+\font\indi=cmmi9
+\font\indsy=cmsy9
+
+% Fonts for headings
+\font\chaprm=cmbx12 scaled \magstep2
+\font\chapit=cmti12 scaled \magstep2
+\font\chapsl=cmsl12 scaled \magstep2
+\font\chaptt=cmtt12 scaled \magstep2
+\font\chapsf=cmss12 scaled \magstep2
+\let\chapbf=\chaprm
+\font\chapsc=cmcsc10 scaled\magstep3
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+
+\font\secrm=cmbx12 scaled \magstep1
+\font\secit=cmti12 scaled \magstep1
+\font\secsl=cmsl12 scaled \magstep1
+\font\sectt=cmtt12 scaled \magstep1
+\font\secsf=cmss12 scaled \magstep1
+\font\secbf=cmbx12 scaled \magstep1
+\font\secsc=cmcsc10 scaled\magstep2
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+
+% \font\ssecrm=cmbx10 scaled \magstep1    % This size an font looked bad.
+% \font\ssecit=cmti10 scaled \magstep1    % The letters were too crowded.
+% \font\ssecsl=cmsl10 scaled \magstep1
+% \font\ssectt=cmtt10 scaled \magstep1
+% \font\ssecsf=cmss10 scaled \magstep1
+
+%\font\ssecrm=cmb10 scaled 1315        % Note the use of cmb rather than cmbx.
+%\font\ssecit=cmti10 scaled 1315       % Also, the size is a little larger than
+%\font\ssecsl=cmsl10 scaled 1315       % being scaled magstep1.
+%\font\ssectt=cmtt10 scaled 1315
+%\font\ssecsf=cmss10 scaled 1315
+
+%\let\ssecbf=\ssecrm
+
+\font\ssecrm=cmbx12 scaled \magstephalf
+\font\ssecit=cmti12 scaled \magstephalf
+\font\ssecsl=cmsl12 scaled \magstephalf
+\font\ssectt=cmtt12 scaled \magstephalf
+\font\ssecsf=cmss12 scaled \magstephalf
+\font\ssecbf=cmbx12 scaled \magstephalf
+\font\ssecsc=cmcsc10 scaled \magstep1 
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled \magstep1
+% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
+% but that is not a standard magnification.
+
+% Fonts for title page:
+\font\titlerm = cmbx12 scaled \magstep3
+\let\authorrm = \secrm
+
+% In order for the font changes to affect most math symbols and letters,
+% we have to define the \textfont of the standard families.  Since
+% texinfo doesn't allow for producing subscripts and superscripts, we
+% don't bother to reset \scriptfont and \scriptscriptfont (which would
+% also require loading a lot more fonts).
+% 
+\def\resetmathfonts{%
+  \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy
+  \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf
+  \textfont\ttfam = \tentt \textfont\sffam = \tensf
+}
+
+
+% The font-changing commands redefine the meanings of \tenSTYLE, instead
+% of just \STYLE.  We do this so that font changes will continue to work
+% in math mode, where it is the current \fam that is relevant in most
+% cases, not the current.  Plain TeX does, for example,
+% \def\bf{\fam=\bffam \tenbf}  By redefining \tenbf, we obviate the need
+% to redefine \bf itself.  
+\def\textfonts{%
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
+  \resetmathfonts}
+\def\chapfonts{%
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl 
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
+  \resetmathfonts}
+\def\secfonts{%
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
+  \resetmathfonts}
+\def\subsecfonts{%
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
+  \resetmathfonts}
+\def\indexfonts{%
+  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
+  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
+  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy
+  \resetmathfonts}
+
+% Set up the default fonts, so we can use them for creating boxes.
+% 
+\textfonts
+
+% Count depth in font-changes, for error checks
+\newcount\fontdepth \fontdepth=0
+
+% Fonts for short table of contents.
+\font\shortcontrm=cmr12
+\font\shortcontbf=cmbx12
+\font\shortcontsl=cmsl12
+
+%% Add scribe-like font environments, plus @l for inline lisp (usually sans
+%% serif) and @ii for TeX italic
+
+% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
+% unless the following character is such as not to need one.
+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
+\def\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx}
+
+\let\i=\smartitalic
+\let\var=\smartitalic
+\let\dfn=\smartitalic
+\let\emph=\smartitalic
+\let\cite=\smartitalic
+
+\def\b#1{{\bf #1}}
+\let\strong=\b
+
+\def\t#1{{\tt \exhyphenpenalty=10000\rawbackslash \frenchspacing #1}\null}
+\let\ttfont = \t
+%\def\samp #1{`{\tt \rawbackslash \frenchspacing #1}'\null}
+\def\samp #1{`\tclose{#1}'\null}
+\def\key #1{{\tt \exhyphenpenalty=10000\uppercase{#1}}\null}
+\def\ctrl #1{{\tt \rawbackslash \hat}#1}
+
+\let\file=\samp
+
+% @code is a modification of @t,
+% which makes spaces the same size as normal in the surrounding text.
+\newdimen\tclosesave
+\newdimen\tcloserm
+\def\tclose#1{{\rm \tcloserm=\fontdimen2\font \tt \tclosesave=\fontdimen2\font
+\fontdimen2\font=\tcloserm
+% prevent breaking lines at hyphens.
+\exhyphenpenalty=10000
+\def\ {{\fontdimen2\font=\tclosesave{} }}%
+ \rawbackslash \frenchspacing #1\fontdimen2\font=\tclosesave}\null}
+\let\code=\tclose
+%\let\exp=\tclose  %Was temporary
+
+% @kbd is like @code, except that if the argument is just one @key command, 
+% then @kbd has no effect.
+
+\def\xkey{\key}
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+\ifx\one\xkey\ifx\threex\three \key{#2}%
+\else\tclose{\look}\fi
+\else\tclose{\look}\fi}
+
+% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
+% argument is to make the input look right: @dmn{pt} instead of
+% @dmn{}pt.
+% 
+\def\dmn#1{\thinspace #1}
+
+\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
+
+\def\l#1{{\li #1}\null}                % 
+
+\def\r#1{{\rm #1}}             % roman font
+% Use of \lowercase was suggested.
+\def\sc#1{{\smallcaps#1}}      % smallcaps font
+\def\ii#1{{\it #1}}            % italic font
+
+\message{page headings,}
+
+\newskip\titlepagetopglue \titlepagetopglue = 1.5in
+\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
+
+% First the title page.  Must do @settitle before @titlepage.
+\def\titlefont#1{{\titlerm #1}}
+
+\newtoks\realeverypar
+\newif\ifseenauthor
+\newif\iffinishedtitlepage
+
+\def\titlepage{\begingroup \parindent=0pt \textfonts
+   \let\subtitlerm=\tenrm
+% I deinstalled the following change because \cmr12 is undefined.
+% This change was not in the ChangeLog anyway.  --rms.
+%   \let\subtitlerm=\cmr12
+   \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
+   %
+   \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
+   %
+   % Leave some space at the very top of the page.
+   \vglue\titlepagetopglue
+   %
+   % Now you can print the title using @title.
+   \def\title{\parsearg\titlezzz}%
+   \def\titlezzz##1{\leftline{\titlefont{##1}}
+                   % print a rule at the page bottom also.
+                   \finishedtitlepagefalse
+                   \vskip4pt \hrule height 4pt \vskip4pt}%
+   % No rule at page bottom unless we print one at the top with @title.
+   \finishedtitlepagetrue
+   %
+   % Now you can put text using @subtitle.
+   \def\subtitle{\parsearg\subtitlezzz}%
+   \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
+   %
+   % @author should come last, but may come many times.
+   \def\author{\parsearg\authorzzz}%
+   \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
+      {\authorfont \leftline{##1}}}%
+   %  
+   % Most title ``pages'' are actually two pages long, with space
+   % at the top of the second.  We don't want the ragged left on the second.
+   \let\oldpage = \page
+   \def\page{%
+      \iffinishedtitlepage\else
+        \finishtitlepage
+      \fi
+      \oldpage
+      \let\page = \oldpage
+      \hbox{}}%
+%   \def\page{\oldpage \hbox{}}
+}
+
+\def\Etitlepage{%
+   \iffinishedtitlepage\else
+      \finishtitlepage
+   \fi
+   % It is important to do the page break before ending the group,
+   % because the headline and footline are only empty inside the group.
+   % If we use the new definition of \page, we always get a blank page
+   % after the title page, which we certainly don't want.
+   \oldpage
+   \endgroup
+   \HEADINGSon
+}
+
+\def\finishtitlepage{%
+   \vskip4pt \hrule height 2pt
+   \vskip\titlepagebottomglue
+   \finishedtitlepagetrue
+}
+
+%%% Set up page headings and footings.
+
+\let\thispage=\folio
+
+\newtoks \evenheadline    % Token sequence for heading line of even pages
+\newtoks \oddheadline     % Token sequence for heading line of odd pages
+\newtoks \evenfootline    % Token sequence for footing line of even pages
+\newtoks \oddfootline     % Token sequence for footing line of odd pages
+
+% Now make Tex use those variables
+\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
+                            \else \the\evenheadline \fi}}
+\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
+                            \else \the\evenfootline \fi}\HEADINGShook}
+\let\HEADINGShook=\relax
+
+% Commands to set those variables.
+% For example, this is what  @headings on  does
+% @evenheading @thistitle|@thispage|@thischapter
+% @oddheading @thischapter|@thispage|@thistitle
+% @evenfooting @thisfile||
+% @oddfooting ||@thisfile
+
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\everyheading{\parsearg\everyheadingxxx}
+
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\everyfooting{\parsearg\everyfootingxxx}
+
address@hidden %
+
+\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
+\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
+\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
+\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
+\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\gdef\everyheadingxxx #1{\everyheadingyyy #1@|@|@|@|\finish}
+\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{%
+\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
+\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
+\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
+\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
+\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\gdef\everyfootingxxx #1{\everyfootingyyy #1@|@|@|@|\finish}
+\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{%
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
+\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+%
+}% unbind the catcode of @.
+
+% @headings double     turns headings on for double-sided printing.
+% @headings single     turns headings on for single-sided printing.
+% @headings off                turns them off.
+% @headings on         same as @headings double, retained for compatibility.
+% @headings after      turns on double-sided headings after this page.
+% @headings doubleafter        turns on double-sided headings after this page.
+% @headings singleafter turns on single-sided headings after this page.
+% By default, they are off.
+
+\def\headings #1 {\csname HEADINGS#1\endcsname}
+
+\def\HEADINGSoff{
+\global\evenheadline={\hfil} \global\evenfootline={\hfil}
+\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
+\HEADINGSoff
+% When we turn headings on, set the page number to 1.
+% For double-sided printing, put current file name in lower left corner,
+% chapter name on inside top of right hand pages, document
+% title on inside top of left hand pages, and page numbers on outside top
+% edge of all pages.
+\def\HEADINGSdouble{
+%\pagealignmacro
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+}
+% For single-sided printing, chapter title goes across top left of page,
+% page number on top right.
+\def\HEADINGSsingle{
+%\pagealignmacro
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+}
+\def\HEADINGSon{\HEADINGSdouble}
+
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
+\let\HEADINGSdoubleafter=\HEADINGSafter
+\def\HEADINGSdoublex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+}
+
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
+\def\HEADINGSsinglex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+}
+
+% Subroutines used in generating headings
+% Produces Day Month Year style of output.
+\def\today{\number\day\space
+\ifcase\month\or
+January\or February\or March\or April\or May\or June\or
+July\or August\or September\or October\or November\or December\fi
+\space\number\year}
+
+% Use this if you want the Month Day, Year style of output.
+%\def\today{\ifcase\month\or
+%January\or February\or March\or April\or May\or June\or
+%July\or August\or September\or October\or November\or December\fi
+%\space\number\day, \number\year}
+
+% @settitle line...  specifies the title of the document, for headings
+% It generates no output of its own
+
+\def\thistitle{No Title}
+\def\settitle{\parsearg\settitlezzz}
+\def\settitlezzz #1{\gdef\thistitle{#1}}
+
+\message{tables,}
+
+% @tabs -- simple alignment
+
+% These don't work.  For one thing, \+ is defined as outer.
+% So these macros cannot even be defined.
+
+%\def\tabs{\parsearg\tabszzz}
+%\def\tabszzz #1{\settabs\+#1\cr}
+%\def\tabline{\parsearg\tablinezzz}
+%\def\tablinezzz #1{\+#1\cr}
+%\def\&{&}
+
+% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
+
+% default indentation of table text
+\newdimen\tableindent \tableindent=.8in
+% default indentation of @itemize and @enumerate text
+\newdimen\itemindent  \itemindent=.3in
+% margin between end of table item and start of table text.
+\newdimen\itemmargin  \itemmargin=.1in
+
+% used internally for \itemindent minus \itemmargin
+\newdimen\itemmax
+
+% Note @table, @vtable, and @vtable define @item, @itemx, etc., with
+% these defs.
+% They also define \itemindex
+% to index the item name in whatever manner is desired (perhaps none).
+
+\def\internalBitem{\smallbreak \parsearg\itemzzz}
+\def\internalBitemx{\par \parsearg\itemzzz}
+
+\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
+\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \par \parsearg\xitemzzz}
+
+\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
+\def\internalBkitemx{\par \parsearg\kitemzzz}
+
+\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
+                 \itemzzz {#1}}
+
+\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
+                 \itemzzz {#1}}
+
+\def\itemzzz #1{\begingroup %
+  \advance\hsize by -\rightskip
+  \advance\hsize by -\tableindent
+  \setbox0=\hbox{\itemfont{#1}}%
+  \itemindex{#1}%
+  \nobreak % This prevents a break before @itemx.
+  %
+  % Be sure we are not still in the middle of a paragraph.
+  \parskip=0in
+  \par
+  %
+  % If the item text does not fit in the space we have, put it on a line
+  % by itself, and do not allow a page break either before or after that
+  % line.  We do not start a paragraph here because then if the next
+  % command is, e.g., @kindex, the whatsit would get put into the
+  % horizontal list on a line by itself, resulting in extra blank space.
+  \ifdim \wd0>\itemmax
+    \setbox0=\hbox{\hskip \leftskip \hskip -\tableindent \unhbox0}\box0
+    \nobreak
+  \else
+    % The item text fits into the space.  Start a paragraph, so that the
+    % following text (if any) will end up on the same line.  Since that
+    % text will be indented by \tableindent, we make the item text be in
+    % a zero-width box.
+    \noindent
+    \rlap{\hskip -\tableindent\box0}%
+  \fi
+  \endgroup
+}
+
address@hidden while not in a table}}
address@hidden while not in a table}}
address@hidden while not in a table}}
address@hidden while not in a table}}
address@hidden while not in a table}}
address@hidden while not in a table}}
+
+%% Contains a kludge to get @end[description] to work
+\def\description{\tablez{\dontindex}{1}{}{}{}{}}
+
+\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
+{\obeylines\obeyspaces%
+\gdef\tablex #1^^M{%
+\tabley\dontindex#1        \endtabley}}
+
+\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
+{\obeylines\obeyspaces%
+\gdef\ftablex #1^^M{%
+\tabley\fnitemindex#1        \endtabley
+\def\Eftable{\endgraf\endgroup\afterenvbreak}%
+\let\Etable=\relax}}
+
+\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
+{\obeylines\obeyspaces%
+\gdef\vtablex #1^^M{%
+\tabley\vritemindex#1        \endtabley
+\def\Evtable{\endgraf\endgroup\afterenvbreak}%
+\let\Etable=\relax}}
+
+\def\dontindex #1{}
+\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
+\def\vritemindex #1{\doind {vr}{\code{#1}}}%
+
+{\obeyspaces %
+\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
+\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
+
+\def\tablez #1#2#3#4#5#6{%
+\aboveenvbreak %
+\begingroup %
+\def\Edescription{\Etable}% Neccessary kludge.
+\let\itemindex=#1%
+\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
+\ifnum 0#4>0 \tableindent=#4\mil \fi %
+\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
+\def\itemfont{#2}%
+\itemmax=\tableindent %
+\advance \itemmax by -\itemmargin %
+\advance \leftskip by \tableindent %
+\exdentamount=\tableindent
+\parindent = 0pt
+\parskip = \smallskipamount
+\ifdim \parskip=0pt \parskip=2pt \fi%
+\def\Etable{\endgraf\endgroup\afterenvbreak}%
+\let\item = \internalBitem %
+\let\itemx = \internalBitemx %
+\let\kitem = \internalBkitem %
+\let\kitemx = \internalBkitemx %
+\let\xitem = \internalBxitem %
+\let\xitemx = \internalBxitemx %
+}
+
+% This is the counter used by @enumerate, which is really @itemize
+
+\newcount \itemno
+
+\def\itemize{\parsearg\itemizezzz}
+
+\def\itemizezzz #1{%
+  \begingroup % ended by the @end itemsize
+  \itemizey {#1}{\Eitemize}
+}
+
+\def\itemizey #1#2{%
+\aboveenvbreak %
+\itemmax=\itemindent %
+\advance \itemmax by -\itemmargin %
+\advance \leftskip by \itemindent %
+\exdentamount=\itemindent
+\parindent = 0pt %
+\parskip = \smallskipamount %
+\ifdim \parskip=0pt \parskip=2pt \fi%
+\def#2{\endgraf\endgroup\afterenvbreak}%
+\def\itemcontents{#1}%
+\let\item=\itemizeitem}
+
+\def\bullet{$\ptexbullet$}
+\def\minus{$-$}
+
+% Set sfcode to normal for the chars that usually have another value.
+% These are `.?!:;,'
+\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000
+  \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 }
+
+% \splitoff TOKENS\endmark defines \first to be the first token in
+% TOKENS, and \rest to be the remainder.
+% 
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
+
+% Allow an optional argument of an uppercase letter, lowercase letter,
+% or number, to specify the first label in the enumerated list.  No
+% argument is the same as `1'.
+% 
+\def\enumerate{\parsearg\enumeratezzz}
+\def\enumeratezzz #1{\enumeratey #1  \endenumeratey}
+\def\enumeratey #1 #2\endenumeratey{%
+  \begingroup % ended by the @end enumerate
+  %
+  % If we were given no argument, pretend we were given `1'.
+  \def\thearg{#1}%
+  \ifx\thearg\empty \def\thearg{1}\fi
+  %
+  % Detect if the argument is a single token.  If so, it might be a
+  % letter.  Otherwise, the only valid thing it can be is a number.
+  % (We will always have one token, because of the test we just made.
+  % This is a good thing, since \splitoff doesn't work given nothing at
+  % all -- the first parameter is undelimited.)
+  \expandafter\splitoff\thearg\endmark
+  \ifx\rest\empty
+    % Only one token in the argument.  It could still be anything.
+    % A ``lowercase letter'' is one whose \lccode is nonzero.
+    % An ``uppercase letter'' is one whose \lccode is both nonzero, and
+    %   not equal to itself.
+    % Otherwise, we assume it's a number.
+    % 
+    % We need the \relax at the end of the \ifnum lines to stop TeX from
+    % continuing to look for a <number>.
+    % 
+    \ifnum\lccode\expandafter`\thearg=0\relax 
+      \numericenumerate % a number (we hope)
+    \else
+      % It's a letter.
+      \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
+        \lowercaseenumerate % lowercase letter
+      \else
+        \uppercaseenumerate % uppercase letter
+      \fi
+    \fi
+  \else
+    % Multiple tokens in the argument.  We hope it's a number.
+    \numericenumerate
+  \fi
+}
+
+% An @enumerate whose labels are integers.  The starting integer is
+% given in \thearg.
+% 
+\def\numericenumerate{%
+  \itemno = \thearg
+  \startenumeration{\the\itemno}%
+}
+
+% The starting (lowercase) letter is in \thearg.
+\def\lowercaseenumerate{%
+  \itemno = \expandafter`\thearg
+  \startenumeration{%
+    % Be sure we're not beyond the end of the alphabet.
+    \ifnum\itemno=0
+      \errmessage{No more lowercase letters in @enumerate; get a bigger
+                  alphabet}%
+    \fi
+    \char\lccode\itemno
+  }%
+}
+
+% The starting (uppercase) letter is in \thearg.
+\def\uppercaseenumerate{%
+  \itemno = \expandafter`\thearg
+  \startenumeration{%
+    % Be sure we're not beyond the end of the alphabet.
+    \ifnum\itemno=0
+      \errmessage{No more uppercase letters in @enumerate; get a bigger
+                  alphabet}
+    \fi
+    \char\uccode\itemno
+  }%
+}
+
+% Call itemizey, adding a period to the first argument and supplying the
+% common last two arguments.  Also subtract one from the initial value in
+% \itemno, since @item increments \itemno.
+% 
+\def\startenumeration#1{%
+  \advance\itemno by -1
+  \itemizey{#1.}\Eenumerate\flushcr
+}
+
+% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
+% to @enumerate.
+% 
+\def\alphaenumerate{\enumerate{a}}
+\def\capsenumerate{\enumerate{A}}
+\def\Ealphaenumerate{\Eenumerate}
+\def\Ecapsenumerate{\Eenumerate}
+
+% Definition of @item while inside @itemize.
+
+\def\itemizeitem{%
+\advance\itemno by 1
+{\let\par=\endgraf \smallbreak}%
+\ifhmode \errmessage{\in hmode at itemizeitem}\fi
+{\parskip=0in \hskip 0pt
+\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
+\vadjust{\penalty 1200}}%
+\flushcr}
+
+\message{indexing,}
+% Index generation facilities
+
+% Define \newwrite to be identical to plain tex's \newwrite
+% except not \outer, so it can be used within \newindex.
address@hidden
address@hidden@@n}}
+
+% \newindex {foo} defines an index named foo.
+% It automatically defines \fooindex such that
+% \fooindex ...rest of line... puts an entry in the index foo.
+% It also defines \fooindfile to be the number of the output channel for
+% the file that        accumulates this index.  The file's extension is foo.
+% The name of an index should be no more than 2 characters long
+% for the sake of vms.
+
+\def\newindex #1{
+\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
+\openout \csname#1indfile\endcsname \jobname.#1        % Open the file
+\expandafter\xdef\csname#1index\endcsname{%    % Define \xxxindex
+\noexpand\doindex {#1}}
+}
+
+% @defindex foo  ==  \newindex{foo}
+
+\def\defindex{\parsearg\newindex}
+
+% Define @defcodeindex, like @defindex except put all entries in @code.
+
+\def\newcodeindex #1{
+\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
+\openout \csname#1indfile\endcsname \jobname.#1        % Open the file
+\expandafter\xdef\csname#1index\endcsname{%    % Define \xxxindex
+\noexpand\docodeindex {#1}}
+}
+
+\def\defcodeindex{\parsearg\newcodeindex}
+
+% @synindex foo bar    makes index foo feed into index bar.
+% Do this instead of @defindex foo if you don't want it as a separate index.
+\def\synindex #1 #2 {%
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo
+\expandafter\xdef\csname#1index\endcsname{%    % Define \xxxindex
+\noexpand\doindex {#2}}%
+}
+
+% @syncodeindex foo bar   similar, but put all entries made for index foo
+% inside @code.
+\def\syncodeindex #1 #2 {%
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo
+\expandafter\xdef\csname#1index\endcsname{%    % Define \xxxindex
+\noexpand\docodeindex {#2}}%
+}
+
+% Define \doindex, the driver for all \fooindex macros.
+% Argument #1 is generated by the calling \fooindex macro,
+%  and it is "foo", the name of the index.
+
+% \doindex just uses \parsearg; it calls \doind for the actual work.
+% This is because \doind is more useful to call from other macros.
+
+% There is also \dosubind {index}{topic}{subtopic}
+% which makes an entry in a two-level index such as the operation index.
+
+\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
+\def\singleindexer #1{\doind{\indexname}{#1}}
+
+% like the previous two, but they put @code around the argument.
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
+\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+
+\def\indexdummies{%
+\def\_{{\realbackslash _}}%
+\def\w{\realbackslash w }%
+\def\bf{\realbackslash bf }%
+\def\rm{\realbackslash rm }%
+\def\sl{\realbackslash sl }%
+\def\sf{\realbackslash sf}%
+\def\tt{\realbackslash tt}%
+\def\gtr{\realbackslash gtr}%
+\def\less{\realbackslash less}%
+\def\hat{\realbackslash hat}%
+\def\char{\realbackslash char}%
+\def\TeX{\realbackslash TeX}%
+\def\dots{\realbackslash dots }%
+\def\copyright{\realbackslash copyright }%
+\def\tclose##1{\realbackslash tclose {##1}}%
+\def\code##1{\realbackslash code {##1}}%
+\def\samp##1{\realbackslash samp {##1}}%
+\def\t##1{\realbackslash r {##1}}%
+\def\r##1{\realbackslash r {##1}}%
+\def\i##1{\realbackslash i {##1}}%
+\def\b##1{\realbackslash b {##1}}%
+\def\cite##1{\realbackslash cite {##1}}%
+\def\key##1{\realbackslash key {##1}}%
+\def\file##1{\realbackslash file {##1}}%
+\def\var##1{\realbackslash var {##1}}%
+\def\kbd##1{\realbackslash kbd {##1}}%
+}
+
+% \indexnofonts no-ops all font-change commands.
+% This is used when outputting the strings to sort the index by.
+\def\indexdummyfont#1{#1}
+\def\indexdummytex{TeX}
+\def\indexdummydots{...}
+
+\def\indexnofonts{%
+\let\w=\indexdummyfont
+\let\t=\indexdummyfont
+\let\r=\indexdummyfont
+\let\i=\indexdummyfont
+\let\b=\indexdummyfont
+\let\emph=\indexdummyfont
+\let\strong=\indexdummyfont
+\let\cite=\indexdummyfont
+\let\sc=\indexdummyfont
+%Don't no-op \tt, since it isn't a user-level command
+% and is used in the definitions of the active chars like <, >, |...
+%\let\tt=\indexdummyfont
+\let\tclose=\indexdummyfont
+\let\code=\indexdummyfont
+\let\file=\indexdummyfont
+\let\samp=\indexdummyfont
+\let\kbd=\indexdummyfont
+\let\key=\indexdummyfont
+\let\var=\indexdummyfont
+\let\TeX=\indexdummytex
+\let\dots=\indexdummydots
+}
+
+% To define \realbackslash, we must make \ not be an escape.
+% We must first make another character (@) an escape
+% so we do not become unable to do a definition.
+
address@hidden \catcode`\\=\other
address@hidden@realbackslash{\}}
+
+\let\indexbackslash=0  %overridden during \printindex.
+
+\def\doind #1#2{%
+{\count10=\lastpenalty %
+{\indexdummies % Must do this here, since \bf, etc expand at this stage
+\escapechar=`\\%
+{\let\folio=0% Expand all macros now EXCEPT \folio
+\def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
+% so it will be output as is; and it will print as backslash in the indx.
+%
+% Now process the index-string once, with all font commands turned off,
+% to get the string to sort the index by.
+{\indexnofonts
+\xdef\temp1{#2}%
+}%
+% Now produce the complete index entry.  We process the index-string again,
+% this time with font commands expanded, to get what to print in the index.
+\edef\temp{%
+\write \csname#1indfile\endcsname{%
+\realbackslash entry {\temp1}{\folio}{#2}}}%
+\temp }%
+}\penalty\count10}}
+
+\def\dosubind #1#2#3{%
+{\count10=\lastpenalty %
+{\indexdummies % Must do this here, since \bf, etc expand at this stage
+\escapechar=`\\%
+{\let\folio=0%
+\def\rawbackslashxx{\indexbackslash}%
+%
+% Now process the index-string once, with all font commands turned off,
+% to get the string to sort the index by.
+{\indexnofonts
+\xdef\temp1{#2 #3}%
+}%
+% Now produce the complete index entry.  We process the index-string again,
+% this time with font commands expanded, to get what to print in the index.
+\edef\temp{%
+\write \csname#1indfile\endcsname{%
+\realbackslash entry {\temp1}{\folio}{#2}{#3}}}%
+\temp }%
+}\penalty\count10}}
+
+% The index entry written in the file actually looks like
+%  \entry {sortstring}{page}{topic}
+% or
+%  \entry {sortstring}{page}{topic}{subtopic}
+% The texindex program reads in these files and writes files
+% containing these kinds of lines:
+%  \initial {c}
+%     before the first topic whose initial is c
+%  \entry {topic}{pagelist}
+%     for a topic that is used without subtopics
+%  \primary {topic}
+%     for the beginning of a topic that is used with subtopics
+%  \secondary {subtopic}{pagelist}
+%     for each subtopic.
+
+% Define the user-accessible indexing commands 
+% @findex, @vindex, @kindex, @cindex.
+
+\def\findex {\fnindex}
+\def\kindex {\kyindex}
+\def\cindex {\cpindex}
+\def\vindex {\vrindex}
+\def\tindex {\tpindex}
+\def\pindex {\pgindex}
+
+\def\cindexsub {\begingroup\obeylines\cindexsub}
+{\obeylines %
+\gdef\cindexsub "#1" #2^^M{\endgroup %
+\dosubind{cp}{#2}{#1}}}
+
+% Define the macros used in formatting output of the sorted index material.
+
+% This is what you call to cause a particular index to get printed.
+% Write
+% @unnumbered Function Index
+% @printindex fn
+
+\def\printindex{\parsearg\doprintindex}
+
+\def\doprintindex#1{%
+  \tex
+  \dobreak \chapheadingskip {10000}
+  \catcode`\%=\other\catcode`\&=\other\catcode`\#=\other
+  \catcode`\$=\other\catcode`\_=\other
+  \catcode`\~=\other
+  %
+  % The following don't help, since the chars were translated
+  % when the raw index was written, and their fonts were discarded
+  % due to \indexnofonts.
+  %\catcode`\"=\active
+  %\catcode`\^=\active
+  %\catcode`\_=\active
+  %\catcode`\|=\active
+  %\catcode`\<=\active
+  %\catcode`\>=\active
+  % %
+  \def\indexbackslash{\rawbackslashxx}
+  \indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt
+  \begindoublecolumns
+  %
+  % See if the index file exists and is nonempty.
+  \openin 1 \jobname.#1s
+  \ifeof 1 
+    % \enddoublecolumns gets confused if there is no text in the index,
+    % and it loses the chapter title and the aux file entries for the
+    % index.  The easiest way to prevent this problem is to make sure
+    % there is some text.
+    (Index is nonexistent)
+    \else
+    %
+    % If the index file exists but is empty, then \openin leaves \ifeof
+    % false.  We have to make TeX try to read something from the file, so
+    % it can discover if there is anything in it.
+    \read 1 to \temp
+    \ifeof 1
+      (Index is empty)
+    \else
+      \input \jobname.#1s
+    \fi
+  \fi
+  \closein 1
+  \enddoublecolumns
+  \Etex
+}
+
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+
+% Same as \bigskipamount except no shrink.
+% \balancecolumns gets confused if there is any shrink.
+\newskip\initialskipamount \initialskipamount 12pt plus4pt
+
+\def\initial #1{%
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
+\ifdim\lastskip<\initialskipamount
+\removelastskip \penalty-200 \vskip \initialskipamount\fi
+\line{\secbf#1\hfill}\kern 2pt\penalty10000}}
+
+\def\entry #1#2{\begingroup
+  \parfillskip=0in \parskip=0in \parindent=0in
+  %
+  % \hangindent is only relevant when the page number and the entry text
+  % don't fit on one line.  In that case, bob suggests starting the dots
+  % pretty far over on the line.
+  % \hangafter is reset to 1 at the start of each paragraph.
+  \hangindent=.75\hsize
+  \noindent
+  %
+  % Don't break the text of the index entry.
+  \hbox{#1}%
+  %
+  % If we must, put the page number on a line of its own, and fill out
+  % this line with blank space.  (The \hfil is overwhelmed with the
+  % fill leaders glue in \indexdotfill if the page number does fit.)
+  \hfil\penalty50
+  \null\nobreak\indexdotfill % Have leaders before the page number.
+  %
+  % The `\ ' here is removed by the implicit \unskip that TeX does as
+  % part of (the primitive) \par.  Without, a spurious underfull \hbox ensues.
+  \ #2% The page number ends the paragraph.
+  \par
+\endgroup}
+
+% Like \dotfill except takes at least 1 em.
+\def\indexdotfill{\cleaders
+  \hbox{$\mathsurround=0pt \mkern1.5mu . \mkern1.5mu$}\hskip 1em plus 1fill}
+
+\def\primary #1{\line{#1\hfil}}
+
+\newskip\secondaryindent \secondaryindent=0.5cm
+
+\def\secondary #1#2{
+{\parfillskip=0in \parskip=0in
+\hangindent =1in \hangafter=1
+\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
+}}
+
+%% Define two-column mode, which is used in indexes.
+%% Adapted from the TeXBook, page 416
+\catcode address@hidden
+
+\newbox\partialpage
+
+\newdimen\doublecolumnhsize  \doublecolumnhsize = 3.11in
+\newdimen\doublecolumnvsize  \doublecolumnvsize = 19.1in
+\newdimen\availdimen@
+
+\def\begindoublecolumns{\begingroup
+  \output={\global\setbox\partialpage=
+    \vbox{\unvbox255\kern -\topskip \kern \baselineskip}}\eject
+  \output={\doublecolumnout}%
+  \hsize=\doublecolumnhsize \vsize=\doublecolumnvsize}
+\def\enddoublecolumns{\output={\balancecolumns}\eject
+  \endgroup \pagegoal=\vsize}
+
+\def\doublecolumnout{\splittopskip=\topskip \splitmaxdepth=\maxdepth
+  address@hidden \advance\dimen@ by-\ht\partialpage
+  \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+  \onepageout\pagesofar \unvbox255 \penalty\outputpenalty}
+\def\pagesofar{\unvbox\partialpage %
+  \hsize=\doublecolumnhsize % have to restore this since output routine
+%            changes it to set cropmarks (P. A. MacKay, 12 Nov. 1986)
+  \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}}
+\def\balancecolumns{%
+% Unset the glue.
+  \setbox255=\vbox{\unvbox255}
+  address@hidden
+  \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip
+  \divide\dimen@ by2
+  address@hidden \advance\availdimen@ by-\ht\partialpage
+% If the remaining data is too big for one page,
+% output one page normally, then work with what remains.
+  \ifdim \dimen@>\availdimen@
+   {
+     \splittopskip=\topskip \splitmaxdepth=\maxdepth
+     address@hidden \advance\dimen@ by-\ht\partialpage
+     \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+     \onepageout\pagesofar
+   }
+% Recompute size of what remains, in case we just output some of it.
+  address@hidden
+  \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip
+  \divide\dimen@ by2
+  \fi
+  \setbox0=\vbox{\unvbox255}
+  \splittopskip=\topskip
+  {\vbadness=10000 \loop \global\setbox3=\copy0
+    \global\setbox1=\vsplit3 to\dimen@
+    \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat}
+  \setbox0=\vbox address@hidden  \setbox2=\vbox address@hidden
+  \pagesofar}
+
+\catcode address@hidden
+\message{sectioning,}
+% Define chapters, sections, etc.
+
+\newcount \chapno
+\newcount \secno        \secno=0
+\newcount \subsecno     \subsecno=0
+\newcount \subsubsecno  \subsubsecno=0
+
+% This counter is funny since it counts through charcodes of letters A, B, ...
+\newcount \appendixno  \appendixno = `\@
+\def\appendixletter{\char\the\appendixno}
+
+\newwrite \contentsfile
+% This is called from \setfilename.
+\def\opencontents{\openout \contentsfile = \jobname.toc}
+
+% Each @chapter defines this as the name of the chapter.
+% page headings and footings can use it.  @section does likewise
+
+\def\thischapter{} \def\thissection{}
+\def\seccheck#1{\if \pageno<0 %
address@hidden not allowed after generating table of contents}\fi
+%
+}
+
+\def\chapternofonts{%
+\let\rawbackslash=\relax%
+\let\frenchspacing=\relax%
+\def\result{\realbackslash result}
+\def\equiv{\realbackslash equiv}
+\def\expansion{\realbackslash expansion}
+\def\print{\realbackslash print}
+\def\TeX{\realbackslash TeX}
+\def\dots{\realbackslash dots}
+\def\copyright{\realbackslash copyright}
+\def\tt{\realbackslash tt}
+\def\bf{\realbackslash bf }
+\def\w{\realbackslash w}
+\def\less{\realbackslash less}
+\def\gtr{\realbackslash gtr}
+\def\hat{\realbackslash hat}
+\def\char{\realbackslash char}
+\def\tclose##1{\realbackslash tclose {##1}}
+\def\code##1{\realbackslash code {##1}}
+\def\samp##1{\realbackslash samp {##1}}
+\def\r##1{\realbackslash r {##1}}
+\def\b##1{\realbackslash b {##1}}
+\def\key##1{\realbackslash key {##1}}
+\def\file##1{\realbackslash file {##1}}
+\def\kbd##1{\realbackslash kbd {##1}}
+% These are redefined because @smartitalic wouldn't work inside xdef.
+\def\i##1{\realbackslash i {##1}}
+\def\cite##1{\realbackslash cite {##1}}
+\def\var##1{\realbackslash var {##1}}
+\def\emph##1{\realbackslash emph {##1}}
+\def\dfn##1{\realbackslash dfn {##1}}
+}
+
+\def\thischaptername{No Chapter Title}
+\outer\def\chapter{\parsearg\chapterzzz}
+\def\chapterzzz #1{\seccheck{chapter}%
+\secno=0 \subsecno=0 \subsubsecno=0
+\global\advance \chapno by 1 \message{Chapter \the\chapno}%
+\chapmacro {#1}{\the\chapno}%
+\gdef\thissection{#1}%
+\gdef\thischaptername{#1}%
+% We don't substitute the actual chapter name into \thischapter
+% because we don't want its macros evaluated now.
+\xdef\thischapter{Chapter \the\chapno: \noexpand\thischaptername}%
+{\chapternofonts%
+\edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp  %
+\donoderef %
+\global\let\section = \numberedsec
+\global\let\subsection = \numberedsubsec
+\global\let\subsubsection = \numberedsubsubsec
+}}
+
+\outer\def\appendix{\parsearg\appendixzzz}
+\def\appendixzzz #1{\seccheck{appendix}%
+\secno=0 \subsecno=0 \subsubsecno=0
+\global\advance \appendixno by 1 \message{Appendix \appendixletter}%
+\chapmacro {#1}{Appendix \appendixletter}%
+\gdef\thissection{#1}%
+\gdef\thischaptername{#1}%
+\xdef\thischapter{Appendix \appendixletter: \noexpand\thischaptername}%
+{\chapternofonts%
+\edef\temp{{\realbackslash chapentry 
+  {#1}{Appendix \appendixletter}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp  %
+\appendixnoderef %
+\global\let\section = \appendixsec
+\global\let\subsection = \appendixsubsec
+\global\let\subsubsection = \appendixsubsubsec
+}}
+
+\outer\def\top{\parsearg\unnumberedzzz}
+\outer\def\unnumbered{\parsearg\unnumberedzzz}
+\def\unnumberedzzz #1{\seccheck{unnumbered}%
+\secno=0 \subsecno=0 \subsubsecno=0 \message{(#1)}
+\unnumbchapmacro {#1}%
+\gdef\thischapter{#1}\gdef\thissection{#1}%
+{\chapternofonts%
+\edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp  %
+\unnumbnoderef %
+\global\let\section = \unnumberedsec
+\global\let\subsection = \unnumberedsubsec
+\global\let\subsubsection = \unnumberedsubsubsec
+}}
+
+\outer\def\numberedsec{\parsearg\seczzz}
+\def\seczzz #1{\seccheck{section}%
+\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
+\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
+{\chapternofonts%
+\edef\temp{{\realbackslash secentry %
+{#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\donoderef %
+\penalty 10000 %
+}}
+
+\outer\def\appendixsection{\parsearg\appendixsectionzzz}
+\outer\def\appendixsec{\parsearg\appendixsectionzzz}
+\def\appendixsectionzzz #1{\seccheck{appendixsection}%
+\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
+\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
+{\chapternofonts%
+\edef\temp{{\realbackslash secentry %
+{#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\appendixnoderef %
+\penalty 10000 %
+}}
+
+\outer\def\unnumberedsec{\parsearg\unnumberedseczzz}
+\def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
+\plainsecheading {#1}\gdef\thissection{#1}%
+{\chapternofonts%
+\edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\unnumbnoderef %
+\penalty 10000 %
+}}
+
+\outer\def\numberedsubsec{\parsearg\numberedsubseczzz}
+\def\numberedsubseczzz #1{\seccheck{subsection}%
+\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
+\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
+{\chapternofonts%
+\edef\temp{{\realbackslash subsecentry %
+{#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\donoderef %
+\penalty 10000 %
+}}
+
+\outer\def\appendixsubsec{\parsearg\appendixsubseczzz}
+\def\appendixsubseczzz #1{\seccheck{appendixsubsec}%
+\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
+\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
+{\chapternofonts%
+\edef\temp{{\realbackslash subsecentry %
+{#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\appendixnoderef %
+\penalty 10000 %
+}}
+
+\outer\def\unnumberedsubsec{\parsearg\unnumberedsubseczzz}
+\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
+\plainsecheading {#1}\gdef\thissection{#1}%
+{\chapternofonts%
+\edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\unnumbnoderef %
+\penalty 10000 %
+}}
+
+\outer\def\numberedsubsubsec{\parsearg\numberedsubsubseczzz}
+\def\numberedsubsubseczzz #1{\seccheck{subsubsection}%
+\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
+\subsubsecheading {#1}
+  {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+{\chapternofonts%
+\edef\temp{{\realbackslash subsubsecentry %
+  {#1}
+  {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
+  {\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\donoderef %
+\penalty 10000 %
+}}
+
+\outer\def\appendixsubsubsec{\parsearg\appendixsubsubseczzz}
+\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}%
+\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
+\subsubsecheading {#1}
+  {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+{\chapternofonts%
+\edef\temp{{\realbackslash subsubsecentry{#1}%
+  {\appendixletter}
+  {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\appendixnoderef %
+\penalty 10000 %
+}}
+
+\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
+\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
+\plainsecheading {#1}\gdef\thissection{#1}%
+{\chapternofonts%
+\edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\unnumbnoderef %
+\penalty 10000 %
+}}
+
+% These are variants which are not "outer", so they can appear in @ifinfo.
+% Actually, they should now be obsolete; ordinary section commands should work.
+\def\infotop{\parsearg\unnumberedzzz}
+\def\infounnumbered{\parsearg\unnumberedzzz}
+\def\infounnumberedsec{\parsearg\unnumberedseczzz}
+\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
+\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
+
+\def\infoappendix{\parsearg\appendixzzz}
+\def\infoappendixsec{\parsearg\appendixseczzz}
+\def\infoappendixsubsec{\parsearg\appendixsubseczzz}
+\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
+
+\def\infochapter{\parsearg\chapterzzz}
+\def\infosection{\parsearg\sectionzzz}
+\def\infosubsection{\parsearg\subsectionzzz}
+\def\infosubsubsection{\parsearg\subsubsectionzzz}
+
+% These macros control what the section commands do, according
+% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+% Define them by default for a numbered chapter.
+\global\let\section = \numberedsec
+\global\let\subsection = \numberedsubsec
+\global\let\subsubsection = \numberedsubsubsec
+
+% Define @majorheading, @heading and @subheading
+
+% NOTE on use of \vbox for chapter headings, section headings, and
+% such:
+%      1) We use \vbox rather than the earlier \line to permit
+%         overlong headings to fold.
+%      2) \hyphenpenalty is set to 10000 because hyphenation in a
+%         heading is obnoxious; this forbids it.
+%       3) Likewise, headings look best if no \parindent is used, and
+%          if justification is not attempted.  Hence \raggedright.
+
+
+\def\majorheading{\parsearg\majorheadingzzz}
+\def\majorheadingzzz #1{%
+{\advance\chapheadingskip by 10pt \chapbreak }%
+{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                  \parindent=0pt\raggedright
+                  \rm #1\hfill}}\bigskip \par\penalty 200}
+
+\def\chapheading{\parsearg\chapheadingzzz}
+\def\chapheadingzzz #1{\chapbreak %
+{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                  \parindent=0pt\raggedright
+                  \rm #1\hfill}}\bigskip \par\penalty 200}
+
+\def\heading{\parsearg\secheadingi}
+
+\def\subheading{\parsearg\subsecheadingi}
+
+\def\subsubheading{\parsearg\subsubsecheadingi}
+
+% These macros generate a chapter, section, etc. heading only
+% (including whitespace, linebreaking, etc. around it),
+% given all the information in convenient, parsed form.
+
+%%% Args are the skip and penalty (usually negative)
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+
+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+
+%%% Define plain chapter starts, and page on/off switching for it
+% Parameter controlling skip before chapter headings (if needed)
+
+\newskip \chapheadingskip \chapheadingskip = 30pt plus 8pt minus 4pt
+
+\def\chapbreak{\dobreak \chapheadingskip {-4000}}
+\def\chappager{\par\vfill\supereject}
+\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
+
+\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
+
+\def\CHAPPAGoff{
+\global\let\pchapsepmacro=\chapbreak
+\global\let\pagealignmacro=\chappager}
+
+\def\CHAPPAGon{
+\global\let\pchapsepmacro=\chappager
+\global\let\pagealignmacro=\chappager
+\global\def\HEADINGSon{\HEADINGSsingle}}
+
+\def\CHAPPAGodd{
+\global\let\pchapsepmacro=\chapoddpage
+\global\let\pagealignmacro=\chapoddpage
+\global\def\HEADINGSon{\HEADINGSdouble}}
+
+\CHAPPAGon
+
+\def\CHAPFplain{
+\global\let\chapmacro=\chfplain
+\global\let\unnumbchapmacro=\unnchfplain}
+
+\def\chfplain #1#2{%
+  \pchapsepmacro
+  {%
+    \chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                     \parindent=0pt\raggedright
+                     \rm #2\enspace #1}%
+  }%
+  \bigskip
+  \penalty5000
+}
+
+\def\unnchfplain #1{%
+\pchapsepmacro %
+{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                  \parindent=0pt\raggedright
+                  \rm #1\hfill}}\bigskip \par\penalty 10000 %
+}
+\CHAPFplain % The default
+
+\def\unnchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                       \parindent=0pt\raggedright
+                       \rm #1\hfill}}\bigskip \par\penalty 10000 %
+}
+
+\def\chfopen #1#2{\chapoddpage {\chapfonts
+\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
+\par\penalty 5000 %
+}
+
+\def\CHAPFopen{
+\global\let\chapmacro=\chfopen
+\global\let\unnumbchapmacro=\unnchfopen}
+
+% Parameter controlling skip before section headings.
+
+\newskip \subsecheadingskip  \subsecheadingskip = 17pt plus 8pt minus 4pt
+\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
+
+\newskip \secheadingskip  \secheadingskip = 21pt plus 8pt minus 4pt
+\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
+
+% @paragraphindent  is defined for the Info formatting commands only.
+\let\paragraphindent=\comment
+
+% Section fonts are the base font at magstep2, which produces
+% a size a bit more than 14 points in the default situation.   
+
+\def\secheading #1#2#3{\secheadingi {#2.#3\enspace #1}}
+\def\plainsecheading #1{\secheadingi {#1}}
+\def\secheadingi #1{{\advance \secheadingskip by \parskip %
+\secheadingbreak}%
+{\secfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                 \parindent=0pt\raggedright
+                 \rm #1\hfill}}%
+\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 }
+
+
+% Subsection fonts are the base font at magstep1, 
+% which produces a size of 12 points.
+
+\def\subsecheading #1#2#3#4{\subsecheadingi {#2.#3.#4\enspace #1}}
+\def\subsecheadingi #1{{\advance \subsecheadingskip by \parskip %
+\subsecheadingbreak}%
+{\subsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                     \parindent=0pt\raggedright
+                     \rm #1\hfill}}%
+\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 }
+
+\def\subsubsecfonts{\subsecfonts} % Maybe this should change:
+                                 % Perhaps make sssec fonts scaled
+                                 % magstep half
+\def\subsubsecheading #1#2#3#4#5{\subsubsecheadingi {#2.#3.#4.#5\enspace #1}}
+\def\subsubsecheadingi #1{{\advance \subsecheadingskip by \parskip %
+\subsecheadingbreak}%
+{\subsubsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                       \parindent=0pt\raggedright
+                       \rm #1\hfill}}%
+\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000}
+
+
+\message{toc printing,}
+
+% Finish up the main text and prepare to read what we've written
+% to \contentsfile.
+
+\newskip\contentsrightmargin \contentsrightmargin=1in
+\def\startcontents#1{%
+   \pagealignmacro
+   \immediate\closeout \contentsfile
+   \ifnum \pageno>0
+      \pageno = -1             % Request roman numbered pages.
+   \fi
+   % Don't need to put `Contents' or `Short Contents' in the headline. 
+   % It is abundantly clear what they are.
+   \unnumbchapmacro{#1}\def\thischapter{}%
+   \begingroup                 % Set up to handle contents files properly.
+      \catcode`\\=0  \catcode`\{=1  \catcode`\}=2  address@hidden
+      \raggedbottom             % Worry more about breakpoints than the bottom.
+      \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+}
+
+  
+% Normal (long) toc.
+\outer\def\contents{%
+   \startcontents{Table of Contents}%
+      \input \jobname.toc
+   \endgroup
+   \vfill \eject
+}
+
+% And just the chapters.
+\outer\def\summarycontents{%
+   \startcontents{Short Contents}%
+      %
+      \let\chapentry = \shortchapentry
+      \let\unnumbchapentry = \shortunnumberedentry
+      % We want a true roman here for the page numbers.
+      \secfonts
+      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
+      \rm
+      \advance\baselineskip by 1pt % Open it up a little.
+      \def\secentry ##1##2##3##4{}
+      \def\unnumbsecentry ##1##2{}
+      \def\subsecentry ##1##2##3##4##5{}
+      \def\unnumbsubsecentry ##1##2{}
+      \def\subsubsecentry ##1##2##3##4##5##6{}
+      \def\unnumbsubsubsecentry ##1##2{}
+      \input \jobname.toc
+   \endgroup
+   \vfill \eject
+}
+\let\shortcontents = \summarycontents
+
+% These macros generate individual entries in the table of contents.
+% The first argument is the chapter or section name.
+% The last argument is the page number.
+% The arguments in between are the chapter number, section number, ...
+
+% Chapter-level things, for both the long and short contents.
+\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
+
+% See comments in \dochapentry re vbox and related settings
+\def\shortchapentry#1#2#3{%
+   \vbox{\hyphenpenalty=10000\tolerance=5000
+    \parindent=0pt\strut\raggedright
+    {#2\labelspace #1}\dotfill\doshortpageno{#3}}%
+}
+
+\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
+\def\shortunnumberedentry#1#2{%
+   \vbox{\hyphenpenalty=10000\tolerance=5000
+    \parindent=0pt\strut\raggedright
+    #1\dotfill\doshortpageno{#2}}%
+}
+
+% Sections.
+\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
+\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}}
+
+% Subsections.
+\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
+\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}}
+
+% And subsubsections.
+\def\subsubsecentry#1#2#3#4#5#6{%
+  \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
+\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
+
+
+% This parameter controls the indentation of the various levels.
+\newdimen\tocindent \tocindent = 3pc
+
+% Now for the actual typesetting. In all these, #1 is the text and #2 is the 
+% page number.
+%
+% If the toc has to be broken over pages, we would want to be at chapters 
+% if at all possible; hence the \penalty.
+\def\dochapentry#1#2{%
+   \penalty-300 \vskip\baselineskip
+   % This \vbox (and similar ones in dosecentry etc.) used to be a
+   % \line; changed to permit linebreaks for long headings.  See
+   % comments above \majorheading.  Here we also use \strut to
+   % keep the top end of the vbox from jamming up against the previous
+   % entry in the table of contents.
+   \vbox{\chapentryfonts
+     \hyphenpenalty=10000\tolerance=5000 % this line and next introduced
+     \parindent=0pt\strut\raggedright    % with \line -> \vbox change
+     #1\dotfill
+     \dopageno{#2}}%
+   \nobreak\vskip .25\baselineskip
+}
+
+\def\dosecentry#1#2{%
+   \vbox{\secentryfonts \leftskip=\tocindent
+    \hyphenpenalty=10000\tolerance=5000
+    \parindent=0pt\strut\raggedright #1\dotfill
+    \dopageno{#2}}%
+}
+
+\def\dosubsecentry#1#2{%
+   \vbox{\subsecentryfonts \leftskip=2\tocindent
+    \hyphenpenalty=10000\tolerance=5000
+    \parindent=0pt\strut\raggedright #1\dotfill
+    \dopageno{#2}}%
+}
+
+\def\dosubsubsecentry#1#2{%
+   \vbox{\subsubsecentryfonts \leftskip=3\tocindent
+    \hyphenpenalty=10000\tolerance=5000
+    \parindent=0pt\strut\raggedright #1\dotfill
+    \dopageno{#2}}%
+}
+
+% Space between chapter (or whatever) number and the title.
+\def\labelspace{\hskip1em \relax}
+
+\def\dopageno#1{{\rm #1}}
+\def\doshortpageno#1{{\rm #1}}
+
+\def\chapentryfonts{\secfonts \rm}
+\def\secentryfonts{\textfonts}
+\let\subsecentryfonts = \textfonts
+\let\subsubsecentryfonts = \textfonts
+
+
+\message{environments,}
+
+% Since these characters are used in examples, it should be an even number of 
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+% Furthermore, these definitions must come after we define our fonts.
+\newbox\dblarrowbox    \newbox\longdblarrowbox
+\newbox\pushcharbox    \newbox\bullbox
+\newbox\equivbox       \newbox\errorbox
+
+\let\ptexequiv = \equiv
+
+%{\tentt
+%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
+%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
+%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil}
+%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil}
+% Adapted from the manmac format (p.420 of TeXbook)
+%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width 
.85ex
+%                                      depth .1ex\hfil}
+%}
+
+\def\point{$\star$}
+
+\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+
+\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% Adapted from the TeXbook's \boxit.
+{\tentt \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
+
+\global\setbox\errorbox=\hbox to \dimen0{\hfil
+   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+   \advance\hsize by -2\dimen2 % Rules.
+   \vbox{
+      \hrule height\dimen2
+      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
+         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+         \kern3pt\vrule width\dimen2}% Space to right.
+      \hrule height\dimen2}
+    \hfil}
+
+% The @error{} command.
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+% @tex ... @end tex    escapes into raw Tex temporarily.
+% One exception: @ is still an escape character, so that @end tex works.
+% But \@ or @@ will get a plain tex @ character.
+
+\def\tex{\begingroup
+\catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+\catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
+\catcode `\%=14
+\catcode 43=12
+\catcode`\"=12
+\catcode`\==12
+\catcode`\|=12
+\catcode`\<=12
+\catcode`\>=12
+\escapechar=`\\
+%
+\let\{=\ptexlbrace
+\let\}=\ptexrbrace
+\let\.=\ptexdot
+\let\*=\ptexstar
+\let\dots=\ptexdots
address@hidden@}%
+\let\bullet=\ptexbullet
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl
+\let\L=\ptexL
+%
+\let\Etex=\endgroup}
+
+% Define @lisp ... @endlisp.
+% @lisp does a \begingroup so it can rebind things,
+% including the definition of @endlisp (which normally is erroneous).
+
+% Amount to narrow the margins by for @lisp.
+\newskip\lispnarrowing \lispnarrowing=0.4in
+
+% This is the definition that ^M gets inside @lisp
+% phr: changed space to \null, to avoid overfull hbox problems.
+{\obeyspaces%
+\gdef\lisppar{\null\endgraf}}
+
+% Cause \obeyspaces to make each Space cause a word-separation
+% rather than the default which is that it acts punctuation.
+% This is because space in tt font looks funny.
+{\obeyspaces %
+\gdef\sepspaces{\def {\ }}}
+
+\newskip\aboveenvskipamount \aboveenvskipamount= 0pt
+\def\aboveenvbreak{{\advance\aboveenvskipamount by \parskip
+\endgraf \ifdim\lastskip<\aboveenvskipamount
+\removelastskip \penalty-50 \vskip\aboveenvskipamount \fi}}
+
+\def\afterenvbreak{\endgraf \ifdim\lastskip<\aboveenvskipamount
+\removelastskip \penalty-50 \vskip\aboveenvskipamount \fi}
+
+% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins.
+\let\nonarrowing=\relax
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \cartouche: draw rectangle w/rounded corners around argument
+\font\circle=lcircle10
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+\circthick=\fontdimen8\circle
+%
+\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+\def\ctr{{\hskip 6pt\circle\char'010}}
+\def\cbl{{\circle\char'012\hskip -6pt}}
+\def\cbr{{\hskip 6pt\circle\char'011}}
+\def\carttop{\hbox to \cartouter{\hskip\lskip
+       \ctl\leaders\hrule height\circthick\hfil\ctr
+       \hskip\rskip}}
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
+       \cbl\leaders\hrule height\circthick\hfil\cbr
+       \hskip\rskip}}
+%
+\newskip\lskip\newskip\rskip
+
+\long\def\cartouche{%
+\begingroup
+       \lskip=\leftskip \rskip=\rightskip
+       \leftskip=0pt\rightskip=0pt %we want these *outside*.
+       \cartinner=\hsize \advance\cartinner by-\lskip 
+                         \advance\cartinner by-\rskip
+       \cartouter=\hsize
+       \advance\cartouter by 18pt % allow for 3pt kerns on either
+%                                   side, and for 6pt waste from
+%                                   each corner char
+       \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+       % Flag to tell @lisp, etc., not to narrow margin.
+       \let\nonarrowing=\comment
+       \vbox\bgroup
+               \baselineskip=0pt\parskip=0pt\lineskip=0pt
+               \carttop
+               \hbox\bgroup
+                       \hskip\lskip
+                       \vrule\kern3pt
+                       \vbox\bgroup
+                               \hsize=\cartinner
+                               \kern3pt
+                               \begingroup
+                                       \baselineskip=\normbskip
+                                       \lineskip=\normlskip
+                                       \parskip=\normpskip
+                                       \vskip -\parskip
+\def\Ecartouche{%
+                               \endgroup
+                               \kern3pt
+                       \egroup
+                       \kern3pt\vrule
+                       \hskip\rskip
+               \egroup
+               \cartbot
+       \egroup
+\endgroup
+}}     
+
+\def\lisp{\aboveenvbreak
+\begingroup\inENV % This group ends at the end of the @lisp body
+\hfuzz=12truept % Don't be fussy
+% Make spaces be word-separators rather than space tokens.
+\sepspaces %
+% Single space lines
+\singlespace %
+% The following causes blank lines not to be ignored
+% by adding a space to the end of each line.
+\let\par=\lisppar
+\def\Elisp{\endgroup\afterenvbreak}%
+\parskip=0pt
+% @cartouche defines \nonarrowing to inhibit narrowing
+% at next level down.
+\ifx\nonarrowing\relax
+\advance \leftskip by \lispnarrowing
+\exdentamount=\lispnarrowing
+\let\exdent=\nofillexdent
+\let\nonarrowing=\relax
+\fi
+\parindent=0pt
+\obeyspaces \obeylines \tt \rawbackslash
+\def\next##1{}\next}
+
+
+\let\example=\lisp
+\def\Eexample{\Elisp}
+
+\let\smallexample=\lisp
+\def\Esmallexample{\Elisp}
+
+% Macro for 9 pt. examples, necessary to print with 5" lines.
+% From address@hidden  This is not really used unless the
+% @smallbook command is given.
+
+\def\smalllispx{\aboveenvbreak\begingroup\inENV
+%                      This group ends at the end of the @lisp body
+\hfuzz=12truept % Don't be fussy
+% Make spaces be word-separators rather than space tokens.
+\sepspaces %
+% Single space lines
+\singlespace %
+% The following causes blank lines not to be ignored
+% by adding a space to the end of each line.
+\let\par=\lisppar
+\def\Esmalllisp{\endgroup\afterenvbreak}%
+%%%% Smaller baseline skip for small examples.
+\baselineskip 10pt
+\parskip=0pt
+% @cartouche defines \nonarrowing to inhibit narrowing
+% at next level down.
+\ifx\nonarrowing\relax
+\advance \leftskip by \lispnarrowing
+\exdentamount=\lispnarrowing
+\let\exdent=\nofillexdent
+\let\nonarrowing=\relax
+\fi
+\parindent=0pt
+\obeyspaces \obeylines \ninett \indexfonts \rawbackslash
+\def\next##1{}\next}
+
+% This is @display; same as @lisp except use roman font.
+
+\def\display{\begingroup\inENV %This group ends at the end of the @display body
+\aboveenvbreak
+% Make spaces be word-separators rather than space tokens.
+\sepspaces %
+% Single space lines
+\singlespace %
+% The following causes blank lines not to be ignored
+% by adding a space to the end of each line.
+\let\par=\lisppar
+\def\Edisplay{\endgroup\afterenvbreak}%
+\parskip=0pt
+% @cartouche defines \nonarrowing to inhibit narrowing
+% at next level down.
+\ifx\nonarrowing\relax
+\advance \leftskip by \lispnarrowing
+\exdentamount=\lispnarrowing
+\let\exdent=\nofillexdent
+\let\nonarrowing=\relax
+\fi
+\parindent=0pt
+\obeyspaces \obeylines
+\def\next##1{}\next}
+
+% This is @format; same as @lisp except use roman font and don't narrow margins
+
+\def\format{\begingroup\inENV %This group ends at the end of the @format body
+\aboveenvbreak
+% Make spaces be word-separators rather than space tokens.
+\sepspaces %
+\singlespace %
+% The following causes blank lines not to be ignored
+% by adding a space to the end of each line.
+\let\par=\lisppar
+\def\Eformat{\endgroup\afterenvbreak}
+\parskip=0pt \parindent=0pt
+\obeyspaces \obeylines
+\def\next##1{}\next}
+
+% @flushleft and @flushright
+
+\def\flushleft{%
+\begingroup\inENV %This group ends at the end of the @format body
+\aboveenvbreak
+% Make spaces be word-separators rather than space tokens.
+\sepspaces %
+% The following causes blank lines not to be ignored
+% by adding a space to the end of each line.
+% This also causes @ to work when the directive name
+% is terminated by end of line.
+\let\par=\lisppar
+\def\Eflushleft{\endgroup\afterenvbreak}%
+\parskip=0pt \parindent=0pt
+\obeyspaces \obeylines
+\def\next##1{}\next}
+
+\def\flushright{%
+\begingroup\inENV %This group ends at the end of the @format body
+\aboveenvbreak
+% Make spaces be word-separators rather than space tokens.
+\sepspaces %
+% The following causes blank lines not to be ignored
+% by adding a space to the end of each line.
+% This also causes @ to work when the directive name
+% is terminated by end of line.
+\let\par=\lisppar
+\def\Eflushright{\endgroup\afterenvbreak}%
+\parskip=0pt \parindent=0pt
+\advance \leftskip by 0pt plus 1fill
+\obeyspaces \obeylines
+\def\next##1{}\next}
+
+% @quotation - narrow the margins.
+
+\def\quotation{%
+\begingroup\inENV %This group ends at the end of the @quotation body
+{\parskip=0pt  % because we will skip by \parskip too, later
+\aboveenvbreak}%
+\singlespace
+\parindent=0pt
+\def\Equotation{\par\endgroup\afterenvbreak}%
+% @cartouche defines \nonarrowing to inhibit narrowing
+% at next level down.
+\ifx\nonarrowing\relax
+\advance \leftskip by \lispnarrowing
+\advance \rightskip by \lispnarrowing
+\exdentamount=\lispnarrowing
+\let\nonarrowing=\relax
+\fi}
+
+\message{defuns,}
+% Define formatter for defuns
+% First, allow user to change definition object font (\df) internally
+\def\setdeffont #1 {\csname DEF#1\endcsname}
+
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deftypemargin \deftypemargin=12pt
+\newskip\deflastargmargin \deflastargmargin=18pt
+
+\newcount\parencount
+% define \functionparens, which makes ( and ) and & do special things.
+% \functionparens affects the group it is contained in.
+\def\activeparens{%
+\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active
+\catcode`\[=\active \catcode`\]=\active}
+{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
+\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+
+% Definitions of (, ) and & used in args for functions.
+% This is the definition of ( outside of all parentheses.
+\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested %
+\global\advance\parencount by 1 }
+%
+% This is the definition of ( when already inside a level of parens.
+\gdef\opnested{\char`\(\global\advance\parencount by 1 }
+%
+\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
+% also in that case restore the outer-level definition of (.
+\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
+\global\advance \parencount by -1 }
+% If we encounter &foo, then turn on ()-hacking afterwards
+\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
+%
+\gdef\normalparens{\boldbrax\let&=\ampnr}
+} % End of definition inside \activeparens
+%% These parens (in \boldbrax) actually are a little bolder than the
+%% contained text.  This is especially needed for [ and ]
+\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&}
+\def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}}
+
+% First, defname, which formats the header line itself.
+% #1 should be the function name.
+% #2 should be the type of definition, such as "Function".
+
+\def\defname #1#2{%
+% Get the values of \leftskip and \rightskip as they were
+% outside the @def...
+\dimen2=\leftskip
+\advance\dimen2 by -\defbodyindent
+\dimen3=\rightskip
+\advance\dimen3 by -\defbodyindent
+\noindent        %
+\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
+\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
+\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
+\parshape 2 0in \dimen0 \defargsindent \dimen1     %
+% Now output arg 2 ("Function" or some such)
+% ending at \deftypemargin from the right margin,
+% but stuck inside a box of width 0 so it does not interfere with linebreaking
+{% Adjust \hsize to exclude the ambient margins,
+% so that \rightline will obey them.
+\advance \hsize by -\dimen2 \advance \hsize by -\dimen3
+\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}%
+% Make all lines underfull and no complaints:
+\tolerance=10000 \hbadness=10000    
+\advance\leftskip by -\defbodyindent
+\exdentamount=\defbodyindent
+{\df #1}\enskip        % Generate function name
+}
+
+% Actually process the body of a definition
+% #1 should be the terminating control sequence, such as \Edefun.
+% #2 should be the "another name" control sequence, such as \defunx.
+% #3 should be the control sequence that actually processes the header,
+%    such as \defunheader.
+
+\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup %
+\catcode 61=\active %
+\obeylines\activeparens\spacesplit#3}
+
+\def\defmethparsebody #1#2#3#4 {\begingroup\inENV %
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
+
+\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2##1 ##2 {\def#4{##1}%
+\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
+
+% These parsing functions are similar to the preceding ones
+% except that they do not make parens into active characters.
+% These are used for "variables" since they have no arguments.
+
+\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2{\begingroup\obeylines\spacesplit#3}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup %
+\catcode 61=\active %
+\obeylines\spacesplit#3}
+
+\def\defvrparsebody #1#2#3#4 {\begingroup\inENV %
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup\obeylines\spacesplit{#3{#4}}}
+
+\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2##1 ##2 {\def#4{##1}%
+\begingroup\obeylines\spacesplit{#3{##2}}}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup\obeylines\spacesplit{#3{#5}}}
+
+% Split up #2 at the first space token.
+% call #1 with two arguments:
+%  the first is all of #2 before the space token,
+%  the second is all of #2 after that space token.
+% If #2 contains no space token, all of it is passed as the first arg
+% and the second is passed as empty.
+
+{\obeylines
+\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
+\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
+\ifx\relax #3%
+#1{#2}{}\else #1{#2}{#3#4}\fi}}
+
+% So much for the things common to all kinds of definitions.
+
+% Define @defun.
+
+% First, define the processing that is wanted for arguments of \defun
+% Use this to expand the args and terminate the paragraph they make up
+
+\def\defunargs #1{\functionparens \sl
+% Expand, preventing hyphenation at `-' chars.
+% Note that groups don't affect changes in \hyphenchar.
+\hyphenchar\tensl=0
+#1%
+\hyphenchar\tensl=45
+\ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\fi%
+\interlinepenalty=10000
+\advance\rightskip by 0pt plus 1fil
+\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
+}
+
+\def\deftypefunargs #1{%
+% Expand, preventing hyphenation at `-' chars.
+% Note that groups don't affect changes in \hyphenchar.
+\functionparens
+\code{#1}%
+\interlinepenalty=10000
+\advance\rightskip by 0pt plus 1fil
+\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
+}
+
+% Do complete processing of one @defun or @defunx line already parsed.
+
+% @deffn Command forward-char nchars
+
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
+
+\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
+\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @defun == @deffn Function
+
+\def\defun{\defparsebody\Edefun\defunx\defunheader}
+
+\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+\begingroup\defname {#1}{Function}%
+\defunargs {#2}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @deftypefun int foobar (int @var{foo}, float @var{bar})
+
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
+
+% #1 is the data type.  #2 is the name and args.
+\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
+% #1 is the data type, #2 the name, #3 the args.
+\def\deftypefunheaderx #1#2 #3\relax{%
+\doind {fn}{\code{#2}}% Make entry in function index
+\begingroup\defname {\code{#1} #2}{Function}%
+\deftypefunargs {#3}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
+
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
+
+% #1 is the classification.  #2 is the data type.  #3 is the name and args.
+\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
+% #1 is the classification, #2 the data type, #3 the name, #4 the args.
+\def\deftypefnheaderx #1#2#3 #4\relax{%
+\doind {fn}{\code{#3}}% Make entry in function index
+\begingroup\defname {\code{#2} #3}{#1}%
+\deftypefunargs {#4}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @defmac == @deffn Macro
+
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
+
+\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+\begingroup\defname {#1}{Macro}%
+\defunargs {#2}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @defspec == @deffn Special Form
+
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
+
+\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+\begingroup\defname {#1}{Special Form}%
+\defunargs {#2}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% This definition is run if you use @defunx
+% anywhere other than immediately after a @defun or @defunx.
+
+\def\deffnx #1 address@hidden in invalid context}}
+\def\defunx #1 address@hidden in invalid context}}
+\def\defmacx #1 address@hidden in invalid context}}
+\def\defspecx #1 address@hidden in invalid context}}
+\def\deftypefnx #1 address@hidden in invalid context}}
+\def\deftypeunx #1 address@hidden in invalid context}}
+
+% @defmethod, and so on
+
+% @defop {Funny Method} foo-class frobnicate argument
+
+\def\defop #1 {\def\defoptype{#1}%
+\defopparsebody\Edefop\defopx\defopheader\defoptype}
+
+\def\defopheader #1#2#3{%
+\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index
+\begingroup\defname {#2}{\defoptype{} on #1}%
+\defunargs {#3}\endgroup %
+}
+
+% @defmethod == @defop Method
+
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
+
+\def\defmethodheader #1#2#3{%
+\dosubind {fn}{\code{#2}}{on #1}% entry in function index
+\begingroup\defname {#2}{Method on #1}%
+\defunargs {#3}\endgroup %
+}
+
+% @defcv {Class Option} foo-class foo-flag
+
+\def\defcv #1 {\def\defcvtype{#1}%
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
+
+\def\defcvarheader #1#2#3{%
+\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
+\begingroup\defname {#2}{\defcvtype{} of #1}%
+\defvarargs {#3}\endgroup %
+}
+
+% @defivar == @defcv {Instance Variable}
+
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
+
+\def\defivarheader #1#2#3{%
+\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
+\begingroup\defname {#2}{Instance Variable of #1}%
+\defvarargs {#3}\endgroup %
+}
+
+% These definitions are run if you use @defmethodx, etc.,
+% anywhere other than immediately after a @defmethod, etc.
+
+\def\defopx #1 address@hidden in invalid context}}
+\def\defmethodx #1 address@hidden in invalid context}}
+\def\defcvx #1 address@hidden in invalid context}}
+\def\defivarx #1 address@hidden in invalid context}}
+
+% Now @defvar
+
+% First, define the processing that is wanted for arguments of @defvar.
+% This is actually simple: just print them in roman.
+% This must expand the args and terminate the paragraph they make up
+\def\defvarargs #1{\normalparens #1%
+\interlinepenalty=10000
+\endgraf\penalty 10000\vskip -\parskip\penalty 10000}
+
+% @defvr Counter foo-count
+
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
+
+\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
+\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
+
+% @defvar == @defvr Variable
+
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
+
+\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
+\begingroup\defname {#1}{Variable}%
+\defvarargs {#2}\endgroup %
+}
+
+% @defopt == @defvr {User Option}
+
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
+
+\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
+\begingroup\defname {#1}{User Option}%
+\defvarargs {#2}\endgroup %
+}
+
+% @deftypevar int foobar
+
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
+
+% #1 is the data type.  #2 is the name.
+\def\deftypevarheader #1#2{%
+\doind {vr}{\code{#2}}% Make entry in variables index
+\begingroup\defname {\code{#1} #2}{Variable}%
+\interlinepenalty=10000
+\endgraf\penalty 10000\vskip -\parskip\penalty 10000
+\endgroup}
+
+% @deftypevr {Global Flag} int enable
+
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
+
+\def\deftypevrheader #1#2#3{\doind {vr}{\code{#3}}%
+\begingroup\defname {\code{#2} #3}{#1}
+\interlinepenalty=10000
+\endgraf\penalty 10000\vskip -\parskip\penalty 10000
+\endgroup}
+
+% This definition is run if you use @defvarx
+% anywhere other than immediately after a @defvar or @defvarx.
+
+\def\defvrx #1 address@hidden in invalid context}}
+\def\defvarx #1 address@hidden in invalid context}}
+\def\defoptx #1 address@hidden in invalid context}}
+\def\deftypevarx #1 address@hidden in invalid context}}
+\def\deftypevrx #1 address@hidden in invalid context}}
+
+% Now define @deftp
+% Args are printed in bold, a slight difference from @defvar.
+
+\def\deftpargs #1{\bf \defvarargs{#1}}
+
+% @deftp Class window height width ...
+
+\def\deftp{\defvrparsebody\Edeftp\deftpx\deftpheader}
+
+\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
+\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
+
+% This definition is run if you use @deftpx, etc
+% anywhere other than immediately after a @deftp, etc.
+
+\def\deftpx #1 address@hidden in invalid context}}
+
+\message{cross reference,}
+% Define cross-reference macros
+\newwrite \auxfile
+
+\newif\ifhavexrefs  % True if xref values are known.
+\newif\ifwarnedxrefs  % True if we warned once that they aren't known.
+
+% \setref{foo} defines a cross-reference point named foo.
+
+\def\setref#1{%
+%\dosetq{#1-title}{Ytitle}%
+\dosetq{#1-pg}{Ypagenumber}%
+\dosetq{#1-snt}{Ysectionnumberandtype}}
+
+\def\unnumbsetref#1{%
+%\dosetq{#1-title}{Ytitle}%
+\dosetq{#1-pg}{Ypagenumber}%
+\dosetq{#1-snt}{Ynothing}}
+
+\def\appendixsetref#1{%
+%\dosetq{#1-title}{Ytitle}%
+\dosetq{#1-pg}{Ypagenumber}%
+\dosetq{#1-snt}{Yappendixletterandtype}}
+
+% \xref, \pxref, and \ref generate cross-references to specified points.
+% For \xrefX, #1 is the node name, #2 the name of the Info
+% cross-reference, #3 the printed node name, #4 the name of the Info
+% file, #5 the name of the printed manual.  All but the node name can be
+% omitted.
+% 
+\def\pxref#1{see \xrefX[#1,,,,,,,]}
+\def\xref#1{See \xrefX[#1,,,,,,,]}
+\def\ref#1{\xrefX[#1,,,,,,,]}
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup%
+\def\printedmanual{\ignorespaces #5}%
+\def\printednodename{\ignorespaces #3}%
+%
+\setbox1=\hbox{\printedmanual}%
+\setbox0=\hbox{\printednodename}%
+\ifdim \wd0=0pt%
+\def\printednodename{\ignorespaces #1}%
+%%% Uncommment the following line to make the actual chapter or section title
+%%% appear inside the square brackets.
+%\def\printednodename{#1-title}%
+\fi%
+%
+%
+% If we use \unhbox0 and \unhbox1 to print the node names, TeX does
+% not insert empty discretionaries after hyphens, which means that it
+% will not find a line break at a hyphen in a node names.  Since some
+% manuals are best written with fairly long node names, containing
+% hyphens, this is a loss.  Therefore, we simply give the text of
+% the node name again, so it is as if TeX is seeing it for the first
+% time.
+\ifdim \wd1>0pt
+section ``\printednodename'' in \cite{\printedmanual}%
+\else%
+\turnoffactive%
+\refx{#1-snt}{} [\printednodename], page\tie\refx{#1-pg}{}%
+\fi
+\endgroup}
+
+% \dosetq is the interface for calls from other macros
+
+% Use \turnoffactive so that punctuation chars such as underscore
+% work in node names.
+\def\dosetq #1#2{{\let\folio=0 \turnoffactive%
+\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
+\next}}
+
+% \internalsetq {foo}{page} expands into
+% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
+% When the aux file is read, ' is the escape character
+
+\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}}
+
+% Things to be expanded by \internalsetq
+
+\def\Ypagenumber{\folio}
+
+\def\Ytitle{\thischapter}
+
+\def\Ynothing{}
+
+\def\Ysectionnumberandtype{%
+\ifnum\secno=0 Chapter\xreftie\the\chapno %
+\else \ifnum \subsecno=0 Section\xreftie\the\chapno.\the\secno %
+\else \ifnum \subsubsecno=0 %
+Section\xreftie\the\chapno.\the\secno.\the\subsecno %
+\else %
+Section\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno %
+\fi \fi \fi }
+
+\def\Yappendixletterandtype{%
+\ifnum\secno=0 Appendix\xreftie'char\the\appendixno{}%
+\else \ifnum \subsecno=0 Section\xreftie'char\the\appendixno.\the\secno %
+\else \ifnum \subsubsecno=0 %
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno %
+\else %
+Section\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %
+\fi \fi \fi }
+
+\gdef\xreftie{'tie}
+
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+% 
+\ifx\inputlineno\thisisundefined
+  \let\linenumber = \empty % Non-3.0.
+\else
+  \def\linenumber{\the\inputlineno:\space}
+\fi
+
+% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
+% If its value is nonempty, SUFFIX is output afterward.
+
+\def\refx#1#2{%
+  \expandafter\ifx\csname X#1\endcsname\relax
+    % If not defined, say something at least.
+    $\langle$un\-de\-fined$\rangle$%
+    \ifhavexrefs
+      \message{\linenumber Undefined cross reference `#1'.}%
+    \else
+      \ifwarnedxrefs\else
+        \global\warnedxrefstrue
+        \message{Cross reference values unknown; you must run TeX again.}%
+      \fi
+    \fi
+  \else
+    % It's defined, so just use it.
+    \csname X#1\endcsname
+  \fi
+  #2% Output the suffix in any case.
+}
+
+% Read the last existing aux file, if any.  No error if none exists.
+
+% This is the macro invoked by entries in the aux file.
+\def\xrdef #1#2{
+{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {#2}}}
+
+\def\readauxfile{%
+\begingroup
+\catcode address@hidden
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\^^C=\other
+\catcode `\^^D=\other
+\catcode `\^^E=\other
+\catcode `\^^F=\other
+\catcode `\^^G=\other
+\catcode `\^^H=\other
+\catcode `\=\other
+\catcode `\^^L=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode 26=\other
+\catcode `\^^[=\other
+\catcode `\^^\=\other
+\catcode `\^^]=\other
+\catcode `\^^^=\other
+\catcode `\^^_=\other
+\catcode address@hidden
+\catcode `\^=\other
+\catcode `\~=\other
+\catcode `\[=\other
+\catcode `\]=\other
+\catcode`\"=\other
+\catcode`\_=\other
+\catcode`\|=\other
+\catcode`\<=\other
+\catcode`\>=\other
+\catcode `\$=\other
+\catcode `\#=\other
+\catcode `\&=\other
+% the aux file uses ' as the escape.
+% Turn off \ as an escape so we do not lose on
+% entries which were dumped with control sequences in their names.
+% For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
+% Reference to such entries still does not work the way one would wish,
+% but at least they do not bomb out when the aux file is read in.
+\catcode `\{=1 \catcode `\}=2
+\catcode `\%=\other
+\catcode `\'=0
+\catcode `\\=\other
+\openin 1 \jobname.aux
+\ifeof 1 \else \closein 1 \input \jobname.aux \global\havexrefstrue
+\fi
+% Open the new aux file.  Tex will close it automatically at exit.
+\openout \auxfile=\jobname.aux
+\endgroup}
+
+
+% Footnotes.
+
+\newcount \footnoteno
+
+% The trailing space in the following definition for supereject is
+% vital for proper filling; pages come out unaligned when you do a
+% pagealignmacro call if that space before the closing brace is
+% removed.
+\def\supereject{\par\penalty -20000\footnoteno =0 }
+
+% @footnotestyle is meaningful for info output only..
+\let\footnotestyle=\comment
+
+\let\ptexfootnote=\footnote
+
+{\catcode address@hidden
+\long\gdef\footnote #1{\global\advance \footnoteno by address@hidden
+\unskip
+\edef\thisfootno{$^{\the\footnoteno}$}%
address@hidden
address@hidden/\fi
address@hidden \footnotezzz{#1}}
+% \parsearg\footnotezzz}
+
+\long\gdef\footnotezzz #1{\insert\footins{
+\interlinepenalty\interfootnotelinepenalty
+\splittopskip\ht\strutbox % top baseline for broken footnotes
+\splitmaxdepth\dp\strutbox address@hidden
address@hidden address@hidden address@hidden address@hidden
+\footstrut\parindent=\defaultparindent\hang\textindent{\thisfootno}#1\strut}}
+
+}%end \catcode address@hidden
+
+% End of control word definitions.
+
+\message{and turning on texinfo input format.}
+
+\def\openindices{%
+   \newindex{cp}%
+   \newcodeindex{fn}%
+   \newcodeindex{vr}%
+   \newcodeindex{tp}%
+   \newcodeindex{ky}%
+   \newcodeindex{pg}%
+}
+
+% Set some numeric style parameters, for 8.5 x 11 format.
+
+%\hsize = 6.5in
+\newdimen\defaultparindent \defaultparindent = 15pt
+\parindent = \defaultparindent
+\parskip 18pt plus 1pt
+\baselineskip 15pt
+\advance\topskip by 1.2cm
+
+% Prevent underfull vbox error messages.
+\vbadness=10000
+
+% Following George Bush, just get rid of widows and orphans.
+\widowpenalty=10000
+\clubpenalty=10000
+
+% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
+% using an old version of TeX, don't do anything.  We want the amount of
+% stretch added to depend on the line length, hence the dependence on
+% \hsize.  This makes it come to about 9pt for the 8.5x11 format.
+% 
+\ifx\emergencystretch\thisisundefined \else
+  \emergencystretch = \hsize
+  \divide\emergencystretch by 45
+\fi
+
+% Use @smallbook to reset parameters for 7x9.5 format  (or else 7x9.25)
+\def\smallbook{
+\global\lispnarrowing = 0.3in
+\global\baselineskip 12pt
+\advance\topskip by -1cm
+\global\parskip 3pt plus 1pt
+\global\hsize = 5in
+\global\doublecolumnhsize=2.4in \global\doublecolumnvsize=15.0in
+\global\vsize=7.5in
+\global\tolerance=700
+\global\hfuzz=1pt
+\global\contentsrightmargin=0pt
+
+\global\pagewidth=\hsize
+\global\pageheight=\vsize
+
+\global\let\smalllisp=\smalllispx
+\global\let\smallexample=\smalllispx
+\global\def\Esmallexample{\Esmalllisp}
+}
+
+% Use @afourpaper to print on European A4 paper.
+\def\afourpaper{
+\global\tolerance=700
+\global\hfuzz=1pt
+\global\baselineskip=12pt
+\global\parskip 15pt plus 1pt
+
+\global\vsize= 53\baselineskip
+\advance\vsize by \topskip
+%\global\hsize=   5.85in     % A4 wide 10pt
+\global\hsize=  6.5in
+\global\outerhsize=\hsize
+\global\advance\outerhsize by 0.5in
+\global\outervsize=\vsize
+\global\advance\outervsize by 0.6in
+\global\doublecolumnhsize=\hsize
+\global\divide\doublecolumnhsize by 2
+\global\advance\doublecolumnhsize by -0.1in
+\global\doublecolumnvsize=\vsize
+\global\multiply\doublecolumnvsize by 2
+\global\advance\doublecolumnvsize by 0.1in
+
+\global\pagewidth=\hsize
+\global\pageheight=\vsize
+}
+
+%% For a final copy, take out the rectangles
+%% that mark overfull boxes (in case you have decided
+%% that the text looks ok even though it passes the margin).
+\def\finalout{\overfullrule=0pt}
+
+% Define macros to output various characters with catcode for normal text.
+\catcode`\"=\other
+\catcode`\~=\other
+\catcode`\^=\other
+\catcode`\_=\other
+\catcode`\|=\other
+\catcode`\<=\other
+\catcode`\>=\other
+\catcode`\+=\other
+\def\normaldoublequote{"}
+\def\normaltilde{~}
+\def\normalcaret{^}
+\def\normalunderscore{_}
+\def\normalverticalbar{|}
+\def\normalless{<}
+\def\normalgreater{>}
+\def\normalplus{+}
+
+% This macro is used to make a character print one way in ttfont
+% where it can probably just be output, and another way in other fonts,
+% where something hairier probably needs to be done.
+%
+% #1 is what to print if we are indeed using \tt; #2 is what to print
+% otherwise.  Since all the Computer Modern typewriter fonts have zero
+% interword stretch (and shrink), and it is reasonable to expect all
+% typewriter fonts to have this, we can check that font parameter.
+% 
+\def\ifusingtt#1#2{\ifdim \fontdimen3\the\font=0pt #1\else #2\fi}
+
+% Turn off all special characters except @
+% (and those which the user can use as if they were ordinary).
+% Most of these we simply print from the \tt font, but for some, we can
+% use math or other variants that look better in normal text.
+
+\catcode`\"=\active
+\def\activedoublequote{{\tt \char '042}}
+\let"=\activedoublequote
+\catcode`\~=\active
+\def~{{\tt \char '176}}
+\chardef\hat=`\^
+\catcode`\^=\active
+\def^{{\tt \hat}}
+
+\catcode`\_=\active
+\def_{\ifusingtt\normalunderscore\_}
+% Subroutine for the previous macro.
+\def\_{\lvvmode \kern.06em \vbox{\hrule width.3em height.1ex}}
+
+% \lvvmode is equivalent in function to \leavevmode.
+% Using \leavevmode runs into trouble when written out to
+% an index file due to the expansion of \leavevmode into ``\unhbox
+% address@hidden'' ---which looks to TeX like ``\unhbox \voidb\x'' due to our
+% magic tricks with @.
+\def\lvvmode{\vbox to 0pt{}}
+
+\catcode`\|=\active
+\def|{{\tt \char '174}}
+\chardef \less=`\<
+\catcode`\<=\active
+\def<{{\tt \less}}
+\chardef \gtr=`\>
+\catcode`\>=\active
+\def>{{\tt \gtr}}
+\catcode`\+=\active
+\def+{{\tt \char 43}}
+%\catcode 27=\active
+%\def^^[{$\diamondsuit$}
+
+% Used sometimes to turn off (effectively) the active characters
+% even after parsing them.
+\def\turnoffactive{\let"=\normaldoublequote
+\let~=\normaltilde
+\let^=\normalcaret
+\let_=\normalunderscore
+\let|=\normalverticalbar
+\let<=\normalless
+\let>=\normalgreater
+\let+=\normalplus}
+
+% Set up an active definition for =, but don't enable it most of the time.
+{\catcode`\==\active
+\global\def={{\tt \char 61}}}
+
address@hidden
+
+% \rawbackslashxx output one backslash character in current font
+\global\chardef\rawbackslashxx=`\\
+%{\catcode`\\=\other
address@hidden@rawbackslashxx{\}}
+
+% \rawbackslash redefines \ as input to do \rawbackslashxx.
+{\catcode`\\=\active
address@hidden@address@hidden@rawbackslashxx }}
+
+% \normalbackslash outputs one backslash in fixed width font.
+\def\normalbackslash{{\tt\rawbackslashxx}}
+
+% Say @foo, not \foo, in error messages.
+\escapechar=`\@
+
+% \catcode 17=0   % Define control-q
+\catcode`\\=\active
+
+% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
+% That is what \eatinput is for; after that, the `\' should revert to printing 
+% a backslash.
+%
address@hidden@eatinput input address@hidden
address@hidden@let\ = @eatinput
+
+% On the other hand, perhaps the file did not have a `\input texinfo'. Then
+% the first `\{ in the file would cause an error. This macro tries to fix 
+% that, assuming it is called before the first `\' could plausibly occur.
+% 
address@hidden@address@hidden@eatinput @let\ = @normalbackslash @fi}
+
+%% These look ok in all fonts, so just make them not special.  The @rm below
+%% makes sure that the current font starts out as the newly loaded cmr10
address@hidden@address@hidden @address@hidden@other @catcode`@&address@hidden 
@address@hidden@other
+
address@hidden
address@hidden
+
address@hidden Local variables:
address@hidden page-delimiter: "^\\\\message"
address@hidden End:
diff --git a/test/etags/y-src/atest.y b/test/etags/y-src/atest.y
new file mode 100644
index 0000000..81087b8
--- /dev/null
+++ b/test/etags/y-src/atest.y
@@ -0,0 +1,5 @@
+%%
+exp    :       exp '*' exp
+                       { $$.value = $1.value ? $3.value : $5.value;
+                         $$.unsignedp = $3.unsignedp || $5.unsignedp; }
+       ;
diff --git a/test/etags/y-src/cccp.c b/test/etags/y-src/cccp.c
new file mode 100644
index 0000000..6996705
--- /dev/null
+++ b/test/etags/y-src/cccp.c
@@ -0,0 +1,2202 @@
+/* A Bison parser, made from cccp.y
+   by GNU bison 1.32.  */
+
+#define YYBISON 1  /* Identify Bison output.  */
+
+# define       INT     257
+# define       CHAR    258
+# define       NAME    259
+# define       ERROR   260
+# define       OR      261
+# define       AND     262
+# define       EQUAL   263
+# define       NOTEQUAL        264
+# define       LEQ     265
+# define       GEQ     266
+# define       LSH     267
+# define       RSH     268
+# define       UNARY   269
+
+#line 26 "cccp.y"
+
+#include "config.h"
+#include <setjmp.h>
+/* #define YYDEBUG 1 */
+
+#ifdef MULTIBYTE_CHARS
+#include <stdlib.h>
+#include <locale.h>
+#endif
+
+#include <stdio.h>
+
+typedef unsigned char U_CHAR;
+
+/* This is used for communicating lists of keywords with cccp.c.  */
+struct arglist {
+  struct arglist *next;
+  U_CHAR *name;
+  int length;
+  int argno;
+};
+
+/* Define a generic NULL if one hasn't already been defined.  */
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+#ifndef GENERIC_PTR
+#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
+#define GENERIC_PTR void *
+#else
+#define GENERIC_PTR char *
+#endif
+#endif
+
+#ifndef NULL_PTR
+#define NULL_PTR ((GENERIC_PTR)0)
+#endif
+
+int yylex ();
+void yyerror ();
+int expression_value;
+
+static jmp_buf parse_return_error;
+
+/* Nonzero means count most punctuation as part of a name.  */
+static int keyword_parsing = 0;
+
+/* some external tables of character types */
+extern unsigned char is_idstart[], is_idchar[], is_hor_space[];
+
+extern char *xmalloc ();
+
+/* Flag for -pedantic.  */
+extern int pedantic;
+
+/* Flag for -traditional.  */
+extern int traditional;
+
+#ifndef CHAR_TYPE_SIZE
+#define CHAR_TYPE_SIZE BITS_PER_UNIT
+#endif
+
+#ifndef INT_TYPE_SIZE
+#define INT_TYPE_SIZE BITS_PER_WORD
+#endif
+
+#ifndef LONG_TYPE_SIZE
+#define LONG_TYPE_SIZE BITS_PER_WORD
+#endif
+
+#ifndef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE INT_TYPE_SIZE
+#endif
+
+/* Yield nonzero if adding two numbers with A's and B's signs can yield a
+   number with SUM's sign, where A, B, and SUM are all C integers.  */
+#define possible_sum_sign(a, b, sum) ((((a) ^ (b)) | ~ ((a) ^ (sum))) < 0)
+
+static void integer_overflow ();
+static long left_shift ();
+static long right_shift ();
+
+#line 111 "cccp.y"
+#ifndef YYSTYPE
+typedef union {
+  struct constant {long value; int unsignedp;} integer;
+  struct name {U_CHAR *address; int length;} name;
+  struct arglist *keywords;
+  int voidval;
+  char *sval;
+} yystype;
+# define YYSTYPE yystype
+#endif
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+
+
+#define        YYFINAL         73
+#define        YYFLAG          -32768
+#define        YYNTBASE        34
+
+/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
+#define YYTRANSLATE(x) ((unsigned)(x) <= 269 ? yytranslate[x] : 39)
+
+/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
+static const char yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,    29,     2,    31,     2,    27,    14,     2,
+      32,    33,    25,    23,     9,    24,     2,    26,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     8,     2,
+      17,     2,    18,     7,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,    13,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,    12,     2,    30,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     3,     4,     5,
+       6,    10,    11,    15,    16,    19,    20,    21,    22,    28
+};
+
+#if YYDEBUG
+static const short yyprhs[] =
+{
+       0,     0,     2,     4,     8,    11,    14,    17,    20,    23,
+      24,    31,    35,    39,    43,    47,    51,    55,    59,    63,
+      67,    71,    75,    79,    83,    87,    91,    95,    99,   103,
+     107,   113,   115,   117,   119,   120,   125
+};
+static const short yyrhs[] =
+{
+      35,     0,    36,     0,    35,     9,    36,     0,    24,    36,
+       0,    29,    36,     0,    23,    36,     0,    30,    36,     0,
+      31,     5,     0,     0,    31,     5,    37,    32,    38,    33,
+       0,    32,    35,    33,     0,    36,    25,    36,     0,    36,
+      26,    36,     0,    36,    27,    36,     0,    36,    23,    36,
+       0,    36,    24,    36,     0,    36,    21,    36,     0,    36,
+      22,    36,     0,    36,    15,    36,     0,    36,    16,    36,
+       0,    36,    19,    36,     0,    36,    20,    36,     0,    36,
+      17,    36,     0,    36,    18,    36,     0,    36,    14,    36,
+       0,    36,    13,    36,     0,    36,    12,    36,     0,    36,
+      11,    36,     0,    36,    10,    36,     0,    36,     7,    36,
+       8,    36,     0,     3,     0,     4,     0,     5,     0,     0,
+      32,    38,    33,    38,     0,     5,    38,     0
+};
+
+#endif
+
+#if YYDEBUG
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const short yyrline[] =
+{
+       0,   143,   148,   149,   156,   161,   164,   166,   169,   173,
+     173,   180,   185,   197,   212,   223,   230,   237,   243,   249,
+     252,   255,   261,   267,   273,   279,   282,   285,   288,   291,
+     294,   297,   299,   301,   306,   308,   321
+};
+#endif
+
+
+#if (YYDEBUG) || defined YYERROR_VERBOSE
+
+/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
+static const char *const yytname[] =
+{
+  "$", "error", "$undefined.", "INT", "CHAR", "NAME", "ERROR", "'?'", "':'", 
+  "','", "OR", "AND", "'|'", "'^'", "'&'", "EQUAL", "NOTEQUAL", "'<'", 
+  "'>'", "LEQ", "GEQ", "LSH", "RSH", "'+'", "'-'", "'*'", "'/'", "'%'", 
+  "UNARY", "'!'", "'~'", "'#'", "'('", "')'", "start", "exp1", "exp", 
+  "@1", "keywords", NULL
+};
+#endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const short yyr1[] =
+{
+       0,    34,    35,    35,    36,    36,    36,    36,    36,    37,
+      36,    36,    36,    36,    36,    36,    36,    36,    36,    36,
+      36,    36,    36,    36,    36,    36,    36,    36,    36,    36,
+      36,    36,    36,    36,    38,    38,    38
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const short yyr2[] =
+{
+       0,     1,     1,     3,     2,     2,     2,     2,     2,     0,
+       6,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       5,     1,     1,     1,     0,     4,     2
+};
+
+/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
+   doesn't specify something else to do.  Zero means the default is an
+   error. */
+static const short yydefact[] =
+{
+       0,    31,    32,    33,     0,     0,     0,     0,     0,     0,
+       1,     2,     6,     4,     5,     7,     8,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    11,
+       3,     0,    29,    28,    27,    26,    25,    19,    20,    23,
+      24,    21,    22,    17,    18,    15,    16,    12,    13,    14,
+      34,     0,    34,    34,     0,    30,    36,     0,    10,    34,
+      35,     0,     0,     0
+};
+
+static const short yydefgoto[] =
+{
+      71,    10,    11,    38,    64
+};
+
+static const short yypact[] =
+{
+      31,-32768,-32768,-32768,    31,    31,    31,    31,     4,    31,
+       3,    80,-32768,-32768,-32768,-32768,     6,    32,    31,    31,
+      31,    31,    31,    31,    31,    31,    31,    31,    31,    31,
+      31,    31,    31,    31,    31,    31,    31,    31,     7,-32768,
+      80,    59,    97,   113,   128,   142,   155,    25,    25,   162,
+     162,   162,   162,   167,   167,   -19,   -19,-32768,-32768,-32768,
+       5,    31,     5,     5,   -20,    80,-32768,    20,-32768,     5,
+  -32768,    40,    56,-32768
+};
+
+static const short yypgoto[] =
+{
+  -32768,    49,    -4,-32768,   -58
+};
+
+
+#define        YYLAST          194
+
+
+static const short yytable[] =
+{
+      12,    13,    14,    15,    66,    67,    35,    36,    37,    16,
+      62,    70,    18,    68,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,     1,     2,     3,    63,    -9,    60,
+      72,    18,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    69,     4,     5,    73,    65,    17,     0,
+       6,     7,     8,     9,     0,    39,    19,    61,     0,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    19,     0,     0,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    31,    32,    33,    34,    35,    36,    37,
+      33,    34,    35,    36,    37
+};
+
+static const short yycheck[] =
+{
+       4,     5,     6,     7,    62,    63,    25,    26,    27,     5,
+       5,    69,     9,    33,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,     3,     4,     5,    32,    32,    32,
+       0,     9,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    33,    23,    24,     0,    61,     9,    -1,
+      29,    30,    31,    32,    -1,    33,     7,     8,    -1,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,     7,    -1,    -1,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    21,    22,    23,    24,    25,    26,    27,
+      23,    24,    25,    26,    27
+};
+/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
+#line 3 "/usr/share/bison/bison.simple"
+
+/* Skeleton output parser for bison,
+   Copyright (C) 1984, 1989, 1990, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+/* This is the parser code that is written into each bison parser when
+   the %semantic_parser declaration is not specified in the grammar.
+   It was written by Richard Stallman by simplifying the hairy parser
+   used when %semantic_parser is specified.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+#ifdef __cplusplus
+# define YYSTD(x) std::x
+#else
+# define YYSTD(x) x
+#endif
+
+#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# if YYSTACK_USE_ALLOCA
+#  define YYSTACK_ALLOC alloca
+#  define YYSIZE_T YYSTD (size_t)
+# else
+#  ifndef YYSTACK_USE_ALLOCA
+#   if defined (alloca) || defined (_ALLOCA_H)
+#    define YYSTACK_ALLOC alloca
+#    define YYSIZE_T YYSTD (size_t)
+#   else
+#    ifdef __GNUC__
+#     define YYSTACK_ALLOC __builtin_alloca
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning. */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+# else
+#  ifdef __cplusplus
+#   include <cstdlib> /* INFRINGES ON USER NAME SPACE */
+#   define YYSIZE_T std::size_t
+#  else
+#   ifdef __STDC__
+#    include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#    define YYSIZE_T size_t
+#   endif
+#  endif
+#  define YYSTACK_ALLOC YYSTD (malloc)
+#  define YYSTACK_FREE YYSTD (free)
+# endif
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  short yyss;
+  YYSTYPE yyvs;
+# if YYLSP_NEEDED
+  YYLTYPE yyls;
+# endif
+};
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# if YYLSP_NEEDED
+#  define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE))     \
+      + 2 * YYSTACK_GAP_MAX)
+# else
+#  define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (short) + sizeof (YYSTYPE))                                
\
+      + YYSTACK_GAP_MAX)
+# endif
+
+/* Relocate the TYPE STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Type, Stack)                                 \
+    do                                                                 \
+      {                                                                        
\
+       YYSIZE_T yynewbytes;                                            \
+       yymemcpy ((char *) yyptr, (char *) (Stack),                     \
+                 yysize * (YYSIZE_T) sizeof (Type));                   \
+       Stack = &yyptr->Stack;                                          \
+       yynewbytes = yystacksize * sizeof (Type) + YYSTACK_GAP_MAX;     \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                        
\
+    while (0)
+
+#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
+
+
+#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+# define YYSIZE_T __SIZE_TYPE__
+#endif
+#if ! defined (YYSIZE_T) && defined (size_t)
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T)
+# ifdef __cplusplus
+#  include <cstddef> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T std::size_t
+# else
+#  ifdef __STDC__
+#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#   define YYSIZE_T size_t
+#  endif
+# endif
+#endif
+#if ! defined (YYSIZE_T)
+# define YYSIZE_T unsigned int
+#endif
+
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                -2
+#define YYEOF          0
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT        goto yyabortlab
+#define YYERROR                goto yyerrlab1
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+#define YYFAIL         goto yyerrlab
+#define YYRECOVERING()  (!!yyerrstatus)
+#define YYBACKUP(Token, Value)                                 \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    {                                                          \
+      yychar = (Token);                                                \
+      yylval = (Value);                                                \
+      yychar1 = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK;                                              \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      yyerror ("syntax error: cannot back up");                        \
+      YYERROR;                                                 \
+    }                                                          \
+while (0)
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+
+/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+   are run).
+
+   When YYLLOC_DEFAULT is run, CURRENT is set the location of the
+   first token.  By default, to implement support for ranges, extend
+   its range to the last symbol.  */
+
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)               \
+   Current.last_line   = Rhs[N].last_line;     \
+   Current.last_column = Rhs[N].last_column;
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#if YYPURE
+# if YYLSP_NEEDED
+#  ifdef YYLEX_PARAM
+#   define YYLEX               yylex (&yylval, &yylloc, YYLEX_PARAM)
+#  else
+#   define YYLEX               yylex (&yylval, &yylloc)
+#  endif
+# else /* !YYLSP_NEEDED */
+#  ifdef YYLEX_PARAM
+#   define YYLEX               yylex (&yylval, YYLEX_PARAM)
+#  else
+#   define YYLEX               yylex (&yylval)
+#  endif
+# endif /* !YYLSP_NEEDED */
+#else /* !YYPURE */
+# define YYLEX                 yylex ()
+#endif /* !YYPURE */
+
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  ifdef __cplusplus
+#   include <cstdio>  /* INFRINGES ON USER NAME SPACE */
+#  else
+#   include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  endif
+#  define YYFPRINTF YYSTD (fprintf)
+# endif
+
+# define YYDPRINTF(Args)                       \
+do {                                           \
+  if (yydebug)                                 \
+    YYFPRINTF Args;                            \
+} while (0)
+/* Nonzero means print parse trace. [The following comment makes no
+   sense to me.  Could someone clarify it?  --akim] Since this is
+   uninitialized, it does not stop multiple parsers from coexisting.
+   */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+#endif /* !YYDEBUG */
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef        YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#if YYMAXDEPTH == 0
+# undef YYMAXDEPTH
+#endif
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+#if ! defined (yyoverflow) && ! defined (yymemcpy)
+# if __GNUC__ > 1              /* GNU C and GNU C++ define this.  */
+#  define yymemcpy __builtin_memcpy
+# else                         /* not GNU C or C++ */
+
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
+static void
+#  if defined (__STDC__) || defined (__cplusplus)
+yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T yycount)
+#  else
+yymemcpy (yyto, yyfrom, yycount)
+     char *yyto;
+     const char *yyfrom;
+     YYSIZE_T yycount;
+#  endif
+{
+  register const char *yyf = yyfrom;
+  register char *yyt = yyto;
+  register YYSIZE_T yyi = yycount;
+
+  while (yyi-- != 0)
+    *yyt++ = *yyf++;
+}
+# endif
+#endif
+
+#ifdef YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined (__GLIBC__) && defined (_STRING_H)
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+static YYSIZE_T
+#   if defined (__STDC__) || defined (__cplusplus)
+yystrlen (const char *yystr)
+#   else
+yystrlen (yystr)
+     const char *yystr;
+#   endif
+{
+  register const char *yys = yystr;
+
+  while (*yys++ != '\0')
+    continue;
+
+  return yys - yystr - 1;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+static char *
+#   if defined (__STDC__) || defined (__cplusplus)
+yystpcpy (char *yydest, const char *yysrc)
+#   else
+yystpcpy (yydest, yysrc)
+     char *yydest;
+     const char *yysrc;
+#   endif
+{
+  register char *yyd = yydest;
+  register const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+#endif
+
+#line 341 "/usr/share/bison/bison.simple"
+
+
+/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+   into yyparse.  The argument should have type void *.
+   It should actually point to an object.
+   Grammar actions can access the variable by casting it
+   to the proper pointer type.  */
+
+#ifdef YYPARSE_PARAM
+# ifdef __cplusplus
+#  define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+#  define YYPARSE_PARAM_DECL
+# else /* !__cplusplus */
+#  define YYPARSE_PARAM_ARG YYPARSE_PARAM
+#  define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+# endif /* !__cplusplus */
+#else /* !YYPARSE_PARAM */
+# define YYPARSE_PARAM_ARG
+# define YYPARSE_PARAM_DECL
+#endif /* !YYPARSE_PARAM */
+
+/* Prevent warning if -Wstrict-prototypes.  */
+#ifdef __GNUC__
+# ifdef YYPARSE_PARAM
+int yyparse (void *);
+# else
+int yyparse (void);
+# endif
+#endif
+
+/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
+   variables are global, or local to YYPARSE.  */
+
+#define YY_DECL_NON_LSP_VARIABLES                      \
+/* The lookahead symbol.  */                           \
+int yychar;                                            \
+                                                       \
+/* The semantic value of the lookahead symbol. */      \
+YYSTYPE yylval;                                                \
+                                                       \
+/* Number of parse errors so far.  */                  \
+int yynerrs;
+
+#if YYLSP_NEEDED
+# define YY_DECL_VARIABLES                     \
+YY_DECL_NON_LSP_VARIABLES                      \
+                                               \
+/* Location data for the lookahead symbol.  */ \
+YYLTYPE yylloc;
+#else
+# define YY_DECL_VARIABLES                     \
+YY_DECL_NON_LSP_VARIABLES
+#endif
+
+
+/* If nonreentrant, generate the variables here. */
+
+#if !YYPURE
+YY_DECL_VARIABLES
+#endif  /* !YYPURE */
+
+int
+yyparse (YYPARSE_PARAM_ARG)
+     YYPARSE_PARAM_DECL
+{
+  /* If reentrant, generate the variables here. */
+#if YYPURE
+  YY_DECL_VARIABLES
+#endif  /* !YYPURE */
+
+  register int yystate;
+  register int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yychar1 = 0;
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack. */
+  short        yyssa[YYINITDEPTH];
+  short *yyss = yyssa;
+  register short *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  register YYSTYPE *yyvsp;
+
+#if YYLSP_NEEDED
+  /* The location stack.  */
+  YYLTYPE yylsa[YYINITDEPTH];
+  YYLTYPE *yyls = yylsa;
+  YYLTYPE *yylsp;
+#endif
+
+#if YYLSP_NEEDED
+# define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
+#else
+# define YYPOPSTACK   (yyvsp--, yyssp--)
+#endif
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+#if YYLSP_NEEDED
+  YYLTYPE yyloc;
+#endif
+
+  /* When reducing, the number of symbols on the RHS of the reduced
+     rule. */
+  int yylen;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;            /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+#if YYLSP_NEEDED
+  yylsp = yyls;
+#endif
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed. so pushing a state here evens the stacks.
+     */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyssp >= yyss + yystacksize - 1)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+       /* Give user a chance to reallocate the stack. Use copies of
+          these so that the &'s don't force the real ones into
+          memory.  */
+       YYSTYPE *yyvs1 = yyvs;
+       short *yyss1 = yyss;
+
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  */
+# if YYLSP_NEEDED
+       YYLTYPE *yyls1 = yyls;
+       /* This used to be a conditional around just the two extra args,
+          but that might be undefined if yyoverflow is a macro.  */
+       yyoverflow ("parser stack overflow",
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+                   &yyls1, yysize * sizeof (*yylsp),
+                   &yystacksize);
+       yyls = yyls1;
+# else
+       yyoverflow ("parser stack overflow",
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+                   &yystacksize);
+# endif
+       yyss = yyss1;
+       yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+      /* Extend the stack our own way.  */
+      if (yystacksize >= YYMAXDEPTH)
+       goto yyoverflowlab;
+      yystacksize *= 2;
+      if (yystacksize > YYMAXDEPTH)
+       yystacksize = YYMAXDEPTH;
+
+      {
+       short *yyss1 = yyss;
+       union yyalloc *yyptr =
+         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+       if (! yyptr)
+         goto yyoverflowlab;
+       YYSTACK_RELOCATE (short, yyss);
+       YYSTACK_RELOCATE (YYSTYPE, yyvs);
+# if YYLSP_NEEDED
+       YYSTACK_RELOCATE (YYLTYPE, yyls);
+# endif
+# undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+      }
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+#if YYLSP_NEEDED
+      yylsp = yyls + yysize - 1;
+#endif
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+
+      if (yyssp >= yyss + yystacksize - 1)
+       YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  goto yybackup;
+
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+/* Do appropriate processing given the current state.  */
+/* Read a lookahead token if we need one and don't already have one.  */
+/* yyresume: */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* yychar is either YYEMPTY or YYEOF
+     or a valid token in external form.  */
+
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  /* Convert token to internal form (in yychar1) for indexing tables with */
+
+  if (yychar <= 0)             /* This means end of input. */
+    {
+      yychar1 = 0;
+      yychar = YYEOF;          /* Don't call YYLEX any more */
+
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yychar1 = YYTRANSLATE (yychar);
+
+#if YYDEBUG
+     /* We have to keep this `#if YYDEBUG', since we use variables
+       which are defined only if `YYDEBUG' is set.  */
+      if (yydebug)
+       {
+         YYFPRINTF (stderr, "Next token is %d (%s",
+                    yychar, yytname[yychar1]);
+         /* Give the individual parser a way to print the precise
+            meaning of a token, for further debugging info.  */
+# ifdef YYPRINT
+         YYPRINT (stderr, yychar, yylval);
+# endif
+         YYFPRINTF (stderr, ")\n");
+       }
+#endif
+    }
+
+  yyn += yychar1;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
+    goto yydefault;
+
+  yyn = yytable[yyn];
+
+  /* yyn is what to do for this token type in this state.
+     Negative => reduce, -yyn is rule number.
+     Positive => shift, yyn is new state.
+       New state is final state => don't bother to shift,
+       just return success.
+     0, or most negative number => error.  */
+
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrlab;
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Shift the lookahead token.  */
+  YYDPRINTF ((stderr, "Shifting token %d (%s), ",
+             yychar, yytname[yychar1]));
+
+  /* Discard the token being shifted unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  *++yyvsp = yylval;
+#if YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to the semantic value of
+     the lookahead token.  This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+#if YYLSP_NEEDED
+  /* Similarly for the default location.  Let the user run additional
+     commands if for instance locations are ranges.  */
+  yyloc = yylsp[1-yylen];
+  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
+#endif
+
+#if YYDEBUG
+  /* We have to keep this `#if YYDEBUG', since we use variables which
+     are defined only if `YYDEBUG' is set.  */
+  if (yydebug)
+    {
+      int yyi;
+
+      YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
+                yyn, yyrline[yyn]);
+
+      /* Print the symbols being reduced, and their result.  */
+      for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
+       YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
+      YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+    }
+#endif
+
+  switch (yyn) {
+
+case 1:
+#line 144 "cccp.y"
+{ expression_value = yyvsp[0].integer.value; }
+    break;
+case 3:
+#line 150 "cccp.y"
+{ if (pedantic)
+                           pedwarn ("comma operator in operand of `#if'");
+                         yyval.integer = yyvsp[0].integer; }
+    break;
+case 4:
+#line 157 "cccp.y"
+{ yyval.integer.value = - yyvsp[0].integer.value;
+                         if ((yyval.integer.value & yyvsp[0].integer.value) < 
0 && ! yyvsp[0].integer.unsignedp)
+                           integer_overflow ();
+                         yyval.integer.unsignedp = yyvsp[0].integer.unsignedp; 
}
+    break;
+case 5:
+#line 162 "cccp.y"
+{ yyval.integer.value = ! yyvsp[0].integer.value;
+                         yyval.integer.unsignedp = 0; }
+    break;
+case 6:
+#line 165 "cccp.y"
+{ yyval.integer = yyvsp[0].integer; }
+    break;
+case 7:
+#line 167 "cccp.y"
+{ yyval.integer.value = ~ yyvsp[0].integer.value;
+                         yyval.integer.unsignedp = yyvsp[0].integer.unsignedp; 
}
+    break;
+case 8:
+#line 170 "cccp.y"
+{ yyval.integer.value = check_assertion (yyvsp[0].name.address, 
yyvsp[0].name.length,
+                                                     0, NULL_PTR);
+                         yyval.integer.unsignedp = 0; }
+    break;
+case 9:
+#line 174 "cccp.y"
+{ keyword_parsing = 1; }
+    break;
+case 10:
+#line 176 "cccp.y"
+{ yyval.integer.value = check_assertion (yyvsp[-4].name.address, 
yyvsp[-4].name.length,
+                                                     1, yyvsp[-1].keywords);
+                         keyword_parsing = 0;
+                         yyval.integer.unsignedp = 0; }
+    break;
+case 11:
+#line 181 "cccp.y"
+{ yyval.integer = yyvsp[-1].integer; }
+    break;
+case 12:
+#line 186 "cccp.y"
+{ yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || 
yyvsp[0].integer.unsignedp;
+                         if (yyval.integer.unsignedp)
+                           yyval.integer.value = (unsigned long) 
yyvsp[-2].integer.value * yyvsp[0].integer.value;
+                         else
+                           {
+                             yyval.integer.value = yyvsp[-2].integer.value * 
yyvsp[0].integer.value;
+                             if (yyvsp[-2].integer.value
+                                 && (yyval.integer.value / 
yyvsp[-2].integer.value != yyvsp[0].integer.value
+                                     || (yyval.integer.value & 
yyvsp[-2].integer.value & yyvsp[0].integer.value) < 0))
+                               integer_overflow ();
+                           } }
+    break;
+case 13:
+#line 198 "cccp.y"
+{ if (yyvsp[0].integer.value == 0)
+                           {
+                             error ("division by zero in #if");
+                             yyvsp[0].integer.value = 1;
+                           }
+                         yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp 
|| yyvsp[0].integer.unsignedp;
+                         if (yyval.integer.unsignedp)
+                           yyval.integer.value = (unsigned long) 
yyvsp[-2].integer.value / yyvsp[0].integer.value;
+                         else
+                           {
+                             yyval.integer.value = yyvsp[-2].integer.value / 
yyvsp[0].integer.value;
+                             if ((yyval.integer.value & 
yyvsp[-2].integer.value & yyvsp[0].integer.value) < 0)
+                               integer_overflow ();
+                           } }
+    break;
+case 14:
+#line 213 "cccp.y"
+{ if (yyvsp[0].integer.value == 0)
+                           {
+                             error ("division by zero in #if");
+                             yyvsp[0].integer.value = 1;
+                           }
+                         yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp 
|| yyvsp[0].integer.unsignedp;
+                         if (yyval.integer.unsignedp)
+                           yyval.integer.value = (unsigned long) 
yyvsp[-2].integer.value % yyvsp[0].integer.value;
+                         else
+                           yyval.integer.value = yyvsp[-2].integer.value % 
yyvsp[0].integer.value; }
+    break;
+case 15:
+#line 224 "cccp.y"
+{ yyval.integer.value = yyvsp[-2].integer.value + yyvsp[0].integer.value;
+                         yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp 
|| yyvsp[0].integer.unsignedp;
+                         if (! yyval.integer.unsignedp
+                             && ! possible_sum_sign (yyvsp[-2].integer.value, 
yyvsp[0].integer.value,
+                                                     yyval.integer.value))
+                           integer_overflow (); }
+    break;
+case 16:
+#line 231 "cccp.y"
+{ yyval.integer.value = yyvsp[-2].integer.value - yyvsp[0].integer.value;
+                         yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp 
|| yyvsp[0].integer.unsignedp;
+                         if (! yyval.integer.unsignedp
+                             && ! possible_sum_sign (yyval.integer.value, 
yyvsp[0].integer.value,
+                                                     yyvsp[-2].integer.value))
+                           integer_overflow (); }
+    break;
+case 17:
+#line 238 "cccp.y"
+{ yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp;
+                         if (yyvsp[0].integer.value < 0 && ! 
yyvsp[0].integer.unsignedp)
+                           yyval.integer.value = right_shift 
(&yyvsp[-2].integer, -yyvsp[0].integer.value);
+                         else
+                           yyval.integer.value = left_shift 
(&yyvsp[-2].integer, yyvsp[0].integer.value); }
+    break;
+case 18:
+#line 244 "cccp.y"
+{ yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp;
+                         if (yyvsp[0].integer.value < 0 && ! 
yyvsp[0].integer.unsignedp)
+                           yyval.integer.value = left_shift 
(&yyvsp[-2].integer, -yyvsp[0].integer.value);
+                         else
+                           yyval.integer.value = right_shift 
(&yyvsp[-2].integer, yyvsp[0].integer.value); }
+    break;
+case 19:
+#line 250 "cccp.y"
+{ yyval.integer.value = (yyvsp[-2].integer.value == yyvsp[0].integer.value);
+                         yyval.integer.unsignedp = 0; }
+    break;
+case 20:
+#line 253 "cccp.y"
+{ yyval.integer.value = (yyvsp[-2].integer.value != yyvsp[0].integer.value);
+                         yyval.integer.unsignedp = 0; }
+    break;
+case 21:
+#line 256 "cccp.y"
+{ yyval.integer.unsignedp = 0;
+                         if (yyvsp[-2].integer.unsignedp || 
yyvsp[0].integer.unsignedp)
+                           yyval.integer.value = (unsigned long) 
yyvsp[-2].integer.value <= yyvsp[0].integer.value;
+                         else
+                           yyval.integer.value = yyvsp[-2].integer.value <= 
yyvsp[0].integer.value; }
+    break;
+case 22:
+#line 262 "cccp.y"
+{ yyval.integer.unsignedp = 0;
+                         if (yyvsp[-2].integer.unsignedp || 
yyvsp[0].integer.unsignedp)
+                           yyval.integer.value = (unsigned long) 
yyvsp[-2].integer.value >= yyvsp[0].integer.value;
+                         else
+                           yyval.integer.value = yyvsp[-2].integer.value >= 
yyvsp[0].integer.value; }
+    break;
+case 23:
+#line 268 "cccp.y"
+{ yyval.integer.unsignedp = 0;
+                         if (yyvsp[-2].integer.unsignedp || 
yyvsp[0].integer.unsignedp)
+                           yyval.integer.value = (unsigned long) 
yyvsp[-2].integer.value < yyvsp[0].integer.value;
+                         else
+                           yyval.integer.value = yyvsp[-2].integer.value < 
yyvsp[0].integer.value; }
+    break;
+case 24:
+#line 274 "cccp.y"
+{ yyval.integer.unsignedp = 0;
+                         if (yyvsp[-2].integer.unsignedp || 
yyvsp[0].integer.unsignedp)
+                           yyval.integer.value = (unsigned long) 
yyvsp[-2].integer.value > yyvsp[0].integer.value;
+                         else
+                           yyval.integer.value = yyvsp[-2].integer.value > 
yyvsp[0].integer.value; }
+    break;
+case 25:
+#line 280 "cccp.y"
+{ yyval.integer.value = yyvsp[-2].integer.value & yyvsp[0].integer.value;
+                         yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp 
|| yyvsp[0].integer.unsignedp; }
+    break;
+case 26:
+#line 283 "cccp.y"
+{ yyval.integer.value = yyvsp[-2].integer.value ^ yyvsp[0].integer.value;
+                         yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp 
|| yyvsp[0].integer.unsignedp; }
+    break;
+case 27:
+#line 286 "cccp.y"
+{ yyval.integer.value = yyvsp[-2].integer.value | yyvsp[0].integer.value;
+                         yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp 
|| yyvsp[0].integer.unsignedp; }
+    break;
+case 28:
+#line 289 "cccp.y"
+{ yyval.integer.value = (yyvsp[-2].integer.value && yyvsp[0].integer.value);
+                         yyval.integer.unsignedp = 0; }
+    break;
+case 29:
+#line 292 "cccp.y"
+{ yyval.integer.value = (yyvsp[-2].integer.value || yyvsp[0].integer.value);
+                         yyval.integer.unsignedp = 0; }
+    break;
+case 30:
+#line 295 "cccp.y"
+{ yyval.integer.value = yyvsp[-4].integer.value ? yyvsp[-2].integer.value : 
yyvsp[0].integer.value;
+                         yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp 
|| yyvsp[0].integer.unsignedp; }
+    break;
+case 31:
+#line 298 "cccp.y"
+{ yyval.integer = yylval.integer; }
+    break;
+case 32:
+#line 300 "cccp.y"
+{ yyval.integer = yylval.integer; }
+    break;
+case 33:
+#line 302 "cccp.y"
+{ yyval.integer.value = 0;
+                         yyval.integer.unsignedp = 0; }
+    break;
+case 34:
+#line 307 "cccp.y"
+{ yyval.keywords = 0; }
+    break;
+case 35:
+#line 309 "cccp.y"
+{ struct arglist *temp;
+                         yyval.keywords = (struct arglist *) xmalloc (sizeof 
(struct arglist));
+                         yyval.keywords->next = yyvsp[-2].keywords;
+                         yyval.keywords->name = (U_CHAR *) "(";
+                         yyval.keywords->length = 1;
+                         temp = yyval.keywords;
+                         while (temp != 0 && temp->next != 0)
+                           temp = temp->next;
+                         temp->next = (struct arglist *) xmalloc (sizeof 
(struct arglist));
+                         temp->next->next = yyvsp[0].keywords;
+                         temp->next->name = (U_CHAR *) ")";
+                         temp->next->length = 1; }
+    break;
+case 36:
+#line 322 "cccp.y"
+{ yyval.keywords = (struct arglist *) xmalloc (sizeof (struct arglist));
+                         yyval.keywords->name = yyvsp[-1].name.address;
+                         yyval.keywords->length = yyvsp[-1].name.length;
+                         yyval.keywords->next = yyvsp[0].keywords; }
+    break;
+}
+
+#line 727 "/usr/share/bison/bison.simple"
+
+
+  yyvsp -= yylen;
+  yyssp -= yylen;
+#if YYLSP_NEEDED
+  yylsp -= yylen;
+#endif
+
+#if YYDEBUG
+  if (yydebug)
+    {
+      short *yyssp1 = yyss - 1;
+      YYFPRINTF (stderr, "state stack now");
+      while (yyssp1 != yyssp)
+       YYFPRINTF (stderr, " %d", *++yyssp1);
+      YYFPRINTF (stderr, "\n");
+    }
+#endif
+
+  *++yyvsp = yyval;
+#if YYLSP_NEEDED
+  *++yylsp = yyloc;
+#endif
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
+  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTBASE];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+
+#ifdef YYERROR_VERBOSE
+      yyn = yypact[yystate];
+
+      if (yyn > YYFLAG && yyn < YYLAST)
+       {
+         YYSIZE_T yysize = 0;
+         char *yymsg;
+         int yyx, yycount;
+
+         yycount = 0;
+         /* Start YYX at -YYN if negative to avoid negative indexes in
+            YYCHECK.  */
+         for (yyx = yyn < 0 ? -yyn : 0;
+              yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
+           if (yycheck[yyx + yyn] == yyx)
+             yysize += yystrlen (yytname[yyx]) + 15, yycount++;
+         yysize += yystrlen ("parse error, unexpected ") + 1;
+         yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
+         yymsg = (char *) YYSTACK_ALLOC (yysize);
+         if (yymsg != 0)
+           {
+             char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
+             yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
+
+             if (yycount < 5)
+               {
+                 yycount = 0;
+                 for (yyx = yyn < 0 ? -yyn : 0;
+                      yyx < (int) (sizeof (yytname) / sizeof (char *));
+                      yyx++)
+                   if (yycheck[yyx + yyn] == yyx)
+                     {
+                       const char *yyq = ! yycount ? ", expecting " : " or ";
+                       yyp = yystpcpy (yyp, yyq);
+                       yyp = yystpcpy (yyp, yytname[yyx]);
+                       yycount++;
+                     }
+               }
+             yyerror (yymsg);
+             YYSTACK_FREE (yymsg);
+           }
+         else
+           yyerror ("parse error; also virtual memory exhausted");
+       }
+      else
+#endif /* defined (YYERROR_VERBOSE) */
+       yyerror ("parse error");
+    }
+  goto yyerrlab1;
+
+
+/*--------------------------------------------------.
+| yyerrlab1 -- error raised explicitly by an action |
+`--------------------------------------------------*/
+yyerrlab1:
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+        error, discard it.  */
+
+      /* return failure if at end of input */
+      if (yychar == YYEOF)
+       YYABORT;
+      YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
+                 yychar, yytname[yychar1]));
+      yychar = YYEMPTY;
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+
+  yyerrstatus = 3;             /* Each real token shifted decrements this */
+
+  goto yyerrhandle;
+
+
+/*-------------------------------------------------------------------.
+| yyerrdefault -- current state does not do anything special for the |
+| error token.                                                       |
+`-------------------------------------------------------------------*/
+yyerrdefault:
+#if 0
+  /* This is wrong; only states that explicitly want error tokens
+     should shift them.  */
+
+  /* If its default is to accept any token, ok.  Otherwise pop it.  */
+  yyn = yydefact[yystate];
+  if (yyn)
+    goto yydefault;
+#endif
+
+
+/*---------------------------------------------------------------.
+| yyerrpop -- pop the current state because it cannot handle the |
+| error token                                                    |
+`---------------------------------------------------------------*/
+yyerrpop:
+  if (yyssp == yyss)
+    YYABORT;
+  yyvsp--;
+  yystate = *--yyssp;
+#if YYLSP_NEEDED
+  yylsp--;
+#endif
+
+#if YYDEBUG
+  if (yydebug)
+    {
+      short *yyssp1 = yyss - 1;
+      YYFPRINTF (stderr, "Error: state stack now");
+      while (yyssp1 != yyssp)
+       YYFPRINTF (stderr, " %d", *++yyssp1);
+      YYFPRINTF (stderr, "\n");
+    }
+#endif
+
+/*--------------.
+| yyerrhandle.  |
+`--------------*/
+yyerrhandle:
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yyerrdefault;
+
+  yyn += YYTERROR;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
+    goto yyerrdefault;
+
+  yyn = yytable[yyn];
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+       goto yyerrpop;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrpop;
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  YYDPRINTF ((stderr, "Shifting error token, "));
+
+  *++yyvsp = yylval;
+#if YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+/*---------------------------------------------.
+| yyoverflowab -- parser overflow comes here.  |
+`---------------------------------------------*/
+yyoverflowlab:
+  yyerror ("parser stack overflow");
+  yyresult = 2;
+  /* Fall through.  */
+
+yyreturn:
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+  return yyresult;
+}
+#line 327 "cccp.y"
+
+
+/* During parsing of a C expression, the pointer to the next character
+   is in this variable.  */
+
+static char *lexptr;
+
+/* Take care of parsing a number (anything that starts with a digit).
+   Set yylval and return the token type; update lexptr.
+   LEN is the number of characters in it.  */
+
+/* maybe needs to actually deal with floating point numbers */
+
+int
+parse_number (olen)
+     int olen;
+{
+  register char *p = lexptr;
+  register int c;
+  register unsigned long n = 0, nd, ULONG_MAX_over_base;
+  register int base = 10;
+  register int len = olen;
+  register int overflow = 0;
+  register int digit, largest_digit = 0;
+  int spec_long = 0;
+
+  for (c = 0; c < len; c++)
+    if (p[c] == '.') {
+      /* It's a float since it contains a point.  */
+      yyerror ("floating point numbers not allowed in #if expressions");
+      return ERROR;
+    }
+
+  yylval.integer.unsignedp = 0;
+
+  if (len >= 3 && (!strncmp (p, "0x", 2) || !strncmp (p, "0X", 2))) {
+    p += 2;
+    base = 16;
+    len -= 2;
+  }
+  else if (*p == '0')
+    base = 8;
+
+  ULONG_MAX_over_base = (unsigned long) -1 / base;
+
+  for (; len > 0; len--) {
+    c = *p++;
+
+    if (c >= '0' && c <= '9')
+      digit = c - '0';
+    else if (base == 16 && c >= 'a' && c <= 'f')
+      digit = c - 'a' + 10;
+    else if (base == 16 && c >= 'A' && c <= 'F')
+      digit = c - 'A' + 10;
+    else {
+      /* `l' means long, and `u' means unsigned.  */
+      while (1) {
+       if (c == 'l' || c == 'L')
+         {
+           if (spec_long)
+             yyerror ("two `l's in integer constant");
+           spec_long = 1;
+         }
+       else if (c == 'u' || c == 'U')
+         {
+           if (yylval.integer.unsignedp)
+             yyerror ("two `u's in integer constant");
+           yylval.integer.unsignedp = 1;
+         }
+       else
+         break;
+
+       if (--len == 0)
+         break;
+       c = *p++;
+      }
+      /* Don't look for any more digits after the suffixes.  */
+      break;
+    }
+    if (largest_digit < digit)
+      largest_digit = digit;
+    nd = n * base + digit;
+    overflow |= ULONG_MAX_over_base < n | nd < n;
+    n = nd;
+  }
+
+  if (len != 0) {
+    yyerror ("Invalid number in #if expression");
+    return ERROR;
+  }
+
+  if (base <= largest_digit)
+    warning ("integer constant contains digits beyond the radix");
+
+  if (overflow)
+    warning ("integer constant out of range");
+
+  /* If too big to be signed, consider it unsigned.  */
+  if ((long) n < 0 && ! yylval.integer.unsignedp)
+    {
+      if (base == 10)
+       warning ("integer constant is so large that it is unsigned");
+      yylval.integer.unsignedp = 1;
+    }
+
+  lexptr = p;
+  yylval.integer.value = n;
+  return INT;
+}
+
+struct token {
+  char *operator;
+  int token;
+};
+
+static struct token tokentab2[] = {
+  {"&&", AND},
+  {"||", OR},
+  {"<<", LSH},
+  {">>", RSH},
+  {"==", EQUAL},
+  {"!=", NOTEQUAL},
+  {"<=", LEQ},
+  {">=", GEQ},
+  {"++", ERROR},
+  {"--", ERROR},
+  {NULL, ERROR}
+};
+
+/* Read one token, getting characters through lexptr.  */
+
+int
+yylex ()
+{
+  register int c;
+  register int namelen;
+  register unsigned char *tokstart;
+  register struct token *toktab;
+  int wide_flag;
+
+ retry:
+
+  tokstart = (unsigned char *) lexptr;
+  c = *tokstart;
+  /* See if it is a special token of length 2.  */
+  if (! keyword_parsing)
+    for (toktab = tokentab2; toktab->operator != NULL; toktab++)
+      if (c == *toktab->operator && tokstart[1] == toktab->operator[1]) {
+       lexptr += 2;
+       if (toktab->token == ERROR)
+         {
+           char *buf = (char *) alloca (40);
+           sprintf (buf, "`%s' not allowed in operand of `#if'", 
toktab->operator);
+           yyerror (buf);
+         }
+       return toktab->token;
+      }
+
+  switch (c) {
+  case 0:
+    return 0;
+    
+  case ' ':
+  case '\t':
+  case '\r':
+  case '\n':
+    lexptr++;
+    goto retry;
+    
+  case 'L':
+    /* Capital L may start a wide-string or wide-character constant.  */
+    if (lexptr[1] == '\'')
+      {
+       lexptr++;
+       wide_flag = 1;
+       goto char_constant;
+      }
+    if (lexptr[1] == '"')
+      {
+       lexptr++;
+       wide_flag = 1;
+       goto string_constant;
+      }
+    break;
+
+  case '\'':
+    wide_flag = 0;
+  char_constant:
+    lexptr++;
+    if (keyword_parsing) {
+      char *start_ptr = lexptr - 1;
+      while (1) {
+       c = *lexptr++;
+       if (c == '\\')
+         c = parse_escape (&lexptr);
+       else if (c == '\'')
+         break;
+      }
+      yylval.name.address = tokstart;
+      yylval.name.length = lexptr - start_ptr;
+      return NAME;
+    }
+
+    /* This code for reading a character constant
+       handles multicharacter constants and wide characters.
+       It is mostly copied from c-lex.c.  */
+    {
+      register int result = 0;
+      register num_chars = 0;
+      unsigned width = CHAR_TYPE_SIZE;
+      int max_chars;
+      char *token_buffer;
+
+      if (wide_flag)
+       {
+         width = WCHAR_TYPE_SIZE;
+#ifdef MULTIBYTE_CHARS
+         max_chars = MB_CUR_MAX;
+#else
+         max_chars = 1;
+#endif
+       }
+      else
+       max_chars = LONG_TYPE_SIZE / width;
+
+      token_buffer = (char *) alloca (max_chars + 1);
+
+      while (1)
+       {
+         c = *lexptr++;
+
+         if (c == '\'' || c == EOF)
+           break;
+
+         if (c == '\\')
+           {
+             c = parse_escape (&lexptr);
+             if (width < HOST_BITS_PER_INT
+                 && (unsigned) c >= (1 << width))
+               pedwarn ("escape sequence out of range for character");
+           }
+
+         num_chars++;
+
+         /* Merge character into result; ignore excess chars.  */
+         if (num_chars < max_chars + 1)
+           {
+             if (width < HOST_BITS_PER_INT)
+               result = (result << width) | (c & ((1 << width) - 1));
+             else
+               result = c;
+             token_buffer[num_chars - 1] = c;
+           }
+       }
+
+      token_buffer[num_chars] = 0;
+
+      if (c != '\'')
+       error ("malformatted character constant");
+      else if (num_chars == 0)
+       error ("empty character constant");
+      else if (num_chars > max_chars)
+       {
+         num_chars = max_chars;
+         error ("character constant too long");
+       }
+      else if (num_chars != 1 && ! traditional)
+       warning ("multi-character character constant");
+
+      /* If char type is signed, sign-extend the constant.  */
+      if (! wide_flag)
+       {
+         int num_bits = num_chars * width;
+
+         if (lookup ("__CHAR_UNSIGNED__", sizeof ("__CHAR_UNSIGNED__")-1, -1)
+             || ((result >> (num_bits - 1)) & 1) == 0)
+           yylval.integer.value
+             = result & ((unsigned long) ~0 >> (HOST_BITS_PER_LONG - 
num_bits));
+         else
+           yylval.integer.value
+             = result | ~((unsigned long) ~0 >> (HOST_BITS_PER_LONG - 
num_bits));
+       }
+      else
+       {
+#ifdef MULTIBYTE_CHARS
+         /* Set the initial shift state and convert the next sequence.  */
+         result = 0;
+         /* In all locales L'\0' is zero and mbtowc will return zero,
+            so don't use it.  */
+         if (num_chars > 1
+             || (num_chars == 1 && token_buffer[0] != '\0'))
+           {
+             wchar_t wc;
+             (void) mbtowc (NULL_PTR, NULL_PTR, 0);
+             if (mbtowc (& wc, token_buffer, num_chars) == num_chars)
+               result = wc;
+             else
+               warning ("Ignoring invalid multibyte character");
+           }
+#endif
+         yylval.integer.value = result;
+       }
+    }
+
+    /* This is always a signed type.  */
+    yylval.integer.unsignedp = 0;
+    
+    return CHAR;
+
+    /* some of these chars are invalid in constant expressions;
+       maybe do something about them later */
+  case '/':
+  case '+':
+  case '-':
+  case '*':
+  case '%':
+  case '|':
+  case '&':
+  case '^':
+  case '~':
+  case '!':
+  case '@':
+  case '<':
+  case '>':
+  case '[':
+  case ']':
+  case '.':
+  case '?':
+  case ':':
+  case '=':
+  case '{':
+  case '}':
+  case ',':
+  case '#':
+    if (keyword_parsing)
+      break;
+  case '(':
+  case ')':
+    lexptr++;
+    return c;
+
+  case '"':
+  string_constant:
+    if (keyword_parsing) {
+      char *start_ptr = lexptr;
+      lexptr++;
+      while (1) {
+       c = *lexptr++;
+       if (c == '\\')
+         c = parse_escape (&lexptr);
+       else if (c == '"')
+         break;
+      }
+      yylval.name.address = tokstart;
+      yylval.name.length = lexptr - start_ptr;
+      return NAME;
+    }
+    yyerror ("string constants not allowed in #if expressions");
+    return ERROR;
+  }
+
+  if (c >= '0' && c <= '9' && !keyword_parsing) {
+    /* It's a number */
+    for (namelen = 0;
+        c = tokstart[namelen], is_idchar[c] || c == '.'; 
+        namelen++)
+      ;
+    return parse_number (namelen);
+  }
+
+  /* It is a name.  See how long it is.  */
+
+  if (keyword_parsing) {
+    for (namelen = 0;; namelen++) {
+      if (is_hor_space[tokstart[namelen]])
+       break;
+      if (tokstart[namelen] == '(' || tokstart[namelen] == ')')
+       break;
+      if (tokstart[namelen] == '"' || tokstart[namelen] == '\'')
+       break;
+    }
+  } else {
+    if (!is_idstart[c]) {
+      yyerror ("Invalid token in expression");
+      return ERROR;
+    }
+
+    for (namelen = 0; is_idchar[tokstart[namelen]]; namelen++)
+      ;
+  }
+  
+  lexptr += namelen;
+  yylval.name.address = tokstart;
+  yylval.name.length = namelen;
+  return NAME;
+}
+
+
+/* Parse a C escape sequence.  STRING_PTR points to a variable
+   containing a pointer to the string to parse.  That pointer
+   is updated past the characters we use.  The value of the
+   escape sequence is returned.
+
+   A negative value means the sequence \ newline was seen,
+   which is supposed to be equivalent to nothing at all.
+
+   If \ is followed by a null character, we return a negative
+   value and leave the string pointer pointing at the null character.
+
+   If \ is followed by 000, we return 0 and leave the string pointer
+   after the zeros.  A value of 0 does not mean end of string.  */
+
+int
+parse_escape (string_ptr)
+     char **string_ptr;
+{
+  register int c = *(*string_ptr)++;
+  switch (c)
+    {
+    case 'a':
+      return TARGET_BELL;
+    case 'b':
+      return TARGET_BS;
+    case 'e':
+    case 'E':
+      if (pedantic)
+       pedwarn ("non-ANSI-standard escape sequence, `\\%c'", c);
+      return 033;
+    case 'f':
+      return TARGET_FF;
+    case 'n':
+      return TARGET_NEWLINE;
+    case 'r':
+      return TARGET_CR;
+    case 't':
+      return TARGET_TAB;
+    case 'v':
+      return TARGET_VT;
+    case '\n':
+      return -2;
+    case 0:
+      (*string_ptr)--;
+      return 0;
+      
+    case '0':
+    case '1':
+    case '2':
+    case '3':
+    case '4':
+    case '5':
+    case '6':
+    case '7':
+      {
+       register int i = c - '0';
+       register int count = 0;
+       while (++count < 3)
+         {
+           c = *(*string_ptr)++;
+           if (c >= '0' && c <= '7')
+             i = (i << 3) + c - '0';
+           else
+             {
+               (*string_ptr)--;
+               break;
+             }
+         }
+       if ((i & ~((1 << CHAR_TYPE_SIZE) - 1)) != 0)
+         {
+           i &= (1 << CHAR_TYPE_SIZE) - 1;
+           warning ("octal character constant does not fit in a byte");
+         }
+       return i;
+      }
+    case 'x':
+      {
+       register unsigned i = 0, overflow = 0, digits_found = 0, digit;
+       for (;;)
+         {
+           c = *(*string_ptr)++;
+           if (c >= '0' && c <= '9')
+             digit = c - '0';
+           else if (c >= 'a' && c <= 'f')
+             digit = c - 'a' + 10;
+           else if (c >= 'A' && c <= 'F')
+             digit = c - 'A' + 10;
+           else
+             {
+               (*string_ptr)--;
+               break;
+             }
+           overflow |= i ^ (i << 4 >> 4);
+           i = (i << 4) + digit;
+           digits_found = 1;
+         }
+       if (!digits_found)
+         yyerror ("\\x used with no following hex digits");
+       if (overflow | (i & ~((1 << BITS_PER_UNIT) - 1)))
+         {
+           i &= (1 << BITS_PER_UNIT) - 1;
+           warning ("hex character constant does not fit in a byte");
+         }
+       return i;
+      }
+    default:
+      return c;
+    }
+}
+
+void
+yyerror (s)
+     char *s;
+{
+  error (s);
+  longjmp (parse_return_error, 1);
+}
+
+static void
+integer_overflow ()
+{
+  if (pedantic)
+    pedwarn ("integer overflow in preprocessor expression");
+}
+
+static long
+left_shift (a, b)
+     struct constant *a;
+     unsigned long b;
+{
+  if (b >= HOST_BITS_PER_LONG)
+    {
+      if (! a->unsignedp && a->value != 0)
+       integer_overflow ();
+      return 0;
+    }
+  else if (a->unsignedp)
+    return (unsigned long) a->value << b;
+  else
+    {
+      long l = a->value << b;
+      if (l >> b != a->value)
+       integer_overflow ();
+      return l;
+    }
+}
+
+static long
+right_shift (a, b)
+     struct constant *a;
+     unsigned long b;
+{
+  if (b >= HOST_BITS_PER_LONG)
+    return a->unsignedp ? 0 : a->value >> (HOST_BITS_PER_LONG - 1);
+  else if (a->unsignedp)
+    return (unsigned long) a->value >> b;
+  else
+    return a->value >> b;
+}
+
+/* This page contains the entry point to this file.  */
+
+/* Parse STRING as an expression, and complain if this fails
+   to use up all of the contents of STRING.  */
+/* We do not support C comments.  They should be removed before
+   this function is called.  */
+
+int
+parse_c_expression (string)
+     char *string;
+{
+  lexptr = string;
+  
+  if (lexptr == 0 || *lexptr == 0) {
+    error ("empty #if expression");
+    return 0;                  /* don't include the #if group */
+  }
+
+  /* if there is some sort of scanning error, just return 0 and assume
+     the parsing routine has printed an error message somewhere.
+     there is surely a better thing to do than this.     */
+  if (setjmp (parse_return_error))
+    return 0;
+
+  if (yyparse ())
+    return 0;                  /* actually this is never reached
+                                  the way things stand. */
+  if (*lexptr)
+    error ("Junk after end of expression.");
+
+  return expression_value;     /* set by yyparse () */
+}
+
+#ifdef TEST_EXP_READER
+extern int yydebug;
+
+/* Main program for testing purposes.  */
+int
+main ()
+{
+  int n, c;
+  char buf[1024];
+
+/*
+  yydebug = 1;
+*/
+  initialize_random_junk ();
+
+  for (;;) {
+    printf ("enter expression: ");
+    n = 0;
+    while ((buf[n] = getchar ()) != '\n' && buf[n] != EOF)
+      n++;
+    if (buf[n] == EOF)
+      break;
+    buf[n] = '\0';
+    printf ("parser returned %d\n", parse_c_expression (buf));
+  }
+
+  return 0;
+}
+
+/* table to tell if char can be part of a C identifier. */
+unsigned char is_idchar[256];
+/* table to tell if char can be first char of a c identifier. */
+unsigned char is_idstart[256];
+/* table to tell if c is horizontal space.  isspace () thinks that
+   newline is space; this is not a good idea for this program. */
+char is_hor_space[256];
+
+/*
+ * initialize random junk in the hash table and maybe other places
+ */
+initialize_random_junk ()
+{
+  register int i;
+
+  /*
+   * Set up is_idchar and is_idstart tables.  These should be
+   * faster than saying (is_alpha (c) || c == '_'), etc.
+   * Must do set up these things before calling any routines tthat
+   * refer to them.
+   */
+  for (i = 'a'; i <= 'z'; i++) {
+    ++is_idchar[i - 'a' + 'A'];
+    ++is_idchar[i];
+    ++is_idstart[i - 'a' + 'A'];
+    ++is_idstart[i];
+  }
+  for (i = '0'; i <= '9'; i++)
+    ++is_idchar[i];
+  ++is_idchar['_'];
+  ++is_idstart['_'];
+#if DOLLARS_IN_IDENTIFIERS
+  ++is_idchar['$'];
+  ++is_idstart['$'];
+#endif
+
+  /* horizontal space table */
+  ++is_hor_space[' '];
+  ++is_hor_space['\t'];
+}
+
+error (msg)
+{
+  printf ("error: %s\n", msg);
+}
+
+warning (msg)
+{
+  printf ("warning: %s\n", msg);
+}
+
+struct hashnode *
+lookup (name, len, hash)
+     char *name;
+     int len;
+     int hash;
+{
+  return (DEFAULT_SIGNED_CHAR) ? 0 : ((struct hashnode *) -1);
+}
+#endif
diff --git a/test/etags/y-src/cccp.y b/test/etags/y-src/cccp.y
new file mode 100644
index 0000000..1cd2111
--- /dev/null
+++ b/test/etags/y-src/cccp.y
@@ -0,0 +1,1006 @@
+/* Parse C expressions for CCCP.
+   Copyright (C) 1987, 1992 Free Software Foundation.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them.   Help stamp out software-hoarding!
+
+ Adapted from expread.y of GDB by Paul Rubin, July 1986.  */
+
+/* Parse a C expression from text in a string  */
+   
+%{
+#include "config.h"
+#include <setjmp.h>
+/* #define YYDEBUG 1 */
+
+#ifdef MULTIBYTE_CHARS
+#include <stdlib.h>
+#include <locale.h>
+#endif
+
+#include <stdio.h>
+
+typedef unsigned char U_CHAR;
+
+/* This is used for communicating lists of keywords with cccp.c.  */
+struct arglist {
+  struct arglist *next;
+  U_CHAR *name;
+  int length;
+  int argno;
+};
+
+/* Define a generic NULL if one hasn't already been defined.  */
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+#ifndef GENERIC_PTR
+#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
+#define GENERIC_PTR void *
+#else
+#define GENERIC_PTR char *
+#endif
+#endif
+
+#ifndef NULL_PTR
+#define NULL_PTR ((GENERIC_PTR)0)
+#endif
+
+int yylex ();
+void yyerror ();
+int expression_value;
+
+static jmp_buf parse_return_error;
+
+/* Nonzero means count most punctuation as part of a name.  */
+static int keyword_parsing = 0;
+
+/* some external tables of character types */
+extern unsigned char is_idstart[], is_idchar[], is_hor_space[];
+
+extern char *xmalloc ();
+
+/* Flag for -pedantic.  */
+extern int pedantic;
+
+/* Flag for -traditional.  */
+extern int traditional;
+
+#ifndef CHAR_TYPE_SIZE
+#define CHAR_TYPE_SIZE BITS_PER_UNIT
+#endif
+
+#ifndef INT_TYPE_SIZE
+#define INT_TYPE_SIZE BITS_PER_WORD
+#endif
+
+#ifndef LONG_TYPE_SIZE
+#define LONG_TYPE_SIZE BITS_PER_WORD
+#endif
+
+#ifndef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE INT_TYPE_SIZE
+#endif
+
+/* Yield nonzero if adding two numbers with A's and B's signs can yield a
+   number with SUM's sign, where A, B, and SUM are all C integers.  */
+#define possible_sum_sign(a, b, sum) ((((a) ^ (b)) | ~ ((a) ^ (sum))) < 0)
+
+static void integer_overflow ();
+static long left_shift ();
+static long right_shift ();
+%}
+
+%union {
+  struct constant {long value; int unsignedp;} integer;
+  struct name {U_CHAR *address; int length;} name;
+  struct arglist *keywords;
+  int voidval;
+  char *sval;
+}
+
+%type <integer> exp exp1 start
+%type <keywords> keywords
+%token <integer> INT CHAR
+%token <name> NAME
+%token <integer> ERROR
+
+%right '?' ':'
+%left ','
+%left OR
+%left AND
+%left '|'
+%left '^'
+%left '&'
+%left EQUAL NOTEQUAL
+%left '<' '>' LEQ GEQ
+%left LSH RSH
+%left '+' '-'
+%left '*' '/' '%'
+%right UNARY
+
+/* %expect 40 */
+
+%%
+
+start   :      exp1
+               { expression_value = $1.value; }
+       ;
+
+/* Expressions, including the comma operator.  */
+exp1   :       exp
+       |       exp1 ',' exp
+                       { if (pedantic)
+                           pedwarn ("comma operator in operand of `#if'");
+                         $$ = $3; }
+       ;
+
+/* Expressions, not including the comma operator.  */
+exp    :       '-' exp    %prec UNARY
+                       { $$.value = - $2.value;
+                         if (($$.value & $2.value) < 0 && ! $2.unsignedp)
+                           integer_overflow ();
+                         $$.unsignedp = $2.unsignedp; }
+       |       '!' exp    %prec UNARY
+                       { $$.value = ! $2.value;
+                         $$.unsignedp = 0; }
+       |       '+' exp    %prec UNARY
+                       { $$ = $2; }
+       |       '~' exp    %prec UNARY
+                       { $$.value = ~ $2.value;
+                         $$.unsignedp = $2.unsignedp; }
+       |       '#' NAME
+                       { $$.value = check_assertion ($2.address, $2.length,
+                                                     0, NULL_PTR);
+                         $$.unsignedp = 0; }
+       |       '#' NAME
+                       { keyword_parsing = 1; }
+               '(' keywords ')'
+                       { $$.value = check_assertion ($2.address, $2.length,
+                                                     1, $5);
+                         keyword_parsing = 0;
+                         $$.unsignedp = 0; }
+       |       '(' exp1 ')'
+                       { $$ = $2; }
+       ;
+
+/* Binary operators in order of decreasing precedence.  */
+exp    :       exp '*' exp
+                       { $$.unsignedp = $1.unsignedp || $3.unsignedp;
+                         if ($$.unsignedp)
+                           $$.value = (unsigned long) $1.value * $3.value;
+                         else
+                           {
+                             $$.value = $1.value * $3.value;
+                             if ($1.value
+                                 && ($$.value / $1.value != $3.value
+                                     || ($$.value & $1.value & $3.value) < 0))
+                               integer_overflow ();
+                           } }
+       |       exp '/' exp
+                       { if ($3.value == 0)
+                           {
+                             error ("division by zero in #if");
+                             $3.value = 1;
+                           }
+                         $$.unsignedp = $1.unsignedp || $3.unsignedp;
+                         if ($$.unsignedp)
+                           $$.value = (unsigned long) $1.value / $3.value;
+                         else
+                           {
+                             $$.value = $1.value / $3.value;
+                             if (($$.value & $1.value & $3.value) < 0)
+                               integer_overflow ();
+                           } }
+       |       exp '%' exp
+                       { if ($3.value == 0)
+                           {
+                             error ("division by zero in #if");
+                             $3.value = 1;
+                           }
+                         $$.unsignedp = $1.unsignedp || $3.unsignedp;
+                         if ($$.unsignedp)
+                           $$.value = (unsigned long) $1.value % $3.value;
+                         else
+                           $$.value = $1.value % $3.value; }
+       |       exp '+' exp
+                       { $$.value = $1.value + $3.value;
+                         $$.unsignedp = $1.unsignedp || $3.unsignedp;
+                         if (! $$.unsignedp
+                             && ! possible_sum_sign ($1.value, $3.value,
+                                                     $$.value))
+                           integer_overflow (); }
+       |       exp '-' exp
+                       { $$.value = $1.value - $3.value;
+                         $$.unsignedp = $1.unsignedp || $3.unsignedp;
+                         if (! $$.unsignedp
+                             && ! possible_sum_sign ($$.value, $3.value,
+                                                     $1.value))
+                           integer_overflow (); }
+       |       exp LSH exp
+                       { $$.unsignedp = $1.unsignedp;
+                         if ($3.value < 0 && ! $3.unsignedp)
+                           $$.value = right_shift (&$1, -$3.value);
+                         else
+                           $$.value = left_shift (&$1, $3.value); }
+       |       exp RSH exp
+                       { $$.unsignedp = $1.unsignedp;
+                         if ($3.value < 0 && ! $3.unsignedp)
+                           $$.value = left_shift (&$1, -$3.value);
+                         else
+                           $$.value = right_shift (&$1, $3.value); }
+       |       exp EQUAL exp
+                       { $$.value = ($1.value == $3.value);
+                         $$.unsignedp = 0; }
+       |       exp NOTEQUAL exp
+                       { $$.value = ($1.value != $3.value);
+                         $$.unsignedp = 0; }
+       |       exp LEQ exp
+                       { $$.unsignedp = 0;
+                         if ($1.unsignedp || $3.unsignedp)
+                           $$.value = (unsigned long) $1.value <= $3.value;
+                         else
+                           $$.value = $1.value <= $3.value; }
+       |       exp GEQ exp
+                       { $$.unsignedp = 0;
+                         if ($1.unsignedp || $3.unsignedp)
+                           $$.value = (unsigned long) $1.value >= $3.value;
+                         else
+                           $$.value = $1.value >= $3.value; }
+       |       exp '<' exp
+                       { $$.unsignedp = 0;
+                         if ($1.unsignedp || $3.unsignedp)
+                           $$.value = (unsigned long) $1.value < $3.value;
+                         else
+                           $$.value = $1.value < $3.value; }
+       |       exp '>' exp
+                       { $$.unsignedp = 0;
+                         if ($1.unsignedp || $3.unsignedp)
+                           $$.value = (unsigned long) $1.value > $3.value;
+                         else
+                           $$.value = $1.value > $3.value; }
+       |       exp '&' exp
+                       { $$.value = $1.value & $3.value;
+                         $$.unsignedp = $1.unsignedp || $3.unsignedp; }
+       |       exp '^' exp
+                       { $$.value = $1.value ^ $3.value;
+                         $$.unsignedp = $1.unsignedp || $3.unsignedp; }
+       |       exp '|' exp
+                       { $$.value = $1.value | $3.value;
+                         $$.unsignedp = $1.unsignedp || $3.unsignedp; }
+       |       exp AND exp
+                       { $$.value = ($1.value && $3.value);
+                         $$.unsignedp = 0; }
+       |       exp OR exp
+                       { $$.value = ($1.value || $3.value);
+                         $$.unsignedp = 0; }
+       |       exp '?' exp ':' exp
+                       { $$.value = $1.value ? $3.value : $5.value;
+                         $$.unsignedp = $3.unsignedp || $5.unsignedp; }
+       |       INT
+                       { $$ = yylval.integer; }
+       |       CHAR
+                       { $$ = yylval.integer; }
+       |       NAME
+                       { $$.value = 0;
+                         $$.unsignedp = 0; }
+       ;
+
+keywords :
+                       { $$ = 0; } 
+       |       '(' keywords ')' keywords
+                       { struct arglist *temp;
+                         $$ = (struct arglist *) xmalloc (sizeof (struct 
arglist));
+                         $$->next = $2;
+                         $$->name = (U_CHAR *) "(";
+                         $$->length = 1;
+                         temp = $$;
+                         while (temp != 0 && temp->next != 0)
+                           temp = temp->next;
+                         temp->next = (struct arglist *) xmalloc (sizeof 
(struct arglist));
+                         temp->next->next = $4;
+                         temp->next->name = (U_CHAR *) ")";
+                         temp->next->length = 1; }
+       |       NAME keywords
+                       { $$ = (struct arglist *) xmalloc (sizeof (struct 
arglist));
+                         $$->name = $1.address;
+                         $$->length = $1.length;
+                         $$->next = $2; } 
+       ;
+%%
+
+/* During parsing of a C expression, the pointer to the next character
+   is in this variable.  */
+
+static char *lexptr;
+
+/* Take care of parsing a number (anything that starts with a digit).
+   Set yylval and return the token type; update lexptr.
+   LEN is the number of characters in it.  */
+
+/* maybe needs to actually deal with floating point numbers */
+
+int
+parse_number (olen)
+     int olen;
+{
+  register char *p = lexptr;
+  register int c;
+  register unsigned long n = 0, nd, ULONG_MAX_over_base;
+  register int base = 10;
+  register int len = olen;
+  register int overflow = 0;
+  register int digit, largest_digit = 0;
+  int spec_long = 0;
+
+  for (c = 0; c < len; c++)
+    if (p[c] == '.') {
+      /* It's a float since it contains a point.  */
+      yyerror ("floating point numbers not allowed in #if expressions");
+      return ERROR;
+    }
+
+  yylval.integer.unsignedp = 0;
+
+  if (len >= 3 && (!strncmp (p, "0x", 2) || !strncmp (p, "0X", 2))) {
+    p += 2;
+    base = 16;
+    len -= 2;
+  }
+  else if (*p == '0')
+    base = 8;
+
+  ULONG_MAX_over_base = (unsigned long) -1 / base;
+
+  for (; len > 0; len--) {
+    c = *p++;
+
+    if (c >= '0' && c <= '9')
+      digit = c - '0';
+    else if (base == 16 && c >= 'a' && c <= 'f')
+      digit = c - 'a' + 10;
+    else if (base == 16 && c >= 'A' && c <= 'F')
+      digit = c - 'A' + 10;
+    else {
+      /* `l' means long, and `u' means unsigned.  */
+      while (1) {
+       if (c == 'l' || c == 'L')
+         {
+           if (spec_long)
+             yyerror ("two `l's in integer constant");
+           spec_long = 1;
+         }
+       else if (c == 'u' || c == 'U')
+         {
+           if (yylval.integer.unsignedp)
+             yyerror ("two `u's in integer constant");
+           yylval.integer.unsignedp = 1;
+         }
+       else
+         break;
+
+       if (--len == 0)
+         break;
+       c = *p++;
+      }
+      /* Don't look for any more digits after the suffixes.  */
+      break;
+    }
+    if (largest_digit < digit)
+      largest_digit = digit;
+    nd = n * base + digit;
+    overflow |= ULONG_MAX_over_base < n | nd < n;
+    n = nd;
+  }
+
+  if (len != 0) {
+    yyerror ("Invalid number in #if expression");
+    return ERROR;
+  }
+
+  if (base <= largest_digit)
+    warning ("integer constant contains digits beyond the radix");
+
+  if (overflow)
+    warning ("integer constant out of range");
+
+  /* If too big to be signed, consider it unsigned.  */
+  if ((long) n < 0 && ! yylval.integer.unsignedp)
+    {
+      if (base == 10)
+       warning ("integer constant is so large that it is unsigned");
+      yylval.integer.unsignedp = 1;
+    }
+
+  lexptr = p;
+  yylval.integer.value = n;
+  return INT;
+}
+
+struct token {
+  char *operator;
+  int token;
+};
+
+static struct token tokentab2[] = {
+  {"&&", AND},
+  {"||", OR},
+  {"<<", LSH},
+  {">>", RSH},
+  {"==", EQUAL},
+  {"!=", NOTEQUAL},
+  {"<=", LEQ},
+  {">=", GEQ},
+  {"++", ERROR},
+  {"--", ERROR},
+  {NULL, ERROR}
+};
+
+/* Read one token, getting characters through lexptr.  */
+
+int
+yylex ()
+{
+  register int c;
+  register int namelen;
+  register unsigned char *tokstart;
+  register struct token *toktab;
+  int wide_flag;
+
+ retry:
+
+  tokstart = (unsigned char *) lexptr;
+  c = *tokstart;
+  /* See if it is a special token of length 2.  */
+  if (! keyword_parsing)
+    for (toktab = tokentab2; toktab->operator != NULL; toktab++)
+      if (c == *toktab->operator && tokstart[1] == toktab->operator[1]) {
+       lexptr += 2;
+       if (toktab->token == ERROR)
+         {
+           char *buf = (char *) alloca (40);
+           sprintf (buf, "`%s' not allowed in operand of `#if'", 
toktab->operator);
+           yyerror (buf);
+         }
+       return toktab->token;
+      }
+
+  switch (c) {
+  case 0:
+    return 0;
+    
+  case ' ':
+  case '\t':
+  case '\r':
+  case '\n':
+    lexptr++;
+    goto retry;
+    
+  case 'L':
+    /* Capital L may start a wide-string or wide-character constant.  */
+    if (lexptr[1] == '\'')
+      {
+       lexptr++;
+       wide_flag = 1;
+       goto char_constant;
+      }
+    if (lexptr[1] == '"')
+      {
+       lexptr++;
+       wide_flag = 1;
+       goto string_constant;
+      }
+    break;
+
+  case '\'':
+    wide_flag = 0;
+  char_constant:
+    lexptr++;
+    if (keyword_parsing) {
+      char *start_ptr = lexptr - 1;
+      while (1) {
+       c = *lexptr++;
+       if (c == '\\')
+         c = parse_escape (&lexptr);
+       else if (c == '\'')
+         break;
+      }
+      yylval.name.address = tokstart;
+      yylval.name.length = lexptr - start_ptr;
+      return NAME;
+    }
+
+    /* This code for reading a character constant
+       handles multicharacter constants and wide characters.
+       It is mostly copied from c-lex.c.  */
+    {
+      register int result = 0;
+      register num_chars = 0;
+      unsigned width = CHAR_TYPE_SIZE;
+      int max_chars;
+      char *token_buffer;
+
+      if (wide_flag)
+       {
+         width = WCHAR_TYPE_SIZE;
+#ifdef MULTIBYTE_CHARS
+         max_chars = MB_CUR_MAX;
+#else
+         max_chars = 1;
+#endif
+       }
+      else
+       max_chars = LONG_TYPE_SIZE / width;
+
+      token_buffer = (char *) alloca (max_chars + 1);
+
+      while (1)
+       {
+         c = *lexptr++;
+
+         if (c == '\'' || c == EOF)
+           break;
+
+         if (c == '\\')
+           {
+             c = parse_escape (&lexptr);
+             if (width < HOST_BITS_PER_INT
+                 && (unsigned) c >= (1 << width))
+               pedwarn ("escape sequence out of range for character");
+           }
+
+         num_chars++;
+
+         /* Merge character into result; ignore excess chars.  */
+         if (num_chars < max_chars + 1)
+           {
+             if (width < HOST_BITS_PER_INT)
+               result = (result << width) | (c & ((1 << width) - 1));
+             else
+               result = c;
+             token_buffer[num_chars - 1] = c;
+           }
+       }
+
+      token_buffer[num_chars] = 0;
+
+      if (c != '\'')
+       error ("malformatted character constant");
+      else if (num_chars == 0)
+       error ("empty character constant");
+      else if (num_chars > max_chars)
+       {
+         num_chars = max_chars;
+         error ("character constant too long");
+       }
+      else if (num_chars != 1 && ! traditional)
+       warning ("multi-character character constant");
+
+      /* If char type is signed, sign-extend the constant.  */
+      if (! wide_flag)
+       {
+         int num_bits = num_chars * width;
+
+         if (lookup ("__CHAR_UNSIGNED__", sizeof ("__CHAR_UNSIGNED__")-1, -1)
+             || ((result >> (num_bits - 1)) & 1) == 0)
+           yylval.integer.value
+             = result & ((unsigned long) ~0 >> (HOST_BITS_PER_LONG - 
num_bits));
+         else
+           yylval.integer.value
+             = result | ~((unsigned long) ~0 >> (HOST_BITS_PER_LONG - 
num_bits));
+       }
+      else
+       {
+#ifdef MULTIBYTE_CHARS
+         /* Set the initial shift state and convert the next sequence.  */
+         result = 0;
+         /* In all locales L'\0' is zero and mbtowc will return zero,
+            so don't use it.  */
+         if (num_chars > 1
+             || (num_chars == 1 && token_buffer[0] != '\0'))
+           {
+             wchar_t wc;
+             (void) mbtowc (NULL_PTR, NULL_PTR, 0);
+             if (mbtowc (& wc, token_buffer, num_chars) == num_chars)
+               result = wc;
+             else
+               warning ("Ignoring invalid multibyte character");
+           }
+#endif
+         yylval.integer.value = result;
+       }
+    }
+
+    /* This is always a signed type.  */
+    yylval.integer.unsignedp = 0;
+    
+    return CHAR;
+
+    /* some of these chars are invalid in constant expressions;
+       maybe do something about them later */
+  case '/':
+  case '+':
+  case '-':
+  case '*':
+  case '%':
+  case '|':
+  case '&':
+  case '^':
+  case '~':
+  case '!':
+  case '@':
+  case '<':
+  case '>':
+  case '[':
+  case ']':
+  case '.':
+  case '?':
+  case ':':
+  case '=':
+  case '{':
+  case '}':
+  case ',':
+  case '#':
+    if (keyword_parsing)
+      break;
+  case '(':
+  case ')':
+    lexptr++;
+    return c;
+
+  case '"':
+  string_constant:
+    if (keyword_parsing) {
+      char *start_ptr = lexptr;
+      lexptr++;
+      while (1) {
+       c = *lexptr++;
+       if (c == '\\')
+         c = parse_escape (&lexptr);
+       else if (c == '"')
+         break;
+      }
+      yylval.name.address = tokstart;
+      yylval.name.length = lexptr - start_ptr;
+      return NAME;
+    }
+    yyerror ("string constants not allowed in #if expressions");
+    return ERROR;
+  }
+
+  if (c >= '0' && c <= '9' && !keyword_parsing) {
+    /* It's a number */
+    for (namelen = 0;
+        c = tokstart[namelen], is_idchar[c] || c == '.'; 
+        namelen++)
+      ;
+    return parse_number (namelen);
+  }
+
+  /* It is a name.  See how long it is.  */
+
+  if (keyword_parsing) {
+    for (namelen = 0;; namelen++) {
+      if (is_hor_space[tokstart[namelen]])
+       break;
+      if (tokstart[namelen] == '(' || tokstart[namelen] == ')')
+       break;
+      if (tokstart[namelen] == '"' || tokstart[namelen] == '\'')
+       break;
+    }
+  } else {
+    if (!is_idstart[c]) {
+      yyerror ("Invalid token in expression");
+      return ERROR;
+    }
+
+    for (namelen = 0; is_idchar[tokstart[namelen]]; namelen++)
+      ;
+  }
+  
+  lexptr += namelen;
+  yylval.name.address = tokstart;
+  yylval.name.length = namelen;
+  return NAME;
+}
+
+
+/* Parse a C escape sequence.  STRING_PTR points to a variable
+   containing a pointer to the string to parse.  That pointer
+   is updated past the characters we use.  The value of the
+   escape sequence is returned.
+
+   A negative value means the sequence \ newline was seen,
+   which is supposed to be equivalent to nothing at all.
+
+   If \ is followed by a null character, we return a negative
+   value and leave the string pointer pointing at the null character.
+
+   If \ is followed by 000, we return 0 and leave the string pointer
+   after the zeros.  A value of 0 does not mean end of string.  */
+
+int
+parse_escape (string_ptr)
+     char **string_ptr;
+{
+  register int c = *(*string_ptr)++;
+  switch (c)
+    {
+    case 'a':
+      return TARGET_BELL;
+    case 'b':
+      return TARGET_BS;
+    case 'e':
+    case 'E':
+      if (pedantic)
+       pedwarn ("non-ANSI-standard escape sequence, `\\%c'", c);
+      return 033;
+    case 'f':
+      return TARGET_FF;
+    case 'n':
+      return TARGET_NEWLINE;
+    case 'r':
+      return TARGET_CR;
+    case 't':
+      return TARGET_TAB;
+    case 'v':
+      return TARGET_VT;
+    case '\n':
+      return -2;
+    case 0:
+      (*string_ptr)--;
+      return 0;
+      
+    case '0':
+    case '1':
+    case '2':
+    case '3':
+    case '4':
+    case '5':
+    case '6':
+    case '7':
+      {
+       register int i = c - '0';
+       register int count = 0;
+       while (++count < 3)
+         {
+           c = *(*string_ptr)++;
+           if (c >= '0' && c <= '7')
+             i = (i << 3) + c - '0';
+           else
+             {
+               (*string_ptr)--;
+               break;
+             }
+         }
+       if ((i & ~((1 << CHAR_TYPE_SIZE) - 1)) != 0)
+         {
+           i &= (1 << CHAR_TYPE_SIZE) - 1;
+           warning ("octal character constant does not fit in a byte");
+         }
+       return i;
+      }
+    case 'x':
+      {
+       register unsigned i = 0, overflow = 0, digits_found = 0, digit;
+       for (;;)
+         {
+           c = *(*string_ptr)++;
+           if (c >= '0' && c <= '9')
+             digit = c - '0';
+           else if (c >= 'a' && c <= 'f')
+             digit = c - 'a' + 10;
+           else if (c >= 'A' && c <= 'F')
+             digit = c - 'A' + 10;
+           else
+             {
+               (*string_ptr)--;
+               break;
+             }
+           overflow |= i ^ (i << 4 >> 4);
+           i = (i << 4) + digit;
+           digits_found = 1;
+         }
+       if (!digits_found)
+         yyerror ("\\x used with no following hex digits");
+       if (overflow | (i & ~((1 << BITS_PER_UNIT) - 1)))
+         {
+           i &= (1 << BITS_PER_UNIT) - 1;
+           warning ("hex character constant does not fit in a byte");
+         }
+       return i;
+      }
+    default:
+      return c;
+    }
+}
+
+void
+yyerror (s)
+     char *s;
+{
+  error (s);
+  longjmp (parse_return_error, 1);
+}
+
+static void
+integer_overflow ()
+{
+  if (pedantic)
+    pedwarn ("integer overflow in preprocessor expression");
+}
+
+static long
+left_shift (a, b)
+     struct constant *a;
+     unsigned long b;
+{
+  if (b >= HOST_BITS_PER_LONG)
+    {
+      if (! a->unsignedp && a->value != 0)
+       integer_overflow ();
+      return 0;
+    }
+  else if (a->unsignedp)
+    return (unsigned long) a->value << b;
+  else
+    {
+      long l = a->value << b;
+      if (l >> b != a->value)
+       integer_overflow ();
+      return l;
+    }
+}
+
+static long
+right_shift (a, b)
+     struct constant *a;
+     unsigned long b;
+{
+  if (b >= HOST_BITS_PER_LONG)
+    return a->unsignedp ? 0 : a->value >> (HOST_BITS_PER_LONG - 1);
+  else if (a->unsignedp)
+    return (unsigned long) a->value >> b;
+  else
+    return a->value >> b;
+}
+
+/* This page contains the entry point to this file.  */
+
+/* Parse STRING as an expression, and complain if this fails
+   to use up all of the contents of STRING.  */
+/* We do not support C comments.  They should be removed before
+   this function is called.  */
+
+int
+parse_c_expression (string)
+     char *string;
+{
+  lexptr = string;
+  
+  if (lexptr == 0 || *lexptr == 0) {
+    error ("empty #if expression");
+    return 0;                  /* don't include the #if group */
+  }
+
+  /* if there is some sort of scanning error, just return 0 and assume
+     the parsing routine has printed an error message somewhere.
+     there is surely a better thing to do than this.     */
+  if (setjmp (parse_return_error))
+    return 0;
+
+  if (yyparse ())
+    return 0;                  /* actually this is never reached
+                                  the way things stand. */
+  if (*lexptr)
+    error ("Junk after end of expression.");
+
+  return expression_value;     /* set by yyparse () */
+}
+
+#ifdef TEST_EXP_READER
+extern int yydebug;
+
+/* Main program for testing purposes.  */
+int
+main ()
+{
+  int n, c;
+  char buf[1024];
+
+/*
+  yydebug = 1;
+*/
+  initialize_random_junk ();
+
+  for (;;) {
+    printf ("enter expression: ");
+    n = 0;
+    while ((buf[n] = getchar ()) != '\n' && buf[n] != EOF)
+      n++;
+    if (buf[n] == EOF)
+      break;
+    buf[n] = '\0';
+    printf ("parser returned %d\n", parse_c_expression (buf));
+  }
+
+  return 0;
+}
+
+/* table to tell if char can be part of a C identifier. */
+unsigned char is_idchar[256];
+/* table to tell if char can be first char of a c identifier. */
+unsigned char is_idstart[256];
+/* table to tell if c is horizontal space.  isspace () thinks that
+   newline is space; this is not a good idea for this program. */
+char is_hor_space[256];
+
+/*
+ * initialize random junk in the hash table and maybe other places
+ */
+initialize_random_junk ()
+{
+  register int i;
+
+  /*
+   * Set up is_idchar and is_idstart tables.  These should be
+   * faster than saying (is_alpha (c) || c == '_'), etc.
+   * Must do set up these things before calling any routines tthat
+   * refer to them.
+   */
+  for (i = 'a'; i <= 'z'; i++) {
+    ++is_idchar[i - 'a' + 'A'];
+    ++is_idchar[i];
+    ++is_idstart[i - 'a' + 'A'];
+    ++is_idstart[i];
+  }
+  for (i = '0'; i <= '9'; i++)
+    ++is_idchar[i];
+  ++is_idchar['_'];
+  ++is_idstart['_'];
+#if DOLLARS_IN_IDENTIFIERS
+  ++is_idchar['$'];
+  ++is_idstart['$'];
+#endif
+
+  /* horizontal space table */
+  ++is_hor_space[' '];
+  ++is_hor_space['\t'];
+}
+
+error (msg)
+{
+  printf ("error: %s\n", msg);
+}
+
+warning (msg)
+{
+  printf ("warning: %s\n", msg);
+}
+
+struct hashnode *
+lookup (name, len, hash)
+     char *name;
+     int len;
+     int hash;
+{
+  return (DEFAULT_SIGNED_CHAR) ? 0 : ((struct hashnode *) -1);
+}
+#endif
diff --git a/test/etags/y-src/parse.c b/test/etags/y-src/parse.c
new file mode 100644
index 0000000..7b1eedc
--- /dev/null
+++ b/test/etags/y-src/parse.c
@@ -0,0 +1,2236 @@
+/* A Bison parser, made from parse.y
+   by GNU bison 1.32.  */
+
+#define YYBISON 1  /* Identify Bison output.  */
+
+# define       NE      257
+# define       LE      258
+# define       GE      259
+# define       NEG     260
+# define       L_CELL  261
+# define       L_RANGE 262
+# define       L_VAR   263
+# define       L_CONST 264
+# define       L_FN0   265
+# define       L_FN1   266
+# define       L_FN2   267
+# define       L_FN3   268
+# define       L_FN4   269
+# define       L_FNN   270
+# define       L_FN1R  271
+# define       L_FN2R  272
+# define       L_FN3R  273
+# define       L_FN4R  274
+# define       L_FNNR  275
+# define       L_LE    276
+# define       L_NE    277
+# define       L_GE    278
+
+#line 1 "parse.y"
+
+/*     Copyright (C) 1990, 1992, 1993 Free Software Foundation, Inc.
+
+This file is part of Oleo, the GNU Spreadsheet.
+
+Oleo is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+Oleo is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Oleo; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+#line 41 "parse.y"
+
+#include "funcdef.h"
+
+#include <ctype.h>
+
+#define obstack_chunk_alloc ck_malloc
+#define obstack_chunk_free free
+#include "obstack.h"
+#include "sysdef.h"
+
+#include "global.h"
+#include "errors.h"
+#include "node.h"
+#include "eval.h"
+#include "ref.h"
+
+int yylex ();
+#ifdef __STDC__
+void yyerror (char *);
+#else
+void yyerror ();
+#endif
+VOIDSTAR parse_hash;
+extern VOIDSTAR hash_find();
+
+/* This table contains a list of the infix single-char functions */
+unsigned char fnin[] = {
+       SUM, DIFF, DIV, PROD, MOD, /* AND, OR, */ POW, EQUAL, IF, CONCAT, 0
+};
+
+#define YYSTYPE _y_y_s_t_y_p_e
+typedef struct node *YYSTYPE;
+YYSTYPE parse_return;
+#ifdef __STDC__
+YYSTYPE make_list (YYSTYPE, YYSTYPE);
+#else
+YYSTYPE make_list ();
+#endif
+
+char *instr;
+int parse_error = 0;
+extern struct obstack tmp_mem;
+
+#ifndef YYSTYPE
+#define YYSTYPE int
+#endif
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+
+
+#define        YYFINAL         131
+#define        YYFLAG          -32768
+#define        YYNTBASE        41
+
+/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
+#define YYTRANSLATE(x) ((unsigned)(x) <= 278 ? yytranslate[x] : 47)
+
+/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
+static const char yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,    19,     2,     2,     2,    16,     5,     2,
+      38,    39,    14,    12,    40,    13,     2,    15,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     4,     2,
+       8,     6,    10,     3,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,    17,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     7,     9,    11,
+      18,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37
+};
+
+#if YYDEBUG
+static const short yyprhs[] =
+{
+       0,     0,     2,     4,     6,     8,    12,    17,    24,    33,
+      44,    49,    54,    59,    66,    73,    82,    91,   100,   109,
+     114,   120,   124,   128,   132,   136,   140,   144,   148,   152,
+     156,   160,   164,   168,   172,   175,   178,   182,   186,   189,
+     191,   195,   197,   199,   201,   205,   207
+};
+static const short yyrhs[] =
+{
+      42,     0,     1,     0,    23,     0,    46,     0,    24,    38,
+      39,     0,    25,    38,    42,    39,     0,    26,    38,    42,
+      40,    42,    39,     0,    27,    38,    42,    40,    42,    40,
+      42,    39,     0,    28,    38,    42,    40,    42,    40,    42,
+      40,    42,    39,     0,    29,    38,    43,    39,     0,    30,
+      38,    21,    39,     0,    30,    38,    22,    39,     0,    31,
+      38,    21,    40,    42,    39,     0,    31,    38,    22,    40,
+      42,    39,     0,    31,    38,    21,    40,    42,    40,    42,
+      39,     0,    31,    38,    22,    40,    42,    40,    42,    39,
+       0,    32,    38,    21,    40,    42,    40,    42,    39,     0,
+      32,    38,    22,    40,    42,    40,    42,    39,     0,    34,
+      38,    45,    39,     0,    42,     3,    42,     4,    42,     0,
+      42,     5,    42,     0,    42,     8,    42,     0,    42,     9,
+      42,     0,    42,     6,    42,     0,    42,     7,    42,     0,
+      42,    10,    42,     0,    42,    11,    42,     0,    42,    12,
+      42,     0,    42,    13,    42,     0,    42,    14,    42,     0,
+      42,    15,    42,     0,    42,    16,    42,     0,    42,    17,
+      42,     0,    13,    42,     0,    19,    42,     0,    38,    42,
+      39,     0,    38,    42,     1,     0,    38,     1,     0,    42,
+       0,    43,    40,    42,     0,    21,     0,    42,     0,    44,
+       0,    45,    40,    44,     0,    20,     0,    22,     0
+};
+
+#endif
+
+#if YYDEBUG
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const short yyrline[] =
+{
+       0,    86,    88,    94,    95,    96,    98,   102,   106,   110,
+     114,   118,   121,   125,   129,   135,   142,   150,   154,   159,
+     163,   174,   178,   182,   186,   190,   194,   198,   202,   206,
+     210,   214,   218,   222,   226,   241,   245,   247,   255,   262,
+     264,   268,   269,   272,   274,   278,   280
+};
+#endif
+
+
+#if (YYDEBUG) || defined YYERROR_VERBOSE
+
+/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
+static const char *const yytname[] =
+{
+  "$", "error", "$undefined.", "'?'", "':'", "'&'", "'='", "NE", "'<'", 
+  "LE", "'>'", "GE", "'+'", "'-'", "'*'", "'/'", "'%'", "'^'", "NEG", 
+  "'!'", "L_CELL", "L_RANGE", "L_VAR", "L_CONST", "L_FN0", "L_FN1", 
+  "L_FN2", "L_FN3", "L_FN4", "L_FNN", "L_FN1R", "L_FN2R", "L_FN3R", 
+  "L_FN4R", "L_FNNR", "L_LE", "L_NE", "L_GE", "'('", "')'", "','", "line", 
+  "exp", "exp_list", "range_exp", "range_exp_list", "cell", NULL
+};
+#endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const short yyr1[] =
+{
+       0,    41,    41,    42,    42,    42,    42,    42,    42,    42,
+      42,    42,    42,    42,    42,    42,    42,    42,    42,    42,
+      42,    42,    42,    42,    42,    42,    42,    42,    42,    42,
+      42,    42,    42,    42,    42,    42,    42,    42,    42,    43,
+      43,    44,    44,    45,    45,    46,    46
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const short yyr2[] =
+{
+       0,     1,     1,     1,     1,     3,     4,     6,     8,    10,
+       4,     4,     4,     6,     6,     8,     8,     8,     8,     4,
+       5,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     2,     2,     3,     3,     2,     1,
+       3,     1,     1,     1,     3,     1,     1
+};
+
+/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
+   doesn't specify something else to do.  Zero means the default is an
+   error. */
+static const short yydefact[] =
+{
+       0,     2,     0,     0,    45,    46,     3,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     1,     4,
+      34,    35,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    38,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     5,     0,
+       0,     0,     0,    39,     0,     0,     0,     0,     0,     0,
+       0,    41,    42,    43,     0,    37,    36,     0,    21,    24,
+      25,    22,    23,    26,    27,    28,    29,    30,    31,    32,
+      33,     6,     0,     0,     0,    10,     0,    11,    12,     0,
+       0,     0,     0,    19,     0,     0,     0,     0,     0,    40,
+       0,     0,     0,     0,    44,    20,     7,     0,     0,    13,
+       0,    14,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     8,     0,    15,    16,    17,    18,     0,     9,     0,
+       0,     0
+};
+
+static const short yydefgoto[] =
+{
+     129,    62,    54,    63,    64,    19
+};
+
+static const short yypact[] =
+{
+     104,-32768,   486,   486,-32768,-32768,-32768,   -37,   -22,   -16,
+      10,    12,    14,    29,    43,    47,    50,   124,   537,-32768,
+  -32768,-32768,    59,   486,   486,   486,   486,   486,     7,     9,
+      11,   464,-32768,    48,   486,   486,   486,   486,   486,   486,
+     486,   486,   486,   486,   486,   486,   486,   486,-32768,   332,
+     173,   209,   224,   537,    54,    60,    61,    64,    66,    69,
+      71,-32768,   537,-32768,    57,-32768,-32768,   522,    -2,   193,
+     193,   547,   547,   547,   547,     4,     4,    84,    84,    84,
+      84,-32768,   486,   486,   486,-32768,   486,-32768,-32768,   486,
+     486,   486,   486,-32768,   464,   486,   353,   245,   260,   537,
+      63,   158,   281,   296,-32768,   537,-32768,   486,   486,-32768,
+     486,-32768,   486,   486,   486,   369,   317,   388,   404,   423,
+     439,-32768,   486,-32768,-32768,-32768,-32768,   458,-32768,   115,
+     116,-32768
+};
+
+static const short yypgoto[] =
+{
+  -32768,     0,-32768,    24,-32768,-32768
+};
+
+
+#define        YYLAST          564
+
+
+static const short yytable[] =
+{
+      18,    22,    20,    21,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    23,    33,    44,    45,
+      46,    47,    24,    49,    50,    51,    52,    53,    55,    56,
+      57,    58,    59,    60,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    25,    65,
+      26,    34,    27,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    34,    28,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    29,    96,    97,    98,    30,    99,    66,    31,   100,
+     101,   102,   103,    85,    86,   105,    93,    94,    48,    87,
+      88,    47,   109,   110,    89,     1,    90,   115,   116,    91,
+     117,    92,   118,   119,   120,   130,   131,     2,   104,     0,
+       0,     0,   127,     3,     4,    32,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,     2,    16,     0,
+       0,     0,    17,     3,     4,     0,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,     0,    16,     0,
+       0,    34,    17,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    34,     0,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,     0,     0,     0,     0,     0,     0,   111,   112,-32768,
+  -32768,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,     0,    34,    82,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    34,     0,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,     0,     0,     0,     0,     0,     0,    34,    83,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    34,    84,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,     0,     0,
+       0,     0,     0,     0,    34,   107,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    34,
+     108,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,     0,     0,     0,     0,     0,     0,
+      34,   113,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    34,   114,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+       0,     0,     0,     0,     0,     0,    34,   122,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    81,    34,     0,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,     0,     0,     0,
+       0,    34,   106,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,     0,    34,   121,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,     0,     0,     0,     0,    34,   123,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,     0,    34,   124,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,     0,     0,     0,
+       0,    34,   125,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,     0,     2,   126,     0,
+       0,     0,     0,     3,     4,    61,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,   128,    16,     2,
+       0,     0,    17,     0,     0,     3,     4,     0,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,     0,
+      16,     0,     0,     0,    17,    34,    95,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      34,     0,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,-32768,-32768,-32768,-32768,    42,
+      43,    44,    45,    46,    47
+};
+
+static const short yycheck[] =
+{
+       0,    38,     2,     3,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    38,    17,    14,    15,
+      16,    17,    38,    23,    24,    25,    26,    27,    21,    22,
+      21,    22,    21,    22,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    38,     1,
+      38,     3,    38,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,     3,    38,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    38,    82,    83,    84,    38,    86,    39,    38,    89,
+      90,    91,    92,    39,    40,    95,    39,    40,    39,    39,
+      39,    17,    39,    40,    40,     1,    40,   107,   108,    40,
+     110,    40,   112,   113,   114,     0,     0,    13,    94,    -1,
+      -1,    -1,   122,    19,    20,     1,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    13,    34,    -1,
+      -1,    -1,    38,    19,    20,    -1,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    -1,    34,    -1,
+      -1,     3,    38,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,     3,    -1,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    -1,    -1,    -1,    -1,    -1,    -1,    39,    40,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    -1,     3,    40,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,     3,    -1,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    -1,    -1,    -1,    -1,    -1,    -1,     3,    40,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,     3,    40,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    -1,    -1,
+      -1,    -1,    -1,    -1,     3,    40,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,     3,
+      40,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    -1,    -1,    -1,    -1,    -1,    -1,
+       3,    40,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,     3,    40,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      -1,    -1,    -1,    -1,    -1,    -1,     3,    40,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    39,     3,    -1,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    -1,    -1,    -1,
+      -1,     3,    39,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    -1,     3,    39,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    -1,    -1,    -1,    -1,     3,    39,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    -1,     3,    39,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    -1,    -1,    -1,
+      -1,     3,    39,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    -1,    13,    39,    -1,
+      -1,    -1,    -1,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    39,    34,    13,
+      -1,    -1,    38,    -1,    -1,    19,    20,    -1,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    -1,    -1,    -1,    38,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+       3,    -1,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17
+};
+/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
+#line 3 "/usr/share/bison/bison.simple"
+
+/* Skeleton output parser for bison,
+   Copyright (C) 1984, 1989, 1990, 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+/* This is the parser code that is written into each bison parser when
+   the %semantic_parser declaration is not specified in the grammar.
+   It was written by Richard Stallman by simplifying the hairy parser
+   used when %semantic_parser is specified.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+#ifdef __cplusplus
+# define YYSTD(x) std::x
+#else
+# define YYSTD(x) x
+#endif
+
+#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# if YYSTACK_USE_ALLOCA
+#  define YYSTACK_ALLOC alloca
+#  define YYSIZE_T YYSTD (size_t)
+# else
+#  ifndef YYSTACK_USE_ALLOCA
+#   if defined (alloca) || defined (_ALLOCA_H)
+#    define YYSTACK_ALLOC alloca
+#    define YYSIZE_T YYSTD (size_t)
+#   else
+#    ifdef __GNUC__
+#     define YYSTACK_ALLOC __builtin_alloca
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning. */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+# else
+#  ifdef __cplusplus
+#   include <cstdlib> /* INFRINGES ON USER NAME SPACE */
+#   define YYSIZE_T std::size_t
+#  else
+#   ifdef __STDC__
+#    include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#    define YYSIZE_T size_t
+#   endif
+#  endif
+#  define YYSTACK_ALLOC YYSTD (malloc)
+#  define YYSTACK_FREE YYSTD (free)
+# endif
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  short yyss;
+  YYSTYPE yyvs;
+# if YYLSP_NEEDED
+  YYLTYPE yyls;
+# endif
+};
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# if YYLSP_NEEDED
+#  define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE))     \
+      + 2 * YYSTACK_GAP_MAX)
+# else
+#  define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (short) + sizeof (YYSTYPE))                                
\
+      + YYSTACK_GAP_MAX)
+# endif
+
+/* Relocate the TYPE STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Type, Stack)                                 \
+    do                                                                 \
+      {                                                                        
\
+       YYSIZE_T yynewbytes;                                            \
+       yymemcpy ((char *) yyptr, (char *) (Stack),                     \
+                 yysize * (YYSIZE_T) sizeof (Type));                   \
+       Stack = &yyptr->Stack;                                          \
+       yynewbytes = yystacksize * sizeof (Type) + YYSTACK_GAP_MAX;     \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                        
\
+    while (0)
+
+#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
+
+
+#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+# define YYSIZE_T __SIZE_TYPE__
+#endif
+#if ! defined (YYSIZE_T) && defined (size_t)
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T)
+# ifdef __cplusplus
+#  include <cstddef> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T std::size_t
+# else
+#  ifdef __STDC__
+#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#   define YYSIZE_T size_t
+#  endif
+# endif
+#endif
+#if ! defined (YYSIZE_T)
+# define YYSIZE_T unsigned int
+#endif
+
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                -2
+#define YYEOF          0
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT        goto yyabortlab
+#define YYERROR                goto yyerrlab1
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+#define YYFAIL         goto yyerrlab
+#define YYRECOVERING()  (!!yyerrstatus)
+#define YYBACKUP(Token, Value)                                 \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    {                                                          \
+      yychar = (Token);                                                \
+      yylval = (Value);                                                \
+      yychar1 = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK;                                              \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      yyerror ("syntax error: cannot back up");                        \
+      YYERROR;                                                 \
+    }                                                          \
+while (0)
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+
+/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+   are run).
+
+   When YYLLOC_DEFAULT is run, CURRENT is set the location of the
+   first token.  By default, to implement support for ranges, extend
+   its range to the last symbol.  */
+
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)               \
+   Current.last_line   = Rhs[N].last_line;     \
+   Current.last_column = Rhs[N].last_column;
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#if YYPURE
+# if YYLSP_NEEDED
+#  ifdef YYLEX_PARAM
+#   define YYLEX               yylex (&yylval, &yylloc, YYLEX_PARAM)
+#  else
+#   define YYLEX               yylex (&yylval, &yylloc)
+#  endif
+# else /* !YYLSP_NEEDED */
+#  ifdef YYLEX_PARAM
+#   define YYLEX               yylex (&yylval, YYLEX_PARAM)
+#  else
+#   define YYLEX               yylex (&yylval)
+#  endif
+# endif /* !YYLSP_NEEDED */
+#else /* !YYPURE */
+# define YYLEX                 yylex ()
+#endif /* !YYPURE */
+
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  ifdef __cplusplus
+#   include <cstdio>  /* INFRINGES ON USER NAME SPACE */
+#  else
+#   include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  endif
+#  define YYFPRINTF YYSTD (fprintf)
+# endif
+
+# define YYDPRINTF(Args)                       \
+do {                                           \
+  if (yydebug)                                 \
+    YYFPRINTF Args;                            \
+} while (0)
+/* Nonzero means print parse trace. [The following comment makes no
+   sense to me.  Could someone clarify it?  --akim] Since this is
+   uninitialized, it does not stop multiple parsers from coexisting.
+   */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+#endif /* !YYDEBUG */
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef        YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#if YYMAXDEPTH == 0
+# undef YYMAXDEPTH
+#endif
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+#if ! defined (yyoverflow) && ! defined (yymemcpy)
+# if __GNUC__ > 1              /* GNU C and GNU C++ define this.  */
+#  define yymemcpy __builtin_memcpy
+# else                         /* not GNU C or C++ */
+
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
+static void
+#  if defined (__STDC__) || defined (__cplusplus)
+yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T yycount)
+#  else
+yymemcpy (yyto, yyfrom, yycount)
+     char *yyto;
+     const char *yyfrom;
+     YYSIZE_T yycount;
+#  endif
+{
+  register const char *yyf = yyfrom;
+  register char *yyt = yyto;
+  register YYSIZE_T yyi = yycount;
+
+  while (yyi-- != 0)
+    *yyt++ = *yyf++;
+}
+# endif
+#endif
+
+#ifdef YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined (__GLIBC__) && defined (_STRING_H)
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+static YYSIZE_T
+#   if defined (__STDC__) || defined (__cplusplus)
+yystrlen (const char *yystr)
+#   else
+yystrlen (yystr)
+     const char *yystr;
+#   endif
+{
+  register const char *yys = yystr;
+
+  while (*yys++ != '\0')
+    continue;
+
+  return yys - yystr - 1;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+static char *
+#   if defined (__STDC__) || defined (__cplusplus)
+yystpcpy (char *yydest, const char *yysrc)
+#   else
+yystpcpy (yydest, yysrc)
+     char *yydest;
+     const char *yysrc;
+#   endif
+{
+  register char *yyd = yydest;
+  register const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+#endif
+
+#line 341 "/usr/share/bison/bison.simple"
+
+
+/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+   into yyparse.  The argument should have type void *.
+   It should actually point to an object.
+   Grammar actions can access the variable by casting it
+   to the proper pointer type.  */
+
+#ifdef YYPARSE_PARAM
+# ifdef __cplusplus
+#  define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+#  define YYPARSE_PARAM_DECL
+# else /* !__cplusplus */
+#  define YYPARSE_PARAM_ARG YYPARSE_PARAM
+#  define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+# endif /* !__cplusplus */
+#else /* !YYPARSE_PARAM */
+# define YYPARSE_PARAM_ARG
+# define YYPARSE_PARAM_DECL
+#endif /* !YYPARSE_PARAM */
+
+/* Prevent warning if -Wstrict-prototypes.  */
+#ifdef __GNUC__
+# ifdef YYPARSE_PARAM
+int yyparse (void *);
+# else
+int yyparse (void);
+# endif
+#endif
+
+/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
+   variables are global, or local to YYPARSE.  */
+
+#define YY_DECL_NON_LSP_VARIABLES                      \
+/* The lookahead symbol.  */                           \
+int yychar;                                            \
+                                                       \
+/* The semantic value of the lookahead symbol. */      \
+YYSTYPE yylval;                                                \
+                                                       \
+/* Number of parse errors so far.  */                  \
+int yynerrs;
+
+#if YYLSP_NEEDED
+# define YY_DECL_VARIABLES                     \
+YY_DECL_NON_LSP_VARIABLES                      \
+                                               \
+/* Location data for the lookahead symbol.  */ \
+YYLTYPE yylloc;
+#else
+# define YY_DECL_VARIABLES                     \
+YY_DECL_NON_LSP_VARIABLES
+#endif
+
+
+/* If nonreentrant, generate the variables here. */
+
+#if !YYPURE
+YY_DECL_VARIABLES
+#endif  /* !YYPURE */
+
+int
+yyparse (YYPARSE_PARAM_ARG)
+     YYPARSE_PARAM_DECL
+{
+  /* If reentrant, generate the variables here. */
+#if YYPURE
+  YY_DECL_VARIABLES
+#endif  /* !YYPURE */
+
+  register int yystate;
+  register int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yychar1 = 0;
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack. */
+  short        yyssa[YYINITDEPTH];
+  short *yyss = yyssa;
+  register short *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  register YYSTYPE *yyvsp;
+
+#if YYLSP_NEEDED
+  /* The location stack.  */
+  YYLTYPE yylsa[YYINITDEPTH];
+  YYLTYPE *yyls = yylsa;
+  YYLTYPE *yylsp;
+#endif
+
+#if YYLSP_NEEDED
+# define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
+#else
+# define YYPOPSTACK   (yyvsp--, yyssp--)
+#endif
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+#if YYLSP_NEEDED
+  YYLTYPE yyloc;
+#endif
+
+  /* When reducing, the number of symbols on the RHS of the reduced
+     rule. */
+  int yylen;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;            /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+#if YYLSP_NEEDED
+  yylsp = yyls;
+#endif
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed. so pushing a state here evens the stacks.
+     */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyssp >= yyss + yystacksize - 1)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+       /* Give user a chance to reallocate the stack. Use copies of
+          these so that the &'s don't force the real ones into
+          memory.  */
+       YYSTYPE *yyvs1 = yyvs;
+       short *yyss1 = yyss;
+
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  */
+# if YYLSP_NEEDED
+       YYLTYPE *yyls1 = yyls;
+       /* This used to be a conditional around just the two extra args,
+          but that might be undefined if yyoverflow is a macro.  */
+       yyoverflow ("parser stack overflow",
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+                   &yyls1, yysize * sizeof (*yylsp),
+                   &yystacksize);
+       yyls = yyls1;
+# else
+       yyoverflow ("parser stack overflow",
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+                   &yystacksize);
+# endif
+       yyss = yyss1;
+       yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+      /* Extend the stack our own way.  */
+      if (yystacksize >= YYMAXDEPTH)
+       goto yyoverflowlab;
+      yystacksize *= 2;
+      if (yystacksize > YYMAXDEPTH)
+       yystacksize = YYMAXDEPTH;
+
+      {
+       short *yyss1 = yyss;
+       union yyalloc *yyptr =
+         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+       if (! yyptr)
+         goto yyoverflowlab;
+       YYSTACK_RELOCATE (short, yyss);
+       YYSTACK_RELOCATE (YYSTYPE, yyvs);
+# if YYLSP_NEEDED
+       YYSTACK_RELOCATE (YYLTYPE, yyls);
+# endif
+# undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+      }
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+#if YYLSP_NEEDED
+      yylsp = yyls + yysize - 1;
+#endif
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+
+      if (yyssp >= yyss + yystacksize - 1)
+       YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  goto yybackup;
+
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+/* Do appropriate processing given the current state.  */
+/* Read a lookahead token if we need one and don't already have one.  */
+/* yyresume: */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* yychar is either YYEMPTY or YYEOF
+     or a valid token in external form.  */
+
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  /* Convert token to internal form (in yychar1) for indexing tables with */
+
+  if (yychar <= 0)             /* This means end of input. */
+    {
+      yychar1 = 0;
+      yychar = YYEOF;          /* Don't call YYLEX any more */
+
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yychar1 = YYTRANSLATE (yychar);
+
+#if YYDEBUG
+     /* We have to keep this `#if YYDEBUG', since we use variables
+       which are defined only if `YYDEBUG' is set.  */
+      if (yydebug)
+       {
+         YYFPRINTF (stderr, "Next token is %d (%s",
+                    yychar, yytname[yychar1]);
+         /* Give the individual parser a way to print the precise
+            meaning of a token, for further debugging info.  */
+# ifdef YYPRINT
+         YYPRINT (stderr, yychar, yylval);
+# endif
+         YYFPRINTF (stderr, ")\n");
+       }
+#endif
+    }
+
+  yyn += yychar1;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
+    goto yydefault;
+
+  yyn = yytable[yyn];
+
+  /* yyn is what to do for this token type in this state.
+     Negative => reduce, -yyn is rule number.
+     Positive => shift, yyn is new state.
+       New state is final state => don't bother to shift,
+       just return success.
+     0, or most negative number => error.  */
+
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrlab;
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Shift the lookahead token.  */
+  YYDPRINTF ((stderr, "Shifting token %d (%s), ",
+             yychar, yytname[yychar1]));
+
+  /* Discard the token being shifted unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  *++yyvsp = yylval;
+#if YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to the semantic value of
+     the lookahead token.  This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+#if YYLSP_NEEDED
+  /* Similarly for the default location.  Let the user run additional
+     commands if for instance locations are ranges.  */
+  yyloc = yylsp[1-yylen];
+  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
+#endif
+
+#if YYDEBUG
+  /* We have to keep this `#if YYDEBUG', since we use variables which
+     are defined only if `YYDEBUG' is set.  */
+  if (yydebug)
+    {
+      int yyi;
+
+      YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
+                yyn, yyrline[yyn]);
+
+      /* Print the symbols being reduced, and their result.  */
+      for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
+       YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
+      YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+    }
+#endif
+
+  switch (yyn) {
+
+case 1:
+#line 87 "parse.y"
+{ parse_return=yyvsp[0]; }
+    break;
+case 2:
+#line 88 "parse.y"
+{
+               if(!parse_error)
+                       parse_error=PARSE_ERR;
+               parse_return=0; }
+    break;
+case 5:
+#line 96 "parse.y"
+{
+               yyval=yyvsp[-2]; }
+    break;
+case 6:
+#line 98 "parse.y"
+{
+               (yyvsp[-3])->n_x.v_subs[0]=yyvsp[-1];
+               (yyvsp[-3])->n_x.v_subs[1]=(struct node *)0;
+               yyval=yyvsp[-3]; }
+    break;
+case 7:
+#line 102 "parse.y"
+{
+               (yyvsp[-5])->n_x.v_subs[0]=yyvsp[-3];
+               (yyvsp[-5])->n_x.v_subs[1]=yyvsp[-1];
+               yyval=yyvsp[-5]; }
+    break;
+case 8:
+#line 106 "parse.y"
+{
+               (yyvsp[-7])->n_x.v_subs[0]=make_list(yyvsp[-5],yyvsp[-3]);
+               (yyvsp[-7])->n_x.v_subs[1]=yyvsp[-1];
+               yyval=yyvsp[-7];}
+    break;
+case 9:
+#line 110 "parse.y"
+{
+               (yyvsp[-9])->n_x.v_subs[0]=make_list(yyvsp[-7],yyvsp[-5]);
+               (yyvsp[-9])->n_x.v_subs[1]=make_list(yyvsp[-3],yyvsp[-1]);
+               yyval=yyvsp[-9];}
+    break;
+case 10:
+#line 114 "parse.y"
+{
+               (yyvsp[-3])->n_x.v_subs[0]=(struct node *)0;
+               (yyvsp[-3])->n_x.v_subs[1]=yyvsp[-1];
+               yyval=yyvsp[-3]; }
+    break;
+case 11:
+#line 118 "parse.y"
+{
+               yyvsp[-3]->n_x.v_subs[0]=yyvsp[-1];
+               yyval=yyvsp[-3]; }
+    break;
+case 12:
+#line 121 "parse.y"
+{
+               yyvsp[-3]->n_x.v_subs[0]=yyvsp[-1];
+               yyval=yyvsp[-3]; }
+    break;
+case 13:
+#line 125 "parse.y"
+{
+               yyvsp[-5]->n_x.v_subs[0]=yyvsp[-3];
+               yyvsp[-5]->n_x.v_subs[1]=yyvsp[-1];
+               yyval=yyvsp[-5]; }
+    break;
+case 14:
+#line 129 "parse.y"
+{
+               yyvsp[-5]->n_x.v_subs[0]=yyvsp[-3];
+               yyvsp[-5]->n_x.v_subs[1]=yyvsp[-1];
+               yyval=yyvsp[-5]; }
+    break;
+case 15:
+#line 135 "parse.y"
+{
+               if(yyvsp[-7]->comp_value!=F_INDEX)
+                       parse_error=PARSE_ERR;
+               yyvsp[-7]->comp_value=F_INDEX2;
+               yyvsp[-7]->n_x.v_subs[0]=make_list(yyvsp[-5],yyvsp[-3]);
+               yyvsp[-7]->n_x.v_subs[1]=yyvsp[-1];
+               yyval=yyvsp[-7]; }
+    break;
+case 16:
+#line 142 "parse.y"
+{
+               if(yyvsp[-7]->comp_value!=F_INDEX)
+                       parse_error=PARSE_ERR;
+               yyvsp[-7]->comp_value=F_INDEX2;
+               yyvsp[-7]->n_x.v_subs[0]=make_list(yyvsp[-5],yyvsp[-3]);
+               yyvsp[-7]->n_x.v_subs[1]=yyvsp[-1];
+               yyval=yyvsp[-7]; }
+    break;
+case 17:
+#line 150 "parse.y"
+{
+               (yyvsp[-7])->n_x.v_subs[0]=make_list(yyvsp[-5],yyvsp[-3]);
+               (yyvsp[-7])->n_x.v_subs[1]=yyvsp[-1];
+               yyval=yyvsp[-7];}
+    break;
+case 18:
+#line 154 "parse.y"
+{
+               (yyvsp[-7])->n_x.v_subs[0]=make_list(yyvsp[-5],yyvsp[-3]);
+               (yyvsp[-7])->n_x.v_subs[1]=yyvsp[-1];
+               yyval=yyvsp[-7];}
+    break;
+case 19:
+#line 159 "parse.y"
+{
+               (yyvsp[-3])->n_x.v_subs[0]=(struct node *)0;
+               (yyvsp[-3])->n_x.v_subs[1]=yyvsp[-1];
+               yyval=yyvsp[-3]; }
+    break;
+case 20:
+#line 163 "parse.y"
+{
+               yyvsp[-3]->comp_value=IF;
+               yyvsp[-3]->n_x.v_subs[0]=yyvsp[-1];
+               yyvsp[-3]->n_x.v_subs[1]=yyvsp[0];
+               yyvsp[-1]->n_x.v_subs[0]=yyvsp[-4];
+               yyvsp[-1]->n_x.v_subs[1]=yyvsp[-2];
+               yyval=yyvsp[-3]; }
+    break;
+case 21:
+#line 174 "parse.y"
+{
+               yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
+               yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
+               yyval = yyvsp[-1]; }
+    break;
+case 22:
+#line 178 "parse.y"
+{
+               yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
+               yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
+               yyval = yyvsp[-1]; }
+    break;
+case 23:
+#line 182 "parse.y"
+{
+               yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
+               yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
+               yyval = yyvsp[-1]; }
+    break;
+case 24:
+#line 186 "parse.y"
+{
+               yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
+               yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
+               yyval = yyvsp[-1]; }
+    break;
+case 25:
+#line 190 "parse.y"
+{
+               yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
+               yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
+               yyval = yyvsp[-1]; }
+    break;
+case 26:
+#line 194 "parse.y"
+{
+               yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
+               yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
+               yyval = yyvsp[-1]; }
+    break;
+case 27:
+#line 198 "parse.y"
+{
+               yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
+               yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
+               yyval = yyvsp[-1]; }
+    break;
+case 28:
+#line 202 "parse.y"
+{
+               yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
+               yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
+               yyval = yyvsp[-1]; }
+    break;
+case 29:
+#line 206 "parse.y"
+{
+               yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
+               yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
+               yyval = yyvsp[-1]; }
+    break;
+case 30:
+#line 210 "parse.y"
+{
+               yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
+               yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
+               yyval = yyvsp[-1]; }
+    break;
+case 31:
+#line 214 "parse.y"
+{
+               yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
+               yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
+               yyval = yyvsp[-1]; }
+    break;
+case 32:
+#line 218 "parse.y"
+{
+               yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
+               yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
+               yyval = yyvsp[-1]; }
+    break;
+case 33:
+#line 222 "parse.y"
+{
+               yyvsp[-1]->n_x.v_subs[0]=yyvsp[-2];
+               yyvsp[-1]->n_x.v_subs[1]=yyvsp[0];
+               yyval = yyvsp[-1]; }
+    break;
+case 34:
+#line 226 "parse.y"
+{
+               if(yyvsp[0]->comp_value==CONST_FLT) {
+                       yyvsp[0]->n_x.v_float= -(yyvsp[0]->n_x.v_float);
+                       /* free($1); */
+                       yyval=yyvsp[0];
+               } else if(yyvsp[0]->comp_value==CONST_INT) {
+                       yyvsp[0]->n_x.v_int= -(yyvsp[0]->n_x.v_int);
+                       /* free($1); */
+                       yyval=yyvsp[0];
+               } else {
+                       yyvsp[-1]->comp_value = NEGATE;
+                       yyvsp[-1]->n_x.v_subs[0]=yyvsp[0];
+                       yyvsp[-1]->n_x.v_subs[1]=(struct node *)0;
+                       yyval = yyvsp[-1];
+               } }
+    break;
+case 35:
+#line 241 "parse.y"
+{
+               yyvsp[-1]->n_x.v_subs[0]=yyvsp[0];
+               yyvsp[-1]->n_x.v_subs[1]=(struct node *)0;
+               yyval = yyvsp[-1]; }
+    break;
+case 36:
+#line 246 "parse.y"
+{ yyval = yyvsp[-1]; }
+    break;
+case 37:
+#line 247 "parse.y"
+{
+               if(!parse_error)
+                       parse_error=NO_CLOSE;
+               }
+    break;
+case 38:
+#line 255 "parse.y"
+{
+               if(!parse_error)
+                       parse_error=NO_CLOSE;
+               }
+    break;
+case 39:
+#line 263 "parse.y"
+{ yyval = make_list(yyvsp[0], 0); }
+    break;
+case 40:
+#line 265 "parse.y"
+{ yyval = make_list(yyvsp[0], yyvsp[-2]); }
+    break;
+case 43:
+#line 273 "parse.y"
+{ yyval=make_list(yyvsp[0], 0); }
+    break;
+case 44:
+#line 275 "parse.y"
+{ yyval=make_list(yyvsp[0],yyvsp[-2]); }
+    break;
+case 45:
+#line 279 "parse.y"
+{ yyval=yyvsp[0]; }
+    break;
+}
+
+#line 727 "/usr/share/bison/bison.simple"
+
+
+  yyvsp -= yylen;
+  yyssp -= yylen;
+#if YYLSP_NEEDED
+  yylsp -= yylen;
+#endif
+
+#if YYDEBUG
+  if (yydebug)
+    {
+      short *yyssp1 = yyss - 1;
+      YYFPRINTF (stderr, "state stack now");
+      while (yyssp1 != yyssp)
+       YYFPRINTF (stderr, " %d", *++yyssp1);
+      YYFPRINTF (stderr, "\n");
+    }
+#endif
+
+  *++yyvsp = yyval;
+#if YYLSP_NEEDED
+  *++yylsp = yyloc;
+#endif
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
+  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTBASE];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+
+#ifdef YYERROR_VERBOSE
+      yyn = yypact[yystate];
+
+      if (yyn > YYFLAG && yyn < YYLAST)
+       {
+         YYSIZE_T yysize = 0;
+         char *yymsg;
+         int yyx, yycount;
+
+         yycount = 0;
+         /* Start YYX at -YYN if negative to avoid negative indexes in
+            YYCHECK.  */
+         for (yyx = yyn < 0 ? -yyn : 0;
+              yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
+           if (yycheck[yyx + yyn] == yyx)
+             yysize += yystrlen (yytname[yyx]) + 15, yycount++;
+         yysize += yystrlen ("parse error, unexpected ") + 1;
+         yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
+         yymsg = (char *) YYSTACK_ALLOC (yysize);
+         if (yymsg != 0)
+           {
+             char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
+             yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
+
+             if (yycount < 5)
+               {
+                 yycount = 0;
+                 for (yyx = yyn < 0 ? -yyn : 0;
+                      yyx < (int) (sizeof (yytname) / sizeof (char *));
+                      yyx++)
+                   if (yycheck[yyx + yyn] == yyx)
+                     {
+                       const char *yyq = ! yycount ? ", expecting " : " or ";
+                       yyp = yystpcpy (yyp, yyq);
+                       yyp = yystpcpy (yyp, yytname[yyx]);
+                       yycount++;
+                     }
+               }
+             yyerror (yymsg);
+             YYSTACK_FREE (yymsg);
+           }
+         else
+           yyerror ("parse error; also virtual memory exhausted");
+       }
+      else
+#endif /* defined (YYERROR_VERBOSE) */
+       yyerror ("parse error");
+    }
+  goto yyerrlab1;
+
+
+/*--------------------------------------------------.
+| yyerrlab1 -- error raised explicitly by an action |
+`--------------------------------------------------*/
+yyerrlab1:
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+        error, discard it.  */
+
+      /* return failure if at end of input */
+      if (yychar == YYEOF)
+       YYABORT;
+      YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
+                 yychar, yytname[yychar1]));
+      yychar = YYEMPTY;
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+
+  yyerrstatus = 3;             /* Each real token shifted decrements this */
+
+  goto yyerrhandle;
+
+
+/*-------------------------------------------------------------------.
+| yyerrdefault -- current state does not do anything special for the |
+| error token.                                                       |
+`-------------------------------------------------------------------*/
+yyerrdefault:
+#if 0
+  /* This is wrong; only states that explicitly want error tokens
+     should shift them.  */
+
+  /* If its default is to accept any token, ok.  Otherwise pop it.  */
+  yyn = yydefact[yystate];
+  if (yyn)
+    goto yydefault;
+#endif
+
+
+/*---------------------------------------------------------------.
+| yyerrpop -- pop the current state because it cannot handle the |
+| error token                                                    |
+`---------------------------------------------------------------*/
+yyerrpop:
+  if (yyssp == yyss)
+    YYABORT;
+  yyvsp--;
+  yystate = *--yyssp;
+#if YYLSP_NEEDED
+  yylsp--;
+#endif
+
+#if YYDEBUG
+  if (yydebug)
+    {
+      short *yyssp1 = yyss - 1;
+      YYFPRINTF (stderr, "Error: state stack now");
+      while (yyssp1 != yyssp)
+       YYFPRINTF (stderr, " %d", *++yyssp1);
+      YYFPRINTF (stderr, "\n");
+    }
+#endif
+
+/*--------------.
+| yyerrhandle.  |
+`--------------*/
+yyerrhandle:
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yyerrdefault;
+
+  yyn += YYTERROR;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
+    goto yyerrdefault;
+
+  yyn = yytable[yyn];
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+       goto yyerrpop;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrpop;
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  YYDPRINTF ((stderr, "Shifting error token, "));
+
+  *++yyvsp = yylval;
+#if YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+/*---------------------------------------------.
+| yyoverflowab -- parser overflow comes here.  |
+`---------------------------------------------*/
+yyoverflowlab:
+  yyerror ("parser stack overflow");
+  yyresult = 2;
+  /* Fall through.  */
+
+yyreturn:
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+  return yyresult;
+}
+#line 282 "parse.y"
+
+
+void
+yyerror FUN1(char *, s)
+{
+       if(!parse_error)
+               parse_error=PARSE_ERR;
+}
+
+YYSTYPE
+make_list FUN2(YYSTYPE, car, YYSTYPE, cdr)
+{
+       YYSTYPE ret;
+
+       ret=(YYSTYPE)obstack_alloc(&tmp_mem,sizeof(*ret));
+       ret->comp_value = 0;
+       ret->n_x.v_subs[0]=car;
+       ret->n_x.v_subs[1]=cdr;
+       return ret;
+}
+
+#define ERROR -1
+
+extern struct node *yylval;
+
+#ifdef __STDC__
+unsigned char parse_cell_or_range (char **,struct rng *);
+#else
+unsigned char parse_cell_or_range ();
+#endif
+
+int
+yylex FUN0()
+{
+       int ch;
+       struct node *new;
+       int isflt;
+       char *begin;
+       char *tmp_str;
+       unsigned char byte_value;
+       int n;
+
+       /* unsigned char *ptr; */
+       int nn;
+       struct function *fp;
+       int tmp_ch;
+
+#ifdef TEST
+       if(!instr)
+               return ERROR;
+#endif
+       while(isspace(*instr))
+               instr++;
+       ch = *instr++;
+       if(ch=='(' || ch==',' || ch==')')
+               return ch;
+
+       new=(struct node *)obstack_alloc(&tmp_mem,sizeof(struct node));
+       new->add_byte=0;
+       new->sub_value=0;
+       switch(ch) {
+       case 0:
+               return 0;
+
+       case '0': case '1': case '2': case '3': case '4': case '5': case '6':
+       case '7': case '8': case '9': case '.':
+               isflt = (ch=='.');
+
+               begin=instr-1;
+               tmp_str=instr;
+
+               while(isdigit(*tmp_str) || (!isflt && *tmp_str=='.' && ++isflt))
+                       tmp_str++;
+               if(*tmp_str=='e' || *tmp_str=='E') {
+                       isflt=1;
+                       tmp_str++;
+                       if(*tmp_str=='-' || *tmp_str=='+')
+                               tmp_str++;
+                       while(isdigit(*tmp_str))
+                               tmp_str++;
+               }
+               if(isflt) {
+                       new->n_x.v_float=astof((char **)(&begin));
+                       byte_value=CONST_FLT;
+               } else {
+                       new->n_x.v_int=astol((char **)(&begin));
+                       if(begin!=tmp_str) {
+                               begin=instr-1;
+                               new->n_x.v_float=astof((char **)(&begin));
+                               byte_value=CONST_FLT;
+                       } else
+                               byte_value=CONST_INT;
+               }
+               ch=L_CONST;
+               instr=begin;
+               break;
+
+       case '"':
+               begin=instr;
+               while(*instr && *instr!='"') {
+                       if(*instr=='\\' && instr[1])
+                               instr++;
+                       instr++;
+               }
+               if(!*instr) {
+                       parse_error=NO_QUOTE;
+                       return ERROR;
+               }
+               tmp_str=new->n_x.v_string=(char *)ck_malloc(1+instr-begin);
+               while(begin!=instr) {
+                       unsigned char n;
+
+                       if(*begin=='\\') {
+                               begin++;
+                               if(begin[0]>='0' && begin[0]<='7') {
+                                       if(begin[1]>='0' && begin[1]<='7') {
+                                               if(begin[2]>='0' && 
begin[2]<='7') {
+                                                       n=(begin[2]-'0') + (010 
* (begin[1]-'0')) + ( 0100 * (begin[0]-'0'));
+                                                       begin+=3;
+                                               } else {
+                                                       n=(begin[1]-'0') + (010 
* (begin[0]-'0'));
+                                                       begin+=2;
+                                               }
+                                       } else {
+                                               n=begin[0]-'0';
+                                               begin++;
+                                       }
+                               } else
+                                       n= *begin++;
+                               *tmp_str++= n;
+                       } else
+                               *tmp_str++= *begin++;
+               }
+               *tmp_str='\0';
+               instr++;
+               byte_value=CONST_STR;
+               ch=L_CONST;
+               break;
+
+       case '+':       case '-':
+
+       case '*':       case '/':       case '%':       case '&':
+       /* case '|': */ case '^':       case '=':
+
+       case '?':
+       {
+               unsigned char *ptr;
+
+               for(ptr= fnin;*ptr;ptr++)
+                       if(the_funs[*ptr].fn_str[0]==ch)
+                               break;
+#ifdef TEST
+               if(!*ptr)
+                       panic("Can't find fnin[] entry for '%c'",ch);
+#endif
+               byte_value= *ptr;
+       }
+               break;
+
+       case ':':
+               byte_value=IF;
+               break;
+
+       case '!':
+       case '<':
+       case '>':
+               if(*instr!='=') {
+                       byte_value = (ch=='<') ? LESS : (ch=='>') ? GREATER : 
NOT;
+                       break;
+               }
+               instr++;
+               byte_value = (ch=='<') ? LESSEQ : (ch=='>') ? GREATEQ : 
NOTEQUAL;
+               ch = (ch=='<') ? LE : (ch=='>') ? GE : NE;
+               break;
+
+       case '\'':
+       case ';':
+       case '[':
+       case '\\':
+       case ']':
+       case '`':
+       case '{':
+       case '}':
+       case '~':
+       bad_chr:
+               parse_error=BAD_CHAR;
+               return ERROR;
+
+       case '#':
+               begin=instr-1;
+               while(*instr && (isalnum(*instr) || *instr=='_'))
+                       instr++;
+               ch= *instr;
+               *instr=0;
+               if(!stricmp(begin,tname))
+                       byte_value=F_TRUE;
+               else if(!stricmp(begin,fname))
+                       byte_value=F_FALSE;
+               else if(!stricmp(begin,iname) && (begin[4]==0 || 
!stricmp(begin+4,"inity")))
+                       byte_value=CONST_INF;
+               else if(!stricmp(begin,mname) ||
+                       !stricmp(begin,"#ninf"))
+                       byte_value=CONST_NINF;
+               else if(!stricmp(begin,nname) ||
+                       !stricmp(begin,"#nan"))
+                       byte_value=CONST_NAN;
+               else {
+                       for(n=1;n<=ERR_MAX;n++)
+                               if(!stricmp(begin,ename[n]))
+                                       break;
+                       if(n>ERR_MAX)
+                               n=BAD_CHAR;
+                       new->n_x.v_int=n;
+                       byte_value=CONST_ERR;
+               }
+               *instr=ch;
+               ch=L_CONST;
+               break;
+
+       default:
+               if(!a0 && (ch=='@' || ch=='$'))
+                  goto bad_chr;
+
+               if(a0 && ch=='@') {
+                       begin=instr;
+                       while(*instr && (isalpha(*instr) || isdigit(*instr) || 
*instr=='_'))
+                               instr++;
+                       n=instr-begin;
+               } else {
+                       begin=instr-1;
+                       
byte_value=parse_cell_or_range(&begin,&(new->n_x.v_rng));
+                       if(byte_value) {
+                               if((byte_value& ~0x3)==R_CELL)
+                                       ch=L_CELL;
+                               else
+                                       ch=L_RANGE;
+                               instr=begin;
+                               break;
+                       }
+
+                       while(*instr && (isalpha(*instr) || isdigit(*instr) || 
*instr=='_'))
+                               instr++;
+
+                       n=instr-begin;
+                       while(isspace(*instr))
+                               instr++;
+
+                       if(*instr!='(') {
+                               ch=L_VAR;
+                               byte_value=VAR;
+                               new->n_x.v_var=find_or_make_var(begin,n);
+                               break;
+                       }
+               }
+               tmp_ch=begin[n];
+               begin[n]='\0';
+               fp=hash_find(parse_hash,begin);
+               begin[n]=tmp_ch;
+               byte_value= ERROR;
+               if(!fp) {
+                       parse_error=BAD_FUNC;
+                       return ERROR;
+               }
+
+               if(fp>=the_funs && fp<=&the_funs[USR1])
+                       byte_value=fp-the_funs;
+               else {
+                       for(nn=0;nn<n_usr_funs;nn++) {
+                               if(fp>=&usr_funs[nn][0] && 
fp<=&usr_funs[nn][usr_n_funs[nn]]) {
+                                       byte_value=USR1+nn;
+                                       new->sub_value=fp-&usr_funs[nn][0];
+                                       break;
+                               }
+                       }
+#ifdef TEST
+                       if(nn==n_usr_funs) {
+                               io_error_msg("Couln't turn fp into a ##");
+                               parse_error=BAD_FUNC;
+                               return ERROR;
+                       }
+#endif
+               }
+
+               if(fp->fn_argn&X_J)
+                       ch= byte_value==F_IF ? L_FN3 : L_FN2;
+               else if(fp->fn_argt[0]=='R' || fp->fn_argt[0]=='E')
+                       ch=L_FN1R-1+fp->fn_argn-X_A0;
+               else
+                       ch=L_FN0 + fp->fn_argn-X_A0;
+
+               break;
+       }
+       /* new->node_type=ch; */
+       new->comp_value=byte_value;
+       yylval=new;
+       return ch;
+}
+
+/* Return value is
+       0 if it doesn't look like a cell or a range,
+       R_CELL if it is a cell (ptr now points past the characters, lr and lc 
hold the row and col of the cell)
+       RANGE if it is a range (ptr points past the chars)
+ */
+unsigned char
+parse_cell_or_range FUN2(char **,ptr, struct rng *,retp)
+{
+       if(a0) {
+               unsigned tmpc,tmpr;
+               char *p;
+               int abz = ROWREL|COLREL;
+
+               p= *ptr;
+               tmpc=0;
+               if(*p=='$') {
+                       abz-=COLREL;
+                       p++;
+               }
+               if(!isalpha(*p))
+                       return 0;
+               tmpc=str_to_col(&p);
+               if(tmpc<MIN_COL || tmpc>MAX_COL)
+                       return 0;
+               if(*p=='$') {
+                       abz-=ROWREL;
+                       p++;
+               }
+               if(!isdigit(*p))
+                       return 0;
+               for(tmpr=0;isdigit(*p);p++)
+                       tmpr=tmpr*10 + *p - '0';
+
+               if(tmpr<MIN_ROW || tmpr>MAX_ROW)
+                       return 0;
+
+               if(*p==':' || *p=='.') {
+                       unsigned tmpc1,tmpr1;
+
+                       abz = ((abz&COLREL) ? LCREL : 0)|((abz&ROWREL) ? LRREL 
: 0)|HRREL|HCREL;
+                       p++;
+                       if(*p=='$') {
+                               abz-=HCREL;
+                               p++;
+                       }
+                       if(!isalpha(*p))
+                               return 0;
+                       tmpc1=str_to_col(&p);
+                       if(tmpc1<MIN_COL || tmpc1>MAX_COL)
+                               return 0;
+                       if(*p=='$') {
+                               abz-=HRREL;
+                               p++;
+                       }
+                       if(!isdigit(*p))
+                               return 0;
+                       for(tmpr1=0;isdigit(*p);p++)
+                               tmpr1=tmpr1*10 + *p - '0';
+                       if(tmpr1<MIN_ROW || tmpr1>MAX_ROW)
+                               return 0;
+
+                       if(tmpr<tmpr1) {
+                               retp->lr=tmpr;
+                               retp->hr=tmpr1;
+                       } else {
+                               retp->lr=tmpr1;
+                               retp->hr=tmpr;
+                       }
+                       if(tmpc<tmpc1) {
+                               retp->lc=tmpc;
+                               retp->hc=tmpc1;
+                       } else {
+                               retp->lc=tmpc1;
+                               retp->hc=tmpc;
+                       }
+                       *ptr= p;
+                       return RANGE | abz;
+               }
+               retp->lr = retp->hr = tmpr;
+               retp->lc = retp->hc = tmpc;
+               *ptr=p;
+               return R_CELL | abz;
+       } else {
+               char *p;
+               unsigned char retr;
+               unsigned char retc;
+               int ended;
+               long num;
+               CELLREF tmp;
+
+#define CK_ABS_R(x)    if((x)<MIN_ROW || (x)>MAX_ROW)  \
+                               return 0;               \
+                       else
+
+#define CK_REL_R(x)    if(   ((x)>0 && MAX_ROW-(x)<cur_row)    \
+                          || ((x)<0 && MIN_ROW-(x)>cur_row))   \
+                               return 0;                       \
+                       else
+
+#define CK_ABS_C(x)    if((x)<MIN_COL || (x)>MAX_COL)  \
+                               return 0;               \
+                       else
+
+#define CK_REL_C(x)    if(   ((x)>0 && MAX_COL-(x)<cur_col)    \
+                          || ((x)<0 && MIN_COL-(x)>cur_col))   \
+                               return 0;                       \
+                       else
+
+#define MAYBEREL(p) (*(p)=='[' && (isdigit((p)[1]) || (((p)[1]=='+' || 
(p)[1]=='-') && isdigit((p)[2]))))
+
+               p= *ptr;
+               retr=0;
+               retc=0;
+               ended=0;
+               while(ended==0) {
+                       switch(*p) {
+                       case 'r':
+                       case 'R':
+                               if(retr) {
+                                       ended++;
+                                       break;
+                               }
+                               p++;
+                               retr=R_CELL;
+                               if(isdigit(*p)) {
+                                       num=astol(&p);
+                                       CK_ABS_R(num);
+                                       retp->lr= retp->hr=num;
+                               } else if(MAYBEREL(p)) {
+                                       p++;
+                                       num=astol(&p);
+                                       CK_REL_R(num);
+                                       retp->lr= retp->hr=num+cur_row;
+                                       retr|=ROWREL;
+                                       if(*p==':') {
+                                               retr=RANGE|LRREL|HRREL;
+                                               p++;
+                                               num=astol(&p);
+                                               CK_REL_R(num);
+                                               retp->hr=num+cur_row;
+                                       }
+                                       if(*p++!=']')
+                                               return 0;
+                               } else if(retc || *p=='c' || *p=='C') {
+                                       retr|=ROWREL;
+                                       retp->lr= retp->hr=cur_row;
+                               } else
+                                       return 0;
+                               if(*p==':' && retr!=(RANGE|LRREL|HRREL)) {
+                                       retr= (retr&ROWREL) ? RANGE|LRREL : 
RANGE;
+                                       p++;
+                                       if(isdigit(*p)) {
+                                               num=astol(&p);
+                                               CK_ABS_R(num);
+                                               retp->hr=num;
+                                       } else if(MAYBEREL(p)) {
+                                               p++;
+                                               num=astol(&p);
+                                               CK_REL_R(num);
+                                               retp->hr=num+cur_row;
+                                               retr|=HRREL;
+                                               if(*p++!=']')
+                                                       return 0;
+                                       } else
+                                               return 0;
+                               }
+
+                               if(retc)
+                                       ended++;
+                               break;
+
+                       case 'c':
+                       case 'C':
+                               if(retc) {
+                                       ended++;
+                                       break;
+                               }
+                               p++;
+                               retc=R_CELL;
+                               if(isdigit(*p)) {
+                                       num=astol(&p);
+                                       CK_ABS_C(num);
+                                       retp->lc= retp->hc=num;
+                               } else if(MAYBEREL(p)) {
+                                       p++;
+                                       num=astol(&p);
+                                       CK_REL_C(num);
+                                       retp->lc= retp->hc=num+cur_col;
+                                       retc|=COLREL;
+                                       if(*p==':') {
+                                               retc=RANGE|LCREL|HCREL;
+                                               p++;
+                                               num=astol(&p);
+                                               CK_REL_C(num);
+                                               retp->hc=num+cur_col;
+                                       }
+                                       if(*p++!=']')
+                                               return 0;
+                               } else if(retr || *p=='r' || *p=='R') {
+                                       retc|=COLREL;
+                                       retp->lc= retp->hc=cur_col;
+                               } else
+                                       return 0;
+                               if(*p==':' && retc!=(RANGE|LCREL|HCREL)) {
+                                       retc= (retc&COLREL) ? RANGE|LCREL : 
RANGE;
+                                       p++;
+                                       if(isdigit(*p)) {
+                                               num=astol(&p);
+                                               CK_ABS_C(num);
+                                               retp->hc=num;
+                                       } else if(MAYBEREL(p)) {
+                                               p++;
+                                               num=astol(&p);
+                                               CK_REL_C(num);
+                                               retp->hc=num+cur_col;
+                                               retc|=HCREL;
+                                               if(*p++!=']')
+                                                       return 0;
+                                       } else
+                                               return 0;
+                               }
+
+                               if(retr)
+                                       ended++;
+                               break;
+                       default:
+                               if(retr) {
+                                       *ptr=p;
+                                       retp->lc=MIN_COL;
+                                       retp->hc=MAX_COL;
+                                       if((retr|ROWREL)==(R_CELL|ROWREL))
+                                               return (retr&ROWREL) ? 
(RANGE|LRREL|HRREL) : RANGE;
+                                       else
+                                               return retr;
+                               } else if(retc) {
+                                       *ptr=p;
+                                       retp->lr=MIN_ROW;
+                                       retp->hr=MAX_COL;
+                                       if((retc|COLREL)==(R_CELL|COLREL))
+                                               return (retc&COLREL) ? 
(RANGE|LCREL|HCREL) : RANGE;
+                                       else
+                                               return retc;
+                               }
+                               return 0;
+                       }
+               }
+               if(!retr || !retc)
+                       return 0;
+               *ptr=p;
+               if(retp->lr>retp->hr)
+                       tmp=retp->lr,retp->lr=retp->hr,retp->hr=tmp;
+               if(retp->lc>retp->hc)
+                       tmp=retp->lc,retp->lc=retp->hc,retp->hc=tmp;
+
+               if((retr|ROWREL)==(R_CELL|ROWREL)) {
+                       if((retc|COLREL)==(R_CELL|COLREL))
+                               return retr|retc;
+                       return (retr&ROWREL) ? (retc|LRREL|HRREL) : retc;
+               }
+               if((retc|COLREL)==(R_CELL|COLREL))
+                       return (retc&COLREL) ? (retr|LCREL|HCREL) : retr;
+               return retr|retc;
+       }
+}
+
+int
+str_to_col FUN1(char **,str)
+{
+       int ret;
+       char c,cc,ccc;
+#if MAX_COL>702
+       char cccc;
+#endif
+
+       ret=0;
+       c=str[0][0];
+       if(!isalpha((cc=str[0][1]))) {
+               (*str)++;
+               return MIN_COL + (isupper(c) ? c-'A' : c-'a');
+       }
+       if(!isalpha((ccc=str[0][2]))) {
+               (*str)+=2;
+               return MIN_COL+26 + (isupper(c) ? c-'A' : c-'a')*26 + 
(isupper(cc) ? cc-'A' : cc-'a');
+       }
+#if MAX_COL>702
+       if(!isalpha((cccc=str[0][3]))) {
+               (*str)+=3;
+               return MIN_COL+702 + (isupper(c) ? c-'A' : c-'a')*26*26 + 
(isupper(cc) ? cc-'A' : cc-'a')*26 + (isupper(ccc) ? ccc-'A' : ccc-'a');
+       }
+       if(!isalpha(str[0][4])) {
+               (*str)+=4;
+               return MIN_COL+18278 + (isupper(c) ? c-'A' : c-'a')*26*26*26 + 
(isupper(cc) ? cc-'A' : cc-'a')*26*26 + (isupper(ccc) ? ccc-'A' : ccc-'a')*26 + 
(isupper(cccc) ? cccc-'A' : cccc-'a');
+       }
+#endif
+       return 0;
+}
diff --git a/test/etags/y-src/parse.y b/test/etags/y-src/parse.y
new file mode 100644
index 0000000..75fd787
--- /dev/null
+++ b/test/etags/y-src/parse.y
@@ -0,0 +1,875 @@
+%{
+/*     Copyright (C) 1990, 1992, 1993 Free Software Foundation, Inc.
+
+This file is part of Oleo, the GNU Spreadsheet.
+
+Oleo is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+Oleo is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Oleo; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+%}
+
+
+%right '?' ':'
+/* %left '|' */
+%left '&'
+%nonassoc '=' NE
+%nonassoc '<' LE '>' GE
+%left '+' '-'
+%left '*' '/' '%'
+%right '^'
+%left NEG '!'
+
+%token L_CELL L_RANGE
+%token L_VAR
+
+%token L_CONST
+%token L_FN0   L_FN1   L_FN2   L_FN3   L_FN4   L_FNN
+%token L_FN1R  L_FN2R  L_FN3R  L_FN4R  L_FNNR
+
+%token L_LE    L_NE    L_GE
+
+%{
+#include "funcdef.h"
+
+#include <ctype.h>
+
+#define obstack_chunk_alloc ck_malloc
+#define obstack_chunk_free free
+#include "obstack.h"
+#include "sysdef.h"
+
+#include "global.h"
+#include "errors.h"
+#include "node.h"
+#include "eval.h"
+#include "ref.h"
+
+int yylex ();
+#ifdef __STDC__
+void yyerror (char *);
+#else
+void yyerror ();
+#endif
+VOIDSTAR parse_hash;
+extern VOIDSTAR hash_find();
+
+/* This table contains a list of the infix single-char functions */
+unsigned char fnin[] = {
+       SUM, DIFF, DIV, PROD, MOD, /* AND, OR, */ POW, EQUAL, IF, CONCAT, 0
+};
+
+#define YYSTYPE _y_y_s_t_y_p_e
+typedef struct node *YYSTYPE;
+YYSTYPE parse_return;
+#ifdef __STDC__
+YYSTYPE make_list (YYSTYPE, YYSTYPE);
+#else
+YYSTYPE make_list ();
+#endif
+
+char *instr;
+int parse_error = 0;
+extern struct obstack tmp_mem;
+
+%}
+%%
+line:  exp
+               { parse_return=$1; }
+       | error {
+               if(!parse_error)
+                       parse_error=PARSE_ERR;
+               parse_return=0; }
+       ;
+
+exp:     L_CONST
+       | cell
+       | L_FN0 '(' ')' {
+               $$=$1; }
+       | L_FN1 '(' exp ')' {
+               ($1)->n_x.v_subs[0]=$3;
+               ($1)->n_x.v_subs[1]=(struct node *)0;
+               $$=$1; }
+       | L_FN2 '(' exp ',' exp ')' {
+               ($1)->n_x.v_subs[0]=$3;
+               ($1)->n_x.v_subs[1]=$5;
+               $$=$1; }
+       | L_FN3 '(' exp ',' exp ',' exp ')' {
+               ($1)->n_x.v_subs[0]=make_list($3,$5);
+               ($1)->n_x.v_subs[1]=$7;
+               $$=$1;}
+       | L_FN4 '(' exp ',' exp ',' exp ',' exp ')' {
+               ($1)->n_x.v_subs[0]=make_list($3,$5);
+               ($1)->n_x.v_subs[1]=make_list($7,$9);
+               $$=$1;}
+       | L_FNN '(' exp_list ')' {
+               ($1)->n_x.v_subs[0]=(struct node *)0;
+               ($1)->n_x.v_subs[1]=$3;
+               $$=$1; }
+       | L_FN1R '(' L_RANGE ')' {
+               $1->n_x.v_subs[0]=$3;
+               $$=$1; }
+       | L_FN1R '(' L_VAR ')' {
+               $1->n_x.v_subs[0]=$3;
+               $$=$1; }
+
+       | L_FN2R '(' L_RANGE ',' exp ')' {
+               $1->n_x.v_subs[0]=$3;
+               $1->n_x.v_subs[1]=$5;
+               $$=$1; }
+       | L_FN2R '(' L_VAR ',' exp ')' {
+               $1->n_x.v_subs[0]=$3;
+               $1->n_x.v_subs[1]=$5;
+               $$=$1; }
+
+       /* JF:  These should be FN2R, but I'm hacking this for SYLNK */
+       | L_FN2R '(' L_RANGE ',' exp ',' exp ')' {
+               if($1->comp_value!=F_INDEX)
+                       parse_error=PARSE_ERR;
+               $1->comp_value=F_INDEX2;
+               $1->n_x.v_subs[0]=make_list($3,$5);
+               $1->n_x.v_subs[1]=$7;
+               $$=$1; }
+       | L_FN2R '(' L_VAR ',' exp ',' exp ')' {
+               if($1->comp_value!=F_INDEX)
+                       parse_error=PARSE_ERR;
+               $1->comp_value=F_INDEX2;
+               $1->n_x.v_subs[0]=make_list($3,$5);
+               $1->n_x.v_subs[1]=$7;
+               $$=$1; }
+
+       | L_FN3R '(' L_RANGE ',' exp ',' exp ')' {
+               ($1)->n_x.v_subs[0]=make_list($3,$5);
+               ($1)->n_x.v_subs[1]=$7;
+               $$=$1;}
+       | L_FN3R '(' L_VAR ',' exp ',' exp ')' {
+               ($1)->n_x.v_subs[0]=make_list($3,$5);
+               ($1)->n_x.v_subs[1]=$7;
+               $$=$1;}
+
+       | L_FNNR '(' range_exp_list ')' {
+               ($1)->n_x.v_subs[0]=(struct node *)0;
+               ($1)->n_x.v_subs[1]=$3;
+               $$=$1; }
+       | exp '?' exp ':' exp {
+               $2->comp_value=IF;
+               $2->n_x.v_subs[0]=$4;
+               $2->n_x.v_subs[1]=$5;
+               $4->n_x.v_subs[0]=$1;
+               $4->n_x.v_subs[1]=$3;
+               $$=$2; }
+       /* | exp '|' exp {
+               $2->n_x.v_subs[0]=$1;
+               $2->n_x.v_subs[1]=$3;
+               $$ = $2; } */
+       | exp '&' exp {
+               $2->n_x.v_subs[0]=$1;
+               $2->n_x.v_subs[1]=$3;
+               $$ = $2; }
+       | exp '<' exp {
+               $2->n_x.v_subs[0]=$1;
+               $2->n_x.v_subs[1]=$3;
+               $$ = $2; }
+       | exp LE exp {
+               $2->n_x.v_subs[0]=$1;
+               $2->n_x.v_subs[1]=$3;
+               $$ = $2; }
+       | exp '=' exp {
+               $2->n_x.v_subs[0]=$1;
+               $2->n_x.v_subs[1]=$3;
+               $$ = $2; }
+       | exp NE exp {
+               $2->n_x.v_subs[0]=$1;
+               $2->n_x.v_subs[1]=$3;
+               $$ = $2; }
+       | exp '>' exp {
+               $2->n_x.v_subs[0]=$1;
+               $2->n_x.v_subs[1]=$3;
+               $$ = $2; }
+       | exp GE exp {
+               $2->n_x.v_subs[0]=$1;
+               $2->n_x.v_subs[1]=$3;
+               $$ = $2; }
+       | exp '+' exp {
+               $2->n_x.v_subs[0]=$1;
+               $2->n_x.v_subs[1]=$3;
+               $$ = $2; }
+       | exp '-' exp {
+               $2->n_x.v_subs[0]=$1;
+               $2->n_x.v_subs[1]=$3;
+               $$ = $2; }
+       | exp '*' exp {
+               $2->n_x.v_subs[0]=$1;
+               $2->n_x.v_subs[1]=$3;
+               $$ = $2; }
+       | exp '/' exp {
+               $2->n_x.v_subs[0]=$1;
+               $2->n_x.v_subs[1]=$3;
+               $$ = $2; }
+       | exp '%' exp {
+               $2->n_x.v_subs[0]=$1;
+               $2->n_x.v_subs[1]=$3;
+               $$ = $2; }
+       | exp '^' exp {
+               $2->n_x.v_subs[0]=$1;
+               $2->n_x.v_subs[1]=$3;
+               $$ = $2; }
+       | '-' exp %prec NEG {
+               if($2->comp_value==CONST_FLT) {
+                       $2->n_x.v_float= -($2->n_x.v_float);
+                       /* free($1); */
+                       $$=$2;
+               } else if($2->comp_value==CONST_INT) {
+                       $2->n_x.v_int= -($2->n_x.v_int);
+                       /* free($1); */
+                       $$=$2;
+               } else {
+                       $1->comp_value = NEGATE;
+                       $1->n_x.v_subs[0]=$2;
+                       $1->n_x.v_subs[1]=(struct node *)0;
+                       $$ = $1;
+               } }
+       | '!' exp {
+               $1->n_x.v_subs[0]=$2;
+               $1->n_x.v_subs[1]=(struct node *)0;
+               $$ = $1; }
+       | '(' exp ')'
+               { $$ = $2; }
+       | '(' exp error {
+               if(!parse_error)
+                       parse_error=NO_CLOSE;
+               }
+       /* | exp ')' error {
+               if(!parse_error)
+                       parse_error=NO_OPEN;
+               } */
+       | '(' error {
+               if(!parse_error)
+                       parse_error=NO_CLOSE;
+               }
+       ;
+
+
+exp_list: exp
+               { $$ = make_list($1, 0); }
+       | exp_list ',' exp
+               { $$ = make_list($3, $1); }
+       ;
+
+range_exp: L_RANGE
+       | exp
+       ;
+
+range_exp_list: range_exp
+               { $$=make_list($1, 0); }
+       |   range_exp_list ',' range_exp
+               { $$=make_list($3,$1); }
+       ;
+
+cell:  L_CELL
+               { $$=$1; }
+       | L_VAR
+       ;
+%%
+
+void
+yyerror FUN1(char *, s)
+{
+       if(!parse_error)
+               parse_error=PARSE_ERR;
+}
+
+YYSTYPE
+make_list FUN2(YYSTYPE, car, YYSTYPE, cdr)
+{
+       YYSTYPE ret;
+
+       ret=(YYSTYPE)obstack_alloc(&tmp_mem,sizeof(*ret));
+       ret->comp_value = 0;
+       ret->n_x.v_subs[0]=car;
+       ret->n_x.v_subs[1]=cdr;
+       return ret;
+}
+
+#define ERROR -1
+
+extern struct node *yylval;
+
+#ifdef __STDC__
+unsigned char parse_cell_or_range (char **,struct rng *);
+#else
+unsigned char parse_cell_or_range ();
+#endif
+
+int
+yylex FUN0()
+{
+       int ch;
+       struct node *new;
+       int isflt;
+       char *begin;
+       char *tmp_str;
+       unsigned char byte_value;
+       int n;
+
+       /* unsigned char *ptr; */
+       int nn;
+       struct function *fp;
+       int tmp_ch;
+
+#ifdef TEST
+       if(!instr)
+               return ERROR;
+#endif
+       while(isspace(*instr))
+               instr++;
+       ch = *instr++;
+       if(ch=='(' || ch==',' || ch==')')
+               return ch;
+
+       new=(struct node *)obstack_alloc(&tmp_mem,sizeof(struct node));
+       new->add_byte=0;
+       new->sub_value=0;
+       switch(ch) {
+       case 0:
+               return 0;
+
+       case '0': case '1': case '2': case '3': case '4': case '5': case '6':
+       case '7': case '8': case '9': case '.':
+               isflt = (ch=='.');
+
+               begin=instr-1;
+               tmp_str=instr;
+
+               while(isdigit(*tmp_str) || (!isflt && *tmp_str=='.' && ++isflt))
+                       tmp_str++;
+               if(*tmp_str=='e' || *tmp_str=='E') {
+                       isflt=1;
+                       tmp_str++;
+                       if(*tmp_str=='-' || *tmp_str=='+')
+                               tmp_str++;
+                       while(isdigit(*tmp_str))
+                               tmp_str++;
+               }
+               if(isflt) {
+                       new->n_x.v_float=astof((char **)(&begin));
+                       byte_value=CONST_FLT;
+               } else {
+                       new->n_x.v_int=astol((char **)(&begin));
+                       if(begin!=tmp_str) {
+                               begin=instr-1;
+                               new->n_x.v_float=astof((char **)(&begin));
+                               byte_value=CONST_FLT;
+                       } else
+                               byte_value=CONST_INT;
+               }
+               ch=L_CONST;
+               instr=begin;
+               break;
+
+       case '"':
+               begin=instr;
+               while(*instr && *instr!='"') {
+                       if(*instr=='\\' && instr[1])
+                               instr++;
+                       instr++;
+               }
+               if(!*instr) {
+                       parse_error=NO_QUOTE;
+                       return ERROR;
+               }
+               tmp_str=new->n_x.v_string=(char *)ck_malloc(1+instr-begin);
+               while(begin!=instr) {
+                       unsigned char n;
+
+                       if(*begin=='\\') {
+                               begin++;
+                               if(begin[0]>='0' && begin[0]<='7') {
+                                       if(begin[1]>='0' && begin[1]<='7') {
+                                               if(begin[2]>='0' && 
begin[2]<='7') {
+                                                       n=(begin[2]-'0') + (010 
* (begin[1]-'0')) + ( 0100 * (begin[0]-'0'));
+                                                       begin+=3;
+                                               } else {
+                                                       n=(begin[1]-'0') + (010 
* (begin[0]-'0'));
+                                                       begin+=2;
+                                               }
+                                       } else {
+                                               n=begin[0]-'0';
+                                               begin++;
+                                       }
+                               } else
+                                       n= *begin++;
+                               *tmp_str++= n;
+                       } else
+                               *tmp_str++= *begin++;
+               }
+               *tmp_str='\0';
+               instr++;
+               byte_value=CONST_STR;
+               ch=L_CONST;
+               break;
+
+       case '+':       case '-':
+
+       case '*':       case '/':       case '%':       case '&':
+       /* case '|': */ case '^':       case '=':
+
+       case '?':
+       {
+               unsigned char *ptr;
+
+               for(ptr= fnin;*ptr;ptr++)
+                       if(the_funs[*ptr].fn_str[0]==ch)
+                               break;
+#ifdef TEST
+               if(!*ptr)
+                       panic("Can't find fnin[] entry for '%c'",ch);
+#endif
+               byte_value= *ptr;
+       }
+               break;
+
+       case ':':
+               byte_value=IF;
+               break;
+
+       case '!':
+       case '<':
+       case '>':
+               if(*instr!='=') {
+                       byte_value = (ch=='<') ? LESS : (ch=='>') ? GREATER : 
NOT;
+                       break;
+               }
+               instr++;
+               byte_value = (ch=='<') ? LESSEQ : (ch=='>') ? GREATEQ : 
NOTEQUAL;
+               ch = (ch=='<') ? LE : (ch=='>') ? GE : NE;
+               break;
+
+       case '\'':
+       case ';':
+       case '[':
+       case '\\':
+       case ']':
+       case '`':
+       case '{':
+       case '}':
+       case '~':
+       bad_chr:
+               parse_error=BAD_CHAR;
+               return ERROR;
+
+       case '#':
+               begin=instr-1;
+               while(*instr && (isalnum(*instr) || *instr=='_'))
+                       instr++;
+               ch= *instr;
+               *instr=0;
+               if(!stricmp(begin,tname))
+                       byte_value=F_TRUE;
+               else if(!stricmp(begin,fname))
+                       byte_value=F_FALSE;
+               else if(!stricmp(begin,iname) && (begin[4]==0 || 
!stricmp(begin+4,"inity")))
+                       byte_value=CONST_INF;
+               else if(!stricmp(begin,mname) ||
+                       !stricmp(begin,"#ninf"))
+                       byte_value=CONST_NINF;
+               else if(!stricmp(begin,nname) ||
+                       !stricmp(begin,"#nan"))
+                       byte_value=CONST_NAN;
+               else {
+                       for(n=1;n<=ERR_MAX;n++)
+                               if(!stricmp(begin,ename[n]))
+                                       break;
+                       if(n>ERR_MAX)
+                               n=BAD_CHAR;
+                       new->n_x.v_int=n;
+                       byte_value=CONST_ERR;
+               }
+               *instr=ch;
+               ch=L_CONST;
+               break;
+
+       default:
+               if(!a0 && (ch=='@' || ch=='$'))
+                  goto bad_chr;
+
+               if(a0 && ch=='@') {
+                       begin=instr;
+                       while(*instr && (isalpha(*instr) || isdigit(*instr) || 
*instr=='_'))
+                               instr++;
+                       n=instr-begin;
+               } else {
+                       begin=instr-1;
+                       
byte_value=parse_cell_or_range(&begin,&(new->n_x.v_rng));
+                       if(byte_value) {
+                               if((byte_value& ~0x3)==R_CELL)
+                                       ch=L_CELL;
+                               else
+                                       ch=L_RANGE;
+                               instr=begin;
+                               break;
+                       }
+
+                       while(*instr && (isalpha(*instr) || isdigit(*instr) || 
*instr=='_'))
+                               instr++;
+
+                       n=instr-begin;
+                       while(isspace(*instr))
+                               instr++;
+
+                       if(*instr!='(') {
+                               ch=L_VAR;
+                               byte_value=VAR;
+                               new->n_x.v_var=find_or_make_var(begin,n);
+                               break;
+                       }
+               }
+               tmp_ch=begin[n];
+               begin[n]='\0';
+               fp=hash_find(parse_hash,begin);
+               begin[n]=tmp_ch;
+               byte_value= ERROR;
+               if(!fp) {
+                       parse_error=BAD_FUNC;
+                       return ERROR;
+               }
+
+               if(fp>=the_funs && fp<=&the_funs[USR1])
+                       byte_value=fp-the_funs;
+               else {
+                       for(nn=0;nn<n_usr_funs;nn++) {
+                               if(fp>=&usr_funs[nn][0] && 
fp<=&usr_funs[nn][usr_n_funs[nn]]) {
+                                       byte_value=USR1+nn;
+                                       new->sub_value=fp-&usr_funs[nn][0];
+                                       break;
+                               }
+                       }
+#ifdef TEST
+                       if(nn==n_usr_funs) {
+                               io_error_msg("Couln't turn fp into a ##");
+                               parse_error=BAD_FUNC;
+                               return ERROR;
+                       }
+#endif
+               }
+
+               if(fp->fn_argn&X_J)
+                       ch= byte_value==F_IF ? L_FN3 : L_FN2;
+               else if(fp->fn_argt[0]=='R' || fp->fn_argt[0]=='E')
+                       ch=L_FN1R-1+fp->fn_argn-X_A0;
+               else
+                       ch=L_FN0 + fp->fn_argn-X_A0;
+
+               break;
+       }
+       /* new->node_type=ch; */
+       new->comp_value=byte_value;
+       yylval=new;
+       return ch;
+}
+
+/* Return value is
+       0 if it doesn't look like a cell or a range,
+       R_CELL if it is a cell (ptr now points past the characters, lr and lc 
hold the row and col of the cell)
+       RANGE if it is a range (ptr points past the chars)
+ */
+unsigned char
+parse_cell_or_range FUN2(char **,ptr, struct rng *,retp)
+{
+       if(a0) {
+               unsigned tmpc,tmpr;
+               char *p;
+               int abz = ROWREL|COLREL;
+
+               p= *ptr;
+               tmpc=0;
+               if(*p=='$') {
+                       abz-=COLREL;
+                       p++;
+               }
+               if(!isalpha(*p))
+                       return 0;
+               tmpc=str_to_col(&p);
+               if(tmpc<MIN_COL || tmpc>MAX_COL)
+                       return 0;
+               if(*p=='$') {
+                       abz-=ROWREL;
+                       p++;
+               }
+               if(!isdigit(*p))
+                       return 0;
+               for(tmpr=0;isdigit(*p);p++)
+                       tmpr=tmpr*10 + *p - '0';
+
+               if(tmpr<MIN_ROW || tmpr>MAX_ROW)
+                       return 0;
+
+               if(*p==':' || *p=='.') {
+                       unsigned tmpc1,tmpr1;
+
+                       abz = ((abz&COLREL) ? LCREL : 0)|((abz&ROWREL) ? LRREL 
: 0)|HRREL|HCREL;
+                       p++;
+                       if(*p=='$') {
+                               abz-=HCREL;
+                               p++;
+                       }
+                       if(!isalpha(*p))
+                               return 0;
+                       tmpc1=str_to_col(&p);
+                       if(tmpc1<MIN_COL || tmpc1>MAX_COL)
+                               return 0;
+                       if(*p=='$') {
+                               abz-=HRREL;
+                               p++;
+                       }
+                       if(!isdigit(*p))
+                               return 0;
+                       for(tmpr1=0;isdigit(*p);p++)
+                               tmpr1=tmpr1*10 + *p - '0';
+                       if(tmpr1<MIN_ROW || tmpr1>MAX_ROW)
+                               return 0;
+
+                       if(tmpr<tmpr1) {
+                               retp->lr=tmpr;
+                               retp->hr=tmpr1;
+                       } else {
+                               retp->lr=tmpr1;
+                               retp->hr=tmpr;
+                       }
+                       if(tmpc<tmpc1) {
+                               retp->lc=tmpc;
+                               retp->hc=tmpc1;
+                       } else {
+                               retp->lc=tmpc1;
+                               retp->hc=tmpc;
+                       }
+                       *ptr= p;
+                       return RANGE | abz;
+               }
+               retp->lr = retp->hr = tmpr;
+               retp->lc = retp->hc = tmpc;
+               *ptr=p;
+               return R_CELL | abz;
+       } else {
+               char *p;
+               unsigned char retr;
+               unsigned char retc;
+               int ended;
+               long num;
+               CELLREF tmp;
+
+#define CK_ABS_R(x)    if((x)<MIN_ROW || (x)>MAX_ROW)  \
+                               return 0;               \
+                       else
+
+#define CK_REL_R(x)    if(   ((x)>0 && MAX_ROW-(x)<cur_row)    \
+                          || ((x)<0 && MIN_ROW-(x)>cur_row))   \
+                               return 0;                       \
+                       else
+
+#define CK_ABS_C(x)    if((x)<MIN_COL || (x)>MAX_COL)  \
+                               return 0;               \
+                       else
+
+#define CK_REL_C(x)    if(   ((x)>0 && MAX_COL-(x)<cur_col)    \
+                          || ((x)<0 && MIN_COL-(x)>cur_col))   \
+                               return 0;                       \
+                       else
+
+#define MAYBEREL(p) (*(p)=='[' && (isdigit((p)[1]) || (((p)[1]=='+' || 
(p)[1]=='-') && isdigit((p)[2]))))
+
+               p= *ptr;
+               retr=0;
+               retc=0;
+               ended=0;
+               while(ended==0) {
+                       switch(*p) {
+                       case 'r':
+                       case 'R':
+                               if(retr) {
+                                       ended++;
+                                       break;
+                               }
+                               p++;
+                               retr=R_CELL;
+                               if(isdigit(*p)) {
+                                       num=astol(&p);
+                                       CK_ABS_R(num);
+                                       retp->lr= retp->hr=num;
+                               } else if(MAYBEREL(p)) {
+                                       p++;
+                                       num=astol(&p);
+                                       CK_REL_R(num);
+                                       retp->lr= retp->hr=num+cur_row;
+                                       retr|=ROWREL;
+                                       if(*p==':') {
+                                               retr=RANGE|LRREL|HRREL;
+                                               p++;
+                                               num=astol(&p);
+                                               CK_REL_R(num);
+                                               retp->hr=num+cur_row;
+                                       }
+                                       if(*p++!=']')
+                                               return 0;
+                               } else if(retc || *p=='c' || *p=='C') {
+                                       retr|=ROWREL;
+                                       retp->lr= retp->hr=cur_row;
+                               } else
+                                       return 0;
+                               if(*p==':' && retr!=(RANGE|LRREL|HRREL)) {
+                                       retr= (retr&ROWREL) ? RANGE|LRREL : 
RANGE;
+                                       p++;
+                                       if(isdigit(*p)) {
+                                               num=astol(&p);
+                                               CK_ABS_R(num);
+                                               retp->hr=num;
+                                       } else if(MAYBEREL(p)) {
+                                               p++;
+                                               num=astol(&p);
+                                               CK_REL_R(num);
+                                               retp->hr=num+cur_row;
+                                               retr|=HRREL;
+                                               if(*p++!=']')
+                                                       return 0;
+                                       } else
+                                               return 0;
+                               }
+
+                               if(retc)
+                                       ended++;
+                               break;
+
+                       case 'c':
+                       case 'C':
+                               if(retc) {
+                                       ended++;
+                                       break;
+                               }
+                               p++;
+                               retc=R_CELL;
+                               if(isdigit(*p)) {
+                                       num=astol(&p);
+                                       CK_ABS_C(num);
+                                       retp->lc= retp->hc=num;
+                               } else if(MAYBEREL(p)) {
+                                       p++;
+                                       num=astol(&p);
+                                       CK_REL_C(num);
+                                       retp->lc= retp->hc=num+cur_col;
+                                       retc|=COLREL;
+                                       if(*p==':') {
+                                               retc=RANGE|LCREL|HCREL;
+                                               p++;
+                                               num=astol(&p);
+                                               CK_REL_C(num);
+                                               retp->hc=num+cur_col;
+                                       }
+                                       if(*p++!=']')
+                                               return 0;
+                               } else if(retr || *p=='r' || *p=='R') {
+                                       retc|=COLREL;
+                                       retp->lc= retp->hc=cur_col;
+                               } else
+                                       return 0;
+                               if(*p==':' && retc!=(RANGE|LCREL|HCREL)) {
+                                       retc= (retc&COLREL) ? RANGE|LCREL : 
RANGE;
+                                       p++;
+                                       if(isdigit(*p)) {
+                                               num=astol(&p);
+                                               CK_ABS_C(num);
+                                               retp->hc=num;
+                                       } else if(MAYBEREL(p)) {
+                                               p++;
+                                               num=astol(&p);
+                                               CK_REL_C(num);
+                                               retp->hc=num+cur_col;
+                                               retc|=HCREL;
+                                               if(*p++!=']')
+                                                       return 0;
+                                       } else
+                                               return 0;
+                               }
+
+                               if(retr)
+                                       ended++;
+                               break;
+                       default:
+                               if(retr) {
+                                       *ptr=p;
+                                       retp->lc=MIN_COL;
+                                       retp->hc=MAX_COL;
+                                       if((retr|ROWREL)==(R_CELL|ROWREL))
+                                               return (retr&ROWREL) ? 
(RANGE|LRREL|HRREL) : RANGE;
+                                       else
+                                               return retr;
+                               } else if(retc) {
+                                       *ptr=p;
+                                       retp->lr=MIN_ROW;
+                                       retp->hr=MAX_COL;
+                                       if((retc|COLREL)==(R_CELL|COLREL))
+                                               return (retc&COLREL) ? 
(RANGE|LCREL|HCREL) : RANGE;
+                                       else
+                                               return retc;
+                               }
+                               return 0;
+                       }
+               }
+               if(!retr || !retc)
+                       return 0;
+               *ptr=p;
+               if(retp->lr>retp->hr)
+                       tmp=retp->lr,retp->lr=retp->hr,retp->hr=tmp;
+               if(retp->lc>retp->hc)
+                       tmp=retp->lc,retp->lc=retp->hc,retp->hc=tmp;
+
+               if((retr|ROWREL)==(R_CELL|ROWREL)) {
+                       if((retc|COLREL)==(R_CELL|COLREL))
+                               return retr|retc;
+                       return (retr&ROWREL) ? (retc|LRREL|HRREL) : retc;
+               }
+               if((retc|COLREL)==(R_CELL|COLREL))
+                       return (retc&COLREL) ? (retr|LCREL|HCREL) : retr;
+               return retr|retc;
+       }
+}
+
+int
+str_to_col FUN1(char **,str)
+{
+       int ret;
+       char c,cc,ccc;
+#if MAX_COL>702
+       char cccc;
+#endif
+
+       ret=0;
+       c=str[0][0];
+       if(!isalpha((cc=str[0][1]))) {
+               (*str)++;
+               return MIN_COL + (isupper(c) ? c-'A' : c-'a');
+       }
+       if(!isalpha((ccc=str[0][2]))) {
+               (*str)+=2;
+               return MIN_COL+26 + (isupper(c) ? c-'A' : c-'a')*26 + 
(isupper(cc) ? cc-'A' : cc-'a');
+       }
+#if MAX_COL>702
+       if(!isalpha((cccc=str[0][3]))) {
+               (*str)+=3;
+               return MIN_COL+702 + (isupper(c) ? c-'A' : c-'a')*26*26 + 
(isupper(cc) ? cc-'A' : cc-'a')*26 + (isupper(ccc) ? ccc-'A' : ccc-'a');
+       }
+       if(!isalpha(str[0][4])) {
+               (*str)+=4;
+               return MIN_COL+18278 + (isupper(c) ? c-'A' : c-'a')*26*26*26 + 
(isupper(cc) ? cc-'A' : cc-'a')*26*26 + (isupper(ccc) ? ccc-'A' : ccc-'a')*26 + 
(isupper(cccc) ? cccc-'A' : cccc-'a');
+       }
+#endif
+       return 0;
+}



reply via email to

[Prev in Thread] Current Thread [Next in Thread]