From 000f5e0e43ee5784bedf6e70e5f324a24f2f455c Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 12 May 2015 20:05:52 +0300 Subject: [PATCH] Add a test suite for etags MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit * test/etags/: New test suite, adapted from http://fly.isti.cnr.it/pub/software/unix/etags-regression-test.tar.bz2, whose original author is Francesco Potortì . --- .gitignore | 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/a-src/empty.zz | 0 test/etags/a-src/empty.zz.gz | 0 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 +++ test/etags/c-src/emacs/src/keyboard.c | 11960 ++++++++++++++++ test/etags/c-src/emacs/src/lisp.h | 4817 +++++++ test/etags/c-src/emacs/src/regex.h | 630 + test/etags/c-src/etags.c | 6563 +++++++++ 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 + .../el-src/emacs/lisp/progmodes/etags.el | 2153 +++ 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 ++ 96 files changed, 105938 insertions(+), 1 deletion(-) create mode 100644 test/etags/CTAGS.good create mode 100644 test/etags/ETAGS.good_1 create mode 100644 test/etags/ETAGS.good_2 create mode 100644 test/etags/ETAGS.good_3 create mode 100644 test/etags/ETAGS.good_4 create mode 100644 test/etags/ETAGS.good_5 create mode 100644 test/etags/Makefile create mode 100644 test/etags/a-src/empty.zz create mode 100644 test/etags/a-src/empty.zz.gz create mode 100644 test/etags/ada-src/2ataspri.adb create mode 100644 test/etags/ada-src/2ataspri.ads create mode 100644 test/etags/ada-src/etags-test-for.ada create mode 100644 test/etags/ada-src/waroquiers.ada create mode 100644 test/etags/c-src/a/b/b.c create mode 100644 test/etags/c-src/abbrev.c create mode 100644 test/etags/c-src/c.c create mode 100644 test/etags/c-src/dostorture.c create mode 100644 test/etags/c-src/emacs/src/gmalloc.c create mode 100644 test/etags/c-src/emacs/src/keyboard.c create mode 100644 test/etags/c-src/emacs/src/lisp.h create mode 100644 test/etags/c-src/emacs/src/regex.h create mode 100644 test/etags/c-src/etags.c create mode 100644 test/etags/c-src/exit.c create mode 100644 test/etags/c-src/exit.strange_suffix create mode 100644 test/etags/c-src/fail.c create mode 100644 test/etags/c-src/getopt.h create mode 100644 test/etags/c-src/h.h create mode 100644 test/etags/c-src/machsyscalls.c create mode 100644 test/etags/c-src/machsyscalls.h create mode 100644 test/etags/c-src/sysdep.h create mode 100644 test/etags/c-src/tab.c create mode 100644 test/etags/c-src/torture.c create mode 100644 test/etags/cp-src/MDiagArray2.h create mode 100644 test/etags/cp-src/Pctest.h create mode 100644 test/etags/cp-src/Range.h create mode 100644 test/etags/cp-src/abstract.C create mode 100644 test/etags/cp-src/abstract.H create mode 100644 test/etags/cp-src/burton.cpp create mode 100644 test/etags/cp-src/c.C create mode 100644 test/etags/cp-src/cfront.H create mode 100644 test/etags/cp-src/clheir.cpp.gz create mode 100644 test/etags/cp-src/clheir.hpp create mode 100644 test/etags/cp-src/conway.cpp create mode 100644 test/etags/cp-src/conway.hpp create mode 100644 test/etags/cp-src/fail.C create mode 100644 test/etags/cp-src/functions.cpp create mode 100644 test/etags/cp-src/screen.cpp create mode 100644 test/etags/cp-src/screen.hpp create mode 100644 test/etags/el-src/TAGTEST.EL create mode 100644 test/etags/el-src/emacs/lisp/progmodes/etags.el create mode 100644 test/etags/erl-src/gs_dialog.erl create mode 100644 test/etags/erl-src/lines.erl create mode 100644 test/etags/erl-src/lists.erl.gz create mode 100644 test/etags/f-src/entry.for create mode 100644 test/etags/f-src/entry.strange.gz create mode 100644 test/etags/f-src/entry.strange_suffix create mode 100644 test/etags/forth-src/test-forth.fth create mode 100644 test/etags/html-src/algrthms.html create mode 100644 test/etags/html-src/index.shtml create mode 100644 test/etags/html-src/software.html create mode 100644 test/etags/html-src/softwarelibero.html create mode 100644 test/etags/java-src/AWTEMul.java create mode 100644 test/etags/java-src/KeyEve.java create mode 100644 test/etags/java-src/SMan.java create mode 100644 test/etags/java-src/SysCol.java create mode 100644 test/etags/java-src/TG.java create mode 100644 test/etags/lua-src/allegro.lua create mode 100644 test/etags/make-src/Makefile create mode 100644 test/etags/objc-src/PackInsp.h create mode 100644 test/etags/objc-src/PackInsp.m create mode 100644 test/etags/objc-src/Subprocess.h create mode 100644 test/etags/objc-src/Subprocess.m create mode 100644 test/etags/objcpp-src/SimpleCalc.H create mode 100644 test/etags/objcpp-src/SimpleCalc.M create mode 100644 test/etags/pas-src/common.pas create mode 100644 test/etags/perl-src/htlmify-cystic create mode 100644 test/etags/perl-src/kai-test.pl create mode 100644 test/etags/perl-src/mirror.pl create mode 100644 test/etags/perl-src/yagrip.pl create mode 100644 test/etags/php-src/lce_functions.php create mode 100644 test/etags/php-src/ptest.php create mode 100644 test/etags/php-src/sendmail.php create mode 100644 test/etags/prol-src/natded.prolog create mode 100644 test/etags/prol-src/ordsets.prolog create mode 100644 test/etags/ps-src/rfc1245.ps create mode 100644 test/etags/pyt-src/server.py create mode 100644 test/etags/tex-src/gzip.texi create mode 100644 test/etags/tex-src/nonewline.tex create mode 100644 test/etags/tex-src/testenv.tex create mode 100644 test/etags/tex-src/texinfo.tex create mode 100644 test/etags/y-src/atest.y create mode 100644 test/etags/y-src/cccp.c create mode 100644 test/etags/y-src/cccp.y create mode 100644 test/etags/y-src/parse.c create mode 100644 test/etags/y-src/parse.y diff --git a/.gitignore b/.gitignore index 9d32e6bafc4..4e526beedc5 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/test/etags/CTAGS.good b/test/etags/CTAGS.good new file mode 100644 index 00000000000..ee5b3f48cfc --- /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='--regex=@regexfile --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$/ +@$ 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='--regex=@regexfile --no-members/ +@$ make-src/Makefile /^ @$(MAKE) OPTIONS='nonexistent --members --declara/ +@$ make-src/Makefile /^ @$(MAKE) ${LATEST}cdiff$/ +@$ make-src/Makefile /^ @$(MAKE) etags "CPPFLAGS=-UVERSION"$/ +@$ make-src/Makefile /^ @$(MAKE) CHECKOBJS= CHECKFLAGS= etags "CFLAGS=-an/ +@$ make-src/Makefile /^ @$(MAKE) CHECKOBJS= CHECKFLAGS= ctags "CFLAGS=-an/ +@$ 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 /^@node 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 { 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)MAX_COL)/ +CK_ABS_C parse.y /^#define CK_ABS_C(x) if((x)MAX_COL)/ +CK_ABS_R y-src/parse.y /^#define CK_ABS_R(x) if((x)MAX_ROW)/ +CK_ABS_R parse.y /^#define CK_ABS_R(x) if((x)MAX_ROW)/ +CK_REL_C y-src/parse.y /^#define CK_REL_C(x) if( ((x)>0 && MAX_COL-(x)0 && MAX_COL-(x)0 && MAX_ROW-(x)0 && MAX_ROW-(x)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 /^@node 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 /^@node 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/ +MDiagArray2::MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (void) : DiagArray2 () { }$/ +MDiagArray2::MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (int r, int c) : DiagArray2 (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& a) : DiagArray2 / +MDiagArray2::MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const DiagArray2& a) : DiagArray/ +MDiagArray2::MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const MDiagArray2& a) : DiagArra/ +MDiagArray2::operator = cp-src/MDiagArray2.h /^ MDiagArray2& operator = (const MDiagArray2/ +MDiagArray2::operator MArray2 cp-src/MDiagArray2.h /^ operator MArray2 () 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 --regex=@regexfil/ +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 /^@node 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 /^@interface 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 /^@node 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 /^@node 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 /^@interface 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 /^@interface Subprocess:Object$/ +Subprocess(Private) objc-src/Subprocess.m /^@interface 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 /^@node 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 /^@node 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", ¤/ +\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 /^\\def\\@{{\\tt \\char '100}}$/ +\@ tex-src/texinfo.tex /^\\def\\@{@}%$/ +\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 {\\errmessage{@defcvx 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 {\\errmessage{@deffnx 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 {\\errmessage{@defivarx 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 {\\errmessage{@defmacx 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 {\\errmessage{@defmethodx 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 {\\errmessage{@defoptx 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 {\\errmessage{@defopx 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 {\\errmessage{@defspecx 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 {\\errmessage{@deftpx 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 {\\errmessage{@deftypefnx 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 {\\errmessage{@deftypeunx 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 {\\errmessage{@deftypevarx 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 {\\errmessage{@deftypevrx 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 {\\errmessage{@defunx 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 {\\errmessage{@defvarx 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 {\\errmessage{@defvrx 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 /^\\def\\item{\\errmessage{@item 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 /^\\def\\itemx{\\errmessage{@itemx 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 /^\\def\\kitem{\\errmessage{@kitem while not in a table/ +\kitemx tex-src/texinfo.tex /^\\def\\kitemx{\\errmessage{@kitemx 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 /^\\def\\xitem{\\errmessage{@xitem while not in a table/ +\xitemx tex-src/texinfo.tex /^\\def\\xitemx{\\errmessage{@xitemx 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, Alpha@Beta, Ass3, Qs3, tree(fe,A:Alpha@Beta/ +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* f() {}$/ +f cp-src/c.C /^int f(A x) {}$/ +f cp-src/c.C /^int A::f(A* x) {}$/ +f cp-src/c.C /^A > A,int>::f(A* 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 /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\parti/ +ialpage tex-src/texinfo.tex /^ \\availdimen@=\\pageheight \\advance\\availdimen@ by/ +ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\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,Alpha@Sem1@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 = `\\@$/ +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 00000000000..95bb70c2b3b --- /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 * f(48,1556 +int f(49,1571 +int A::f(f50,1590 +A > A,int>::f(f51,1618 +template class AT 52,1668 +class AU 53,1716 +class B<B54,1735 +class B { 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& operator = MDiagArray2::operator =95,2542 + operator MArray2 MDiagArray2::operator MArray2101,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 + 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 +@interface Subprocess:Subprocess45,1292 + +objc-src/Subprocess.m,475 +#define PTY_TEMPLATE 20,494 +#define PTY_LENGTH 21,528 +@interface 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 +@interface 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 +@interface 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 +@node Top,62,2139 +@node Copying,80,2652 +@node Overview,83,2705 +@node Sample,166,7272 +@node Invoking gzip,Invoking gzip210,8828 +@node Advanced usage,Advanced usage357,13495 +@node Environment,420,15207 +@node Tapes,437,15768 +@node Problems,460,16767 +@node 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 +\def\@{\@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 + \dimen@=\pageheight \advance\dimen@ by-\ht\partialpageialpage1580,51678 +\def\pagesofar{\pagesofar1583,51856 +\def\balancecolumns{\balancecolumns1587,52093 + \availdimen@=\pageheight \advance\availdimen@ by-\ht\partialpageialpage1593,52264 + \dimen@=\pageheight \advance\dimen@ by-\ht\partialpageialpage1599,52525 +\newcount \appendixno \appendixno = `\@no1626,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 +\def\@{\@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 00000000000..737a6f922c8 --- /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 * f(48,1556 +int f(49,1571 +int A::f(f50,1590 +A > A,int>::f(f51,1618 +template class AT 52,1668 +class AU 53,1716 +class B<B54,1735 +class B { 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& operator = MDiagArray2::operator =95,2542 + DiagArray2::operator = MDiagArray2::operator =97,2603 + operator MArray2 MDiagArray2::operator MArray2101,2667 + operator += MDiagArray2::operator +=116,2966 + operator -= MDiagArray2::operator -=119,3057 + friend MDiagArray2 operator * MDiagArray2::operator *123,3174 + friend MDiagArray2 operator / MDiagArray2::operator /124,3253 + friend MDiagArray2 operator * MDiagArray2::operator *128,3384 + operator + MDiagArray2::operator +133,3544 + operator - MDiagArray2::operator -136,3640 + friend MDiagArray2 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 + 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 +@interface Subprocess:Subprocess45,1292 + +objc-src/Subprocess.m,505 +#define PTY_TEMPLATE 20,494 +#define PTY_LENGTH 21,528 +static void showError(23,551 +@interface 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 +@interface 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 +@interface 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 +@node Top,62,2139 +@node Copying,80,2652 +@node Overview,83,2705 +@node Sample,166,7272 +@node Invoking gzip,Invoking gzip210,8828 +@node Advanced usage,Advanced usage357,13495 +@node Environment,420,15207 +@node Tapes,437,15768 +@node Problems,460,16767 +@node 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 +\def\@{\@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 + \dimen@=\pageheight \advance\dimen@ by-\ht\partialpageialpage1580,51678 +\def\pagesofar{\pagesofar1583,51856 +\def\balancecolumns{\balancecolumns1587,52093 + \availdimen@=\pageheight \advance\availdimen@ by-\ht\partialpageialpage1593,52264 + \dimen@=\pageheight \advance\dimen@ by-\ht\partialpageialpage1599,52525 +\newcount \appendixno \appendixno = `\@no1626,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 +\def\@{\@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 00000000000..1e4d565baef --- /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 ,ipcMultiChannel,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* f(48,1556 +int f(49,1571 +int A::f(f50,1590 +A > A,int>::f(f51,1618 +template class AT 52,1668 +template class AT { C t[AT::t52,1668 +class AU 53,1716 +class AU { T x;AU::x53,1716 +class B<B54,1735 +class B { 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& operator = MDiagArray2::operator =95,2542 + operator MArray2 MDiagArray2::operator MArray2101,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 + 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 +@interface Subprocess:Subprocess45,1292 + +objc-src/Subprocess.m,475 +#define PTY_TEMPLATE 20,494 +#define PTY_LENGTH 21,528 +@interface 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 +@interface 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 +@interface 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 +@node Top,62,2139 +@node Copying,80,2652 +@node Overview,83,2705 +@node Sample,166,7272 +@node Invoking gzip,Invoking gzip210,8828 +@node Advanced usage,Advanced usage357,13495 +@node Environment,420,15207 +@node Tapes,437,15768 +@node Problems,460,16767 +@node 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 +\def\@{\@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 + \dimen@=\pageheight \advance\dimen@ by-\ht\partialpageialpage1580,51678 +\def\pagesofar{\pagesofar1583,51856 +\def\balancecolumns{\balancecolumns1587,52093 + \availdimen@=\pageheight \advance\availdimen@ by-\ht\partialpageialpage1593,52264 + \dimen@=\pageheight \advance\dimen@ by-\ht\partialpageialpage1599,52525 +\newcount \appendixno \appendixno = `\@no1626,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 +\def\@{\@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 00000000000..4468cdbc0de --- /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 * f(48,1556 +int f(49,1571 +int A::f(f50,1590 +A > A,int>::f(f51,1618 +template class AT 52,1668 +class AU 53,1716 +class B<B54,1735 +class B { 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& operator = MDiagArray2::operator =95,2542 + operator MArray2 MDiagArray2::operator MArray2101,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 + 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 +@interface Subprocess:Subprocess45,1292 + +objc-src/Subprocess.m,475 +#define PTY_TEMPLATE 20,494 +#define PTY_LENGTH 21,528 +@interface 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 +@interface 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 +@interface 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 +@node Top,62,2139 +@node Copying,80,2652 +@node Overview,83,2705 +@node Sample,166,7272 +@node Invoking gzip,Invoking gzip210,8828 +@node Advanced usage,Advanced usage357,13495 +@node Environment,420,15207 +@node Tapes,437,15768 +@node Problems,460,16767 +@node 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 +\def\@{\@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 + \dimen@=\pageheight \advance\dimen@ by-\ht\partialpageialpage1580,51678 +\def\pagesofar{\pagesofar1583,51856 +\def\balancecolumns{\balancecolumns1587,52093 + \availdimen@=\pageheight \advance\availdimen@ by-\ht\partialpageialpage1593,52264 + \dimen@=\pageheight \advance\dimen@ by-\ht\partialpageialpage1599,52525 +\newcount \appendixno \appendixno = `\@no1626,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 +\def\@{\@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 00000000000..3291bf320f4 --- /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 ,ipcMultiChannel,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* f(48,1556 +int f(49,1571 +int A::f(f50,1590 +A > A,int>::f(f51,1618 +template class AT 52,1668 +template class AT { C t[AT::t52,1668 +class AU 53,1716 +class AU { T x;AU::x53,1716 +class B<B54,1735 +class B { 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& operator = MDiagArray2::operator =95,2542 + DiagArray2::operator = MDiagArray2::operator =97,2603 + operator MArray2 MDiagArray2::operator MArray2101,2667 + operator += MDiagArray2::operator +=116,2966 + operator -= MDiagArray2::operator -=119,3057 + friend MDiagArray2 operator * MDiagArray2::operator *123,3174 + friend MDiagArray2 operator / MDiagArray2::operator /124,3253 + friend MDiagArray2 operator * MDiagArray2::operator *128,3384 + operator + MDiagArray2::operator +133,3544 + operator - MDiagArray2::operator -136,3640 + friend MDiagArray2 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 + 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 +@interface Subprocess:Subprocess45,1292 + +objc-src/Subprocess.m,505 +#define PTY_TEMPLATE 20,494 +#define PTY_LENGTH 21,528 +static void showError(23,551 +@interface 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 +@interface 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 +@interface 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 +@node Top,62,2139 +@node Copying,80,2652 +@node Overview,83,2705 +@node Sample,166,7272 +@node Invoking gzip,Invoking gzip210,8828 +@node Advanced usage,Advanced usage357,13495 +@node Environment,420,15207 +@node Tapes,437,15768 +@node Problems,460,16767 +@node 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 +\def\@{\@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 + \dimen@=\pageheight \advance\dimen@ by-\ht\partialpageialpage1580,51678 +\def\pagesofar{\pagesofar1583,51856 +\def\balancecolumns{\balancecolumns1587,52093 + \availdimen@=\pageheight \advance\availdimen@ by-\ht\partialpageialpage1593,52264 + \dimen@=\pageheight \advance\dimen@ by-\ht\partialpageialpage1599,52525 +\newcount \appendixno \appendixno = `\@no1626,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 +\def\@{\@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 00000000000..635d1299e90 --- /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 --regex=@regexfile +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='--regex=@regexfile --no-members' ediff_4 + @$(MAKE) OPTIONS='nonexistent --members --declarations --regex=@regexfile' 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 $@ --regex=@regexfile ${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 00000000000..e69de29bb2d diff --git a/test/etags/a-src/empty.zz.gz b/test/etags/a-src/empty.zz.gz new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/etags/ada-src/2ataspri.adb b/test/etags/ada-src/2ataspri.adb new file mode 100644 index 00000000000..43ca983824c --- /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 00000000000..01c786028ab --- /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 00000000000..09e5a1ec9bf --- /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 00000000000..316120998f8 --- /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 00000000000..ee3c97c2456 --- /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 00000000000..f30986db343 --- /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 +#include +#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", ¤t_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 00000000000..77c8929afb2 --- /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 00000000000..5190734e0fe --- /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" + Subject: more etags torture;-) [etags 7.3 patch#3] + To: pot@CNUCE.CNR.IT + + 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 00000000000..a88f4ab75e0 --- /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 . + + The author may be reached (Email) at the address mike@ai.mit.edu, + or (US mail) as Mike Haertel c/o Free Software Foundation. */ + +#include + +#if defined HAVE_PTHREAD && !defined HYBRID_MALLOC +#define USE_PTHREAD +#endif + +#include +#include +#include + +#ifdef HYBRID_GET_CURRENT_DIR_NAME +#undef get_current_dir_name +#endif + +#include + +#ifdef USE_PTHREAD +#include +#endif + +#ifdef WINDOWSNT +#include /* 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 + + +/* 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 . + + The author may be reached (Email) at the address mike@ai.mit.edu, + or (US mail) as Mike Haertel c/o Free Software Foundation. */ + +#include + +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 +#include + +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 . + + The author may be reached (Email) at the address mike@ai.mit.edu, + 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 . + + The author may be reached (Email) at the address mike@ai.mit.edu, + 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 . + + The author may be reached (Email) at the address mike@ai.mit.edu, + 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 . */ + +/* 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 . */ + +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 . + + The author may be reached (Email) at the address mike@ai.mit.edu, + 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 . + + The author may be reached (Email) at the address mike@ai.mit.edu, + or (US mail) as Mike Haertel c/o Free Software Foundation. */ + +#include + +/* 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/test/etags/c-src/emacs/src/keyboard.c b/test/etags/c-src/emacs/src/keyboard.c new file mode 100644 index 00000000000..77f7fb97898 --- /dev/null +++ b/test/etags/c-src/emacs/src/keyboard.c @@ -0,0 +1,11960 @@ +/* Keyboard and mouse input; editor command loop. + +Copyright (C) 1985-1989, 1993-1997, 1999-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 . */ + +#include + +#include "sysstdio.h" +#include + +#include "lisp.h" +#include "termchar.h" +#include "termopts.h" +#include "frame.h" +#include "termhooks.h" +#include "macros.h" +#include "keyboard.h" +#include "window.h" +#include "commands.h" +#include "character.h" +#include "buffer.h" +#include "disptab.h" +#include "dispextern.h" +#include "syntax.h" +#include "intervals.h" +#include "keymap.h" +#include "blockinput.h" +#include "puresize.h" +#include "systime.h" +#include "atimer.h" +#include "process.h" +#include + +#ifdef HAVE_PTHREAD +#include +#endif +#ifdef MSDOS +#include "msdos.h" +#include +#else /* not MSDOS */ +#include +#endif /* not MSDOS */ + +#if defined USABLE_FIONREAD && defined USG5_4 +# include +#endif + +#include "syssignal.h" + +#include +#include +#include + +#ifdef HAVE_WINDOW_SYSTEM +#include TERM_HEADER +#endif /* HAVE_WINDOW_SYSTEM */ + +/* Variables for blockinput.h: */ + +/* Positive if interrupt input is blocked right now. */ +volatile int interrupt_input_blocked; + +/* True means an input interrupt or alarm signal has arrived. + The QUIT macro checks this. */ +volatile bool pending_signals; + +#define KBD_BUFFER_SIZE 4096 + +KBOARD *initial_kboard; +KBOARD *current_kboard; +static KBOARD *all_kboards; + +/* True in the single-kboard state, false in the any-kboard state. */ +static bool single_kboard; + +#define NUM_RECENT_KEYS (300) + +/* Index for storing next element into recent_keys. */ +static int recent_keys_index; + +/* Total number of elements stored into recent_keys. */ +static int total_keys; + +/* This vector holds the last NUM_RECENT_KEYS keystrokes. */ +static Lisp_Object recent_keys; + +/* Vector holding the key sequence that invoked the current command. + It is reused for each command, and it may be longer than the current + sequence; this_command_key_count indicates how many elements + actually mean something. + It's easier to staticpro a single Lisp_Object than an array. */ +Lisp_Object this_command_keys; +ptrdiff_t this_command_key_count; + +/* True after calling Freset_this_command_lengths. + Usually it is false. */ +static bool this_command_key_count_reset; + +/* This vector is used as a buffer to record the events that were actually read + by read_key_sequence. */ +static Lisp_Object raw_keybuf; +static int raw_keybuf_count; + +#define GROW_RAW_KEYBUF \ + if (raw_keybuf_count == ASIZE (raw_keybuf)) \ + raw_keybuf = larger_vector (raw_keybuf, 1, -1) + +/* Number of elements of this_command_keys + that precede this key sequence. */ +static ptrdiff_t this_single_command_key_start; + +/* Record values of this_command_key_count and echo_length () + before this command was read. */ +static ptrdiff_t before_command_key_count; +static ptrdiff_t before_command_echo_length; + +#ifdef HAVE_STACK_OVERFLOW_HANDLING + +/* For longjmp to recover from C stack overflow. */ +sigjmp_buf return_to_command_loop; + +/* Message displayed by Vtop_level when recovering from C stack overflow. */ +static Lisp_Object recover_top_level_message; + +#endif /* HAVE_STACK_OVERFLOW_HANDLING */ + +/* Message normally displayed by Vtop_level. */ +static Lisp_Object regular_top_level_message; + +/* For longjmp to where kbd input is being done. */ + +static sys_jmp_buf getcjmp; + +/* True while doing kbd input. */ +bool waiting_for_input; + +/* True while displaying for echoing. Delays C-g throwing. */ + +static bool echoing; + +/* Non-null means we can start echoing at the next input pause even + though there is something in the echo area. */ + +static struct kboard *ok_to_echo_at_next_pause; + +/* The kboard last echoing, or null for none. Reset to 0 in + cancel_echoing. If non-null, and a current echo area message + exists, and echo_message_buffer is eq to the current message + buffer, we know that the message comes from echo_kboard. */ + +struct kboard *echo_kboard; + +/* The buffer used for echoing. Set in echo_now, reset in + cancel_echoing. */ + +Lisp_Object echo_message_buffer; + +/* True means C-g should cause immediate error-signal. */ +bool immediate_quit; + +/* Character that causes a quit. Normally C-g. + + If we are running on an ordinary terminal, this must be an ordinary + ASCII char, since we want to make it our interrupt character. + + If we are not running on an ordinary terminal, it still needs to be + an ordinary ASCII char. This character needs to be recognized in + the input interrupt handler. At this point, the keystroke is + represented as a struct input_event, while the desired quit + character is specified as a lispy event. The mapping from struct + input_events to lispy events cannot run in an interrupt handler, + and the reverse mapping is difficult for anything but ASCII + keystrokes. + + FOR THESE ELABORATE AND UNSATISFYING REASONS, quit_char must be an + ASCII character. */ +int quit_char; + +/* Current depth in recursive edits. */ +EMACS_INT command_loop_level; + +/* If not Qnil, this is a switch-frame event which we decided to put + off until the end of a key sequence. This should be read as the + next command input, after any unread_command_events. + + read_key_sequence uses this to delay switch-frame events until the + end of the key sequence; Fread_char uses it to put off switch-frame + events until a non-ASCII event is acceptable as input. */ +Lisp_Object unread_switch_frame; + +/* Last size recorded for a current buffer which is not a minibuffer. */ +static ptrdiff_t last_non_minibuf_size; + +/* Total number of times read_char has returned, modulo UINTMAX_MAX + 1. */ +uintmax_t num_input_events; + +/* Value of num_nonmacro_input_events as of last auto save. */ + +static EMACS_INT last_auto_save; + +/* The value of point when the last command was started. */ +static ptrdiff_t last_point_position; + +/* The frame in which the last input event occurred, or Qmacro if the + last event came from a macro. We use this to determine when to + generate switch-frame events. This may be cleared by functions + like Fselect_frame, to make sure that a switch-frame event is + generated by the next character. + + FIXME: This is modified by a signal handler so it should be volatile. + It's exported to Lisp, though, so it can't simply be marked + 'volatile' here. */ +Lisp_Object internal_last_event_frame; + +/* `read_key_sequence' stores here the command definition of the + key sequence that it reads. */ +static Lisp_Object read_key_sequence_cmd; +static Lisp_Object read_key_sequence_remapped; + +/* File in which we write all commands we read. */ +static FILE *dribble; + +/* True if input is available. */ +bool input_pending; + +/* True if more input was available last time we read an event. + + Since redisplay can take a significant amount of time and is not + indispensable to perform the user's commands, when input arrives + "too fast", Emacs skips redisplay. More specifically, if the next + command has already been input when we finish the previous command, + we skip the intermediate redisplay. + + This is useful to try and make sure Emacs keeps up with fast input + rates, such as auto-repeating keys. But in some cases, this proves + too conservative: we may end up disabling redisplay for the whole + duration of a key repetition, even though we could afford to + redisplay every once in a while. + + So we "sample" the input_pending flag before running a command and + use *that* value after running the command to decide whether to + skip redisplay or not. This way, we only skip redisplay if we + really can't keep up with the repeat rate. + + This only makes a difference if the next input arrives while running the + command, which is very unlikely if the command is executed quickly. + IOW this tends to avoid skipping redisplay after a long running command + (which is a case where skipping redisplay is not very useful since the + redisplay time is small compared to the time it took to run the command). + + A typical use case is when scrolling. Scrolling time can be split into: + - Time to do jit-lock on the newly displayed portion of buffer. + - Time to run the actual scroll command. + - Time to perform the redisplay. + Jit-lock can happen either during the command or during the redisplay. + In the most painful cases, the jit-lock time is the one that dominates. + Also jit-lock can be tweaked (via jit-lock-defer) to delay its job, at the + cost of temporary inaccuracy in display and scrolling. + So without input_was_pending, what typically happens is the following: + - when the command starts, there's no pending input (yet). + - the scroll command triggers jit-lock. + - during the long jit-lock time the next input arrives. + - at the end of the command, we check input_pending and hence decide to + skip redisplay. + - we read the next input and start over. + End result: all the hard work of jit-locking is "wasted" since redisplay + doesn't actually happens (at least not before the input rate slows down). + With input_was_pending redisplay is still skipped if Emacs can't keep up + with the input rate, but if it can keep up just enough that there's no + input_pending when we begin the command, then redisplay is not skipped + which results in better feedback to the user. */ +static bool input_was_pending; + +/* Circular buffer for pre-read keyboard input. */ + +static struct input_event kbd_buffer[KBD_BUFFER_SIZE]; + +/* Pointer to next available character in kbd_buffer. + If kbd_fetch_ptr == kbd_store_ptr, the buffer is empty. + This may be kbd_buffer + KBD_BUFFER_SIZE, meaning that the + next available char is in kbd_buffer[0]. */ +static struct input_event *kbd_fetch_ptr; + +/* Pointer to next place to store character in kbd_buffer. This + may be kbd_buffer + KBD_BUFFER_SIZE, meaning that the next + character should go in kbd_buffer[0]. */ +static struct input_event * volatile kbd_store_ptr; + +/* The above pair of variables forms a "queue empty" flag. When we + enqueue a non-hook event, we increment kbd_store_ptr. When we + dequeue a non-hook event, we increment kbd_fetch_ptr. We say that + there is input available if the two pointers are not equal. + + Why not just have a flag set and cleared by the enqueuing and + dequeuing functions? Such a flag could be screwed up by interrupts + at inopportune times. */ + +static void recursive_edit_unwind (Lisp_Object buffer); +static Lisp_Object command_loop (void); + +static void echo_now (void); +static ptrdiff_t echo_length (void); + +/* Incremented whenever a timer is run. */ +unsigned timers_run; + +/* Address (if not 0) of struct timespec to zero out if a SIGIO interrupt + happens. */ +struct timespec *input_available_clear_time; + +/* True means use SIGIO interrupts; false means use CBREAK mode. + Default is true if INTERRUPT_INPUT is defined. */ +bool interrupt_input; + +/* Nonzero while interrupts are temporarily deferred during redisplay. */ +bool interrupts_deferred; + +/* The time when Emacs started being idle. */ + +static struct timespec timer_idleness_start_time; + +/* After Emacs stops being idle, this saves the last value + of timer_idleness_start_time from when it was idle. */ + +static struct timespec timer_last_idleness_start_time; + + +/* Global variable declarations. */ + +/* Flags for readable_events. */ +#define READABLE_EVENTS_DO_TIMERS_NOW (1 << 0) +#define READABLE_EVENTS_FILTER_EVENTS (1 << 1) +#define READABLE_EVENTS_IGNORE_SQUEEZABLES (1 << 2) + +/* Function for init_keyboard to call with no args (if nonzero). */ +static void (*keyboard_init_hook) (void); + +static bool get_input_pending (int); +static bool readable_events (int); +static Lisp_Object read_char_x_menu_prompt (Lisp_Object, + Lisp_Object, bool *); +static Lisp_Object read_char_minibuf_menu_prompt (int, Lisp_Object); +static Lisp_Object make_lispy_event (struct input_event *); +static Lisp_Object make_lispy_movement (struct frame *, Lisp_Object, + enum scroll_bar_part, + Lisp_Object, Lisp_Object, + Time); +static Lisp_Object modify_event_symbol (ptrdiff_t, int, Lisp_Object, + Lisp_Object, const char *const *, + Lisp_Object *, ptrdiff_t); +static Lisp_Object make_lispy_switch_frame (Lisp_Object); +static Lisp_Object make_lispy_focus_in (Lisp_Object); +#ifdef HAVE_WINDOW_SYSTEM +static Lisp_Object make_lispy_focus_out (Lisp_Object); +#endif /* HAVE_WINDOW_SYSTEM */ +static bool help_char_p (Lisp_Object); +static void save_getcjmp (sys_jmp_buf); +static void restore_getcjmp (sys_jmp_buf); +static Lisp_Object apply_modifiers (int, Lisp_Object); +static void clear_event (struct input_event *); +static void restore_kboard_configuration (int); +#ifdef USABLE_SIGIO +static void deliver_input_available_signal (int signo); +#endif +static void handle_interrupt (bool); +static _Noreturn void quit_throw_to_read_char (bool); +static void process_special_events (void); +static void timer_start_idle (void); +static void timer_stop_idle (void); +static void timer_resume_idle (void); +static void deliver_user_signal (int); +static char *find_user_signal_name (int); +static void store_user_signal_events (void); + +/* These setters are used only in this file, so they can be private. */ +static void +kset_echo_string (struct kboard *kb, Lisp_Object val) +{ + kb->echo_string_ = val; +} +static void +kset_kbd_queue (struct kboard *kb, Lisp_Object val) +{ + kb->kbd_queue_ = val; +} +static void +kset_keyboard_translate_table (struct kboard *kb, Lisp_Object val) +{ + kb->Vkeyboard_translate_table_ = val; +} +static void +kset_last_prefix_arg (struct kboard *kb, Lisp_Object val) +{ + kb->Vlast_prefix_arg_ = val; +} +static void +kset_last_repeatable_command (struct kboard *kb, Lisp_Object val) +{ + kb->Vlast_repeatable_command_ = val; +} +static void +kset_local_function_key_map (struct kboard *kb, Lisp_Object val) +{ + kb->Vlocal_function_key_map_ = val; +} +static void +kset_overriding_terminal_local_map (struct kboard *kb, Lisp_Object val) +{ + kb->Voverriding_terminal_local_map_ = val; +} +static void +kset_real_last_command (struct kboard *kb, Lisp_Object val) +{ + kb->Vreal_last_command_ = val; +} +static void +kset_system_key_syms (struct kboard *kb, Lisp_Object val) +{ + kb->system_key_syms_ = val; +} + + +/* Add C to the echo string, without echoing it immediately. C can be + a character, which is pretty-printed, or a symbol, whose name is + printed. */ + +static void +echo_add_key (Lisp_Object c) +{ + char initbuf[KEY_DESCRIPTION_SIZE + 100]; + ptrdiff_t size = sizeof initbuf; + char *buffer = initbuf; + char *ptr = buffer; + Lisp_Object echo_string; + USE_SAFE_ALLOCA; + + echo_string = KVAR (current_kboard, echo_string); + + /* If someone has passed us a composite event, use its head symbol. */ + c = EVENT_HEAD (c); + + if (INTEGERP (c)) + ptr = push_key_description (XINT (c), ptr); + else if (SYMBOLP (c)) + { + Lisp_Object name = SYMBOL_NAME (c); + ptrdiff_t nbytes = SBYTES (name); + + if (size - (ptr - buffer) < nbytes) + { + ptrdiff_t offset = ptr - buffer; + size = max (2 * size, size + nbytes); + buffer = SAFE_ALLOCA (size); + ptr = buffer + offset; + } + + ptr += copy_text (SDATA (name), (unsigned char *) ptr, nbytes, + STRING_MULTIBYTE (name), 1); + } + + if ((NILP (echo_string) || SCHARS (echo_string) == 0) + && help_char_p (c)) + { + static const char text[] = " (Type ? for further options)"; + int len = sizeof text - 1; + + if (size - (ptr - buffer) < len) + { + ptrdiff_t offset = ptr - buffer; + size += len; + buffer = SAFE_ALLOCA (size); + ptr = buffer + offset; + } + + memcpy (ptr, text, len); + ptr += len; + } + + /* Replace a dash from echo_dash with a space, otherwise add a space + at the end as a separator between keys. */ + AUTO_STRING (space, " "); + if (STRINGP (echo_string) && SCHARS (echo_string) > 1) + { + Lisp_Object last_char, prev_char, idx; + + idx = make_number (SCHARS (echo_string) - 2); + prev_char = Faref (echo_string, idx); + + idx = make_number (SCHARS (echo_string) - 1); + last_char = Faref (echo_string, idx); + + /* We test PREV_CHAR to make sure this isn't the echoing of a + minus-sign. */ + if (XINT (last_char) == '-' && XINT (prev_char) != ' ') + Faset (echo_string, idx, make_number (' ')); + else + echo_string = concat2 (echo_string, space); + } + else if (STRINGP (echo_string) && SCHARS (echo_string) > 0) + echo_string = concat2 (echo_string, space); + + kset_echo_string + (current_kboard, + concat2 (echo_string, make_string (buffer, ptr - buffer))); + SAFE_FREE (); +} + +/* Add C to the echo string, if echoing is going on. C can be a + character or a symbol. */ + +static void +echo_char (Lisp_Object c) +{ + if (current_kboard->immediate_echo) + { + echo_add_key (c); + echo_now (); + } +} + +/* Temporarily add a dash to the end of the echo string if it's not + empty, so that it serves as a mini-prompt for the very next + character. */ + +static void +echo_dash (void) +{ + /* Do nothing if not echoing at all. */ + if (NILP (KVAR (current_kboard, echo_string))) + return; + + if (this_command_key_count == 0) + return; + + if (!current_kboard->immediate_echo + && SCHARS (KVAR (current_kboard, echo_string)) == 0) + return; + + /* Do nothing if we just printed a prompt. */ + if (current_kboard->echo_after_prompt + == SCHARS (KVAR (current_kboard, echo_string))) + return; + + /* Do nothing if we have already put a dash at the end. */ + if (SCHARS (KVAR (current_kboard, echo_string)) > 1) + { + Lisp_Object last_char, prev_char, idx; + + idx = make_number (SCHARS (KVAR (current_kboard, echo_string)) - 2); + prev_char = Faref (KVAR (current_kboard, echo_string), idx); + + idx = make_number (SCHARS (KVAR (current_kboard, echo_string)) - 1); + last_char = Faref (KVAR (current_kboard, echo_string), idx); + + if (XINT (last_char) == '-' && XINT (prev_char) != ' ') + return; + } + + /* Put a dash at the end of the buffer temporarily, + but make it go away when the next character is added. */ + AUTO_STRING (dash, "-"); + kset_echo_string (current_kboard, + concat2 (KVAR (current_kboard, echo_string), dash)); + echo_now (); +} + +/* Display the current echo string, and begin echoing if not already + doing so. */ + +static void +echo_now (void) +{ + if (!current_kboard->immediate_echo) + { + ptrdiff_t i; + current_kboard->immediate_echo = 1; + + for (i = 0; i < this_command_key_count; i++) + { + Lisp_Object c; + + /* Set before_command_echo_length to the value that would + have been saved before the start of this subcommand in + command_loop_1, if we had already been echoing then. */ + if (i == this_single_command_key_start) + before_command_echo_length = echo_length (); + + c = AREF (this_command_keys, i); + if (! (EVENT_HAS_PARAMETERS (c) + && EQ (EVENT_HEAD_KIND (EVENT_HEAD (c)), Qmouse_movement))) + echo_char (c); + } + + /* Set before_command_echo_length to the value that would + have been saved before the start of this subcommand in + command_loop_1, if we had already been echoing then. */ + if (this_command_key_count == this_single_command_key_start) + before_command_echo_length = echo_length (); + + /* Put a dash at the end to invite the user to type more. */ + echo_dash (); + } + + echoing = 1; + /* FIXME: Use call (Qmessage) so it can be advised (e.g. emacspeak). */ + message3_nolog (KVAR (current_kboard, echo_string)); + echoing = 0; + + /* Record in what buffer we echoed, and from which kboard. */ + echo_message_buffer = echo_area_buffer[0]; + echo_kboard = current_kboard; + + if (waiting_for_input && !NILP (Vquit_flag)) + quit_throw_to_read_char (0); +} + +/* Turn off echoing, for the start of a new command. */ + +void +cancel_echoing (void) +{ + current_kboard->immediate_echo = 0; + current_kboard->echo_after_prompt = -1; + kset_echo_string (current_kboard, Qnil); + ok_to_echo_at_next_pause = NULL; + echo_kboard = NULL; + echo_message_buffer = Qnil; +} + +/* Return the length of the current echo string. */ + +static ptrdiff_t +echo_length (void) +{ + return (STRINGP (KVAR (current_kboard, echo_string)) + ? SCHARS (KVAR (current_kboard, echo_string)) + : 0); +} + +/* Truncate the current echo message to its first LEN chars. + This and echo_char get used by read_key_sequence when the user + switches frames while entering a key sequence. */ + +static void +echo_truncate (ptrdiff_t nchars) +{ + if (STRINGP (KVAR (current_kboard, echo_string))) + kset_echo_string (current_kboard, + Fsubstring (KVAR (current_kboard, echo_string), + make_number (0), make_number (nchars))); + truncate_echo_area (nchars); +} + + +/* Functions for manipulating this_command_keys. */ +static void +add_command_key (Lisp_Object key) +{ +#if 0 /* Not needed after we made Freset_this_command_lengths + do the job immediately. */ + /* If reset-this-command-length was called recently, obey it now. + See the doc string of that function for an explanation of why. */ + if (before_command_restore_flag) + { + this_command_key_count = before_command_key_count_1; + if (this_command_key_count < this_single_command_key_start) + this_single_command_key_start = this_command_key_count; + echo_truncate (before_command_echo_length_1); + before_command_restore_flag = 0; + } +#endif + + if (this_command_key_count >= ASIZE (this_command_keys)) + this_command_keys = larger_vector (this_command_keys, 1, -1); + + ASET (this_command_keys, this_command_key_count, key); + ++this_command_key_count; +} + + +Lisp_Object +recursive_edit_1 (void) +{ + ptrdiff_t count = SPECPDL_INDEX (); + Lisp_Object val; + + if (command_loop_level > 0) + { + specbind (Qstandard_output, Qt); + specbind (Qstandard_input, Qt); + } + +#ifdef HAVE_WINDOW_SYSTEM + /* The command loop has started an hourglass timer, so we have to + cancel it here, otherwise it will fire because the recursive edit + can take some time. Do not check for display_hourglass_p here, + because it could already be nil. */ + cancel_hourglass (); +#endif + + /* This function may have been called from a debugger called from + within redisplay, for instance by Edebugging a function called + from fontification-functions. We want to allow redisplay in + the debugging session. + + The recursive edit is left with a `(throw exit ...)'. The `exit' + tag is not caught anywhere in redisplay, i.e. when we leave the + recursive edit, the original redisplay leading to the recursive + edit will be unwound. The outcome should therefore be safe. */ + specbind (Qinhibit_redisplay, Qnil); + redisplaying_p = 0; + + val = command_loop (); + if (EQ (val, Qt)) + Fsignal (Qquit, Qnil); + /* Handle throw from read_minibuf when using minibuffer + while it's active but we're in another window. */ + if (STRINGP (val)) + xsignal1 (Qerror, val); + + return unbind_to (count, Qnil); +} + +/* When an auto-save happens, record the "time", and don't do again soon. */ + +void +record_auto_save (void) +{ + last_auto_save = num_nonmacro_input_events; +} + +/* Make an auto save happen as soon as possible at command level. */ + +#ifdef SIGDANGER +void +force_auto_save_soon (void) +{ + last_auto_save = - auto_save_interval - 1; + + record_asynch_buffer_change (); +} +#endif + +DEFUN ("recursive-edit", Frecursive_edit, Srecursive_edit, 0, 0, "", + doc: /* Invoke the editor command loop recursively. +To get out of the recursive edit, a command can throw to `exit' -- for +instance `(throw 'exit nil)'. +If you throw a value other than t, `recursive-edit' returns normally +to the function that called it. Throwing a t value causes +`recursive-edit' to quit, so that control returns to the command loop +one level up. + +This function is called by the editor initialization to begin editing. */) + (void) +{ + ptrdiff_t count = SPECPDL_INDEX (); + Lisp_Object buffer; + + /* If we enter while input is blocked, don't lock up here. + This may happen through the debugger during redisplay. */ + if (input_blocked_p ()) + return Qnil; + + if (command_loop_level >= 0 + && current_buffer != XBUFFER (XWINDOW (selected_window)->contents)) + buffer = Fcurrent_buffer (); + else + buffer = Qnil; + + /* Don't do anything interesting between the increment and the + record_unwind_protect! Otherwise, we could get distracted and + never decrement the counter again. */ + command_loop_level++; + update_mode_lines = 17; + record_unwind_protect (recursive_edit_unwind, buffer); + + /* If we leave recursive_edit_1 below with a `throw' for instance, + like it is done in the splash screen display, we have to + make sure that we restore single_kboard as command_loop_1 + would have done if it were left normally. */ + if (command_loop_level > 0) + temporarily_switch_to_single_kboard (SELECTED_FRAME ()); + + recursive_edit_1 (); + return unbind_to (count, Qnil); +} + +void +recursive_edit_unwind (Lisp_Object buffer) +{ + if (BUFFERP (buffer)) + Fset_buffer (buffer); + + command_loop_level--; + update_mode_lines = 18; +} + + +#if 0 /* These two functions are now replaced with + temporarily_switch_to_single_kboard. */ +static void +any_kboard_state () +{ +#if 0 /* Theory: if there's anything in Vunread_command_events, + it will right away be read by read_key_sequence, + and then if we do switch KBOARDS, it will go into the side + queue then. So we don't need to do anything special here -- rms. */ + if (CONSP (Vunread_command_events)) + { + current_kboard->kbd_queue + = nconc2 (Vunread_command_events, current_kboard->kbd_queue); + current_kboard->kbd_queue_has_data = 1; + } + Vunread_command_events = Qnil; +#endif + single_kboard = 0; +} + +/* Switch to the single-kboard state, making current_kboard + the only KBOARD from which further input is accepted. */ + +void +single_kboard_state () +{ + single_kboard = 1; +} +#endif + +/* If we're in single_kboard state for kboard KBOARD, + get out of it. */ + +void +not_single_kboard_state (KBOARD *kboard) +{ + if (kboard == current_kboard) + single_kboard = 0; +} + +/* Maintain a stack of kboards, so other parts of Emacs + can switch temporarily to the kboard of a given frame + and then revert to the previous status. */ + +struct kboard_stack +{ + KBOARD *kboard; + struct kboard_stack *next; +}; + +static struct kboard_stack *kboard_stack; + +void +push_kboard (struct kboard *k) +{ + struct kboard_stack *p = xmalloc (sizeof *p); + + p->next = kboard_stack; + p->kboard = current_kboard; + kboard_stack = p; + + current_kboard = k; +} + +void +pop_kboard (void) +{ + struct terminal *t; + struct kboard_stack *p = kboard_stack; + bool found = 0; + for (t = terminal_list; t; t = t->next_terminal) + { + if (t->kboard == p->kboard) + { + current_kboard = p->kboard; + found = 1; + break; + } + } + if (!found) + { + /* The terminal we remembered has been deleted. */ + current_kboard = FRAME_KBOARD (SELECTED_FRAME ()); + single_kboard = 0; + } + kboard_stack = p->next; + xfree (p); +} + +/* Switch to single_kboard mode, making current_kboard the only KBOARD + from which further input is accepted. If F is non-nil, set its + KBOARD as the current keyboard. + + This function uses record_unwind_protect_int to return to the previous + state later. + + If Emacs is already in single_kboard mode, and F's keyboard is + locked, then this function will throw an error. */ + +void +temporarily_switch_to_single_kboard (struct frame *f) +{ + bool was_locked = single_kboard; + if (was_locked) + { + if (f != NULL && FRAME_KBOARD (f) != current_kboard) + /* We can not switch keyboards while in single_kboard mode. + In rare cases, Lisp code may call `recursive-edit' (or + `read-minibuffer' or `y-or-n-p') after it switched to a + locked frame. For example, this is likely to happen + when server.el connects to a new terminal while Emacs is in + single_kboard mode. It is best to throw an error instead + of presenting the user with a frozen screen. */ + error ("Terminal %d is locked, cannot read from it", + FRAME_TERMINAL (f)->id); + else + /* This call is unnecessary, but helps + `restore_kboard_configuration' discover if somebody changed + `current_kboard' behind our back. */ + push_kboard (current_kboard); + } + else if (f != NULL) + current_kboard = FRAME_KBOARD (f); + single_kboard = 1; + record_unwind_protect_int (restore_kboard_configuration, was_locked); +} + +#if 0 /* This function is not needed anymore. */ +void +record_single_kboard_state () +{ + if (single_kboard) + push_kboard (current_kboard); + record_unwind_protect_int (restore_kboard_configuration, single_kboard); +} +#endif + +static void +restore_kboard_configuration (int was_locked) +{ + single_kboard = was_locked; + if (was_locked) + { + struct kboard *prev = current_kboard; + pop_kboard (); + /* The pop should not change the kboard. */ + if (single_kboard && current_kboard != prev) + emacs_abort (); + } +} + + +/* Handle errors that are not handled at inner levels + by printing an error message and returning to the editor command loop. */ + +static Lisp_Object +cmd_error (Lisp_Object data) +{ + Lisp_Object old_level, old_length; + char macroerror[sizeof "After..kbd macro iterations: " + + INT_STRLEN_BOUND (EMACS_INT)]; + +#ifdef HAVE_WINDOW_SYSTEM + if (display_hourglass_p) + cancel_hourglass (); +#endif + + if (!NILP (executing_kbd_macro)) + { + if (executing_kbd_macro_iterations == 1) + sprintf (macroerror, "After 1 kbd macro iteration: "); + else + sprintf (macroerror, "After %"pI"d kbd macro iterations: ", + executing_kbd_macro_iterations); + } + else + *macroerror = 0; + + Vstandard_output = Qt; + Vstandard_input = Qt; + Vexecuting_kbd_macro = Qnil; + executing_kbd_macro = Qnil; + kset_prefix_arg (current_kboard, Qnil); + kset_last_prefix_arg (current_kboard, Qnil); + cancel_echoing (); + + /* Avoid unquittable loop if data contains a circular list. */ + old_level = Vprint_level; + old_length = Vprint_length; + XSETFASTINT (Vprint_level, 10); + XSETFASTINT (Vprint_length, 10); + cmd_error_internal (data, macroerror); + Vprint_level = old_level; + Vprint_length = old_length; + + Vquit_flag = Qnil; + Vinhibit_quit = Qnil; + + return make_number (0); +} + +/* Take actions on handling an error. DATA is the data that describes + the error. + + CONTEXT is a C-string containing ASCII characters only which + describes the context in which the error happened. If we need to + generalize CONTEXT to allow multibyte characters, make it a Lisp + string. */ + +void +cmd_error_internal (Lisp_Object data, const char *context) +{ + /* The immediate context is not interesting for Quits, + since they are asynchronous. */ + if (EQ (XCAR (data), Qquit)) + Vsignaling_function = Qnil; + + Vquit_flag = Qnil; + Vinhibit_quit = Qt; + + /* Use user's specified output function if any. */ + if (!NILP (Vcommand_error_function)) + call3 (Vcommand_error_function, data, + context ? build_string (context) : empty_unibyte_string, + Vsignaling_function); + + Vsignaling_function = Qnil; +} + +DEFUN ("command-error-default-function", Fcommand_error_default_function, + Scommand_error_default_function, 3, 3, 0, + doc: /* Produce default output for unhandled error message. +Default value of `command-error-function'. */) + (Lisp_Object data, Lisp_Object context, Lisp_Object signal) +{ + struct frame *sf = SELECTED_FRAME (); + + CHECK_STRING (context); + + /* If the window system or terminal frame hasn't been initialized + yet, or we're not interactive, write the message to stderr and exit. */ + if (!sf->glyphs_initialized_p + /* The initial frame is a special non-displaying frame. It + will be current in daemon mode when there are no frames + to display, and in non-daemon mode before the real frame + has finished initializing. If an error is thrown in the + latter case while creating the frame, then the frame + will never be displayed, so the safest thing to do is + write to stderr and quit. In daemon mode, there are + many other potential errors that do not prevent frames + from being created, so continuing as normal is better in + that case. */ + || (!IS_DAEMON && FRAME_INITIAL_P (sf)) + || noninteractive) + { + print_error_message (data, Qexternal_debugging_output, + SSDATA (context), signal); + Fterpri (Qexternal_debugging_output, Qnil); + Fkill_emacs (make_number (-1)); + } + else + { + clear_message (1, 0); + Fdiscard_input (); + message_log_maybe_newline (); + bitch_at_user (); + + print_error_message (data, Qt, SSDATA (context), signal); + } + return Qnil; +} + +static Lisp_Object command_loop_2 (Lisp_Object); +static Lisp_Object top_level_1 (Lisp_Object); + +/* Entry to editor-command-loop. + This level has the catches for exiting/returning to editor command loop. + It returns nil to exit recursive edit, t to abort it. */ + +Lisp_Object +command_loop (void) +{ +#ifdef HAVE_STACK_OVERFLOW_HANDLING + /* At least on GNU/Linux, saving signal mask is important here. */ + if (sigsetjmp (return_to_command_loop, 1) != 0) + { + /* Comes here from handle_sigsegv, see sysdep.c. */ + init_eval (); + Vinternal__top_level_message = recover_top_level_message; + } + else + Vinternal__top_level_message = regular_top_level_message; +#endif /* HAVE_STACK_OVERFLOW_HANDLING */ + if (command_loop_level > 0 || minibuf_level > 0) + { + Lisp_Object val; + val = internal_catch (Qexit, command_loop_2, Qnil); + executing_kbd_macro = Qnil; + return val; + } + else + while (1) + { + internal_catch (Qtop_level, top_level_1, Qnil); + internal_catch (Qtop_level, command_loop_2, Qnil); + executing_kbd_macro = Qnil; + + /* End of file in -batch run causes exit here. */ + if (noninteractive) + Fkill_emacs (Qt); + } +} + +/* Here we catch errors in execution of commands within the + editing loop, and reenter the editing loop. + When there is an error, cmd_error runs and returns a non-nil + value to us. A value of nil means that command_loop_1 itself + returned due to end of file (or end of kbd macro). */ + +static Lisp_Object +command_loop_2 (Lisp_Object ignore) +{ + register Lisp_Object val; + + do + val = internal_condition_case (command_loop_1, Qerror, cmd_error); + while (!NILP (val)); + + return Qnil; +} + +static Lisp_Object +top_level_2 (void) +{ + return Feval (Vtop_level, Qnil); +} + +static Lisp_Object +top_level_1 (Lisp_Object ignore) +{ + /* On entry to the outer level, run the startup file. */ + if (!NILP (Vtop_level)) + internal_condition_case (top_level_2, Qerror, cmd_error); + else if (!NILP (Vpurify_flag)) + message1 ("Bare impure Emacs (standard Lisp code not loaded)"); + else + message1 ("Bare Emacs (standard Lisp code not loaded)"); + return Qnil; +} + +DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, "", + doc: /* Exit all recursive editing levels. +This also exits all active minibuffers. */ + attributes: noreturn) + (void) +{ +#ifdef HAVE_WINDOW_SYSTEM + if (display_hourglass_p) + cancel_hourglass (); +#endif + + /* Unblock input if we enter with input blocked. This may happen if + redisplay traps e.g. during tool-bar update with input blocked. */ + totally_unblock_input (); + + Fthrow (Qtop_level, Qnil); +} + +static _Noreturn void +user_error (const char *msg) +{ + xsignal1 (Quser_error, build_string (msg)); +} + +/* _Noreturn will be added to prototype by make-docfile. */ +DEFUN ("exit-recursive-edit", Fexit_recursive_edit, Sexit_recursive_edit, 0, 0, "", + doc: /* Exit from the innermost recursive edit or minibuffer. */ + attributes: noreturn) + (void) +{ + if (command_loop_level > 0 || minibuf_level > 0) + Fthrow (Qexit, Qnil); + + user_error ("No recursive edit is in progress"); +} + +/* _Noreturn will be added to prototype by make-docfile. */ +DEFUN ("abort-recursive-edit", Fabort_recursive_edit, Sabort_recursive_edit, 0, 0, "", + doc: /* Abort the command that requested this recursive edit or minibuffer input. */ + attributes: noreturn) + (void) +{ + if (command_loop_level > 0 || minibuf_level > 0) + Fthrow (Qexit, Qt); + + user_error ("No recursive edit is in progress"); +} + +/* Restore mouse tracking enablement. See Ftrack_mouse for the only use + of this function. */ + +static void +tracking_off (Lisp_Object old_value) +{ + do_mouse_tracking = old_value; + if (NILP (old_value)) + { + /* Redisplay may have been preempted because there was input + available, and it assumes it will be called again after the + input has been processed. If the only input available was + the sort that we have just disabled, then we need to call + redisplay. */ + if (!readable_events (READABLE_EVENTS_DO_TIMERS_NOW)) + { + redisplay_preserve_echo_area (6); + get_input_pending (READABLE_EVENTS_DO_TIMERS_NOW); + } + } +} + +DEFUN ("internal--track-mouse", Ftrack_mouse, Strack_mouse, 1, 1, 0, + doc: /* Call BODYFUN with mouse movement events enabled. */) + (Lisp_Object bodyfun) +{ + ptrdiff_t count = SPECPDL_INDEX (); + Lisp_Object val; + + record_unwind_protect (tracking_off, do_mouse_tracking); + + do_mouse_tracking = Qt; + + val = call0 (bodyfun); + return unbind_to (count, val); +} + +/* If mouse has moved on some frame, return one of those frames. + + Return 0 otherwise. + + If ignore_mouse_drag_p is non-zero, ignore (implicit) mouse movement + after resizing the tool-bar window. */ + +bool ignore_mouse_drag_p; + +static struct frame * +some_mouse_moved (void) +{ + Lisp_Object tail, frame; + + if (ignore_mouse_drag_p) + { + /* ignore_mouse_drag_p = 0; */ + return 0; + } + + FOR_EACH_FRAME (tail, frame) + { + if (XFRAME (frame)->mouse_moved) + return XFRAME (frame); + } + + return 0; +} + + +/* This is the actual command reading loop, + sans error-handling encapsulation. */ + +static int read_key_sequence (Lisp_Object *, int, Lisp_Object, + bool, bool, bool, bool); +static void adjust_point_for_property (ptrdiff_t, bool); + +/* The last boundary auto-added to buffer-undo-list. */ +Lisp_Object last_undo_boundary; + +/* FIXME: This is wrong rather than test window-system, we should call + a new set-selection, which will then dispatch to x-set-selection, or + tty-set-selection, or w32-set-selection, ... */ + +Lisp_Object +command_loop_1 (void) +{ + Lisp_Object cmd; + Lisp_Object keybuf[30]; + int i; + EMACS_INT prev_modiff = 0; + struct buffer *prev_buffer = NULL; + bool already_adjusted = 0; + + kset_prefix_arg (current_kboard, Qnil); + kset_last_prefix_arg (current_kboard, Qnil); + Vdeactivate_mark = Qnil; + waiting_for_input = 0; + cancel_echoing (); + + this_command_key_count = 0; + this_command_key_count_reset = 0; + this_single_command_key_start = 0; + + if (NILP (Vmemory_full)) + { + /* Make sure this hook runs after commands that get errors and + throw to top level. */ + /* Note that the value cell will never directly contain nil + if the symbol is a local variable. */ + if (!NILP (Vpost_command_hook) && !NILP (Vrun_hooks)) + safe_run_hooks (Qpost_command_hook); + + /* If displaying a message, resize the echo area window to fit + that message's size exactly. */ + if (!NILP (echo_area_buffer[0])) + resize_echo_area_exactly (); + + /* If there are warnings waiting, process them. */ + if (!NILP (Vdelayed_warnings_list)) + safe_run_hooks (Qdelayed_warnings_hook); + + if (!NILP (Vdeferred_action_list)) + safe_run_hooks (Qdeferred_action_function); + } + + /* Do this after running Vpost_command_hook, for consistency. */ + kset_last_command (current_kboard, Vthis_command); + kset_real_last_command (current_kboard, Vreal_this_command); + if (!CONSP (last_command_event)) + kset_last_repeatable_command (current_kboard, Vreal_this_command); + + while (1) + { + if (! FRAME_LIVE_P (XFRAME (selected_frame))) + Fkill_emacs (Qnil); + + /* Make sure the current window's buffer is selected. */ + set_buffer_internal (XBUFFER (XWINDOW (selected_window)->contents)); + + /* Display any malloc warning that just came out. Use while because + displaying one warning can cause another. */ + + while (pending_malloc_warning) + display_malloc_warning (); + + Vdeactivate_mark = Qnil; + + /* Don't ignore mouse movements for more than a single command + loop. (This flag is set in xdisp.c whenever the tool bar is + resized, because the resize moves text up or down, and would + generate false mouse drag events if we don't ignore them.) */ + ignore_mouse_drag_p = 0; + + /* If minibuffer on and echo area in use, + wait a short time and redraw minibuffer. */ + + if (minibuf_level + && !NILP (echo_area_buffer[0]) + && EQ (minibuf_window, echo_area_window) + && NUMBERP (Vminibuffer_message_timeout)) + { + /* Bind inhibit-quit to t so that C-g gets read in + rather than quitting back to the minibuffer. */ + ptrdiff_t count = SPECPDL_INDEX (); + specbind (Qinhibit_quit, Qt); + + sit_for (Vminibuffer_message_timeout, 0, 2); + + /* Clear the echo area. */ + message1 (0); + safe_run_hooks (Qecho_area_clear_hook); + + unbind_to (count, Qnil); + + /* If a C-g came in before, treat it as input now. */ + if (!NILP (Vquit_flag)) + { + Vquit_flag = Qnil; + Vunread_command_events = list1 (make_number (quit_char)); + } + } + + /* If it has changed current-menubar from previous value, + really recompute the menubar from the value. */ + if (! NILP (Vlucid_menu_bar_dirty_flag) + && !NILP (Ffboundp (Qrecompute_lucid_menubar))) + call0 (Qrecompute_lucid_menubar); + + before_command_key_count = this_command_key_count; + before_command_echo_length = echo_length (); + + Vthis_command = Qnil; + Vreal_this_command = Qnil; + Vthis_original_command = Qnil; + Vthis_command_keys_shift_translated = Qnil; + + /* Read next key sequence; i gets its length. */ + i = read_key_sequence (keybuf, ARRAYELTS (keybuf), + Qnil, 0, 1, 1, 0); + + /* A filter may have run while we were reading the input. */ + if (! FRAME_LIVE_P (XFRAME (selected_frame))) + Fkill_emacs (Qnil); + set_buffer_internal (XBUFFER (XWINDOW (selected_window)->contents)); + + ++num_input_keys; + + /* Now we have read a key sequence of length I, + or else I is 0 and we found end of file. */ + + if (i == 0) /* End of file -- happens only in */ + return Qnil; /* a kbd macro, at the end. */ + /* -1 means read_key_sequence got a menu that was rejected. + Just loop around and read another command. */ + if (i == -1) + { + cancel_echoing (); + this_command_key_count = 0; + this_command_key_count_reset = 0; + this_single_command_key_start = 0; + goto finalize; + } + + last_command_event = keybuf[i - 1]; + + /* If the previous command tried to force a specific window-start, + forget about that, in case this command moves point far away + from that position. But also throw away beg_unchanged and + end_unchanged information in that case, so that redisplay will + update the whole window properly. */ + if (XWINDOW (selected_window)->force_start) + { + struct buffer *b; + XWINDOW (selected_window)->force_start = 0; + b = XBUFFER (XWINDOW (selected_window)->contents); + BUF_BEG_UNCHANGED (b) = BUF_END_UNCHANGED (b) = 0; + } + + cmd = read_key_sequence_cmd; + if (!NILP (Vexecuting_kbd_macro)) + { + if (!NILP (Vquit_flag)) + { + Vexecuting_kbd_macro = Qt; + QUIT; /* Make some noise. */ + /* Will return since macro now empty. */ + } + } + + /* Do redisplay processing after this command except in special + cases identified below. */ + prev_buffer = current_buffer; + prev_modiff = MODIFF; + last_point_position = PT; + + /* By default, we adjust point to a boundary of a region that + has such a property that should be treated intangible + (e.g. composition, display). But, some commands will set + this variable differently. */ + Vdisable_point_adjustment = Qnil; + + /* Process filters and timers may have messed with deactivate-mark. + reset it before we execute the command. */ + Vdeactivate_mark = Qnil; + + /* Remap command through active keymaps. */ + Vthis_original_command = cmd; + if (!NILP (read_key_sequence_remapped)) + cmd = read_key_sequence_remapped; + + /* Execute the command. */ + + { + total_keys += total_keys < NUM_RECENT_KEYS; + ASET (recent_keys, recent_keys_index, + Fcons (Qnil, cmd)); + if (++recent_keys_index >= NUM_RECENT_KEYS) + recent_keys_index = 0; + } + Vthis_command = cmd; + Vreal_this_command = cmd; + safe_run_hooks (Qpre_command_hook); + + already_adjusted = 0; + + if (NILP (Vthis_command)) + /* nil means key is undefined. */ + call0 (Qundefined); + else + { + /* Here for a command that isn't executed directly. */ + +#ifdef HAVE_WINDOW_SYSTEM + ptrdiff_t scount = SPECPDL_INDEX (); + + if (display_hourglass_p + && NILP (Vexecuting_kbd_macro)) + { + record_unwind_protect_void (cancel_hourglass); + start_hourglass (); + } +#endif + + if (NILP (KVAR (current_kboard, Vprefix_arg))) /* FIXME: Why? --Stef */ + { + Lisp_Object undo = BVAR (current_buffer, undo_list); + Fundo_boundary (); + last_undo_boundary + = (EQ (undo, BVAR (current_buffer, undo_list)) + ? Qnil : BVAR (current_buffer, undo_list)); + } + call1 (Qcommand_execute, Vthis_command); + +#ifdef HAVE_WINDOW_SYSTEM + /* Do not check display_hourglass_p here, because + `command-execute' could change it, but we should cancel + hourglass cursor anyway. + But don't cancel the hourglass within a macro + just because a command in the macro finishes. */ + if (NILP (Vexecuting_kbd_macro)) + unbind_to (scount, Qnil); +#endif + } + kset_last_prefix_arg (current_kboard, Vcurrent_prefix_arg); + + safe_run_hooks (Qpost_command_hook); + + /* If displaying a message, resize the echo area window to fit + that message's size exactly. */ + if (!NILP (echo_area_buffer[0])) + resize_echo_area_exactly (); + + /* If there are warnings waiting, process them. */ + if (!NILP (Vdelayed_warnings_list)) + safe_run_hooks (Qdelayed_warnings_hook); + + safe_run_hooks (Qdeferred_action_function); + + /* If there is a prefix argument, + 1) We don't want Vlast_command to be ``universal-argument'' + (that would be dumb), so don't set Vlast_command, + 2) we want to leave echoing on so that the prefix will be + echoed as part of this key sequence, so don't call + cancel_echoing, and + 3) we want to leave this_command_key_count non-zero, so that + read_char will realize that it is re-reading a character, and + not echo it a second time. + + If the command didn't actually create a prefix arg, + but is merely a frame event that is transparent to prefix args, + then the above doesn't apply. */ + if (NILP (KVAR (current_kboard, Vprefix_arg)) + || CONSP (last_command_event)) + { + kset_last_command (current_kboard, Vthis_command); + kset_real_last_command (current_kboard, Vreal_this_command); + if (!CONSP (last_command_event)) + kset_last_repeatable_command (current_kboard, Vreal_this_command); + cancel_echoing (); + this_command_key_count = 0; + this_command_key_count_reset = 0; + this_single_command_key_start = 0; + } + + if (!NILP (BVAR (current_buffer, mark_active)) + && !NILP (Vrun_hooks)) + { + /* In Emacs 22, setting transient-mark-mode to `only' was a + way of turning it on for just one command. This usage is + obsolete, but support it anyway. */ + if (EQ (Vtransient_mark_mode, Qidentity)) + Vtransient_mark_mode = Qnil; + else if (EQ (Vtransient_mark_mode, Qonly)) + Vtransient_mark_mode = Qidentity; + + if (!NILP (Vdeactivate_mark)) + /* If `select-active-regions' is non-nil, this call to + `deactivate-mark' also sets the PRIMARY selection. */ + call0 (Qdeactivate_mark); + else + { + /* Even if not deactivating the mark, set PRIMARY if + `select-active-regions' is non-nil. */ + if (!NILP (Fwindow_system (Qnil)) + /* Even if mark_active is non-nil, the actual buffer + marker may not have been set yet (Bug#7044). */ + && XMARKER (BVAR (current_buffer, mark))->buffer + && (EQ (Vselect_active_regions, Qonly) + ? EQ (CAR_SAFE (Vtransient_mark_mode), Qonly) + : (!NILP (Vselect_active_regions) + && !NILP (Vtransient_mark_mode))) + && NILP (Fmemq (Vthis_command, + Vselection_inhibit_update_commands))) + { + Lisp_Object txt + = call1 (Fsymbol_value (Qregion_extract_function), Qnil); + if (XINT (Flength (txt)) > 0) + /* Don't set empty selections. */ + call2 (Qgui_set_selection, QPRIMARY, txt); + } + + if (current_buffer != prev_buffer || MODIFF != prev_modiff) + run_hook (intern ("activate-mark-hook")); + } + + Vsaved_region_selection = Qnil; + } + + finalize: + + if (current_buffer == prev_buffer + && last_point_position != PT + && NILP (Vdisable_point_adjustment) + && NILP (Vglobal_disable_point_adjustment)) + { + if (last_point_position > BEGV + && last_point_position < ZV + && (composition_adjust_point (last_point_position, + last_point_position) + != last_point_position)) + /* The last point was temporarily set within a grapheme + cluster to prevent automatic composition. To recover + the automatic composition, we must update the + display. */ + windows_or_buffers_changed = 21; + if (!already_adjusted) + adjust_point_for_property (last_point_position, + MODIFF != prev_modiff); + } + + /* Install chars successfully executed in kbd macro. */ + + if (!NILP (KVAR (current_kboard, defining_kbd_macro)) + && NILP (KVAR (current_kboard, Vprefix_arg))) + finalize_kbd_macro_chars (); + } +} + +Lisp_Object +read_menu_command (void) +{ + Lisp_Object keybuf[30]; + ptrdiff_t count = SPECPDL_INDEX (); + int i; + + /* We don't want to echo the keystrokes while navigating the + menus. */ + specbind (Qecho_keystrokes, make_number (0)); + + i = read_key_sequence (keybuf, ARRAYELTS (keybuf), + Qnil, 0, 1, 1, 1); + + unbind_to (count, Qnil); + + if (! FRAME_LIVE_P (XFRAME (selected_frame))) + Fkill_emacs (Qnil); + if (i == 0 || i == -1) + return Qt; + + return read_key_sequence_cmd; +} + +/* Adjust point to a boundary of a region that has such a property + that should be treated intangible. For the moment, we check + `composition', `display' and `invisible' properties. + LAST_PT is the last position of point. */ + +static void +adjust_point_for_property (ptrdiff_t last_pt, bool modified) +{ + ptrdiff_t beg, end; + Lisp_Object val, overlay, tmp; + /* When called after buffer modification, we should temporarily + suppress the point adjustment for automatic composition so that a + user can keep inserting another character at point or keep + deleting characters around point. */ + bool check_composition = ! modified, check_display = 1, check_invisible = 1; + ptrdiff_t orig_pt = PT; + + /* FIXME: cycling is probably not necessary because these properties + can't be usefully combined anyway. */ + while (check_composition || check_display || check_invisible) + { + /* FIXME: check `intangible'. */ + if (check_composition + && PT > BEGV && PT < ZV + && (beg = composition_adjust_point (last_pt, PT)) != PT) + { + SET_PT (beg); + check_display = check_invisible = 1; + } + check_composition = 0; + if (check_display + && PT > BEGV && PT < ZV + && !NILP (val = get_char_property_and_overlay + (make_number (PT), Qdisplay, Qnil, &overlay)) + && display_prop_intangible_p (val, overlay, PT, PT_BYTE) + && (!OVERLAYP (overlay) + ? get_property_and_range (PT, Qdisplay, &val, &beg, &end, Qnil) + : (beg = OVERLAY_POSITION (OVERLAY_START (overlay)), + end = OVERLAY_POSITION (OVERLAY_END (overlay)))) + && (beg < PT /* && end > PT <- It's always the case. */ + || (beg <= PT && STRINGP (val) && SCHARS (val) == 0))) + { + eassert (end > PT); + SET_PT (PT < last_pt + ? (STRINGP (val) && SCHARS (val) == 0 + ? max (beg - 1, BEGV) + : beg) + : end); + check_composition = check_invisible = 1; + } + check_display = 0; + if (check_invisible && PT > BEGV && PT < ZV) + { + int inv; + bool ellipsis = 0; + beg = end = PT; + + /* Find boundaries `beg' and `end' of the invisible area, if any. */ + while (end < ZV +#if 0 + /* FIXME: We should stop if we find a spot between + two runs of `invisible' where inserted text would + be visible. This is important when we have two + invisible boundaries that enclose an area: if the + area is empty, we need this test in order to make + it possible to place point in the middle rather + than skip both boundaries. However, this code + also stops anywhere in a non-sticky text-property, + which breaks (e.g.) Org mode. */ + && (val = Fget_pos_property (make_number (end), + Qinvisible, Qnil), + TEXT_PROP_MEANS_INVISIBLE (val)) +#endif + && !NILP (val = get_char_property_and_overlay + (make_number (end), Qinvisible, Qnil, &overlay)) + && (inv = TEXT_PROP_MEANS_INVISIBLE (val))) + { + ellipsis = ellipsis || inv > 1 + || (OVERLAYP (overlay) + && (!NILP (Foverlay_get (overlay, Qafter_string)) + || !NILP (Foverlay_get (overlay, Qbefore_string)))); + tmp = Fnext_single_char_property_change + (make_number (end), Qinvisible, Qnil, Qnil); + end = NATNUMP (tmp) ? XFASTINT (tmp) : ZV; + } + while (beg > BEGV +#if 0 + && (val = Fget_pos_property (make_number (beg), + Qinvisible, Qnil), + TEXT_PROP_MEANS_INVISIBLE (val)) +#endif + && !NILP (val = get_char_property_and_overlay + (make_number (beg - 1), Qinvisible, Qnil, &overlay)) + && (inv = TEXT_PROP_MEANS_INVISIBLE (val))) + { + ellipsis = ellipsis || inv > 1 + || (OVERLAYP (overlay) + && (!NILP (Foverlay_get (overlay, Qafter_string)) + || !NILP (Foverlay_get (overlay, Qbefore_string)))); + tmp = Fprevious_single_char_property_change + (make_number (beg), Qinvisible, Qnil, Qnil); + beg = NATNUMP (tmp) ? XFASTINT (tmp) : BEGV; + } + + /* Move away from the inside area. */ + if (beg < PT && end > PT) + { + SET_PT ((orig_pt == PT && (last_pt < beg || last_pt > end)) + /* We haven't moved yet (so we don't need to fear + infinite-looping) and we were outside the range + before (so either end of the range still corresponds + to a move in the right direction): pretend we moved + less than we actually did, so that we still have + more freedom below in choosing which end of the range + to go to. */ + ? (orig_pt = -1, PT < last_pt ? end : beg) + /* We either have moved already or the last point + was already in the range: we don't get to choose + which end of the range we have to go to. */ + : (PT < last_pt ? beg : end)); + check_composition = check_display = 1; + } +#if 0 /* This assertion isn't correct, because SET_PT may end up setting + the point to something other than its argument, due to + point-motion hooks, intangibility, etc. */ + eassert (PT == beg || PT == end); +#endif + + /* Pretend the area doesn't exist if the buffer is not + modified. */ + if (!modified && !ellipsis && beg < end) + { + if (last_pt == beg && PT == end && end < ZV) + (check_composition = check_display = 1, SET_PT (end + 1)); + else if (last_pt == end && PT == beg && beg > BEGV) + (check_composition = check_display = 1, SET_PT (beg - 1)); + else if (PT == ((PT < last_pt) ? beg : end)) + /* We've already moved as far as we can. Trying to go + to the other end would mean moving backwards and thus + could lead to an infinite loop. */ + ; + else if (val = Fget_pos_property (make_number (PT), + Qinvisible, Qnil), + TEXT_PROP_MEANS_INVISIBLE (val) + && (val = (Fget_pos_property + (make_number (PT == beg ? end : beg), + Qinvisible, Qnil)), + !TEXT_PROP_MEANS_INVISIBLE (val))) + (check_composition = check_display = 1, + SET_PT (PT == beg ? end : beg)); + } + } + check_invisible = 0; + } +} + +/* Subroutine for safe_run_hooks: run the hook, which is ARGS[1]. */ + +static Lisp_Object +safe_run_hooks_1 (ptrdiff_t nargs, Lisp_Object *args) +{ + eassert (nargs == 2); + return call0 (args[1]); +} + +/* Subroutine for safe_run_hooks: handle an error by clearing out the function + from the hook. */ + +static Lisp_Object +safe_run_hooks_error (Lisp_Object error, ptrdiff_t nargs, Lisp_Object *args) +{ + eassert (nargs == 2); + AUTO_STRING (format, "Error in %s (%S): %S"); + Lisp_Object hook = args[0]; + Lisp_Object fun = args[1]; + CALLN (Fmessage, format, hook, fun, error); + + if (SYMBOLP (hook)) + { + Lisp_Object val; + bool found = 0; + Lisp_Object newval = Qnil; + for (val = find_symbol_value (hook); CONSP (val); val = XCDR (val)) + if (EQ (fun, XCAR (val))) + found = 1; + else + newval = Fcons (XCAR (val), newval); + if (found) + return Fset (hook, Fnreverse (newval)); + /* Not found in the local part of the hook. Let's look at the global + part. */ + newval = Qnil; + for (val = (NILP (Fdefault_boundp (hook)) ? Qnil + : Fdefault_value (hook)); + CONSP (val); val = XCDR (val)) + if (EQ (fun, XCAR (val))) + found = 1; + else + newval = Fcons (XCAR (val), newval); + if (found) + return Fset_default (hook, Fnreverse (newval)); + } + return Qnil; +} + +static Lisp_Object +safe_run_hook_funcall (ptrdiff_t nargs, Lisp_Object *args) +{ + eassert (nargs == 2); + /* Yes, run_hook_with_args works with args in the other order. */ + internal_condition_case_n (safe_run_hooks_1, + 2, ((Lisp_Object []) {args[1], args[0]}), + Qt, safe_run_hooks_error); + return Qnil; +} + +/* If we get an error while running the hook, cause the hook variable + to be nil. Also inhibit quits, so that C-g won't cause the hook + to mysteriously evaporate. */ + +void +safe_run_hooks (Lisp_Object hook) +{ + struct gcpro gcpro1; + ptrdiff_t count = SPECPDL_INDEX (); + + GCPRO1 (hook); + specbind (Qinhibit_quit, Qt); + run_hook_with_args (2, ((Lisp_Object []) {hook, hook}), safe_run_hook_funcall); + unbind_to (count, Qnil); + UNGCPRO; +} + + +/* Nonzero means polling for input is temporarily suppressed. */ + +int poll_suppress_count; + + +#ifdef POLL_FOR_INPUT + +/* Asynchronous timer for polling. */ + +static struct atimer *poll_timer; + +/* Poll for input, so that we catch a C-g if it comes in. */ +void +poll_for_input_1 (void) +{ + if (! input_blocked_p () + && !waiting_for_input) + gobble_input (); +} + +/* Timer callback function for poll_timer. TIMER is equal to + poll_timer. */ + +static void +poll_for_input (struct atimer *timer) +{ + if (poll_suppress_count == 0) + pending_signals = 1; +} + +#endif /* POLL_FOR_INPUT */ + +/* Begin signals to poll for input, if they are appropriate. + This function is called unconditionally from various places. */ + +void +start_polling (void) +{ +#ifdef POLL_FOR_INPUT + /* XXX This condition was (read_socket_hook && !interrupt_input), + but read_socket_hook is not global anymore. Let's pretend that + it's always set. */ + if (!interrupt_input) + { + /* Turn alarm handling on unconditionally. It might have + been turned off in process.c. */ + turn_on_atimers (1); + + /* If poll timer doesn't exist, or we need one with + a different interval, start a new one. */ + if (poll_timer == NULL + || poll_timer->interval.tv_sec != polling_period) + { + time_t period = max (1, min (polling_period, TYPE_MAXIMUM (time_t))); + struct timespec interval = make_timespec (period, 0); + + if (poll_timer) + cancel_atimer (poll_timer); + + poll_timer = start_atimer (ATIMER_CONTINUOUS, interval, + poll_for_input, NULL); + } + + /* Let the timer's callback function poll for input + if this becomes zero. */ + --poll_suppress_count; + } +#endif +} + +/* True if we are using polling to handle input asynchronously. */ + +bool +input_polling_used (void) +{ +#ifdef POLL_FOR_INPUT + /* XXX This condition was (read_socket_hook && !interrupt_input), + but read_socket_hook is not global anymore. Let's pretend that + it's always set. */ + return !interrupt_input; +#else + return 0; +#endif +} + +/* Turn off polling. */ + +void +stop_polling (void) +{ +#ifdef POLL_FOR_INPUT + /* XXX This condition was (read_socket_hook && !interrupt_input), + but read_socket_hook is not global anymore. Let's pretend that + it's always set. */ + if (!interrupt_input) + ++poll_suppress_count; +#endif +} + +/* Set the value of poll_suppress_count to COUNT + and start or stop polling accordingly. */ + +void +set_poll_suppress_count (int count) +{ +#ifdef POLL_FOR_INPUT + if (count == 0 && poll_suppress_count != 0) + { + poll_suppress_count = 1; + start_polling (); + } + else if (count != 0 && poll_suppress_count == 0) + { + stop_polling (); + } + poll_suppress_count = count; +#endif +} + +/* Bind polling_period to a value at least N. + But don't decrease it. */ + +void +bind_polling_period (int n) +{ +#ifdef POLL_FOR_INPUT + EMACS_INT new = polling_period; + + if (n > new) + new = n; + + stop_other_atimers (poll_timer); + stop_polling (); + specbind (Qpolling_period, make_number (new)); + /* Start a new alarm with the new period. */ + start_polling (); +#endif +} + +/* Apply the control modifier to CHARACTER. */ + +int +make_ctrl_char (int c) +{ + /* Save the upper bits here. */ + int upper = c & ~0177; + + if (! ASCII_CHAR_P (c)) + return c |= ctrl_modifier; + + c &= 0177; + + /* Everything in the columns containing the upper-case letters + denotes a control character. */ + if (c >= 0100 && c < 0140) + { + int oc = c; + c &= ~0140; + /* Set the shift modifier for a control char + made from a shifted letter. But only for letters! */ + if (oc >= 'A' && oc <= 'Z') + c |= shift_modifier; + } + + /* The lower-case letters denote control characters too. */ + else if (c >= 'a' && c <= 'z') + c &= ~0140; + + /* Include the bits for control and shift + only if the basic ASCII code can't indicate them. */ + else if (c >= ' ') + c |= ctrl_modifier; + + /* Replace the high bits. */ + c |= (upper & ~ctrl_modifier); + + return c; +} + +/* Display the help-echo property of the character after the mouse pointer. + Either show it in the echo area, or call show-help-function to display + it by other means (maybe in a tooltip). + + If HELP is nil, that means clear the previous help echo. + + If HELP is a string, display that string. If HELP is a function, + call it with OBJECT and POS as arguments; the function should + return a help string or nil for none. For all other types of HELP, + evaluate it to obtain a string. + + WINDOW is the window in which the help was generated, if any. + It is nil if not in a window. + + If OBJECT is a buffer, POS is the position in the buffer where the + `help-echo' text property was found. + + If OBJECT is an overlay, that overlay has a `help-echo' property, + and POS is the position in the overlay's buffer under the mouse. + + If OBJECT is a string (an overlay string or a string displayed with + the `display' property). POS is the position in that string under + the mouse. + + Note: this function may only be called with HELP nil or a string + from X code running asynchronously. */ + +void +show_help_echo (Lisp_Object help, Lisp_Object window, Lisp_Object object, + Lisp_Object pos) +{ + if (!NILP (help) && !STRINGP (help)) + { + if (FUNCTIONP (help)) + help = safe_call (4, help, window, object, pos); + else + help = safe_eval (help); + + if (!STRINGP (help)) + return; + } + + if (!noninteractive && STRINGP (help)) + { + /* The mouse-fixup-help-message Lisp function can call + mouse_position_hook, which resets the mouse_moved flags. + This causes trouble if we are trying to read a mouse motion + event (i.e., if we are inside a `track-mouse' form), so we + restore the mouse_moved flag. */ + struct frame *f = NILP (do_mouse_tracking) ? NULL : some_mouse_moved (); + help = call1 (Qmouse_fixup_help_message, help); + if (f) + f->mouse_moved = 1; + } + + if (STRINGP (help) || NILP (help)) + { + if (!NILP (Vshow_help_function)) + call1 (Vshow_help_function, help); + help_echo_showing_p = STRINGP (help); + } +} + + + +/* Input of single characters from keyboard. */ + +static Lisp_Object kbd_buffer_get_event (KBOARD **kbp, bool *used_mouse_menu, + struct timespec *end_time); +static void record_char (Lisp_Object c); + +static Lisp_Object help_form_saved_window_configs; +static void +read_char_help_form_unwind (void) +{ + Lisp_Object window_config = XCAR (help_form_saved_window_configs); + help_form_saved_window_configs = XCDR (help_form_saved_window_configs); + if (!NILP (window_config)) + Fset_window_configuration (window_config); +} + +#define STOP_POLLING \ +do { if (! polling_stopped_here) stop_polling (); \ + polling_stopped_here = 1; } while (0) + +#define RESUME_POLLING \ +do { if (polling_stopped_here) start_polling (); \ + polling_stopped_here = 0; } while (0) + +static Lisp_Object +read_event_from_main_queue (struct timespec *end_time, + sys_jmp_buf local_getcjmp, + bool *used_mouse_menu) +{ + Lisp_Object c = Qnil; + sys_jmp_buf save_jump; + KBOARD *kb IF_LINT (= NULL); + + start: + + /* Read from the main queue, and if that gives us something we can't use yet, + we put it on the appropriate side queue and try again. */ + + if (end_time && timespec_cmp (*end_time, current_timespec ()) <= 0) + return c; + + /* Actually read a character, waiting if necessary. */ + save_getcjmp (save_jump); + restore_getcjmp (local_getcjmp); + if (!end_time) + timer_start_idle (); + c = kbd_buffer_get_event (&kb, used_mouse_menu, end_time); + restore_getcjmp (save_jump); + + if (! NILP (c) && (kb != current_kboard)) + { + Lisp_Object last = KVAR (kb, kbd_queue); + if (CONSP (last)) + { + while (CONSP (XCDR (last))) + last = XCDR (last); + if (!NILP (XCDR (last))) + emacs_abort (); + } + if (!CONSP (last)) + kset_kbd_queue (kb, list1 (c)); + else + XSETCDR (last, list1 (c)); + kb->kbd_queue_has_data = 1; + c = Qnil; + if (single_kboard) + goto start; + current_kboard = kb; + /* This is going to exit from read_char + so we had better get rid of this frame's stuff. */ + return make_number (-2); + } + + /* Terminate Emacs in batch mode if at eof. */ + if (noninteractive && INTEGERP (c) && XINT (c) < 0) + Fkill_emacs (make_number (1)); + + if (INTEGERP (c)) + { + /* Add in any extra modifiers, where appropriate. */ + if ((extra_keyboard_modifiers & CHAR_CTL) + || ((extra_keyboard_modifiers & 0177) < ' ' + && (extra_keyboard_modifiers & 0177) != 0)) + XSETINT (c, make_ctrl_char (XINT (c))); + + /* Transfer any other modifier bits directly from + extra_keyboard_modifiers to c. Ignore the actual character code + in the low 16 bits of extra_keyboard_modifiers. */ + XSETINT (c, XINT (c) | (extra_keyboard_modifiers & ~0xff7f & ~CHAR_CTL)); + } + + return c; +} + + + +/* Like `read_event_from_main_queue' but applies keyboard-coding-system + to tty input. */ +static Lisp_Object +read_decoded_event_from_main_queue (struct timespec *end_time, + sys_jmp_buf local_getcjmp, + Lisp_Object prev_event, + bool *used_mouse_menu) +{ +#define MAX_ENCODED_BYTES 16 +#ifndef WINDOWSNT + Lisp_Object events[MAX_ENCODED_BYTES]; + int n = 0; +#endif + while (true) + { + Lisp_Object nextevt + = read_event_from_main_queue (end_time, local_getcjmp, + used_mouse_menu); +#ifdef WINDOWSNT + /* w32_console already returns decoded events. It either reads + Unicode characters from the Windows keyboard input, or + converts characters encoded in the current codepage into + Unicode. See w32inevt.c:key_event, near its end. */ + return nextevt; +#else + struct frame *frame = XFRAME (selected_frame); + struct terminal *terminal = frame->terminal; + if (!((FRAME_TERMCAP_P (frame) || FRAME_MSDOS_P (frame)) + /* Don't apply decoding if we're just reading a raw event + (e.g. reading bytes sent by the xterm to specify the position + of a mouse click). */ + && (!EQ (prev_event, Qt)) + && (TERMINAL_KEYBOARD_CODING (terminal)->common_flags + & CODING_REQUIRE_DECODING_MASK))) + return nextevt; /* No decoding needed. */ + else + { + int meta_key = terminal->display_info.tty->meta_key; + eassert (n < MAX_ENCODED_BYTES); + events[n++] = nextevt; + if (NATNUMP (nextevt) + && XINT (nextevt) < (meta_key == 1 ? 0x80 : 0x100)) + { /* An encoded byte sequence, let's try to decode it. */ + struct coding_system *coding + = TERMINAL_KEYBOARD_CODING (terminal); + + if (raw_text_coding_system_p (coding)) + { + int i; + if (meta_key != 2) + for (i = 0; i < n; i++) + events[i] = make_number (XINT (events[i]) & ~0x80); + } + else + { + unsigned char src[MAX_ENCODED_BYTES]; + unsigned char dest[MAX_ENCODED_BYTES * MAX_MULTIBYTE_LENGTH]; + int i; + for (i = 0; i < n; i++) + src[i] = XINT (events[i]); + if (meta_key != 2) + for (i = 0; i < n; i++) + src[i] &= ~0x80; + coding->destination = dest; + coding->dst_bytes = sizeof dest; + decode_coding_c_string (coding, src, n, Qnil); + eassert (coding->produced_char <= n); + if (coding->produced_char == 0) + { /* The encoded sequence is incomplete. */ + if (n < MAX_ENCODED_BYTES) /* Avoid buffer overflow. */ + continue; /* Read on! */ + } + else + { + const unsigned char *p = coding->destination; + eassert (coding->carryover_bytes == 0); + n = 0; + while (n < coding->produced_char) + events[n++] = make_number (STRING_CHAR_ADVANCE (p)); + } + } + } + /* Now `events' should hold decoded events. + Normally, n should be equal to 1, but better not rely on it. + We can only return one event here, so return the first we + had and keep the others (if any) for later. */ + while (n > 1) + Vunread_command_events + = Fcons (events[--n], Vunread_command_events); + return events[0]; + } +#endif + } +} + +static bool +echo_keystrokes_p (void) +{ + return (FLOATP (Vecho_keystrokes) ? XFLOAT_DATA (Vecho_keystrokes) > 0.0 + : INTEGERP (Vecho_keystrokes) ? XINT (Vecho_keystrokes) > 0 : false); +} + +/* Read a character from the keyboard; call the redisplay if needed. */ +/* commandflag 0 means do not autosave, but do redisplay. + -1 means do not redisplay, but do autosave. + -2 means do neither. + 1 means do both. + + The argument MAP is a keymap for menu prompting. + + PREV_EVENT is the previous input event, or nil if we are reading + the first event of a key sequence (or not reading a key sequence). + If PREV_EVENT is t, that is a "magic" value that says + not to run input methods, but in other respects to act as if + not reading a key sequence. + + If USED_MOUSE_MENU is non-null, then set *USED_MOUSE_MENU to true + if we used a mouse menu to read the input, or false otherwise. If + USED_MOUSE_MENU is null, don't dereference it. + + Value is -2 when we find input on another keyboard. A second call + to read_char will read it. + + If END_TIME is non-null, it is a pointer to a struct timespec + specifying the maximum time to wait until. If no input arrives by + that time, stop waiting and return nil. + + Value is t if we showed a menu and the user rejected it. */ + +Lisp_Object +read_char (int commandflag, Lisp_Object map, + Lisp_Object prev_event, + bool *used_mouse_menu, struct timespec *end_time) +{ + Lisp_Object c; + ptrdiff_t jmpcount; + sys_jmp_buf local_getcjmp; + sys_jmp_buf save_jump; + Lisp_Object tem, save; + volatile Lisp_Object previous_echo_area_message; + volatile Lisp_Object also_record; + volatile bool reread; + struct gcpro gcpro1, gcpro2; + bool volatile polling_stopped_here = 0; + struct kboard *orig_kboard = current_kboard; + + also_record = Qnil; + +#if 0 /* This was commented out as part of fixing echo for C-u left. */ + before_command_key_count = this_command_key_count; + before_command_echo_length = echo_length (); +#endif + c = Qnil; + previous_echo_area_message = Qnil; + + GCPRO2 (c, previous_echo_area_message); + + retry: + + if (CONSP (Vunread_post_input_method_events)) + { + c = XCAR (Vunread_post_input_method_events); + Vunread_post_input_method_events + = XCDR (Vunread_post_input_method_events); + + /* Undo what read_char_x_menu_prompt did when it unread + additional keys returned by Fx_popup_menu. */ + if (CONSP (c) + && (SYMBOLP (XCAR (c)) || INTEGERP (XCAR (c))) + && NILP (XCDR (c))) + c = XCAR (c); + + reread = true; + goto reread_first; + } + else + reread = false; + + + if (CONSP (Vunread_command_events)) + { + bool was_disabled = 0; + + c = XCAR (Vunread_command_events); + Vunread_command_events = XCDR (Vunread_command_events); + + /* Undo what sit-for did when it unread additional keys + inside universal-argument. */ + + if (CONSP (c) && EQ (XCAR (c), Qt)) + c = XCDR (c); + else + reread = true; + + /* Undo what read_char_x_menu_prompt did when it unread + additional keys returned by Fx_popup_menu. */ + if (CONSP (c) + && EQ (XCDR (c), Qdisabled) + && (SYMBOLP (XCAR (c)) || INTEGERP (XCAR (c)))) + { + was_disabled = 1; + c = XCAR (c); + } + + /* If the queued event is something that used the mouse, + set used_mouse_menu accordingly. */ + if (used_mouse_menu + /* Also check was_disabled so last-nonmenu-event won't return + a bad value when submenus are involved. (Bug#447) */ + && (EQ (c, Qtool_bar) || EQ (c, Qmenu_bar) || was_disabled)) + *used_mouse_menu = 1; + + goto reread_for_input_method; + } + + if (CONSP (Vunread_input_method_events)) + { + c = XCAR (Vunread_input_method_events); + Vunread_input_method_events = XCDR (Vunread_input_method_events); + + /* Undo what read_char_x_menu_prompt did when it unread + additional keys returned by Fx_popup_menu. */ + if (CONSP (c) + && (SYMBOLP (XCAR (c)) || INTEGERP (XCAR (c))) + && NILP (XCDR (c))) + c = XCAR (c); + reread = true; + goto reread_for_input_method; + } + + this_command_key_count_reset = 0; + + if (!NILP (Vexecuting_kbd_macro)) + { + /* We set this to Qmacro; since that's not a frame, nobody will + try to switch frames on us, and the selected window will + remain unchanged. + + Since this event came from a macro, it would be misleading to + leave internal_last_event_frame set to wherever the last + real event came from. Normally, a switch-frame event selects + internal_last_event_frame after each command is read, but + events read from a macro should never cause a new frame to be + selected. */ + Vlast_event_frame = internal_last_event_frame = Qmacro; + + /* Exit the macro if we are at the end. + Also, some things replace the macro with t + to force an early exit. */ + if (EQ (Vexecuting_kbd_macro, Qt) + || executing_kbd_macro_index >= XFASTINT (Flength (Vexecuting_kbd_macro))) + { + XSETINT (c, -1); + goto exit; + } + + c = Faref (Vexecuting_kbd_macro, make_number (executing_kbd_macro_index)); + if (STRINGP (Vexecuting_kbd_macro) + && (XFASTINT (c) & 0x80) && (XFASTINT (c) <= 0xff)) + XSETFASTINT (c, CHAR_META | (XFASTINT (c) & ~0x80)); + + executing_kbd_macro_index++; + + goto from_macro; + } + + if (!NILP (unread_switch_frame)) + { + c = unread_switch_frame; + unread_switch_frame = Qnil; + + /* This event should make it into this_command_keys, and get echoed + again, so we do not set `reread'. */ + goto reread_first; + } + + /* If redisplay was requested. */ + if (commandflag >= 0) + { + bool echo_current = EQ (echo_message_buffer, echo_area_buffer[0]); + + /* If there is pending input, process any events which are not + user-visible, such as X selection_request events. */ + if (input_pending + || detect_input_pending_run_timers (0)) + swallow_events (false); /* May clear input_pending. */ + + /* Redisplay if no pending input. */ + while (!(input_pending + && (input_was_pending || !redisplay_dont_pause))) + { + input_was_pending = input_pending; + if (help_echo_showing_p && !EQ (selected_window, minibuf_window)) + redisplay_preserve_echo_area (5); + else + redisplay (); + + if (!input_pending) + /* Normal case: no input arrived during redisplay. */ + break; + + /* Input arrived and pre-empted redisplay. + Process any events which are not user-visible. */ + swallow_events (false); + /* If that cleared input_pending, try again to redisplay. */ + } + + /* Prevent the redisplay we just did + from messing up echoing of the input after the prompt. */ + if (commandflag == 0 && echo_current) + echo_message_buffer = echo_area_buffer[0]; + + } + + /* Message turns off echoing unless more keystrokes turn it on again. + + The code in 20.x for the condition was + + 1. echo_area_glyphs && *echo_area_glyphs + 2. && echo_area_glyphs != current_kboard->echobuf + 3. && ok_to_echo_at_next_pause != echo_area_glyphs + + (1) means there's a current message displayed + + (2) means it's not the message from echoing from the current + kboard. + + (3) There's only one place in 20.x where ok_to_echo_at_next_pause + is set to a non-null value. This is done in read_char and it is + set to echo_area_glyphs after a call to echo_char. That means + ok_to_echo_at_next_pause is either null or + current_kboard->echobuf with the appropriate current_kboard at + that time. + + So, condition (3) means in clear text ok_to_echo_at_next_pause + must be either null, or the current message isn't from echoing at + all, or it's from echoing from a different kboard than the + current one. */ + + if (/* There currently is something in the echo area. */ + !NILP (echo_area_buffer[0]) + && (/* It's an echo from a different kboard. */ + echo_kboard != current_kboard + /* Or we explicitly allow overwriting whatever there is. */ + || ok_to_echo_at_next_pause == NULL)) + cancel_echoing (); + else + echo_dash (); + + /* Try reading a character via menu prompting in the minibuf. + Try this before the sit-for, because the sit-for + would do the wrong thing if we are supposed to do + menu prompting. If EVENT_HAS_PARAMETERS then we are reading + after a mouse event so don't try a minibuf menu. */ + c = Qnil; + if (KEYMAPP (map) && INTERACTIVE + && !NILP (prev_event) && ! EVENT_HAS_PARAMETERS (prev_event) + /* Don't bring up a menu if we already have another event. */ + && NILP (Vunread_command_events) + && !detect_input_pending_run_timers (0)) + { + c = read_char_minibuf_menu_prompt (commandflag, map); + + if (INTEGERP (c) && XINT (c) == -2) + return c; /* wrong_kboard_jmpbuf */ + + if (! NILP (c)) + goto exit; + } + + /* Make a longjmp point for quits to use, but don't alter getcjmp just yet. + We will do that below, temporarily for short sections of code, + when appropriate. local_getcjmp must be in effect + around any call to sit_for or kbd_buffer_get_event; + it *must not* be in effect when we call redisplay. */ + + jmpcount = SPECPDL_INDEX (); + if (sys_setjmp (local_getcjmp)) + { + /* Handle quits while reading the keyboard. */ + /* We must have saved the outer value of getcjmp here, + so restore it now. */ + restore_getcjmp (save_jump); + pthread_sigmask (SIG_SETMASK, &empty_mask, 0); + unbind_to (jmpcount, Qnil); + XSETINT (c, quit_char); + internal_last_event_frame = selected_frame; + Vlast_event_frame = internal_last_event_frame; + /* If we report the quit char as an event, + don't do so more than once. */ + if (!NILP (Vinhibit_quit)) + Vquit_flag = Qnil; + + { + KBOARD *kb = FRAME_KBOARD (XFRAME (selected_frame)); + if (kb != current_kboard) + { + Lisp_Object last = KVAR (kb, kbd_queue); + /* We shouldn't get here if we were in single-kboard mode! */ + if (single_kboard) + emacs_abort (); + if (CONSP (last)) + { + while (CONSP (XCDR (last))) + last = XCDR (last); + if (!NILP (XCDR (last))) + emacs_abort (); + } + if (!CONSP (last)) + kset_kbd_queue (kb, list1 (c)); + else + XSETCDR (last, list1 (c)); + kb->kbd_queue_has_data = 1; + current_kboard = kb; + /* This is going to exit from read_char + so we had better get rid of this frame's stuff. */ + UNGCPRO; + return make_number (-2); /* wrong_kboard_jmpbuf */ + } + } + goto non_reread; + } + + /* Start idle timers if no time limit is supplied. We don't do it + if a time limit is supplied to avoid an infinite recursion in the + situation where an idle timer calls `sit-for'. */ + + if (!end_time) + timer_start_idle (); + + /* If in middle of key sequence and minibuffer not active, + start echoing if enough time elapses. */ + + if (minibuf_level == 0 + && !end_time + && !current_kboard->immediate_echo + && this_command_key_count > 0 + && ! noninteractive + && echo_keystrokes_p () + && (/* No message. */ + NILP (echo_area_buffer[0]) + /* Or empty message. */ + || (BUF_BEG (XBUFFER (echo_area_buffer[0])) + == BUF_Z (XBUFFER (echo_area_buffer[0]))) + /* Or already echoing from same kboard. */ + || (echo_kboard && ok_to_echo_at_next_pause == echo_kboard) + /* Or not echoing before and echoing allowed. */ + || (!echo_kboard && ok_to_echo_at_next_pause))) + { + /* After a mouse event, start echoing right away. + This is because we are probably about to display a menu, + and we don't want to delay before doing so. */ + if (EVENT_HAS_PARAMETERS (prev_event)) + echo_now (); + else + { + Lisp_Object tem0; + + save_getcjmp (save_jump); + restore_getcjmp (local_getcjmp); + tem0 = sit_for (Vecho_keystrokes, 1, 1); + restore_getcjmp (save_jump); + if (EQ (tem0, Qt) + && ! CONSP (Vunread_command_events)) + echo_now (); + } + } + + /* Maybe auto save due to number of keystrokes. */ + + if (commandflag != 0 && commandflag != -2 + && auto_save_interval > 0 + && num_nonmacro_input_events - last_auto_save > max (auto_save_interval, 20) + && !detect_input_pending_run_timers (0)) + { + Fdo_auto_save (Qnil, Qnil); + /* Hooks can actually change some buffers in auto save. */ + redisplay (); + } + + /* Try reading using an X menu. + This is never confused with reading using the minibuf + because the recursive call of read_char in read_char_minibuf_menu_prompt + does not pass on any keymaps. */ + + if (KEYMAPP (map) && INTERACTIVE + && !NILP (prev_event) + && EVENT_HAS_PARAMETERS (prev_event) + && !EQ (XCAR (prev_event), Qmenu_bar) + && !EQ (XCAR (prev_event), Qtool_bar) + /* Don't bring up a menu if we already have another event. */ + && NILP (Vunread_command_events)) + { + c = read_char_x_menu_prompt (map, prev_event, used_mouse_menu); + + /* Now that we have read an event, Emacs is not idle. */ + if (!end_time) + timer_stop_idle (); + + goto exit; + } + + /* Maybe autosave and/or garbage collect due to idleness. */ + + if (INTERACTIVE && NILP (c)) + { + int delay_level; + ptrdiff_t buffer_size; + + /* Slow down auto saves logarithmically in size of current buffer, + and garbage collect while we're at it. */ + if (! MINI_WINDOW_P (XWINDOW (selected_window))) + last_non_minibuf_size = Z - BEG; + buffer_size = (last_non_minibuf_size >> 8) + 1; + delay_level = 0; + while (buffer_size > 64) + delay_level++, buffer_size -= buffer_size >> 2; + if (delay_level < 4) delay_level = 4; + /* delay_level is 4 for files under around 50k, 7 at 100k, + 9 at 200k, 11 at 300k, and 12 at 500k. It is 15 at 1 meg. */ + + /* Auto save if enough time goes by without input. */ + if (commandflag != 0 && commandflag != -2 + && num_nonmacro_input_events > last_auto_save + && INTEGERP (Vauto_save_timeout) + && XINT (Vauto_save_timeout) > 0) + { + Lisp_Object tem0; + EMACS_INT timeout = XFASTINT (Vauto_save_timeout); + + timeout = min (timeout, MOST_POSITIVE_FIXNUM / delay_level * 4); + timeout = delay_level * timeout / 4; + save_getcjmp (save_jump); + restore_getcjmp (local_getcjmp); + tem0 = sit_for (make_number (timeout), 1, 1); + restore_getcjmp (save_jump); + + if (EQ (tem0, Qt) + && ! CONSP (Vunread_command_events)) + { + Fdo_auto_save (Qnil, Qnil); + redisplay (); + } + } + + /* If there is still no input available, ask for GC. */ + if (!detect_input_pending_run_timers (0)) + maybe_gc (); + } + + /* Notify the caller if an autosave hook, or a timer, sentinel or + filter in the sit_for calls above have changed the current + kboard. This could happen if they use the minibuffer or start a + recursive edit, like the fancy splash screen in server.el's + filter. If this longjmp wasn't here, read_key_sequence would + interpret the next key sequence using the wrong translation + tables and function keymaps. */ + if (NILP (c) && current_kboard != orig_kboard) + { + UNGCPRO; + return make_number (-2); /* wrong_kboard_jmpbuf */ + } + + /* If this has become non-nil here, it has been set by a timer + or sentinel or filter. */ + if (CONSP (Vunread_command_events)) + { + c = XCAR (Vunread_command_events); + Vunread_command_events = XCDR (Vunread_command_events); + + if (CONSP (c) && EQ (XCAR (c), Qt)) + c = XCDR (c); + else + reread = true; + } + + /* Read something from current KBOARD's side queue, if possible. */ + + if (NILP (c)) + { + if (current_kboard->kbd_queue_has_data) + { + if (!CONSP (KVAR (current_kboard, kbd_queue))) + emacs_abort (); + c = XCAR (KVAR (current_kboard, kbd_queue)); + kset_kbd_queue (current_kboard, + XCDR (KVAR (current_kboard, kbd_queue))); + if (NILP (KVAR (current_kboard, kbd_queue))) + current_kboard->kbd_queue_has_data = 0; + input_pending = readable_events (0); + if (EVENT_HAS_PARAMETERS (c) + && EQ (EVENT_HEAD_KIND (EVENT_HEAD (c)), Qswitch_frame)) + internal_last_event_frame = XCAR (XCDR (c)); + Vlast_event_frame = internal_last_event_frame; + } + } + + /* If current_kboard's side queue is empty check the other kboards. + If one of them has data that we have not yet seen here, + switch to it and process the data waiting for it. + + Note: if the events queued up for another kboard + have already been seen here, and therefore are not a complete command, + the kbd_queue_has_data field is 0, so we skip that kboard here. + That's to avoid an infinite loop switching between kboards here. */ + if (NILP (c) && !single_kboard) + { + KBOARD *kb; + for (kb = all_kboards; kb; kb = kb->next_kboard) + if (kb->kbd_queue_has_data) + { + current_kboard = kb; + /* This is going to exit from read_char + so we had better get rid of this frame's stuff. */ + UNGCPRO; + return make_number (-2); /* wrong_kboard_jmpbuf */ + } + } + + wrong_kboard: + + STOP_POLLING; + + if (NILP (c)) + { + c = read_decoded_event_from_main_queue (end_time, local_getcjmp, + prev_event, used_mouse_menu); + if (NILP (c) && end_time + && timespec_cmp (*end_time, current_timespec ()) <= 0) + { + goto exit; + } + + if (EQ (c, make_number (-2))) + { + /* This is going to exit from read_char + so we had better get rid of this frame's stuff. */ + UNGCPRO; + return c; + } + } + + non_reread: + + if (!end_time) + timer_stop_idle (); + RESUME_POLLING; + + if (NILP (c)) + { + if (commandflag >= 0 + && !input_pending && !detect_input_pending_run_timers (0)) + redisplay (); + + goto wrong_kboard; + } + + /* Buffer switch events are only for internal wakeups + so don't show them to the user. + Also, don't record a key if we already did. */ + if (BUFFERP (c)) + goto exit; + + /* Process special events within read_char + and loop around to read another event. */ + save = Vquit_flag; + Vquit_flag = Qnil; + tem = access_keymap (get_keymap (Vspecial_event_map, 0, 1), c, 0, 0, 1); + Vquit_flag = save; + + if (!NILP (tem)) + { + struct buffer *prev_buffer = current_buffer; + last_input_event = c; + call4 (Qcommand_execute, tem, Qnil, Fvector (1, &last_input_event), Qt); + + if (CONSP (c) && EQ (XCAR (c), Qselect_window) && !end_time) + /* We stopped being idle for this event; undo that. This + prevents automatic window selection (under + mouse_autoselect_window from acting as a real input event, for + example banishing the mouse under mouse-avoidance-mode. */ + timer_resume_idle (); + + if (current_buffer != prev_buffer) + { + /* The command may have changed the keymaps. Pretend there + is input in another keyboard and return. This will + recalculate keymaps. */ + c = make_number (-2); + goto exit; + } + else + goto retry; + } + + /* Handle things that only apply to characters. */ + if (INTEGERP (c)) + { + /* If kbd_buffer_get_event gave us an EOF, return that. */ + if (XINT (c) == -1) + goto exit; + + if ((STRINGP (KVAR (current_kboard, Vkeyboard_translate_table)) + && UNSIGNED_CMP (XFASTINT (c), <, + SCHARS (KVAR (current_kboard, + Vkeyboard_translate_table)))) + || (VECTORP (KVAR (current_kboard, Vkeyboard_translate_table)) + && UNSIGNED_CMP (XFASTINT (c), <, + ASIZE (KVAR (current_kboard, + Vkeyboard_translate_table)))) + || (CHAR_TABLE_P (KVAR (current_kboard, Vkeyboard_translate_table)) + && CHARACTERP (c))) + { + Lisp_Object d; + d = Faref (KVAR (current_kboard, Vkeyboard_translate_table), c); + /* nil in keyboard-translate-table means no translation. */ + if (!NILP (d)) + c = d; + } + } + + /* If this event is a mouse click in the menu bar, + return just menu-bar for now. Modify the mouse click event + so we won't do this twice, then queue it up. */ + if (EVENT_HAS_PARAMETERS (c) + && CONSP (XCDR (c)) + && CONSP (EVENT_START (c)) + && CONSP (XCDR (EVENT_START (c)))) + { + Lisp_Object posn; + + posn = POSN_POSN (EVENT_START (c)); + /* Handle menu-bar events: + insert the dummy prefix event `menu-bar'. */ + if (EQ (posn, Qmenu_bar) || EQ (posn, Qtool_bar)) + { + /* Change menu-bar to (menu-bar) as the event "position". */ + POSN_SET_POSN (EVENT_START (c), list1 (posn)); + + also_record = c; + Vunread_command_events = Fcons (c, Vunread_command_events); + c = posn; + } + } + + /* Store these characters into recent_keys, the dribble file if any, + and the keyboard macro being defined, if any. */ + record_char (c); + if (! NILP (also_record)) + record_char (also_record); + + /* Wipe the echo area. + But first, if we are about to use an input method, + save the echo area contents for it to refer to. */ + if (INTEGERP (c) + && ! NILP (Vinput_method_function) + && ' ' <= XINT (c) && XINT (c) < 256 && XINT (c) != 127) + { + previous_echo_area_message = Fcurrent_message (); + Vinput_method_previous_message = previous_echo_area_message; + } + + /* Now wipe the echo area, except for help events which do their + own stuff with the echo area. */ + if (!CONSP (c) + || (!(EQ (Qhelp_echo, XCAR (c))) + && !(EQ (Qswitch_frame, XCAR (c))) + /* Don't wipe echo area for select window events: These might + get delayed via `mouse-autoselect-window' (Bug#11304). */ + && !(EQ (Qselect_window, XCAR (c))))) + { + if (!NILP (echo_area_buffer[0])) + { + safe_run_hooks (Qecho_area_clear_hook); + clear_message (1, 0); + } + } + + reread_for_input_method: + from_macro: + /* Pass this to the input method, if appropriate. */ + if (INTEGERP (c) + && ! NILP (Vinput_method_function) + /* Don't run the input method within a key sequence, + after the first event of the key sequence. */ + && NILP (prev_event) + && ' ' <= XINT (c) && XINT (c) < 256 && XINT (c) != 127) + { + Lisp_Object keys; + ptrdiff_t key_count; + bool key_count_reset; + ptrdiff_t command_key_start; + struct gcpro gcpro1; + ptrdiff_t count = SPECPDL_INDEX (); + + /* Save the echo status. */ + bool saved_immediate_echo = current_kboard->immediate_echo; + struct kboard *saved_ok_to_echo = ok_to_echo_at_next_pause; + Lisp_Object saved_echo_string = KVAR (current_kboard, echo_string); + ptrdiff_t saved_echo_after_prompt = current_kboard->echo_after_prompt; + +#if 0 + if (before_command_restore_flag) + { + this_command_key_count = before_command_key_count_1; + if (this_command_key_count < this_single_command_key_start) + this_single_command_key_start = this_command_key_count; + echo_truncate (before_command_echo_length_1); + before_command_restore_flag = 0; + } +#endif + + /* Save the this_command_keys status. */ + key_count = this_command_key_count; + key_count_reset = this_command_key_count_reset; + command_key_start = this_single_command_key_start; + + if (key_count > 0) + keys = Fcopy_sequence (this_command_keys); + else + keys = Qnil; + GCPRO1 (keys); + + /* Clear out this_command_keys. */ + this_command_key_count = 0; + this_command_key_count_reset = 0; + this_single_command_key_start = 0; + + /* Now wipe the echo area. */ + if (!NILP (echo_area_buffer[0])) + safe_run_hooks (Qecho_area_clear_hook); + clear_message (1, 0); + echo_truncate (0); + + /* If we are not reading a key sequence, + never use the echo area. */ + if (!KEYMAPP (map)) + { + specbind (Qinput_method_use_echo_area, Qt); + } + + /* Call the input method. */ + tem = call1 (Vinput_method_function, c); + + tem = unbind_to (count, tem); + + /* Restore the saved echoing state + and this_command_keys state. */ + this_command_key_count = key_count; + this_command_key_count_reset = key_count_reset; + this_single_command_key_start = command_key_start; + if (key_count > 0) + this_command_keys = keys; + + cancel_echoing (); + ok_to_echo_at_next_pause = saved_ok_to_echo; + /* Do not restore the echo area string when the user is + introducing a prefix argument. Otherwise we end with + repetitions of the partially introduced prefix + argument. (bug#19875) */ + if (NILP (intern ("prefix-arg"))) + { + kset_echo_string (current_kboard, saved_echo_string); + } + current_kboard->echo_after_prompt = saved_echo_after_prompt; + if (saved_immediate_echo) + echo_now (); + + UNGCPRO; + + /* The input method can return no events. */ + if (! CONSP (tem)) + { + /* Bring back the previous message, if any. */ + if (! NILP (previous_echo_area_message)) + message_with_string ("%s", previous_echo_area_message, 0); + goto retry; + } + /* It returned one event or more. */ + c = XCAR (tem); + Vunread_post_input_method_events + = nconc2 (XCDR (tem), Vunread_post_input_method_events); + } + + reread_first: + + /* Display help if not echoing. */ + if (CONSP (c) && EQ (XCAR (c), Qhelp_echo)) + { + /* (help-echo FRAME HELP WINDOW OBJECT POS). */ + Lisp_Object help, object, position, window, htem; + + htem = Fcdr (XCDR (c)); + help = Fcar (htem); + htem = Fcdr (htem); + window = Fcar (htem); + htem = Fcdr (htem); + object = Fcar (htem); + htem = Fcdr (htem); + position = Fcar (htem); + + show_help_echo (help, window, object, position); + + /* We stopped being idle for this event; undo that. */ + if (!end_time) + timer_resume_idle (); + goto retry; + } + + if ((! reread || this_command_key_count == 0 + || this_command_key_count_reset) + && !end_time) + { + + /* Don't echo mouse motion events. */ + if (echo_keystrokes_p () + && ! (EVENT_HAS_PARAMETERS (c) + && EQ (EVENT_HEAD_KIND (EVENT_HEAD (c)), Qmouse_movement))) + { + echo_char (c); + if (! NILP (also_record)) + echo_char (also_record); + /* Once we reread a character, echoing can happen + the next time we pause to read a new one. */ + ok_to_echo_at_next_pause = current_kboard; + } + + /* Record this character as part of the current key. */ + add_command_key (c); + if (! NILP (also_record)) + add_command_key (also_record); + } + + last_input_event = c; + num_input_events++; + + /* Process the help character specially if enabled. */ + if (!NILP (Vhelp_form) && help_char_p (c)) + { + ptrdiff_t count = SPECPDL_INDEX (); + + help_form_saved_window_configs + = Fcons (Fcurrent_window_configuration (Qnil), + help_form_saved_window_configs); + record_unwind_protect_void (read_char_help_form_unwind); + call0 (Qhelp_form_show); + + cancel_echoing (); + do + { + c = read_char (0, Qnil, Qnil, 0, NULL); + if (EVENT_HAS_PARAMETERS (c) + && EQ (EVENT_HEAD_KIND (EVENT_HEAD (c)), Qmouse_click)) + XSETCAR (help_form_saved_window_configs, Qnil); + } + while (BUFFERP (c)); + /* Remove the help from the frame. */ + unbind_to (count, Qnil); + + redisplay (); + if (EQ (c, make_number (040))) + { + cancel_echoing (); + do + c = read_char (0, Qnil, Qnil, 0, NULL); + while (BUFFERP (c)); + } + } + + exit: + RESUME_POLLING; + input_was_pending = input_pending; + RETURN_UNGCPRO (c); +} + +/* Record a key that came from a mouse menu. + Record it for echoing, for this-command-keys, and so on. */ + +static void +record_menu_key (Lisp_Object c) +{ + /* Wipe the echo area. */ + clear_message (1, 0); + + record_char (c); + +#if 0 + before_command_key_count = this_command_key_count; + before_command_echo_length = echo_length (); +#endif + + /* Don't echo mouse motion events. */ + if (echo_keystrokes_p ()) + { + echo_char (c); + + /* Once we reread a character, echoing can happen + the next time we pause to read a new one. */ + ok_to_echo_at_next_pause = 0; + } + + /* Record this character as part of the current key. */ + add_command_key (c); + + /* Re-reading in the middle of a command. */ + last_input_event = c; + num_input_events++; +} + +/* Return true if should recognize C as "the help character". */ + +static bool +help_char_p (Lisp_Object c) +{ + Lisp_Object tail; + + if (EQ (c, Vhelp_char)) + return 1; + for (tail = Vhelp_event_list; CONSP (tail); tail = XCDR (tail)) + if (EQ (c, XCAR (tail))) + return 1; + return 0; +} + +/* Record the input event C in various ways. */ + +static void +record_char (Lisp_Object c) +{ + int recorded = 0; + + if (CONSP (c) && (EQ (XCAR (c), Qhelp_echo) || EQ (XCAR (c), Qmouse_movement))) + { + /* To avoid filling recent_keys with help-echo and mouse-movement + events, we filter out repeated help-echo events, only store the + first and last in a series of mouse-movement events, and don't + store repeated help-echo events which are only separated by + mouse-movement events. */ + + Lisp_Object ev1, ev2, ev3; + int ix1, ix2, ix3; + + if ((ix1 = recent_keys_index - 1) < 0) + ix1 = NUM_RECENT_KEYS - 1; + ev1 = AREF (recent_keys, ix1); + + if ((ix2 = ix1 - 1) < 0) + ix2 = NUM_RECENT_KEYS - 1; + ev2 = AREF (recent_keys, ix2); + + if ((ix3 = ix2 - 1) < 0) + ix3 = NUM_RECENT_KEYS - 1; + ev3 = AREF (recent_keys, ix3); + + if (EQ (XCAR (c), Qhelp_echo)) + { + /* Don't record `help-echo' in recent_keys unless it shows some help + message, and a different help than the previously recorded + event. */ + Lisp_Object help, last_help; + + help = Fcar_safe (Fcdr_safe (XCDR (c))); + if (!STRINGP (help)) + recorded = 1; + else if (CONSP (ev1) && EQ (XCAR (ev1), Qhelp_echo) + && (last_help = Fcar_safe (Fcdr_safe (XCDR (ev1))), EQ (last_help, help))) + recorded = 1; + else if (CONSP (ev1) && EQ (XCAR (ev1), Qmouse_movement) + && CONSP (ev2) && EQ (XCAR (ev2), Qhelp_echo) + && (last_help = Fcar_safe (Fcdr_safe (XCDR (ev2))), EQ (last_help, help))) + recorded = -1; + else if (CONSP (ev1) && EQ (XCAR (ev1), Qmouse_movement) + && CONSP (ev2) && EQ (XCAR (ev2), Qmouse_movement) + && CONSP (ev3) && EQ (XCAR (ev3), Qhelp_echo) + && (last_help = Fcar_safe (Fcdr_safe (XCDR (ev3))), EQ (last_help, help))) + recorded = -2; + } + else if (EQ (XCAR (c), Qmouse_movement)) + { + /* Only record one pair of `mouse-movement' on a window in recent_keys. + So additional mouse movement events replace the last element. */ + Lisp_Object last_window, window; + + window = Fcar_safe (Fcar_safe (XCDR (c))); + if (CONSP (ev1) && EQ (XCAR (ev1), Qmouse_movement) + && (last_window = Fcar_safe (Fcar_safe (XCDR (ev1))), EQ (last_window, window)) + && CONSP (ev2) && EQ (XCAR (ev2), Qmouse_movement) + && (last_window = Fcar_safe (Fcar_safe (XCDR (ev2))), EQ (last_window, window))) + { + ASET (recent_keys, ix1, c); + recorded = 1; + } + } + } + else + store_kbd_macro_char (c); + + if (!recorded) + { + total_keys += total_keys < NUM_RECENT_KEYS; + ASET (recent_keys, recent_keys_index, c); + if (++recent_keys_index >= NUM_RECENT_KEYS) + recent_keys_index = 0; + } + else if (recorded < 0) + { + /* We need to remove one or two events from recent_keys. + To do this, we simply put nil at those events and move the + recent_keys_index backwards over those events. Usually, + users will never see those nil events, as they will be + overwritten by the command keys entered to see recent_keys + (e.g. C-h l). */ + + while (recorded++ < 0 && total_keys > 0) + { + if (total_keys < NUM_RECENT_KEYS) + total_keys--; + if (--recent_keys_index < 0) + recent_keys_index = NUM_RECENT_KEYS - 1; + ASET (recent_keys, recent_keys_index, Qnil); + } + } + + num_nonmacro_input_events++; + + /* Write c to the dribble file. If c is a lispy event, write + the event's symbol to the dribble file, in . Bleaugh. + If you, dear reader, have a better idea, you've got the source. :-) */ + if (dribble) + { + block_input (); + if (INTEGERP (c)) + { + if (XUINT (c) < 0x100) + putc (XUINT (c), dribble); + else + fprintf (dribble, " 0x%"pI"x", XUINT (c)); + } + else + { + Lisp_Object dribblee; + + /* If it's a structured event, take the event header. */ + dribblee = EVENT_HEAD (c); + + if (SYMBOLP (dribblee)) + { + putc ('<', dribble); + fwrite (SDATA (SYMBOL_NAME (dribblee)), sizeof (char), + SBYTES (SYMBOL_NAME (dribblee)), + dribble); + putc ('>', dribble); + } + } + + fflush (dribble); + unblock_input (); + } +} + +/* Copy out or in the info on where C-g should throw to. + This is used when running Lisp code from within get_char, + in case get_char is called recursively. + See read_process_output. */ + +static void +save_getcjmp (sys_jmp_buf temp) +{ + memcpy (temp, getcjmp, sizeof getcjmp); +} + +static void +restore_getcjmp (sys_jmp_buf temp) +{ + memcpy (getcjmp, temp, sizeof getcjmp); +} + +/* Low level keyboard/mouse input. + kbd_buffer_store_event places events in kbd_buffer, and + kbd_buffer_get_event retrieves them. */ + +/* Return true if there are any events in the queue that read-char + would return. If this returns false, a read-char would block. */ +static bool +readable_events (int flags) +{ + if (flags & READABLE_EVENTS_DO_TIMERS_NOW) + timer_check (); + + /* If the buffer contains only FOCUS_IN_EVENT events, and + READABLE_EVENTS_FILTER_EVENTS is set, report it as empty. */ + if (kbd_fetch_ptr != kbd_store_ptr) + { + if (flags & (READABLE_EVENTS_FILTER_EVENTS +#ifdef USE_TOOLKIT_SCROLL_BARS + | READABLE_EVENTS_IGNORE_SQUEEZABLES +#endif + )) + { + struct input_event *event; + + event = ((kbd_fetch_ptr < kbd_buffer + KBD_BUFFER_SIZE) + ? kbd_fetch_ptr + : kbd_buffer); + + do + { + if (!( +#ifdef USE_TOOLKIT_SCROLL_BARS + (flags & READABLE_EVENTS_FILTER_EVENTS) && +#endif + event->kind == FOCUS_IN_EVENT) +#ifdef USE_TOOLKIT_SCROLL_BARS + && !((flags & READABLE_EVENTS_IGNORE_SQUEEZABLES) + && (event->kind == SCROLL_BAR_CLICK_EVENT + || event->kind == HORIZONTAL_SCROLL_BAR_CLICK_EVENT) + && event->part == scroll_bar_handle + && event->modifiers == 0) +#endif + && !((flags & READABLE_EVENTS_FILTER_EVENTS) + && event->kind == BUFFER_SWITCH_EVENT)) + return 1; + event++; + if (event == kbd_buffer + KBD_BUFFER_SIZE) + event = kbd_buffer; + } + while (event != kbd_store_ptr); + } + else + return 1; + } + + if (!(flags & READABLE_EVENTS_IGNORE_SQUEEZABLES) + && !NILP (do_mouse_tracking) && some_mouse_moved ()) + return 1; + if (single_kboard) + { + if (current_kboard->kbd_queue_has_data) + return 1; + } + else + { + KBOARD *kb; + for (kb = all_kboards; kb; kb = kb->next_kboard) + if (kb->kbd_queue_has_data) + return 1; + } + return 0; +} + +/* Set this for debugging, to have a way to get out */ +int stop_character EXTERNALLY_VISIBLE; + +static KBOARD * +event_to_kboard (struct input_event *event) +{ + /* Not applicable for these special events. */ + if (event->kind == SELECTION_REQUEST_EVENT + || event->kind == SELECTION_CLEAR_EVENT) + return NULL; + else + { + Lisp_Object obj = event->frame_or_window; + /* There are some events that set this field to nil or string. */ + if (WINDOWP (obj)) + obj = WINDOW_FRAME (XWINDOW (obj)); + /* Also ignore dead frames here. */ + return ((FRAMEP (obj) && FRAME_LIVE_P (XFRAME (obj))) + ? FRAME_KBOARD (XFRAME (obj)) : NULL); + } +} + +#ifdef subprocesses +/* Return the number of slots occupied in kbd_buffer. */ + +static int +kbd_buffer_nr_stored (void) +{ + return kbd_fetch_ptr == kbd_store_ptr + ? 0 + : (kbd_fetch_ptr < kbd_store_ptr + ? kbd_store_ptr - kbd_fetch_ptr + : ((kbd_buffer + KBD_BUFFER_SIZE) - kbd_fetch_ptr + + (kbd_store_ptr - kbd_buffer))); +} +#endif /* Store an event obtained at interrupt level into kbd_buffer, fifo */ + +void +kbd_buffer_store_event (register struct input_event *event) +{ + kbd_buffer_store_event_hold (event, 0); +} + +/* Store EVENT obtained at interrupt level into kbd_buffer, fifo. + + If HOLD_QUIT is 0, just stuff EVENT into the fifo. + Else, if HOLD_QUIT.kind != NO_EVENT, discard EVENT. + Else, if EVENT is a quit event, store the quit event + in HOLD_QUIT, and return (thus ignoring further events). + + This is used to postpone the processing of the quit event until all + subsequent input events have been parsed (and discarded). */ + +void +kbd_buffer_store_event_hold (register struct input_event *event, + struct input_event *hold_quit) +{ + if (event->kind == NO_EVENT) + emacs_abort (); + + if (hold_quit && hold_quit->kind != NO_EVENT) + return; + + if (event->kind == ASCII_KEYSTROKE_EVENT) + { + register int c = event->code & 0377; + + if (event->modifiers & ctrl_modifier) + c = make_ctrl_char (c); + + c |= (event->modifiers + & (meta_modifier | alt_modifier + | hyper_modifier | super_modifier)); + + if (c == quit_char) + { + KBOARD *kb = FRAME_KBOARD (XFRAME (event->frame_or_window)); + struct input_event *sp; + + if (single_kboard && kb != current_kboard) + { + kset_kbd_queue + (kb, list2 (make_lispy_switch_frame (event->frame_or_window), + make_number (c))); + kb->kbd_queue_has_data = 1; + for (sp = kbd_fetch_ptr; sp != kbd_store_ptr; sp++) + { + if (sp == kbd_buffer + KBD_BUFFER_SIZE) + sp = kbd_buffer; + + if (event_to_kboard (sp) == kb) + { + sp->kind = NO_EVENT; + sp->frame_or_window = Qnil; + sp->arg = Qnil; + } + } + return; + } + + if (hold_quit) + { + *hold_quit = *event; + return; + } + + /* If this results in a quit_char being returned to Emacs as + input, set Vlast_event_frame properly. If this doesn't + get returned to Emacs as an event, the next event read + will set Vlast_event_frame again, so this is safe to do. */ + { + Lisp_Object focus; + + focus = FRAME_FOCUS_FRAME (XFRAME (event->frame_or_window)); + if (NILP (focus)) + focus = event->frame_or_window; + internal_last_event_frame = focus; + Vlast_event_frame = focus; + } + + handle_interrupt (0); + return; + } + + if (c && c == stop_character) + { + sys_suspend (); + return; + } + } + /* Don't insert two BUFFER_SWITCH_EVENT's in a row. + Just ignore the second one. */ + else if (event->kind == BUFFER_SWITCH_EVENT + && kbd_fetch_ptr != kbd_store_ptr + && ((kbd_store_ptr == kbd_buffer + ? kbd_buffer + KBD_BUFFER_SIZE - 1 + : kbd_store_ptr - 1)->kind) == BUFFER_SWITCH_EVENT) + return; + + if (kbd_store_ptr - kbd_buffer == KBD_BUFFER_SIZE) + kbd_store_ptr = kbd_buffer; + + /* Don't let the very last slot in the buffer become full, + since that would make the two pointers equal, + and that is indistinguishable from an empty buffer. + Discard the event if it would fill the last slot. */ + if (kbd_fetch_ptr - 1 != kbd_store_ptr) + { + *kbd_store_ptr = *event; + ++kbd_store_ptr; +#ifdef subprocesses + if (kbd_buffer_nr_stored () > KBD_BUFFER_SIZE / 2 + && ! kbd_on_hold_p ()) + { + /* Don't read keyboard input until we have processed kbd_buffer. + This happens when pasting text longer than KBD_BUFFER_SIZE/2. */ + hold_keyboard_input (); + if (!noninteractive) + ignore_sigio (); + stop_polling (); + } +#endif /* subprocesses */ + } + + /* If we're inside while-no-input, and this event qualifies + as input, set quit-flag to cause an interrupt. */ + if (!NILP (Vthrow_on_input) + && event->kind != FOCUS_IN_EVENT + && event->kind != FOCUS_OUT_EVENT + && event->kind != HELP_EVENT + && event->kind != ICONIFY_EVENT + && event->kind != DEICONIFY_EVENT) + { + Vquit_flag = Vthrow_on_input; + /* If we're inside a function that wants immediate quits, + do it now. */ + if (immediate_quit && NILP (Vinhibit_quit)) + { + immediate_quit = 0; + QUIT; + } + } +} + + +/* Put an input event back in the head of the event queue. */ + +void +kbd_buffer_unget_event (register struct input_event *event) +{ + if (kbd_fetch_ptr == kbd_buffer) + kbd_fetch_ptr = kbd_buffer + KBD_BUFFER_SIZE; + + /* Don't let the very last slot in the buffer become full, */ + if (kbd_fetch_ptr - 1 != kbd_store_ptr) + { + --kbd_fetch_ptr; + *kbd_fetch_ptr = *event; + } +} + +/* Limit help event positions to this range, to avoid overflow problems. */ +#define INPUT_EVENT_POS_MAX \ + ((ptrdiff_t) min (PTRDIFF_MAX, min (TYPE_MAXIMUM (Time) / 2, \ + MOST_POSITIVE_FIXNUM))) +#define INPUT_EVENT_POS_MIN (-1 - INPUT_EVENT_POS_MAX) + +/* Return a Time that encodes position POS. POS must be in range. */ + +static Time +position_to_Time (ptrdiff_t pos) +{ + eassert (INPUT_EVENT_POS_MIN <= pos && pos <= INPUT_EVENT_POS_MAX); + return pos; +} + +/* Return the position that ENCODED_POS encodes. + Avoid signed integer overflow. */ + +static ptrdiff_t +Time_to_position (Time encoded_pos) +{ + if (encoded_pos <= INPUT_EVENT_POS_MAX) + return encoded_pos; + Time encoded_pos_min = INPUT_EVENT_POS_MIN; + eassert (encoded_pos_min <= encoded_pos); + ptrdiff_t notpos = -1 - encoded_pos; + return -1 - notpos; +} + +/* Generate a HELP_EVENT input_event and store it in the keyboard + buffer. + + HELP is the help form. + + FRAME and WINDOW are the frame and window where the help is + generated. OBJECT is the Lisp object where the help was found (a + buffer, a string, an overlay, or nil if neither from a string nor + from a buffer). POS is the position within OBJECT where the help + was found. */ + +void +gen_help_event (Lisp_Object help, Lisp_Object frame, Lisp_Object window, + Lisp_Object object, ptrdiff_t pos) +{ + struct input_event event; + + event.kind = HELP_EVENT; + event.frame_or_window = frame; + event.arg = object; + event.x = WINDOWP (window) ? window : frame; + event.y = help; + event.timestamp = position_to_Time (pos); + kbd_buffer_store_event (&event); +} + + +/* Store HELP_EVENTs for HELP on FRAME in the input queue. */ + +void +kbd_buffer_store_help_event (Lisp_Object frame, Lisp_Object help) +{ + struct input_event event; + + event.kind = HELP_EVENT; + event.frame_or_window = frame; + event.arg = Qnil; + event.x = Qnil; + event.y = help; + event.timestamp = 0; + kbd_buffer_store_event (&event); +} + + +/* Discard any mouse events in the event buffer by setting them to + NO_EVENT. */ +void +discard_mouse_events (void) +{ + struct input_event *sp; + for (sp = kbd_fetch_ptr; sp != kbd_store_ptr; sp++) + { + if (sp == kbd_buffer + KBD_BUFFER_SIZE) + sp = kbd_buffer; + + if (sp->kind == MOUSE_CLICK_EVENT + || sp->kind == WHEEL_EVENT + || sp->kind == HORIZ_WHEEL_EVENT +#ifdef HAVE_GPM + || sp->kind == GPM_CLICK_EVENT +#endif + || sp->kind == SCROLL_BAR_CLICK_EVENT + || sp->kind == HORIZONTAL_SCROLL_BAR_CLICK_EVENT) + { + sp->kind = NO_EVENT; + } + } +} + + +/* Return true if there are any real events waiting in the event + buffer, not counting `NO_EVENT's. + + Discard NO_EVENT events at the front of the input queue, possibly + leaving the input queue empty if there are no real input events. */ + +bool +kbd_buffer_events_waiting (void) +{ + struct input_event *sp; + + for (sp = kbd_fetch_ptr; + sp != kbd_store_ptr && sp->kind == NO_EVENT; + ++sp) + { + if (sp == kbd_buffer + KBD_BUFFER_SIZE) + sp = kbd_buffer; + } + + kbd_fetch_ptr = sp; + return sp != kbd_store_ptr && sp->kind != NO_EVENT; +} + + +/* Clear input event EVENT. */ + +static void +clear_event (struct input_event *event) +{ + event->kind = NO_EVENT; +} + + +/* Read one event from the event buffer, waiting if necessary. + The value is a Lisp object representing the event. + The value is nil for an event that should be ignored, + or that was handled here. + We always read and discard one event. */ + +static Lisp_Object +kbd_buffer_get_event (KBOARD **kbp, + bool *used_mouse_menu, + struct timespec *end_time) +{ + Lisp_Object obj; + +#ifdef subprocesses + if (kbd_on_hold_p () && kbd_buffer_nr_stored () < KBD_BUFFER_SIZE / 4) + { + /* Start reading input again because we have processed enough to + be able to accept new events again. */ + unhold_keyboard_input (); + start_polling (); + } +#endif /* subprocesses */ + +#if !defined HAVE_DBUS && !defined USE_FILE_NOTIFY + if (noninteractive + /* In case we are running as a daemon, only do this before + detaching from the terminal. */ + || (IS_DAEMON && DAEMON_RUNNING)) + { + int c = getchar (); + XSETINT (obj, c); + *kbp = current_kboard; + return obj; + } +#endif /* !defined HAVE_DBUS && !defined USE_FILE_NOTIFY */ + + /* Wait until there is input available. */ + for (;;) + { + /* Break loop if there's an unread command event. Needed in + moused window autoselection which uses a timer to insert such + events. */ + if (CONSP (Vunread_command_events)) + break; + + if (kbd_fetch_ptr != kbd_store_ptr) + break; + if (!NILP (do_mouse_tracking) && some_mouse_moved ()) + break; + + /* If the quit flag is set, then read_char will return + quit_char, so that counts as "available input." */ + if (!NILP (Vquit_flag)) + quit_throw_to_read_char (0); + + /* One way or another, wait until input is available; then, if + interrupt handlers have not read it, read it now. */ + +#ifdef USABLE_SIGIO + gobble_input (); +#endif + if (kbd_fetch_ptr != kbd_store_ptr) + break; + if (!NILP (do_mouse_tracking) && some_mouse_moved ()) + break; + if (end_time) + { + struct timespec now = current_timespec (); + if (timespec_cmp (*end_time, now) <= 0) + return Qnil; /* Finished waiting. */ + else + { + struct timespec duration = timespec_sub (*end_time, now); + wait_reading_process_output (min (duration.tv_sec, + WAIT_READING_MAX), + duration.tv_nsec, + -1, 1, Qnil, NULL, 0); + } + } + else + { + bool do_display = true; + + if (FRAME_TERMCAP_P (SELECTED_FRAME ())) + { + struct tty_display_info *tty = CURTTY (); + + /* When this TTY is displaying a menu, we must prevent + any redisplay, because we modify the frame's glyph + matrix behind the back of the display engine. */ + if (tty->showing_menu) + do_display = false; + } + + wait_reading_process_output (0, 0, -1, do_display, Qnil, NULL, 0); + } + + if (!interrupt_input && kbd_fetch_ptr == kbd_store_ptr) + gobble_input (); + } + + if (CONSP (Vunread_command_events)) + { + Lisp_Object first; + first = XCAR (Vunread_command_events); + Vunread_command_events = XCDR (Vunread_command_events); + *kbp = current_kboard; + return first; + } + + /* At this point, we know that there is a readable event available + somewhere. If the event queue is empty, then there must be a + mouse movement enabled and available. */ + if (kbd_fetch_ptr != kbd_store_ptr) + { + struct input_event *event; + + event = ((kbd_fetch_ptr < kbd_buffer + KBD_BUFFER_SIZE) + ? kbd_fetch_ptr + : kbd_buffer); + + *kbp = event_to_kboard (event); + if (*kbp == 0) + *kbp = current_kboard; /* Better than returning null ptr? */ + + obj = Qnil; + + /* These two kinds of events get special handling + and don't actually appear to the command loop. + We return nil for them. */ + if (event->kind == SELECTION_REQUEST_EVENT + || event->kind == SELECTION_CLEAR_EVENT) + { +#ifdef HAVE_X11 + struct input_event copy; + + /* Remove it from the buffer before processing it, + since otherwise swallow_events will see it + and process it again. */ + copy = *event; + kbd_fetch_ptr = event + 1; + input_pending = readable_events (0); + x_handle_selection_event (©); +#else + /* We're getting selection request events, but we don't have + a window system. */ + emacs_abort (); +#endif + } + +#if defined (HAVE_NS) + else if (event->kind == NS_TEXT_EVENT) + { + if (event->code == KEY_NS_PUT_WORKING_TEXT) + obj = list1 (intern ("ns-put-working-text")); + else + obj = list1 (intern ("ns-unput-working-text")); + kbd_fetch_ptr = event + 1; + if (used_mouse_menu) + *used_mouse_menu = 1; + } +#endif + +#if defined (HAVE_X11) || defined (HAVE_NTGUI) \ + || defined (HAVE_NS) + else if (event->kind == DELETE_WINDOW_EVENT) + { + /* Make an event (delete-frame (FRAME)). */ + obj = list2 (Qdelete_frame, list1 (event->frame_or_window)); + kbd_fetch_ptr = event + 1; + } +#endif +#if defined (HAVE_X11) || defined (HAVE_NTGUI) \ + || defined (HAVE_NS) + else if (event->kind == ICONIFY_EVENT) + { + /* Make an event (iconify-frame (FRAME)). */ + obj = list2 (Qiconify_frame, list1 (event->frame_or_window)); + kbd_fetch_ptr = event + 1; + } + else if (event->kind == DEICONIFY_EVENT) + { + /* Make an event (make-frame-visible (FRAME)). */ + obj = list2 (Qmake_frame_visible, list1 (event->frame_or_window)); + kbd_fetch_ptr = event + 1; + } +#endif + else if (event->kind == BUFFER_SWITCH_EVENT) + { + /* The value doesn't matter here; only the type is tested. */ + XSETBUFFER (obj, current_buffer); + kbd_fetch_ptr = event + 1; + } +#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \ + || defined (HAVE_NS) || defined (USE_GTK) + else if (event->kind == MENU_BAR_ACTIVATE_EVENT) + { + kbd_fetch_ptr = event + 1; + input_pending = readable_events (0); + if (FRAME_LIVE_P (XFRAME (event->frame_or_window))) + x_activate_menubar (XFRAME (event->frame_or_window)); + } +#endif +#ifdef HAVE_NTGUI + else if (event->kind == LANGUAGE_CHANGE_EVENT) + { + /* Make an event (language-change FRAME CODEPAGE LANGUAGE-ID). */ + obj = list4 (Qlanguage_change, + event->frame_or_window, + make_number (event->code), + make_number (event->modifiers)); + kbd_fetch_ptr = event + 1; + } +#endif +#ifdef USE_FILE_NOTIFY + else if (event->kind == FILE_NOTIFY_EVENT) + { +#ifdef HAVE_W32NOTIFY + /* Make an event (file-notify (DESCRIPTOR ACTION FILE) CALLBACK). */ + obj = list3 (Qfile_notify, event->arg, event->frame_or_window); +#else + obj = make_lispy_event (event); +#endif + kbd_fetch_ptr = event + 1; + } +#endif /* USE_FILE_NOTIFY */ + else if (event->kind == SAVE_SESSION_EVENT) + { + obj = list2 (Qsave_session, event->arg); + kbd_fetch_ptr = event + 1; + } + /* Just discard these, by returning nil. + With MULTI_KBOARD, these events are used as placeholders + when we need to randomly delete events from the queue. + (They shouldn't otherwise be found in the buffer, + but on some machines it appears they do show up + even without MULTI_KBOARD.) */ + /* On Windows NT/9X, NO_EVENT is used to delete extraneous + mouse events during a popup-menu call. */ + else if (event->kind == NO_EVENT) + kbd_fetch_ptr = event + 1; + else if (event->kind == HELP_EVENT) + { + Lisp_Object object, position, help, frame, window; + + frame = event->frame_or_window; + object = event->arg; + position = make_number (Time_to_position (event->timestamp)); + window = event->x; + help = event->y; + clear_event (event); + + kbd_fetch_ptr = event + 1; + if (!WINDOWP (window)) + window = Qnil; + obj = Fcons (Qhelp_echo, + list5 (frame, help, window, object, position)); + } + else if (event->kind == FOCUS_IN_EVENT) + { + /* Notification of a FocusIn event. The frame receiving the + focus is in event->frame_or_window. Generate a + switch-frame event if necessary. */ + Lisp_Object frame, focus; + + frame = event->frame_or_window; + focus = FRAME_FOCUS_FRAME (XFRAME (frame)); + if (FRAMEP (focus)) + frame = focus; + + if ( +#ifdef HAVE_X11 + ! NILP (event->arg) + && +#endif + !EQ (frame, internal_last_event_frame) + && !EQ (frame, selected_frame)) + obj = make_lispy_switch_frame (frame); + else + obj = make_lispy_focus_in (frame); + + internal_last_event_frame = frame; + kbd_fetch_ptr = event + 1; + } + else if (event->kind == FOCUS_OUT_EVENT) + { +#ifdef HAVE_WINDOW_SYSTEM + + Display_Info *di; + Lisp_Object frame = event->frame_or_window; + bool focused = false; + + for (di = x_display_list; di && ! focused; di = di->next) + focused = di->x_highlight_frame != 0; + + if (!focused) + obj = make_lispy_focus_out (frame); + +#endif /* HAVE_WINDOW_SYSTEM */ + + kbd_fetch_ptr = event + 1; + } +#ifdef HAVE_DBUS + else if (event->kind == DBUS_EVENT) + { + obj = make_lispy_event (event); + kbd_fetch_ptr = event + 1; + } +#endif + else if (event->kind == CONFIG_CHANGED_EVENT) + { + obj = make_lispy_event (event); + kbd_fetch_ptr = event + 1; + } + else + { + /* If this event is on a different frame, return a switch-frame this + time, and leave the event in the queue for next time. */ + Lisp_Object frame; + Lisp_Object focus; + + frame = event->frame_or_window; + if (CONSP (frame)) + frame = XCAR (frame); + else if (WINDOWP (frame)) + frame = WINDOW_FRAME (XWINDOW (frame)); + + focus = FRAME_FOCUS_FRAME (XFRAME (frame)); + if (! NILP (focus)) + frame = focus; + + if (! EQ (frame, internal_last_event_frame) + && !EQ (frame, selected_frame)) + obj = make_lispy_switch_frame (frame); + internal_last_event_frame = frame; + + /* If we didn't decide to make a switch-frame event, go ahead + and build a real event from the queue entry. */ + + if (NILP (obj)) + { + obj = make_lispy_event (event); + +#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \ + || defined (HAVE_NS) || defined (USE_GTK) + /* If this was a menu selection, then set the flag to inhibit + writing to last_nonmenu_event. Don't do this if the event + we're returning is (menu-bar), though; that indicates the + beginning of the menu sequence, and we might as well leave + that as the `event with parameters' for this selection. */ + if (used_mouse_menu + && !EQ (event->frame_or_window, event->arg) + && (event->kind == MENU_BAR_EVENT + || event->kind == TOOL_BAR_EVENT)) + *used_mouse_menu = 1; +#endif +#ifdef HAVE_NS + /* Certain system events are non-key events. */ + if (used_mouse_menu + && event->kind == NS_NONKEY_EVENT) + *used_mouse_menu = 1; +#endif + + /* Wipe out this event, to catch bugs. */ + clear_event (event); + kbd_fetch_ptr = event + 1; + } + } + } + /* Try generating a mouse motion event. */ + else if (!NILP (do_mouse_tracking) && some_mouse_moved ()) + { + struct frame *f = some_mouse_moved (); + Lisp_Object bar_window; + enum scroll_bar_part part; + Lisp_Object x, y; + Time t; + + *kbp = current_kboard; + /* Note that this uses F to determine which terminal to look at. + If there is no valid info, it does not store anything + so x remains nil. */ + x = Qnil; + + /* XXX Can f or mouse_position_hook be NULL here? */ + if (f && FRAME_TERMINAL (f)->mouse_position_hook) + (*FRAME_TERMINAL (f)->mouse_position_hook) (&f, 0, &bar_window, + &part, &x, &y, &t); + + obj = Qnil; + + /* Decide if we should generate a switch-frame event. Don't + generate switch-frame events for motion outside of all Emacs + frames. */ + if (!NILP (x) && f) + { + Lisp_Object frame; + + frame = FRAME_FOCUS_FRAME (f); + if (NILP (frame)) + XSETFRAME (frame, f); + + if (! EQ (frame, internal_last_event_frame) + && !EQ (frame, selected_frame)) + obj = make_lispy_switch_frame (frame); + internal_last_event_frame = frame; + } + + /* If we didn't decide to make a switch-frame event, go ahead and + return a mouse-motion event. */ + if (!NILP (x) && NILP (obj)) + obj = make_lispy_movement (f, bar_window, part, x, y, t); + } + else + /* We were promised by the above while loop that there was + something for us to read! */ + emacs_abort (); + + input_pending = readable_events (0); + + Vlast_event_frame = internal_last_event_frame; + + return (obj); +} + +/* Process any non-user-visible events (currently X selection events), + without reading any user-visible events. */ + +static void +process_special_events (void) +{ + struct input_event *event; + + for (event = kbd_fetch_ptr; event != kbd_store_ptr; ++event) + { + if (event == kbd_buffer + KBD_BUFFER_SIZE) + { + event = kbd_buffer; + if (event == kbd_store_ptr) + break; + } + + /* If we find a stored X selection request, handle it now. */ + if (event->kind == SELECTION_REQUEST_EVENT + || event->kind == SELECTION_CLEAR_EVENT) + { +#ifdef HAVE_X11 + + /* Remove the event from the fifo buffer before processing; + otherwise swallow_events called recursively could see it + and process it again. To do this, we move the events + between kbd_fetch_ptr and EVENT one slot to the right, + cyclically. */ + + struct input_event copy = *event; + struct input_event *beg + = (kbd_fetch_ptr == kbd_buffer + KBD_BUFFER_SIZE) + ? kbd_buffer : kbd_fetch_ptr; + + if (event > beg) + memmove (beg + 1, beg, (event - beg) * sizeof (struct input_event)); + else if (event < beg) + { + if (event > kbd_buffer) + memmove (kbd_buffer + 1, kbd_buffer, + (event - kbd_buffer) * sizeof (struct input_event)); + *kbd_buffer = *(kbd_buffer + KBD_BUFFER_SIZE - 1); + if (beg < kbd_buffer + KBD_BUFFER_SIZE - 1) + memmove (beg + 1, beg, + (kbd_buffer + KBD_BUFFER_SIZE - 1 - beg) + * sizeof (struct input_event)); + } + + if (kbd_fetch_ptr == kbd_buffer + KBD_BUFFER_SIZE) + kbd_fetch_ptr = kbd_buffer + 1; + else + kbd_fetch_ptr++; + + input_pending = readable_events (0); + x_handle_selection_event (©); +#else + /* We're getting selection request events, but we don't have + a window system. */ + emacs_abort (); +#endif + } + } +} + +/* Process any events that are not user-visible, run timer events that + are ripe, and return, without reading any user-visible events. */ + +void +swallow_events (bool do_display) +{ + unsigned old_timers_run; + + process_special_events (); + + old_timers_run = timers_run; + get_input_pending (READABLE_EVENTS_DO_TIMERS_NOW); + + if (!input_pending && timers_run != old_timers_run && do_display) + redisplay_preserve_echo_area (7); +} + +/* Record the start of when Emacs is idle, + for the sake of running idle-time timers. */ + +static void +timer_start_idle (void) +{ + /* If we are already in the idle state, do nothing. */ + if (timespec_valid_p (timer_idleness_start_time)) + return; + + timer_idleness_start_time = current_timespec (); + timer_last_idleness_start_time = timer_idleness_start_time; + + /* Mark all idle-time timers as once again candidates for running. */ + call0 (intern ("internal-timer-start-idle")); +} + +/* Record that Emacs is no longer idle, so stop running idle-time timers. */ + +static void +timer_stop_idle (void) +{ + timer_idleness_start_time = invalid_timespec (); +} + +/* Resume idle timer from last idle start time. */ + +static void +timer_resume_idle (void) +{ + if (timespec_valid_p (timer_idleness_start_time)) + return; + + timer_idleness_start_time = timer_last_idleness_start_time; +} + +/* This is only for debugging. */ +struct input_event last_timer_event EXTERNALLY_VISIBLE; + +/* List of elisp functions to call, delayed because they were generated in + a context where Elisp could not be safely run (e.g. redisplay, signal, + ...). Each element has the form (FUN . ARGS). */ +Lisp_Object pending_funcalls; + +/* Return true if TIMER is a valid timer, placing its value into *RESULT. */ +static bool +decode_timer (Lisp_Object timer, struct timespec *result) +{ + Lisp_Object *vec; + + if (! (VECTORP (timer) && ASIZE (timer) == 9)) + return 0; + vec = XVECTOR (timer)->contents; + if (! NILP (vec[0])) + return 0; + if (! INTEGERP (vec[2])) + return false; + + struct lisp_time t; + if (decode_time_components (vec[1], vec[2], vec[3], vec[8], &t, 0) <= 0) + return false; + *result = lisp_to_timespec (t); + return timespec_valid_p (*result); +} + + +/* Check whether a timer has fired. To prevent larger problems we simply + disregard elements that are not proper timers. Do not make a circular + timer list for the time being. + + Returns the time to wait until the next timer fires. If a + timer is triggering now, return zero. + If no timer is active, return -1. + + If a timer is ripe, we run it, with quitting turned off. + In that case we return 0 to indicate that a new timer_check_2 call + should be done. */ + +static struct timespec +timer_check_2 (Lisp_Object timers, Lisp_Object idle_timers) +{ + struct timespec nexttime; + struct timespec now; + struct timespec idleness_now; + Lisp_Object chosen_timer; + struct gcpro gcpro1; + + nexttime = invalid_timespec (); + + chosen_timer = Qnil; + GCPRO1 (chosen_timer); + + /* First run the code that was delayed. */ + while (CONSP (pending_funcalls)) + { + Lisp_Object funcall = XCAR (pending_funcalls); + pending_funcalls = XCDR (pending_funcalls); + safe_call2 (Qapply, XCAR (funcall), XCDR (funcall)); + } + + if (CONSP (timers) || CONSP (idle_timers)) + { + now = current_timespec (); + idleness_now = (timespec_valid_p (timer_idleness_start_time) + ? timespec_sub (now, timer_idleness_start_time) + : make_timespec (0, 0)); + } + + while (CONSP (timers) || CONSP (idle_timers)) + { + Lisp_Object timer = Qnil, idle_timer = Qnil; + struct timespec timer_time, idle_timer_time; + struct timespec difference; + struct timespec timer_difference = invalid_timespec (); + struct timespec idle_timer_difference = invalid_timespec (); + bool ripe, timer_ripe = 0, idle_timer_ripe = 0; + + /* Set TIMER and TIMER_DIFFERENCE + based on the next ordinary timer. + TIMER_DIFFERENCE is the distance in time from NOW to when + this timer becomes ripe. + Skip past invalid timers and timers already handled. */ + if (CONSP (timers)) + { + timer = XCAR (timers); + if (! decode_timer (timer, &timer_time)) + { + timers = XCDR (timers); + continue; + } + + timer_ripe = timespec_cmp (timer_time, now) <= 0; + timer_difference = (timer_ripe + ? timespec_sub (now, timer_time) + : timespec_sub (timer_time, now)); + } + + /* Likewise for IDLE_TIMER and IDLE_TIMER_DIFFERENCE + based on the next idle timer. */ + if (CONSP (idle_timers)) + { + idle_timer = XCAR (idle_timers); + if (! decode_timer (idle_timer, &idle_timer_time)) + { + idle_timers = XCDR (idle_timers); + continue; + } + + idle_timer_ripe = timespec_cmp (idle_timer_time, idleness_now) <= 0; + idle_timer_difference + = (idle_timer_ripe + ? timespec_sub (idleness_now, idle_timer_time) + : timespec_sub (idle_timer_time, idleness_now)); + } + + /* Decide which timer is the next timer, + and set CHOSEN_TIMER, DIFFERENCE, and RIPE accordingly. + Also step down the list where we found that timer. */ + + if (timespec_valid_p (timer_difference) + && (! timespec_valid_p (idle_timer_difference) + || idle_timer_ripe < timer_ripe + || (idle_timer_ripe == timer_ripe + && ((timer_ripe + ? timespec_cmp (idle_timer_difference, + timer_difference) + : timespec_cmp (timer_difference, + idle_timer_difference)) + < 0)))) + { + chosen_timer = timer; + timers = XCDR (timers); + difference = timer_difference; + ripe = timer_ripe; + } + else + { + chosen_timer = idle_timer; + idle_timers = XCDR (idle_timers); + difference = idle_timer_difference; + ripe = idle_timer_ripe; + } + + /* If timer is ripe, run it if it hasn't been run. */ + if (ripe) + { + if (NILP (AREF (chosen_timer, 0))) + { + ptrdiff_t count = SPECPDL_INDEX (); + Lisp_Object old_deactivate_mark = Vdeactivate_mark; + + /* Mark the timer as triggered to prevent problems if the lisp + code fails to reschedule it right. */ + ASET (chosen_timer, 0, Qt); + + specbind (Qinhibit_quit, Qt); + + call1 (Qtimer_event_handler, chosen_timer); + Vdeactivate_mark = old_deactivate_mark; + timers_run++; + unbind_to (count, Qnil); + + /* Since we have handled the event, + we don't need to tell the caller to wake up and do it. */ + /* But the caller must still wait for the next timer, so + return 0 to indicate that. */ + } + + nexttime = make_timespec (0, 0); + break; + } + else + /* When we encounter a timer that is still waiting, + return the amount of time to wait before it is ripe. */ + { + UNGCPRO; + return difference; + } + } + + /* No timers are pending in the future. */ + /* Return 0 if we generated an event, and -1 if not. */ + UNGCPRO; + return nexttime; +} + + +/* Check whether a timer has fired. To prevent larger problems we simply + disregard elements that are not proper timers. Do not make a circular + timer list for the time being. + + Returns the time to wait until the next timer fires. + If no timer is active, return an invalid value. + + As long as any timer is ripe, we run it. */ + +struct timespec +timer_check (void) +{ + struct timespec nexttime; + Lisp_Object timers, idle_timers; + struct gcpro gcpro1, gcpro2; + + Lisp_Object tem = Vinhibit_quit; + Vinhibit_quit = Qt; + + /* We use copies of the timers' lists to allow a timer to add itself + again, without locking up Emacs if the newly added timer is + already ripe when added. */ + + /* Always consider the ordinary timers. */ + timers = Fcopy_sequence (Vtimer_list); + /* Consider the idle timers only if Emacs is idle. */ + if (timespec_valid_p (timer_idleness_start_time)) + idle_timers = Fcopy_sequence (Vtimer_idle_list); + else + idle_timers = Qnil; + + Vinhibit_quit = tem; + + GCPRO2 (timers, idle_timers); + + do + { + nexttime = timer_check_2 (timers, idle_timers); + } + while (nexttime.tv_sec == 0 && nexttime.tv_nsec == 0); + + UNGCPRO; + return nexttime; +} + +DEFUN ("current-idle-time", Fcurrent_idle_time, Scurrent_idle_time, 0, 0, 0, + doc: /* Return the current length of Emacs idleness, or nil. +The value when Emacs is idle is a list of four integers (HIGH LOW USEC PSEC) +in the same style as (current-time). + +The value when Emacs is not idle is nil. + +PSEC is a multiple of the system clock resolution. */) + (void) +{ + if (timespec_valid_p (timer_idleness_start_time)) + return make_lisp_time (timespec_sub (current_timespec (), + timer_idleness_start_time)); + + return Qnil; +} + +/* Caches for modify_event_symbol. */ +static Lisp_Object accent_key_syms; +static Lisp_Object func_key_syms; +static Lisp_Object mouse_syms; +static Lisp_Object wheel_syms; +static Lisp_Object drag_n_drop_syms; + +/* This is a list of keysym codes for special "accent" characters. + It parallels lispy_accent_keys. */ + +static const int lispy_accent_codes[] = +{ +#ifdef XK_dead_circumflex + XK_dead_circumflex, +#else + 0, +#endif +#ifdef XK_dead_grave + XK_dead_grave, +#else + 0, +#endif +#ifdef XK_dead_tilde + XK_dead_tilde, +#else + 0, +#endif +#ifdef XK_dead_diaeresis + XK_dead_diaeresis, +#else + 0, +#endif +#ifdef XK_dead_macron + XK_dead_macron, +#else + 0, +#endif +#ifdef XK_dead_degree + XK_dead_degree, +#else + 0, +#endif +#ifdef XK_dead_acute + XK_dead_acute, +#else + 0, +#endif +#ifdef XK_dead_cedilla + XK_dead_cedilla, +#else + 0, +#endif +#ifdef XK_dead_breve + XK_dead_breve, +#else + 0, +#endif +#ifdef XK_dead_ogonek + XK_dead_ogonek, +#else + 0, +#endif +#ifdef XK_dead_caron + XK_dead_caron, +#else + 0, +#endif +#ifdef XK_dead_doubleacute + XK_dead_doubleacute, +#else + 0, +#endif +#ifdef XK_dead_abovedot + XK_dead_abovedot, +#else + 0, +#endif +#ifdef XK_dead_abovering + XK_dead_abovering, +#else + 0, +#endif +#ifdef XK_dead_iota + XK_dead_iota, +#else + 0, +#endif +#ifdef XK_dead_belowdot + XK_dead_belowdot, +#else + 0, +#endif +#ifdef XK_dead_voiced_sound + XK_dead_voiced_sound, +#else + 0, +#endif +#ifdef XK_dead_semivoiced_sound + XK_dead_semivoiced_sound, +#else + 0, +#endif +#ifdef XK_dead_hook + XK_dead_hook, +#else + 0, +#endif +#ifdef XK_dead_horn + XK_dead_horn, +#else + 0, +#endif +}; + +/* This is a list of Lisp names for special "accent" characters. + It parallels lispy_accent_codes. */ + +static const char *const lispy_accent_keys[] = +{ + "dead-circumflex", + "dead-grave", + "dead-tilde", + "dead-diaeresis", + "dead-macron", + "dead-degree", + "dead-acute", + "dead-cedilla", + "dead-breve", + "dead-ogonek", + "dead-caron", + "dead-doubleacute", + "dead-abovedot", + "dead-abovering", + "dead-iota", + "dead-belowdot", + "dead-voiced-sound", + "dead-semivoiced-sound", + "dead-hook", + "dead-horn", +}; + +#ifdef HAVE_NTGUI +#define FUNCTION_KEY_OFFSET 0x0 + +const char *const lispy_function_keys[] = + { + 0, /* 0 */ + + 0, /* VK_LBUTTON 0x01 */ + 0, /* VK_RBUTTON 0x02 */ + "cancel", /* VK_CANCEL 0x03 */ + 0, /* VK_MBUTTON 0x04 */ + + 0, 0, 0, /* 0x05 .. 0x07 */ + + "backspace", /* VK_BACK 0x08 */ + "tab", /* VK_TAB 0x09 */ + + 0, 0, /* 0x0A .. 0x0B */ + + "clear", /* VK_CLEAR 0x0C */ + "return", /* VK_RETURN 0x0D */ + + 0, 0, /* 0x0E .. 0x0F */ + + 0, /* VK_SHIFT 0x10 */ + 0, /* VK_CONTROL 0x11 */ + 0, /* VK_MENU 0x12 */ + "pause", /* VK_PAUSE 0x13 */ + "capslock", /* VK_CAPITAL 0x14 */ + "kana", /* VK_KANA/VK_HANGUL 0x15 */ + 0, /* 0x16 */ + "junja", /* VK_JUNJA 0x17 */ + "final", /* VK_FINAL 0x18 */ + "kanji", /* VK_KANJI/VK_HANJA 0x19 */ + 0, /* 0x1A */ + "escape", /* VK_ESCAPE 0x1B */ + "convert", /* VK_CONVERT 0x1C */ + "non-convert", /* VK_NONCONVERT 0x1D */ + "accept", /* VK_ACCEPT 0x1E */ + "mode-change", /* VK_MODECHANGE 0x1F */ + 0, /* VK_SPACE 0x20 */ + "prior", /* VK_PRIOR 0x21 */ + "next", /* VK_NEXT 0x22 */ + "end", /* VK_END 0x23 */ + "home", /* VK_HOME 0x24 */ + "left", /* VK_LEFT 0x25 */ + "up", /* VK_UP 0x26 */ + "right", /* VK_RIGHT 0x27 */ + "down", /* VK_DOWN 0x28 */ + "select", /* VK_SELECT 0x29 */ + "print", /* VK_PRINT 0x2A */ + "execute", /* VK_EXECUTE 0x2B */ + "snapshot", /* VK_SNAPSHOT 0x2C */ + "insert", /* VK_INSERT 0x2D */ + "delete", /* VK_DELETE 0x2E */ + "help", /* VK_HELP 0x2F */ + + /* VK_0 thru VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39) */ + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, /* 0x3A .. 0x40 */ + + /* VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A) */ + + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + + "lwindow", /* VK_LWIN 0x5B */ + "rwindow", /* VK_RWIN 0x5C */ + "apps", /* VK_APPS 0x5D */ + 0, /* 0x5E */ + "sleep", + "kp-0", /* VK_NUMPAD0 0x60 */ + "kp-1", /* VK_NUMPAD1 0x61 */ + "kp-2", /* VK_NUMPAD2 0x62 */ + "kp-3", /* VK_NUMPAD3 0x63 */ + "kp-4", /* VK_NUMPAD4 0x64 */ + "kp-5", /* VK_NUMPAD5 0x65 */ + "kp-6", /* VK_NUMPAD6 0x66 */ + "kp-7", /* VK_NUMPAD7 0x67 */ + "kp-8", /* VK_NUMPAD8 0x68 */ + "kp-9", /* VK_NUMPAD9 0x69 */ + "kp-multiply", /* VK_MULTIPLY 0x6A */ + "kp-add", /* VK_ADD 0x6B */ + "kp-separator", /* VK_SEPARATOR 0x6C */ + "kp-subtract", /* VK_SUBTRACT 0x6D */ + "kp-decimal", /* VK_DECIMAL 0x6E */ + "kp-divide", /* VK_DIVIDE 0x6F */ + "f1", /* VK_F1 0x70 */ + "f2", /* VK_F2 0x71 */ + "f3", /* VK_F3 0x72 */ + "f4", /* VK_F4 0x73 */ + "f5", /* VK_F5 0x74 */ + "f6", /* VK_F6 0x75 */ + "f7", /* VK_F7 0x76 */ + "f8", /* VK_F8 0x77 */ + "f9", /* VK_F9 0x78 */ + "f10", /* VK_F10 0x79 */ + "f11", /* VK_F11 0x7A */ + "f12", /* VK_F12 0x7B */ + "f13", /* VK_F13 0x7C */ + "f14", /* VK_F14 0x7D */ + "f15", /* VK_F15 0x7E */ + "f16", /* VK_F16 0x7F */ + "f17", /* VK_F17 0x80 */ + "f18", /* VK_F18 0x81 */ + "f19", /* VK_F19 0x82 */ + "f20", /* VK_F20 0x83 */ + "f21", /* VK_F21 0x84 */ + "f22", /* VK_F22 0x85 */ + "f23", /* VK_F23 0x86 */ + "f24", /* VK_F24 0x87 */ + + 0, 0, 0, 0, /* 0x88 .. 0x8B */ + 0, 0, 0, 0, /* 0x8C .. 0x8F */ + + "kp-numlock", /* VK_NUMLOCK 0x90 */ + "scroll", /* VK_SCROLL 0x91 */ + /* Not sure where the following block comes from. + Windows headers have NEC and Fujitsu specific keys in + this block, but nothing generic. */ + "kp-space", /* VK_NUMPAD_CLEAR 0x92 */ + "kp-enter", /* VK_NUMPAD_ENTER 0x93 */ + "kp-prior", /* VK_NUMPAD_PRIOR 0x94 */ + "kp-next", /* VK_NUMPAD_NEXT 0x95 */ + "kp-end", /* VK_NUMPAD_END 0x96 */ + "kp-home", /* VK_NUMPAD_HOME 0x97 */ + "kp-left", /* VK_NUMPAD_LEFT 0x98 */ + "kp-up", /* VK_NUMPAD_UP 0x99 */ + "kp-right", /* VK_NUMPAD_RIGHT 0x9A */ + "kp-down", /* VK_NUMPAD_DOWN 0x9B */ + "kp-insert", /* VK_NUMPAD_INSERT 0x9C */ + "kp-delete", /* VK_NUMPAD_DELETE 0x9D */ + + 0, 0, /* 0x9E .. 0x9F */ + + /* + * VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys. + * Used only as parameters to GetAsyncKeyState and GetKeyState. + * No other API or message will distinguish left and right keys this way. + * 0xA0 .. 0xA5 + */ + 0, 0, 0, 0, 0, 0, + + /* Multimedia keys. These are handled as WM_APPCOMMAND, which allows us + to enable them selectively, and gives access to a few more functions. + See lispy_multimedia_keys below. */ + 0, 0, 0, 0, 0, 0, 0, /* 0xA6 .. 0xAC Browser */ + 0, 0, 0, /* 0xAD .. 0xAF Volume */ + 0, 0, 0, 0, /* 0xB0 .. 0xB3 Media */ + 0, 0, 0, 0, /* 0xB4 .. 0xB7 Apps */ + + /* 0xB8 .. 0xC0 "OEM" keys - all seem to be punctuation. */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, + + /* 0xC1 - 0xDA unallocated, 0xDB-0xDF more OEM keys */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, /* 0xE0 */ + "ax", /* VK_OEM_AX 0xE1 */ + 0, /* VK_OEM_102 0xE2 */ + "ico-help", /* VK_ICO_HELP 0xE3 */ + "ico-00", /* VK_ICO_00 0xE4 */ + 0, /* VK_PROCESSKEY 0xE5 - used by IME */ + "ico-clear", /* VK_ICO_CLEAR 0xE6 */ + 0, /* VK_PACKET 0xE7 - used to pass Unicode chars */ + 0, /* 0xE8 */ + "reset", /* VK_OEM_RESET 0xE9 */ + "jump", /* VK_OEM_JUMP 0xEA */ + "oem-pa1", /* VK_OEM_PA1 0xEB */ + "oem-pa2", /* VK_OEM_PA2 0xEC */ + "oem-pa3", /* VK_OEM_PA3 0xED */ + "wsctrl", /* VK_OEM_WSCTRL 0xEE */ + "cusel", /* VK_OEM_CUSEL 0xEF */ + "oem-attn", /* VK_OEM_ATTN 0xF0 */ + "finish", /* VK_OEM_FINISH 0xF1 */ + "copy", /* VK_OEM_COPY 0xF2 */ + "auto", /* VK_OEM_AUTO 0xF3 */ + "enlw", /* VK_OEM_ENLW 0xF4 */ + "backtab", /* VK_OEM_BACKTAB 0xF5 */ + "attn", /* VK_ATTN 0xF6 */ + "crsel", /* VK_CRSEL 0xF7 */ + "exsel", /* VK_EXSEL 0xF8 */ + "ereof", /* VK_EREOF 0xF9 */ + "play", /* VK_PLAY 0xFA */ + "zoom", /* VK_ZOOM 0xFB */ + "noname", /* VK_NONAME 0xFC */ + "pa1", /* VK_PA1 0xFD */ + "oem_clear", /* VK_OEM_CLEAR 0xFE */ + 0 /* 0xFF */ + }; + +/* Some of these duplicate the "Media keys" on newer keyboards, + but they are delivered to the application in a different way. */ +static const char *const lispy_multimedia_keys[] = + { + 0, + "browser-back", + "browser-forward", + "browser-refresh", + "browser-stop", + "browser-search", + "browser-favorites", + "browser-home", + "volume-mute", + "volume-down", + "volume-up", + "media-next", + "media-previous", + "media-stop", + "media-play-pause", + "mail", + "media-select", + "app-1", + "app-2", + "bass-down", + "bass-boost", + "bass-up", + "treble-down", + "treble-up", + "mic-volume-mute", + "mic-volume-down", + "mic-volume-up", + "help", + "find", + "new", + "open", + "close", + "save", + "print", + "undo", + "redo", + "copy", + "cut", + "paste", + "mail-reply", + "mail-forward", + "mail-send", + "spell-check", + "toggle-dictate-command", + "mic-toggle", + "correction-list", + "media-play", + "media-pause", + "media-record", + "media-fast-forward", + "media-rewind", + "media-channel-up", + "media-channel-down" + }; + +#else /* not HAVE_NTGUI */ + +/* This should be dealt with in XTread_socket now, and that doesn't + depend on the client system having the Kana syms defined. See also + the XK_kana_A case below. */ +#if 0 +#ifdef XK_kana_A +static const char *const lispy_kana_keys[] = + { + /* X Keysym value */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x400 .. 0x40f */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x410 .. 0x41f */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x420 .. 0x42f */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x430 .. 0x43f */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x440 .. 0x44f */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x450 .. 0x45f */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x460 .. 0x46f */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,"overline",0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x480 .. 0x48f */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x490 .. 0x49f */ + 0, "kana-fullstop", "kana-openingbracket", "kana-closingbracket", + "kana-comma", "kana-conjunctive", "kana-WO", "kana-a", + "kana-i", "kana-u", "kana-e", "kana-o", + "kana-ya", "kana-yu", "kana-yo", "kana-tsu", + "prolongedsound", "kana-A", "kana-I", "kana-U", + "kana-E", "kana-O", "kana-KA", "kana-KI", + "kana-KU", "kana-KE", "kana-KO", "kana-SA", + "kana-SHI", "kana-SU", "kana-SE", "kana-SO", + "kana-TA", "kana-CHI", "kana-TSU", "kana-TE", + "kana-TO", "kana-NA", "kana-NI", "kana-NU", + "kana-NE", "kana-NO", "kana-HA", "kana-HI", + "kana-FU", "kana-HE", "kana-HO", "kana-MA", + "kana-MI", "kana-MU", "kana-ME", "kana-MO", + "kana-YA", "kana-YU", "kana-YO", "kana-RA", + "kana-RI", "kana-RU", "kana-RE", "kana-RO", + "kana-WA", "kana-N", "voicedsound", "semivoicedsound", + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x4e0 .. 0x4ef */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x4f0 .. 0x4ff */ + }; +#endif /* XK_kana_A */ +#endif /* 0 */ + +#define FUNCTION_KEY_OFFSET 0xff00 + +/* You'll notice that this table is arranged to be conveniently + indexed by X Windows keysym values. */ +static const char *const lispy_function_keys[] = + { + /* X Keysym value */ + + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xff00...0f */ + "backspace", "tab", "linefeed", "clear", + 0, "return", 0, 0, + 0, 0, 0, "pause", /* 0xff10...1f */ + 0, 0, 0, 0, 0, 0, 0, "escape", + 0, 0, 0, 0, + 0, "kanji", "muhenkan", "henkan", /* 0xff20...2f */ + "romaji", "hiragana", "katakana", "hiragana-katakana", + "zenkaku", "hankaku", "zenkaku-hankaku", "touroku", + "massyo", "kana-lock", "kana-shift", "eisu-shift", + "eisu-toggle", /* 0xff30...3f */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xff40...4f */ + + "home", "left", "up", "right", /* 0xff50 */ /* IsCursorKey */ + "down", "prior", "next", "end", + "begin", 0, 0, 0, 0, 0, 0, 0, + "select", /* 0xff60 */ /* IsMiscFunctionKey */ + "print", + "execute", + "insert", + 0, /* 0xff64 */ + "undo", + "redo", + "menu", + "find", + "cancel", + "help", + "break", /* 0xff6b */ + + 0, 0, 0, 0, + 0, 0, 0, 0, "backtab", 0, 0, 0, /* 0xff70... */ + 0, 0, 0, 0, 0, 0, 0, "kp-numlock", /* 0xff78... */ + "kp-space", /* 0xff80 */ /* IsKeypadKey */ + 0, 0, 0, 0, 0, 0, 0, 0, + "kp-tab", /* 0xff89 */ + 0, 0, 0, + "kp-enter", /* 0xff8d */ + 0, 0, 0, + "kp-f1", /* 0xff91 */ + "kp-f2", + "kp-f3", + "kp-f4", + "kp-home", /* 0xff95 */ + "kp-left", + "kp-up", + "kp-right", + "kp-down", + "kp-prior", /* kp-page-up */ + "kp-next", /* kp-page-down */ + "kp-end", + "kp-begin", + "kp-insert", + "kp-delete", + 0, /* 0xffa0 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, + "kp-multiply", /* 0xffaa */ + "kp-add", + "kp-separator", + "kp-subtract", + "kp-decimal", + "kp-divide", /* 0xffaf */ + "kp-0", /* 0xffb0 */ + "kp-1", "kp-2", "kp-3", "kp-4", "kp-5", "kp-6", "kp-7", "kp-8", "kp-9", + 0, /* 0xffba */ + 0, 0, + "kp-equal", /* 0xffbd */ + "f1", /* 0xffbe */ /* IsFunctionKey */ + "f2", + "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", /* 0xffc0 */ + "f11", "f12", "f13", "f14", "f15", "f16", "f17", "f18", + "f19", "f20", "f21", "f22", "f23", "f24", "f25", "f26", /* 0xffd0 */ + "f27", "f28", "f29", "f30", "f31", "f32", "f33", "f34", + "f35", 0, 0, 0, 0, 0, 0, 0, /* 0xffe0 */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xfff0 */ + 0, 0, 0, 0, 0, 0, 0, "delete" + }; + +/* ISO 9995 Function and Modifier Keys; the first byte is 0xFE. */ +#define ISO_FUNCTION_KEY_OFFSET 0xfe00 + +static const char *const iso_lispy_function_keys[] = + { + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xfe00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xfe08 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xfe10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xfe18 */ + "iso-lefttab", /* 0xfe20 */ + "iso-move-line-up", "iso-move-line-down", + "iso-partial-line-up", "iso-partial-line-down", + "iso-partial-space-left", "iso-partial-space-right", + "iso-set-margin-left", "iso-set-margin-right", /* 0xffe27, 28 */ + "iso-release-margin-left", "iso-release-margin-right", + "iso-release-both-margins", + "iso-fast-cursor-left", "iso-fast-cursor-right", + "iso-fast-cursor-up", "iso-fast-cursor-down", + "iso-continuous-underline", "iso-discontinuous-underline", /* 0xfe30, 31 */ + "iso-emphasize", "iso-center-object", "iso-enter", /* ... 0xfe34 */ + }; + +#endif /* not HAVE_NTGUI */ + +static Lisp_Object Vlispy_mouse_stem; + +static const char *const lispy_wheel_names[] = +{ + "wheel-up", "wheel-down", "wheel-left", "wheel-right" +}; + +/* drag-n-drop events are generated when a set of selected files are + dragged from another application and dropped onto an Emacs window. */ +static const char *const lispy_drag_n_drop_names[] = +{ + "drag-n-drop" +}; + +/* An array of symbol indexes of scroll bar parts, indexed by an enum + scroll_bar_part value. Note that Qnil corresponds to + scroll_bar_nowhere and should not appear in Lisp events. */ +static short const scroll_bar_parts[] = { + SYMBOL_INDEX (Qnil), SYMBOL_INDEX (Qabove_handle), SYMBOL_INDEX (Qhandle), + SYMBOL_INDEX (Qbelow_handle), SYMBOL_INDEX (Qup), SYMBOL_INDEX (Qdown), + SYMBOL_INDEX (Qtop), SYMBOL_INDEX (Qbottom), SYMBOL_INDEX (Qend_scroll), + SYMBOL_INDEX (Qratio), SYMBOL_INDEX (Qbefore_handle), + SYMBOL_INDEX (Qhorizontal_handle), SYMBOL_INDEX (Qafter_handle), + SYMBOL_INDEX (Qleft), SYMBOL_INDEX (Qright), SYMBOL_INDEX (Qleftmost), + SYMBOL_INDEX (Qrightmost), SYMBOL_INDEX (Qend_scroll), SYMBOL_INDEX (Qratio) +}; + +/* A vector, indexed by button number, giving the down-going location + of currently depressed buttons, both scroll bar and non-scroll bar. + + The elements have the form + (BUTTON-NUMBER MODIFIER-MASK . REST) + where REST is the cdr of a position as it would be reported in the event. + + The make_lispy_event function stores positions here to tell the + difference between click and drag events, and to store the starting + location to be included in drag events. */ + +static Lisp_Object button_down_location; + +/* Information about the most recent up-going button event: Which + button, what location, and what time. */ + +static int last_mouse_button; +static int last_mouse_x; +static int last_mouse_y; +static Time button_down_time; + +/* The number of clicks in this multiple-click. */ + +static int double_click_count; + +/* X and Y are frame-relative coordinates for a click or wheel event. + Return a Lisp-style event list. */ + +static Lisp_Object +make_lispy_position (struct frame *f, Lisp_Object x, Lisp_Object y, + Time t) +{ + enum window_part part; + Lisp_Object posn = Qnil; + Lisp_Object extra_info = Qnil; + /* Coordinate pixel positions to return. */ + int xret = 0, yret = 0; + /* The window under frame pixel coordinates (x,y) */ + Lisp_Object window = f + ? window_from_coordinates (f, XINT (x), XINT (y), &part, 0) + : Qnil; + + if (WINDOWP (window)) + { + /* It's a click in window WINDOW at frame coordinates (X,Y) */ + struct window *w = XWINDOW (window); + Lisp_Object string_info = Qnil; + ptrdiff_t textpos = 0; + int col = -1, row = -1; + int dx = -1, dy = -1; + int width = -1, height = -1; + Lisp_Object object = Qnil; + + /* Pixel coordinates relative to the window corner. */ + int wx = XINT (x) - WINDOW_LEFT_EDGE_X (w); + int wy = XINT (y) - WINDOW_TOP_EDGE_Y (w); + + /* For text area clicks, return X, Y relative to the corner of + this text area. Note that dX, dY etc are set below, by + buffer_posn_from_coords. */ + if (part == ON_TEXT) + { + xret = XINT (x) - window_box_left (w, TEXT_AREA); + yret = wy - WINDOW_HEADER_LINE_HEIGHT (w); + } + /* For mode line and header line clicks, return X, Y relative to + the left window edge. Use mode_line_string to look for a + string on the click position. */ + else if (part == ON_MODE_LINE || part == ON_HEADER_LINE) + { + Lisp_Object string; + ptrdiff_t charpos; + + posn = (part == ON_MODE_LINE) ? Qmode_line : Qheader_line; + /* Note that mode_line_string takes COL, ROW as pixels and + converts them to characters. */ + col = wx; + row = wy; + string = mode_line_string (w, part, &col, &row, &charpos, + &object, &dx, &dy, &width, &height); + if (STRINGP (string)) + string_info = Fcons (string, make_number (charpos)); + textpos = -1; + + xret = wx; + yret = wy; + } + /* For fringes and margins, Y is relative to the area's (and the + window's) top edge, while X is meaningless. */ + else if (part == ON_LEFT_MARGIN || part == ON_RIGHT_MARGIN) + { + Lisp_Object string; + ptrdiff_t charpos; + + posn = (part == ON_LEFT_MARGIN) ? Qleft_margin : Qright_margin; + col = wx; + row = wy; + string = marginal_area_string (w, part, &col, &row, &charpos, + &object, &dx, &dy, &width, &height); + if (STRINGP (string)) + string_info = Fcons (string, make_number (charpos)); + xret = wx; + yret = wy - WINDOW_HEADER_LINE_HEIGHT (w); + } + else if (part == ON_LEFT_FRINGE) + { + posn = Qleft_fringe; + col = 0; + xret = wx; + dx = wx + - (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (w) + ? 0 : window_box_width (w, LEFT_MARGIN_AREA)); + dy = yret = wy - WINDOW_HEADER_LINE_HEIGHT (w); + } + else if (part == ON_RIGHT_FRINGE) + { + posn = Qright_fringe; + col = 0; + xret = wx; + dx = wx + - window_box_width (w, LEFT_MARGIN_AREA) + - window_box_width (w, TEXT_AREA) + - (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (w) + ? window_box_width (w, RIGHT_MARGIN_AREA) + : 0); + dy = yret = wy - WINDOW_HEADER_LINE_HEIGHT (w); + } + else if (part == ON_VERTICAL_BORDER) + { + posn = Qvertical_line; + width = 1; + dx = 0; + xret = wx; + dy = yret = wy; + } + else if (part == ON_VERTICAL_SCROLL_BAR) + { + posn = Qvertical_scroll_bar; + width = WINDOW_SCROLL_BAR_AREA_WIDTH (w); + dx = xret = wx; + dy = yret = wy; + } + else if (part == ON_HORIZONTAL_SCROLL_BAR) + { + posn = Qhorizontal_scroll_bar; + width = WINDOW_SCROLL_BAR_AREA_HEIGHT (w); + dx = xret = wx; + dy = yret = wy; + } + else if (part == ON_RIGHT_DIVIDER) + { + posn = Qright_divider; + width = WINDOW_RIGHT_DIVIDER_WIDTH (w); + dx = xret = wx; + dy = yret = wy; + } + else if (part == ON_BOTTOM_DIVIDER) + { + posn = Qbottom_divider; + width = WINDOW_BOTTOM_DIVIDER_WIDTH (w); + dx = xret = wx; + dy = yret = wy; + } + + /* For clicks in the text area, fringes, margins, or vertical + scroll bar, call buffer_posn_from_coords to extract TEXTPOS, + the buffer position nearest to the click. */ + if (!textpos) + { + Lisp_Object string2, object2 = Qnil; + struct display_pos p; + int dx2, dy2; + int width2, height2; + /* The pixel X coordinate passed to buffer_posn_from_coords + is the X coordinate relative to the text area for clicks + in text-area, right-margin/fringe and right-side vertical + scroll bar, zero otherwise. */ + int x2 + = (part == ON_TEXT) ? xret + : (part == ON_RIGHT_FRINGE || part == ON_RIGHT_MARGIN + || (part == ON_VERTICAL_SCROLL_BAR + && WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w))) + ? (XINT (x) - window_box_left (w, TEXT_AREA)) + : 0; + int y2 = wy; + + string2 = buffer_posn_from_coords (w, &x2, &y2, &p, + &object2, &dx2, &dy2, + &width2, &height2); + textpos = CHARPOS (p.pos); + if (col < 0) col = x2; + if (row < 0) row = y2; + if (dx < 0) dx = dx2; + if (dy < 0) dy = dy2; + if (width < 0) width = width2; + if (height < 0) height = height2; + + if (NILP (posn)) + { + posn = make_number (textpos); + if (STRINGP (string2)) + string_info = Fcons (string2, + make_number (CHARPOS (p.string_pos))); + } + if (NILP (object)) + object = object2; + } + +#ifdef HAVE_WINDOW_SYSTEM + if (IMAGEP (object)) + { + Lisp_Object image_map, hotspot; + if ((image_map = Fplist_get (XCDR (object), QCmap), + !NILP (image_map)) + && (hotspot = find_hot_spot (image_map, dx, dy), + CONSP (hotspot)) + && (hotspot = XCDR (hotspot), CONSP (hotspot))) + posn = XCAR (hotspot); + } +#endif + + /* Object info. */ + extra_info + = list3 (object, + Fcons (make_number (dx), make_number (dy)), + Fcons (make_number (width), make_number (height))); + + /* String info. */ + extra_info = Fcons (string_info, + Fcons (textpos < 0 ? Qnil : make_number (textpos), + Fcons (Fcons (make_number (col), + make_number (row)), + extra_info))); + } + else if (f != 0) + { + /* Return mouse pixel coordinates here. */ + XSETFRAME (window, f); + xret = XINT (x); + yret = XINT (y); + } + else + window = Qnil; + + return Fcons (window, + Fcons (posn, + Fcons (Fcons (make_number (xret), + make_number (yret)), + Fcons (make_number (t), + extra_info)))); +} + +/* Return non-zero if F is a GUI frame that uses some toolkit-managed + menu bar. This really means that Emacs draws and manages the menu + bar as part of its normal display, and therefore can compute its + geometry. */ +static bool +toolkit_menubar_in_use (struct frame *f) +{ +#if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NS) || defined (HAVE_NTGUI) + return !(!FRAME_WINDOW_P (f)); +#else + return false; +#endif +} + +/* Build the part of Lisp event which represents scroll bar state from + EV. TYPE is one of Qvertical_scroll_bar or Qhorizontal_scroll_bar. */ + +static Lisp_Object +make_scroll_bar_position (struct input_event *ev, Lisp_Object type) +{ + return list5 (ev->frame_or_window, type, Fcons (ev->x, ev->y), + make_number (ev->timestamp), + builtin_lisp_symbol (scroll_bar_parts[ev->part])); +} + +/* Given a struct input_event, build the lisp event which represents + it. If EVENT is 0, build a mouse movement event from the mouse + movement buffer, which should have a movement event in it. + + Note that events must be passed to this function in the order they + are received; this function stores the location of button presses + in order to build drag events when the button is released. */ + +static Lisp_Object +make_lispy_event (struct input_event *event) +{ + int i; + + switch (event->kind) + { + /* A simple keystroke. */ + case ASCII_KEYSTROKE_EVENT: + case MULTIBYTE_CHAR_KEYSTROKE_EVENT: + { + Lisp_Object lispy_c; + EMACS_INT c = event->code; + if (event->kind == ASCII_KEYSTROKE_EVENT) + { + c &= 0377; + eassert (c == event->code); + /* Turn ASCII characters into control characters + when proper. */ + if (event->modifiers & ctrl_modifier) + { + c = make_ctrl_char (c); + event->modifiers &= ~ctrl_modifier; + } + } + + /* Add in the other modifier bits. The shift key was taken care + of by the X code. */ + c |= (event->modifiers + & (meta_modifier | alt_modifier + | hyper_modifier | super_modifier | ctrl_modifier)); + /* Distinguish Shift-SPC from SPC. */ + if ((event->code) == 040 + && event->modifiers & shift_modifier) + c |= shift_modifier; + button_down_time = 0; + XSETFASTINT (lispy_c, c); + return lispy_c; + } + +#ifdef HAVE_NS + /* NS_NONKEY_EVENTs are just like NON_ASCII_KEYSTROKE_EVENTs, + except that they are non-key events (last-nonmenu-event is nil). */ + case NS_NONKEY_EVENT: +#endif + + /* A function key. The symbol may need to have modifier prefixes + tacked onto it. */ + case NON_ASCII_KEYSTROKE_EVENT: + button_down_time = 0; + + for (i = 0; i < ARRAYELTS (lispy_accent_codes); i++) + if (event->code == lispy_accent_codes[i]) + return modify_event_symbol (i, + event->modifiers, + Qfunction_key, Qnil, + lispy_accent_keys, &accent_key_syms, + ARRAYELTS (lispy_accent_keys)); + +#if 0 +#ifdef XK_kana_A + if (event->code >= 0x400 && event->code < 0x500) + return modify_event_symbol (event->code - 0x400, + event->modifiers & ~shift_modifier, + Qfunction_key, Qnil, + lispy_kana_keys, &func_key_syms, + ARRAYELTS (lispy_kana_keys)); +#endif /* XK_kana_A */ +#endif /* 0 */ + +#ifdef ISO_FUNCTION_KEY_OFFSET + if (event->code < FUNCTION_KEY_OFFSET + && event->code >= ISO_FUNCTION_KEY_OFFSET) + return modify_event_symbol (event->code - ISO_FUNCTION_KEY_OFFSET, + event->modifiers, + Qfunction_key, Qnil, + iso_lispy_function_keys, &func_key_syms, + ARRAYELTS (iso_lispy_function_keys)); +#endif + + if ((FUNCTION_KEY_OFFSET <= event->code + && (event->code + < FUNCTION_KEY_OFFSET + ARRAYELTS (lispy_function_keys))) + && lispy_function_keys[event->code - FUNCTION_KEY_OFFSET]) + return modify_event_symbol (event->code - FUNCTION_KEY_OFFSET, + event->modifiers, + Qfunction_key, Qnil, + lispy_function_keys, &func_key_syms, + ARRAYELTS (lispy_function_keys)); + + /* Handle system-specific or unknown keysyms. + We need to use an alist rather than a vector as the cache + since we can't make a vector long enough. */ + if (NILP (KVAR (current_kboard, system_key_syms))) + kset_system_key_syms (current_kboard, Fcons (Qnil, Qnil)); + return modify_event_symbol (event->code, + event->modifiers, + Qfunction_key, + KVAR (current_kboard, Vsystem_key_alist), + 0, &KVAR (current_kboard, system_key_syms), + PTRDIFF_MAX); + +#ifdef HAVE_NTGUI + case MULTIMEDIA_KEY_EVENT: + if (event->code < ARRAYELTS (lispy_multimedia_keys) + && event->code > 0 && lispy_multimedia_keys[event->code]) + { + return modify_event_symbol (event->code, event->modifiers, + Qfunction_key, Qnil, + lispy_multimedia_keys, &func_key_syms, + ARRAYELTS (lispy_multimedia_keys)); + } + return Qnil; +#endif + + /* A mouse click. Figure out where it is, decide whether it's + a press, click or drag, and build the appropriate structure. */ + case MOUSE_CLICK_EVENT: +#ifdef HAVE_GPM + case GPM_CLICK_EVENT: +#endif +#ifndef USE_TOOLKIT_SCROLL_BARS + case SCROLL_BAR_CLICK_EVENT: + case HORIZONTAL_SCROLL_BAR_CLICK_EVENT: +#endif + { + int button = event->code; + bool is_double; + Lisp_Object position; + Lisp_Object *start_pos_ptr; + Lisp_Object start_pos; + + position = Qnil; + + /* Build the position as appropriate for this mouse click. */ + if (event->kind == MOUSE_CLICK_EVENT +#ifdef HAVE_GPM + || event->kind == GPM_CLICK_EVENT +#endif + ) + { + struct frame *f = XFRAME (event->frame_or_window); + int row, column; + + /* Ignore mouse events that were made on frame that + have been deleted. */ + if (! FRAME_LIVE_P (f)) + return Qnil; + + /* EVENT->x and EVENT->y are frame-relative pixel + coordinates at this place. Under old redisplay, COLUMN + and ROW are set to frame relative glyph coordinates + which are then used to determine whether this click is + in a menu (non-toolkit version). */ + if (!toolkit_menubar_in_use (f)) + { + pixel_to_glyph_coords (f, XINT (event->x), XINT (event->y), + &column, &row, NULL, 1); + + /* In the non-toolkit version, clicks on the menu bar + are ordinary button events in the event buffer. + Distinguish them, and invoke the menu. + + (In the toolkit version, the toolkit handles the + menu bar and Emacs doesn't know about it until + after the user makes a selection.) */ + if (row >= 0 && row < FRAME_MENU_BAR_LINES (f) + && (event->modifiers & down_modifier)) + { + Lisp_Object items, item; + + /* Find the menu bar item under `column'. */ + item = Qnil; + items = FRAME_MENU_BAR_ITEMS (f); + for (i = 0; i < ASIZE (items); i += 4) + { + Lisp_Object pos, string; + string = AREF (items, i + 1); + pos = AREF (items, i + 3); + if (NILP (string)) + break; + if (column >= XINT (pos) + && column < XINT (pos) + SCHARS (string)) + { + item = AREF (items, i); + break; + } + } + + /* ELisp manual 2.4b says (x y) are window + relative but code says they are + frame-relative. */ + position = list4 (event->frame_or_window, + Qmenu_bar, + Fcons (event->x, event->y), + make_number (event->timestamp)); + + return list2 (item, position); + } + } + + position = make_lispy_position (f, event->x, event->y, + event->timestamp); + } +#ifndef USE_TOOLKIT_SCROLL_BARS + else + /* It's a scrollbar click. */ + position = make_scroll_bar_position (event, Qvertical_scroll_bar); +#endif /* not USE_TOOLKIT_SCROLL_BARS */ + + if (button >= ASIZE (button_down_location)) + { + ptrdiff_t incr = button - ASIZE (button_down_location) + 1; + button_down_location = larger_vector (button_down_location, + incr, -1); + mouse_syms = larger_vector (mouse_syms, incr, -1); + } + + start_pos_ptr = aref_addr (button_down_location, button); + start_pos = *start_pos_ptr; + *start_pos_ptr = Qnil; + + { + /* On window-system frames, use the value of + double-click-fuzz as is. On other frames, interpret it + as a multiple of 1/8 characters. */ + struct frame *f; + int fuzz; + + if (WINDOWP (event->frame_or_window)) + f = XFRAME (XWINDOW (event->frame_or_window)->frame); + else if (FRAMEP (event->frame_or_window)) + f = XFRAME (event->frame_or_window); + else + emacs_abort (); + + if (FRAME_WINDOW_P (f)) + fuzz = double_click_fuzz; + else + fuzz = double_click_fuzz / 8; + + is_double = (button == last_mouse_button + && (eabs (XINT (event->x) - last_mouse_x) <= fuzz) + && (eabs (XINT (event->y) - last_mouse_y) <= fuzz) + && button_down_time != 0 + && (EQ (Vdouble_click_time, Qt) + || (NATNUMP (Vdouble_click_time) + && (event->timestamp - button_down_time + < XFASTINT (Vdouble_click_time))))); + } + + last_mouse_button = button; + last_mouse_x = XINT (event->x); + last_mouse_y = XINT (event->y); + + /* If this is a button press, squirrel away the location, so + we can decide later whether it was a click or a drag. */ + if (event->modifiers & down_modifier) + { + if (is_double) + { + double_click_count++; + event->modifiers |= ((double_click_count > 2) + ? triple_modifier + : double_modifier); + } + else + double_click_count = 1; + button_down_time = event->timestamp; + *start_pos_ptr = Fcopy_alist (position); + ignore_mouse_drag_p = 0; + } + + /* Now we're releasing a button - check the co-ordinates to + see if this was a click or a drag. */ + else if (event->modifiers & up_modifier) + { + /* If we did not see a down before this up, ignore the up. + Probably this happened because the down event chose a + menu item. It would be an annoyance to treat the + release of the button that chose the menu item as a + separate event. */ + + if (!CONSP (start_pos)) + return Qnil; + + event->modifiers &= ~up_modifier; + + { + Lisp_Object new_down, down; + EMACS_INT xdiff = double_click_fuzz, ydiff = double_click_fuzz; + + /* The third element of every position + should be the (x,y) pair. */ + down = Fcar (Fcdr (Fcdr (start_pos))); + new_down = Fcar (Fcdr (Fcdr (position))); + + if (CONSP (down) + && INTEGERP (XCAR (down)) && INTEGERP (XCDR (down))) + { + xdiff = XINT (XCAR (new_down)) - XINT (XCAR (down)); + ydiff = XINT (XCDR (new_down)) - XINT (XCDR (down)); + } + + if (ignore_mouse_drag_p) + { + event->modifiers |= click_modifier; + ignore_mouse_drag_p = 0; + } + else if (xdiff < double_click_fuzz && xdiff > - double_click_fuzz + && ydiff < double_click_fuzz && ydiff > - double_click_fuzz + /* Maybe the mouse has moved a lot, caused scrolling, and + eventually ended up at the same screen position (but + not buffer position) in which case it is a drag, not + a click. */ + /* FIXME: OTOH if the buffer position has changed + because of a timer or process filter rather than + because of mouse movement, it should be considered as + a click. But mouse-drag-region completely ignores + this case and it hasn't caused any real problem, so + it's probably OK to ignore it as well. */ + && EQ (Fcar (Fcdr (start_pos)), Fcar (Fcdr (position)))) + /* Mouse hasn't moved (much). */ + event->modifiers |= click_modifier; + else + { + button_down_time = 0; + event->modifiers |= drag_modifier; + } + + /* Don't check is_double; treat this as multiple + if the down-event was multiple. */ + if (double_click_count > 1) + event->modifiers |= ((double_click_count > 2) + ? triple_modifier + : double_modifier); + } + } + else + /* Every mouse event should either have the down_modifier or + the up_modifier set. */ + emacs_abort (); + + { + /* Get the symbol we should use for the mouse click. */ + Lisp_Object head; + + head = modify_event_symbol (button, + event->modifiers, + Qmouse_click, Vlispy_mouse_stem, + NULL, + &mouse_syms, + ASIZE (mouse_syms)); + if (event->modifiers & drag_modifier) + return list3 (head, start_pos, position); + else if (event->modifiers & (double_modifier | triple_modifier)) + return list3 (head, position, make_number (double_click_count)); + else + return list2 (head, position); + } + } + + case WHEEL_EVENT: + case HORIZ_WHEEL_EVENT: + { + Lisp_Object position; + Lisp_Object head; + + /* Build the position as appropriate for this mouse click. */ + struct frame *f = XFRAME (event->frame_or_window); + + /* Ignore wheel events that were made on frame that have been + deleted. */ + if (! FRAME_LIVE_P (f)) + return Qnil; + + position = make_lispy_position (f, event->x, event->y, + event->timestamp); + + /* Set double or triple modifiers to indicate the wheel speed. */ + { + /* On window-system frames, use the value of + double-click-fuzz as is. On other frames, interpret it + as a multiple of 1/8 characters. */ + struct frame *fr; + int fuzz; + int symbol_num; + bool is_double; + + if (WINDOWP (event->frame_or_window)) + fr = XFRAME (XWINDOW (event->frame_or_window)->frame); + else if (FRAMEP (event->frame_or_window)) + fr = XFRAME (event->frame_or_window); + else + emacs_abort (); + + fuzz = FRAME_WINDOW_P (fr) + ? double_click_fuzz : double_click_fuzz / 8; + + if (event->modifiers & up_modifier) + { + /* Emit a wheel-up event. */ + event->modifiers &= ~up_modifier; + symbol_num = 0; + } + else if (event->modifiers & down_modifier) + { + /* Emit a wheel-down event. */ + event->modifiers &= ~down_modifier; + symbol_num = 1; + } + else + /* Every wheel event should either have the down_modifier or + the up_modifier set. */ + emacs_abort (); + + if (event->kind == HORIZ_WHEEL_EVENT) + symbol_num += 2; + + is_double = (last_mouse_button == - (1 + symbol_num) + && (eabs (XINT (event->x) - last_mouse_x) <= fuzz) + && (eabs (XINT (event->y) - last_mouse_y) <= fuzz) + && button_down_time != 0 + && (EQ (Vdouble_click_time, Qt) + || (NATNUMP (Vdouble_click_time) + && (event->timestamp - button_down_time + < XFASTINT (Vdouble_click_time))))); + if (is_double) + { + double_click_count++; + event->modifiers |= ((double_click_count > 2) + ? triple_modifier + : double_modifier); + } + else + { + double_click_count = 1; + event->modifiers |= click_modifier; + } + + button_down_time = event->timestamp; + /* Use a negative value to distinguish wheel from mouse button. */ + last_mouse_button = - (1 + symbol_num); + last_mouse_x = XINT (event->x); + last_mouse_y = XINT (event->y); + + /* Get the symbol we should use for the wheel event. */ + head = modify_event_symbol (symbol_num, + event->modifiers, + Qmouse_click, + Qnil, + lispy_wheel_names, + &wheel_syms, + ASIZE (wheel_syms)); + } + + if (event->modifiers & (double_modifier | triple_modifier)) + return list3 (head, position, make_number (double_click_count)); + else + return list2 (head, position); + } + + +#ifdef USE_TOOLKIT_SCROLL_BARS + + /* We don't have down and up events if using toolkit scroll bars, + so make this always a click event. Store in the `part' of + the Lisp event a symbol which maps to the following actions: + + `above_handle' page up + `below_handle' page down + `up' line up + `down' line down + `top' top of buffer + `bottom' bottom of buffer + `handle' thumb has been dragged. + `end-scroll' end of interaction with scroll bar + + The incoming input_event contains in its `part' member an + index of type `enum scroll_bar_part' which we can use as an + index in scroll_bar_parts to get the appropriate symbol. */ + + case SCROLL_BAR_CLICK_EVENT: + { + Lisp_Object position, head; + + position = make_scroll_bar_position (event, Qvertical_scroll_bar); + + /* Always treat scroll bar events as clicks. */ + event->modifiers |= click_modifier; + event->modifiers &= ~up_modifier; + + if (event->code >= ASIZE (mouse_syms)) + mouse_syms = larger_vector (mouse_syms, + event->code - ASIZE (mouse_syms) + 1, + -1); + + /* Get the symbol we should use for the mouse click. */ + head = modify_event_symbol (event->code, + event->modifiers, + Qmouse_click, + Vlispy_mouse_stem, + NULL, &mouse_syms, + ASIZE (mouse_syms)); + return list2 (head, position); + } + + case HORIZONTAL_SCROLL_BAR_CLICK_EVENT: + { + Lisp_Object position, head; + + position = make_scroll_bar_position (event, Qhorizontal_scroll_bar); + + /* Always treat scroll bar events as clicks. */ + event->modifiers |= click_modifier; + event->modifiers &= ~up_modifier; + + if (event->code >= ASIZE (mouse_syms)) + mouse_syms = larger_vector (mouse_syms, + event->code - ASIZE (mouse_syms) + 1, + -1); + + /* Get the symbol we should use for the mouse click. */ + head = modify_event_symbol (event->code, + event->modifiers, + Qmouse_click, + Vlispy_mouse_stem, + NULL, &mouse_syms, + ASIZE (mouse_syms)); + return list2 (head, position); + } + +#endif /* USE_TOOLKIT_SCROLL_BARS */ + + case DRAG_N_DROP_EVENT: + { + struct frame *f; + Lisp_Object head, position; + Lisp_Object files; + + f = XFRAME (event->frame_or_window); + files = event->arg; + + /* Ignore mouse events that were made on frames that + have been deleted. */ + if (! FRAME_LIVE_P (f)) + return Qnil; + + position = make_lispy_position (f, event->x, event->y, + event->timestamp); + + head = modify_event_symbol (0, event->modifiers, + Qdrag_n_drop, Qnil, + lispy_drag_n_drop_names, + &drag_n_drop_syms, 1); + return list3 (head, position, files); + } + +#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \ + || defined (HAVE_NS) || defined (USE_GTK) + case MENU_BAR_EVENT: + if (EQ (event->arg, event->frame_or_window)) + /* This is the prefix key. We translate this to + `(menu_bar)' because the code in keyboard.c for menu + events, which we use, relies on this. */ + return list1 (Qmenu_bar); + return event->arg; +#endif + + case SELECT_WINDOW_EVENT: + /* Make an event (select-window (WINDOW)). */ + return list2 (Qselect_window, list1 (event->frame_or_window)); + + case TOOL_BAR_EVENT: + if (EQ (event->arg, event->frame_or_window)) + /* This is the prefix key. We translate this to + `(tool_bar)' because the code in keyboard.c for tool bar + events, which we use, relies on this. */ + return list1 (Qtool_bar); + else if (SYMBOLP (event->arg)) + return apply_modifiers (event->modifiers, event->arg); + return event->arg; + + case USER_SIGNAL_EVENT: + /* A user signal. */ + { + char *name = find_user_signal_name (event->code); + if (!name) + emacs_abort (); + return intern (name); + } + + case SAVE_SESSION_EVENT: + return Qsave_session; + +#ifdef HAVE_DBUS + case DBUS_EVENT: + { + return Fcons (Qdbus_event, event->arg); + } +#endif /* HAVE_DBUS */ + +#if defined HAVE_GFILENOTIFY || defined HAVE_INOTIFY + case FILE_NOTIFY_EVENT: + { + return Fcons (Qfile_notify, event->arg); + } +#endif /* defined HAVE_GFILENOTIFY || defined HAVE_INOTIFY */ + + case CONFIG_CHANGED_EVENT: + return list3 (Qconfig_changed_event, + event->arg, event->frame_or_window); + + /* The 'kind' field of the event is something we don't recognize. */ + default: + emacs_abort (); + } +} + +static Lisp_Object +make_lispy_movement (struct frame *frame, Lisp_Object bar_window, enum scroll_bar_part part, + Lisp_Object x, Lisp_Object y, Time t) +{ + /* Is it a scroll bar movement? */ + if (frame && ! NILP (bar_window)) + { + Lisp_Object part_sym; + + part_sym = builtin_lisp_symbol (scroll_bar_parts[part]); + return list2 (Qscroll_bar_movement, + list5 (bar_window, + Qvertical_scroll_bar, + Fcons (x, y), + make_number (t), + part_sym)); + } + /* Or is it an ordinary mouse movement? */ + else + { + Lisp_Object position; + position = make_lispy_position (frame, x, y, t); + return list2 (Qmouse_movement, position); + } +} + +/* Construct a switch frame event. */ +static Lisp_Object +make_lispy_switch_frame (Lisp_Object frame) +{ + return list2 (Qswitch_frame, frame); +} + +static Lisp_Object +make_lispy_focus_in (Lisp_Object frame) +{ + return list2 (Qfocus_in, frame); +} + +#ifdef HAVE_WINDOW_SYSTEM + +static Lisp_Object +make_lispy_focus_out (Lisp_Object frame) +{ + return list2 (Qfocus_out, frame); +} + +#endif /* HAVE_WINDOW_SYSTEM */ + +/* Manipulating modifiers. */ + +/* Parse the name of SYMBOL, and return the set of modifiers it contains. + + If MODIFIER_END is non-zero, set *MODIFIER_END to the position in + SYMBOL's name of the end of the modifiers; the string from this + position is the unmodified symbol name. + + This doesn't use any caches. */ + +static int +parse_modifiers_uncached (Lisp_Object symbol, ptrdiff_t *modifier_end) +{ + Lisp_Object name; + ptrdiff_t i; + int modifiers; + + CHECK_SYMBOL (symbol); + + modifiers = 0; + name = SYMBOL_NAME (symbol); + + for (i = 0; i < SBYTES (name) - 1; ) + { + ptrdiff_t this_mod_end = 0; + int this_mod = 0; + + /* See if the name continues with a modifier word. + Check that the word appears, but don't check what follows it. + Set this_mod and this_mod_end to record what we find. */ + + switch (SREF (name, i)) + { +#define SINGLE_LETTER_MOD(BIT) \ + (this_mod_end = i + 1, this_mod = BIT) + + case 'A': + SINGLE_LETTER_MOD (alt_modifier); + break; + + case 'C': + SINGLE_LETTER_MOD (ctrl_modifier); + break; + + case 'H': + SINGLE_LETTER_MOD (hyper_modifier); + break; + + case 'M': + SINGLE_LETTER_MOD (meta_modifier); + break; + + case 'S': + SINGLE_LETTER_MOD (shift_modifier); + break; + + case 's': + SINGLE_LETTER_MOD (super_modifier); + break; + +#undef SINGLE_LETTER_MOD + +#define MULTI_LETTER_MOD(BIT, NAME, LEN) \ + if (i + LEN + 1 <= SBYTES (name) \ + && ! memcmp (SDATA (name) + i, NAME, LEN)) \ + { \ + this_mod_end = i + LEN; \ + this_mod = BIT; \ + } + + case 'd': + MULTI_LETTER_MOD (drag_modifier, "drag", 4); + MULTI_LETTER_MOD (down_modifier, "down", 4); + MULTI_LETTER_MOD (double_modifier, "double", 6); + break; + + case 't': + MULTI_LETTER_MOD (triple_modifier, "triple", 6); + break; +#undef MULTI_LETTER_MOD + + } + + /* If we found no modifier, stop looking for them. */ + if (this_mod_end == 0) + break; + + /* Check there is a dash after the modifier, so that it + really is a modifier. */ + if (this_mod_end >= SBYTES (name) + || SREF (name, this_mod_end) != '-') + break; + + /* This modifier is real; look for another. */ + modifiers |= this_mod; + i = this_mod_end + 1; + } + + /* Should we include the `click' modifier? */ + if (! (modifiers & (down_modifier | drag_modifier + | double_modifier | triple_modifier)) + && i + 7 == SBYTES (name) + && memcmp (SDATA (name) + i, "mouse-", 6) == 0 + && ('0' <= SREF (name, i + 6) && SREF (name, i + 6) <= '9')) + modifiers |= click_modifier; + + if (! (modifiers & (double_modifier | triple_modifier)) + && i + 6 < SBYTES (name) + && memcmp (SDATA (name) + i, "wheel-", 6) == 0) + modifiers |= click_modifier; + + if (modifier_end) + *modifier_end = i; + + return modifiers; +} + +/* Return a symbol whose name is the modifier prefixes for MODIFIERS + prepended to the string BASE[0..BASE_LEN-1]. + This doesn't use any caches. */ +static Lisp_Object +apply_modifiers_uncached (int modifiers, char *base, int base_len, int base_len_byte) +{ + /* Since BASE could contain nulls, we can't use intern here; we have + to use Fintern, which expects a genuine Lisp_String, and keeps a + reference to it. */ + char new_mods[sizeof "A-C-H-M-S-s-down-drag-double-triple-"]; + int mod_len; + + { + char *p = new_mods; + + /* Only the event queue may use the `up' modifier; it should always + be turned into a click or drag event before presented to lisp code. */ + if (modifiers & up_modifier) + emacs_abort (); + + if (modifiers & alt_modifier) { *p++ = 'A'; *p++ = '-'; } + if (modifiers & ctrl_modifier) { *p++ = 'C'; *p++ = '-'; } + if (modifiers & hyper_modifier) { *p++ = 'H'; *p++ = '-'; } + if (modifiers & meta_modifier) { *p++ = 'M'; *p++ = '-'; } + if (modifiers & shift_modifier) { *p++ = 'S'; *p++ = '-'; } + if (modifiers & super_modifier) { *p++ = 's'; *p++ = '-'; } + if (modifiers & double_modifier) p = stpcpy (p, "double-"); + if (modifiers & triple_modifier) p = stpcpy (p, "triple-"); + if (modifiers & down_modifier) p = stpcpy (p, "down-"); + if (modifiers & drag_modifier) p = stpcpy (p, "drag-"); + /* The click modifier is denoted by the absence of other modifiers. */ + + *p = '\0'; + + mod_len = p - new_mods; + } + + { + Lisp_Object new_name; + + new_name = make_uninit_multibyte_string (mod_len + base_len, + mod_len + base_len_byte); + memcpy (SDATA (new_name), new_mods, mod_len); + memcpy (SDATA (new_name) + mod_len, base, base_len_byte); + + return Fintern (new_name, Qnil); + } +} + + +static const char *const modifier_names[] = +{ + "up", "down", "drag", "click", "double", "triple", 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, "alt", "super", "hyper", "shift", "control", "meta" +}; +#define NUM_MOD_NAMES ARRAYELTS (modifier_names) + +static Lisp_Object modifier_symbols; + +/* Return the list of modifier symbols corresponding to the mask MODIFIERS. */ +static Lisp_Object +lispy_modifier_list (int modifiers) +{ + Lisp_Object modifier_list; + int i; + + modifier_list = Qnil; + for (i = 0; (1<= table_size) + return Qnil; + + if (CONSP (*symbol_table)) + value = Fcdr (assq_no_quit (symbol_int, *symbol_table)); + + /* If *symbol_table doesn't seem to be initialized properly, fix that. + *symbol_table should be a lisp vector TABLE_SIZE elements long, + where the Nth element is the symbol for NAME_TABLE[N], or nil if + we've never used that symbol before. */ + else + { + if (! VECTORP (*symbol_table) + || ASIZE (*symbol_table) != table_size) + { + Lisp_Object size; + + XSETFASTINT (size, table_size); + *symbol_table = Fmake_vector (size, Qnil); + } + + value = AREF (*symbol_table, symbol_num); + } + + /* Have we already used this symbol before? */ + if (NILP (value)) + { + /* No; let's create it. */ + if (CONSP (name_alist_or_stem)) + value = Fcdr_safe (Fassq (symbol_int, name_alist_or_stem)); + else if (STRINGP (name_alist_or_stem)) + { + char *buf; + ptrdiff_t len = (SBYTES (name_alist_or_stem) + + sizeof "-" + INT_STRLEN_BOUND (EMACS_INT)); + USE_SAFE_ALLOCA; + buf = SAFE_ALLOCA (len); + esprintf (buf, "%s-%"pI"d", SDATA (name_alist_or_stem), + XINT (symbol_int) + 1); + value = intern (buf); + SAFE_FREE (); + } + else if (name_table != 0 && name_table[symbol_num]) + value = intern (name_table[symbol_num]); + +#ifdef HAVE_WINDOW_SYSTEM + if (NILP (value)) + { + char *name = x_get_keysym_name (symbol_num); + if (name) + value = intern (name); + } +#endif + + if (NILP (value)) + { + char buf[sizeof "key-" + INT_STRLEN_BOUND (EMACS_INT)]; + sprintf (buf, "key-%"pD"d", symbol_num); + value = intern (buf); + } + + if (CONSP (*symbol_table)) + *symbol_table = Fcons (Fcons (symbol_int, value), *symbol_table); + else + ASET (*symbol_table, symbol_num, value); + + /* Fill in the cache entries for this symbol; this also + builds the Qevent_symbol_elements property, which the user + cares about. */ + apply_modifiers (modifiers & click_modifier, value); + Fput (value, Qevent_kind, symbol_kind); + } + + /* Apply modifiers to that symbol. */ + return apply_modifiers (modifiers, value); +} + +/* Convert a list that represents an event type, + such as (ctrl meta backspace), into the usual representation of that + event type as a number or a symbol. */ + +DEFUN ("event-convert-list", Fevent_convert_list, Sevent_convert_list, 1, 1, 0, + doc: /* Convert the event description list EVENT-DESC to an event type. +EVENT-DESC should contain one base event type (a character or symbol) +and zero or more modifier names (control, meta, hyper, super, shift, alt, +drag, down, double or triple). The base must be last. +The return value is an event type (a character or symbol) which +has the same base event type and all the specified modifiers. */) + (Lisp_Object event_desc) +{ + Lisp_Object base; + int modifiers = 0; + Lisp_Object rest; + + base = Qnil; + rest = event_desc; + while (CONSP (rest)) + { + Lisp_Object elt; + int this = 0; + + elt = XCAR (rest); + rest = XCDR (rest); + + /* Given a symbol, see if it is a modifier name. */ + if (SYMBOLP (elt) && CONSP (rest)) + this = parse_solitary_modifier (elt); + + if (this != 0) + modifiers |= this; + else if (!NILP (base)) + error ("Two bases given in one event"); + else + base = elt; + + } + + /* Let the symbol A refer to the character A. */ + if (SYMBOLP (base) && SCHARS (SYMBOL_NAME (base)) == 1) + XSETINT (base, SREF (SYMBOL_NAME (base), 0)); + + if (INTEGERP (base)) + { + /* Turn (shift a) into A. */ + if ((modifiers & shift_modifier) != 0 + && (XINT (base) >= 'a' && XINT (base) <= 'z')) + { + XSETINT (base, XINT (base) - ('a' - 'A')); + modifiers &= ~shift_modifier; + } + + /* Turn (control a) into C-a. */ + if (modifiers & ctrl_modifier) + return make_number ((modifiers & ~ctrl_modifier) + | make_ctrl_char (XINT (base))); + else + return make_number (modifiers | XINT (base)); + } + else if (SYMBOLP (base)) + return apply_modifiers (modifiers, base); + else + error ("Invalid base event"); +} + +/* Try to recognize SYMBOL as a modifier name. + Return the modifier flag bit, or 0 if not recognized. */ + +int +parse_solitary_modifier (Lisp_Object symbol) +{ + Lisp_Object name = SYMBOL_NAME (symbol); + + switch (SREF (name, 0)) + { +#define SINGLE_LETTER_MOD(BIT) \ + if (SBYTES (name) == 1) \ + return BIT; + +#define MULTI_LETTER_MOD(BIT, NAME, LEN) \ + if (LEN == SBYTES (name) \ + && ! memcmp (SDATA (name), NAME, LEN)) \ + return BIT; + + case 'A': + SINGLE_LETTER_MOD (alt_modifier); + break; + + case 'a': + MULTI_LETTER_MOD (alt_modifier, "alt", 3); + break; + + case 'C': + SINGLE_LETTER_MOD (ctrl_modifier); + break; + + case 'c': + MULTI_LETTER_MOD (ctrl_modifier, "ctrl", 4); + MULTI_LETTER_MOD (ctrl_modifier, "control", 7); + break; + + case 'H': + SINGLE_LETTER_MOD (hyper_modifier); + break; + + case 'h': + MULTI_LETTER_MOD (hyper_modifier, "hyper", 5); + break; + + case 'M': + SINGLE_LETTER_MOD (meta_modifier); + break; + + case 'm': + MULTI_LETTER_MOD (meta_modifier, "meta", 4); + break; + + case 'S': + SINGLE_LETTER_MOD (shift_modifier); + break; + + case 's': + MULTI_LETTER_MOD (shift_modifier, "shift", 5); + MULTI_LETTER_MOD (super_modifier, "super", 5); + SINGLE_LETTER_MOD (super_modifier); + break; + + case 'd': + MULTI_LETTER_MOD (drag_modifier, "drag", 4); + MULTI_LETTER_MOD (down_modifier, "down", 4); + MULTI_LETTER_MOD (double_modifier, "double", 6); + break; + + case 't': + MULTI_LETTER_MOD (triple_modifier, "triple", 6); + break; + +#undef SINGLE_LETTER_MOD +#undef MULTI_LETTER_MOD + } + + return 0; +} + +/* Return true if EVENT is a list whose elements are all integers or symbols. + Such a list is not valid as an event, + but it can be a Lucid-style event type list. */ + +bool +lucid_event_type_list_p (Lisp_Object object) +{ + Lisp_Object tail; + + if (! CONSP (object)) + return 0; + + if (EQ (XCAR (object), Qhelp_echo) + || EQ (XCAR (object), Qvertical_line) + || EQ (XCAR (object), Qmode_line) + || EQ (XCAR (object), Qheader_line)) + return 0; + + for (tail = object; CONSP (tail); tail = XCDR (tail)) + { + Lisp_Object elt; + elt = XCAR (tail); + if (! (INTEGERP (elt) || SYMBOLP (elt))) + return 0; + } + + return NILP (tail); +} + +/* Return true if terminal input chars are available. + Also, store the return value into INPUT_PENDING. + + Serves the purpose of ioctl (0, FIONREAD, ...) + but works even if FIONREAD does not exist. + (In fact, this may actually read some input.) + + If READABLE_EVENTS_DO_TIMERS_NOW is set in FLAGS, actually run + timer events that are ripe. + If READABLE_EVENTS_FILTER_EVENTS is set in FLAGS, ignore internal + events (FOCUS_IN_EVENT). + If READABLE_EVENTS_IGNORE_SQUEEZABLES is set in FLAGS, ignore mouse + movements and toolkit scroll bar thumb drags. */ + +static bool +get_input_pending (int flags) +{ + /* First of all, have we already counted some input? */ + input_pending = (!NILP (Vquit_flag) || readable_events (flags)); + + /* If input is being read as it arrives, and we have none, there is none. */ + if (!input_pending && (!interrupt_input || interrupts_deferred)) + { + /* Try to read some input and see how much we get. */ + gobble_input (); + input_pending = (!NILP (Vquit_flag) || readable_events (flags)); + } + + return input_pending; +} + +/* Put a BUFFER_SWITCH_EVENT in the buffer + so that read_key_sequence will notice the new current buffer. */ + +void +record_asynch_buffer_change (void) +{ + /* We don't need a buffer-switch event unless Emacs is waiting for input. + The purpose of the event is to make read_key_sequence look up the + keymaps again. If we aren't in read_key_sequence, we don't need one, + and the event could cause trouble by messing up (input-pending-p). + Note: Fwaiting_for_user_input_p always returns nil when async + subprocesses aren't supported. */ + if (!NILP (Fwaiting_for_user_input_p ())) + { + struct input_event event; + + EVENT_INIT (event); + event.kind = BUFFER_SWITCH_EVENT; + event.frame_or_window = Qnil; + event.arg = Qnil; + + /* Make sure no interrupt happens while storing the event. */ +#ifdef USABLE_SIGIO + if (interrupt_input) + kbd_buffer_store_event (&event); + else +#endif + { + stop_polling (); + kbd_buffer_store_event (&event); + start_polling (); + } + } +} + +/* Read any terminal input already buffered up by the system + into the kbd_buffer, but do not wait. + + Return the number of keyboard chars read, or -1 meaning + this is a bad time to try to read input. */ + +int +gobble_input (void) +{ + int nread = 0; + bool err = 0; + struct terminal *t; + + /* Store pending user signal events, if any. */ + store_user_signal_events (); + + /* Loop through the available terminals, and call their input hooks. */ + t = terminal_list; + while (t) + { + struct terminal *next = t->next_terminal; + + if (t->read_socket_hook) + { + int nr; + struct input_event hold_quit; + + if (input_blocked_p ()) + { + pending_signals = 1; + break; + } + + EVENT_INIT (hold_quit); + hold_quit.kind = NO_EVENT; + + /* No need for FIONREAD or fcntl; just say don't wait. */ + while ((nr = (*t->read_socket_hook) (t, &hold_quit)) > 0) + nread += nr; + + if (nr == -1) /* Not OK to read input now. */ + { + err = 1; + } + else if (nr == -2) /* Non-transient error. */ + { + /* The terminal device terminated; it should be closed. */ + + /* Kill Emacs if this was our last terminal. */ + if (!terminal_list->next_terminal) + /* Formerly simply reported no input, but that + sometimes led to a failure of Emacs to terminate. + SIGHUP seems appropriate if we can't reach the + terminal. */ + /* ??? Is it really right to send the signal just to + this process rather than to the whole process + group? Perhaps on systems with FIONREAD Emacs is + alone in its group. */ + terminate_due_to_signal (SIGHUP, 10); + + /* XXX Is calling delete_terminal safe here? It calls delete_frame. */ + { + Lisp_Object tmp; + XSETTERMINAL (tmp, t); + Fdelete_terminal (tmp, Qnoelisp); + } + } + + /* If there was no error, make sure the pointer + is visible for all frames on this terminal. */ + if (nr >= 0) + { + Lisp_Object tail, frame; + + FOR_EACH_FRAME (tail, frame) + { + struct frame *f = XFRAME (frame); + if (FRAME_TERMINAL (f) == t) + frame_make_pointer_visible (f); + } + } + + if (hold_quit.kind != NO_EVENT) + kbd_buffer_store_event (&hold_quit); + } + + t = next; + } + + if (err && !nread) + nread = -1; + + return nread; +} + +/* This is the tty way of reading available input. + + Note that each terminal device has its own `struct terminal' object, + and so this function is called once for each individual termcap + terminal. The first parameter indicates which terminal to read from. */ + +int +tty_read_avail_input (struct terminal *terminal, + struct input_event *hold_quit) +{ + /* Using KBD_BUFFER_SIZE - 1 here avoids reading more than + the kbd_buffer can really hold. That may prevent loss + of characters on some systems when input is stuffed at us. */ + unsigned char cbuf[KBD_BUFFER_SIZE - 1]; + int n_to_read, i; + struct tty_display_info *tty = terminal->display_info.tty; + int nread = 0; +#ifdef subprocesses + int buffer_free = KBD_BUFFER_SIZE - kbd_buffer_nr_stored () - 1; + + if (kbd_on_hold_p () || buffer_free <= 0) + return 0; +#endif /* subprocesses */ + + if (!terminal->name) /* Don't read from a dead terminal. */ + return 0; + + if (terminal->type != output_termcap + && terminal->type != output_msdos_raw) + emacs_abort (); + + /* XXX I think the following code should be moved to separate hook + functions in system-dependent files. */ +#ifdef WINDOWSNT + /* FIXME: AFAIK, tty_read_avail_input is not used under w32 since the non-GUI + code sets read_socket_hook to w32_console_read_socket instead! */ + return 0; +#else /* not WINDOWSNT */ + if (! tty->term_initted) /* In case we get called during bootstrap. */ + return 0; + + if (! tty->input) + return 0; /* The terminal is suspended. */ + +#ifdef MSDOS + n_to_read = dos_keysns (); + if (n_to_read == 0) + return 0; + + cbuf[0] = dos_keyread (); + nread = 1; + +#else /* not MSDOS */ +#ifdef HAVE_GPM + if (gpm_tty == tty) + { + Gpm_Event event; + struct input_event gpm_hold_quit; + int gpm, fd = gpm_fd; + + EVENT_INIT (gpm_hold_quit); + gpm_hold_quit.kind = NO_EVENT; + + /* gpm==1 if event received. + gpm==0 if the GPM daemon has closed the connection, in which case + Gpm_GetEvent closes gpm_fd and clears it to -1, which is why + we save it in `fd' so close_gpm can remove it from the + select masks. + gpm==-1 if a protocol error or EWOULDBLOCK; the latter is normal. */ + while (gpm = Gpm_GetEvent (&event), gpm == 1) { + nread += handle_one_term_event (tty, &event, &gpm_hold_quit); + } + if (gpm == 0) + /* Presumably the GPM daemon has closed the connection. */ + close_gpm (fd); + if (gpm_hold_quit.kind != NO_EVENT) + kbd_buffer_store_event (&gpm_hold_quit); + if (nread) + return nread; + } +#endif /* HAVE_GPM */ + +/* Determine how many characters we should *try* to read. */ +#ifdef USABLE_FIONREAD + /* Find out how much input is available. */ + if (ioctl (fileno (tty->input), FIONREAD, &n_to_read) < 0) + { + if (! noninteractive) + return -2; /* Close this terminal. */ + else + n_to_read = 0; + } + if (n_to_read == 0) + return 0; + if (n_to_read > sizeof cbuf) + n_to_read = sizeof cbuf; +#elif defined USG || defined CYGWIN + /* Read some input if available, but don't wait. */ + n_to_read = sizeof cbuf; + fcntl (fileno (tty->input), F_SETFL, O_NONBLOCK); +#else +# error "Cannot read without possibly delaying" +#endif + +#ifdef subprocesses + /* Don't read more than we can store. */ + if (n_to_read > buffer_free) + n_to_read = buffer_free; +#endif /* subprocesses */ + + /* Now read; for one reason or another, this will not block. + NREAD is set to the number of chars read. */ + do + { + nread = emacs_read (fileno (tty->input), (char *) cbuf, n_to_read); + /* POSIX infers that processes which are not in the session leader's + process group won't get SIGHUPs at logout time. BSDI adheres to + this part standard and returns -1 from read (0) with errno==EIO + when the control tty is taken away. + Jeffrey Honig says this is generally safe. */ + if (nread == -1 && errno == EIO) + return -2; /* Close this terminal. */ +#if defined (AIX) && defined (_BSD) + /* The kernel sometimes fails to deliver SIGHUP for ptys. + This looks incorrect, but it isn't, because _BSD causes + O_NDELAY to be defined in fcntl.h as O_NONBLOCK, + and that causes a value other than 0 when there is no input. */ + if (nread == 0) + return -2; /* Close this terminal. */ +#endif + } + while ( + /* We used to retry the read if it was interrupted. + But this does the wrong thing when O_NONBLOCK causes + an EAGAIN error. Does anybody know of a situation + where a retry is actually needed? */ +#if 0 + nread < 0 && (errno == EAGAIN || errno == EFAULT +#ifdef EBADSLT + || errno == EBADSLT +#endif + ) +#else + 0 +#endif + ); + +#ifndef USABLE_FIONREAD +#if defined (USG) || defined (CYGWIN) + fcntl (fileno (tty->input), F_SETFL, 0); +#endif /* USG or CYGWIN */ +#endif /* no FIONREAD */ + + if (nread <= 0) + return nread; + +#endif /* not MSDOS */ +#endif /* not WINDOWSNT */ + + for (i = 0; i < nread; i++) + { + struct input_event buf; + EVENT_INIT (buf); + buf.kind = ASCII_KEYSTROKE_EVENT; + buf.modifiers = 0; + if (tty->meta_key == 1 && (cbuf[i] & 0x80)) + buf.modifiers = meta_modifier; + if (tty->meta_key != 2) + cbuf[i] &= ~0x80; + + buf.code = cbuf[i]; + /* Set the frame corresponding to the active tty. Note that the + value of selected_frame is not reliable here, redisplay tends + to temporarily change it. */ + buf.frame_or_window = tty->top_frame; + buf.arg = Qnil; + + kbd_buffer_store_event (&buf); + /* Don't look at input that follows a C-g too closely. + This reduces lossage due to autorepeat on C-g. */ + if (buf.kind == ASCII_KEYSTROKE_EVENT + && buf.code == quit_char) + break; + } + + return nread; +} + +static void +handle_async_input (void) +{ +#ifdef USABLE_SIGIO + while (1) + { + int nread = gobble_input (); + /* -1 means it's not ok to read the input now. + UNBLOCK_INPUT will read it later; now, avoid infinite loop. + 0 means there was no keyboard input available. */ + if (nread <= 0) + break; + } +#endif +} + +void +process_pending_signals (void) +{ + pending_signals = 0; + handle_async_input (); + do_pending_atimers (); +} + +/* Undo any number of BLOCK_INPUT calls down to level LEVEL, + and reinvoke any pending signal if the level is now 0 and + a fatal error is not already in progress. */ + +void +unblock_input_to (int level) +{ + interrupt_input_blocked = level; + if (level == 0) + { + if (pending_signals && !fatal_error_in_progress) + process_pending_signals (); + } + else if (level < 0) + emacs_abort (); +} + +/* End critical section. + + If doing signal-driven input, and a signal came in when input was + blocked, reinvoke the signal handler now to deal with it. + + It will also process queued input, if it was not read before. + When a longer code sequence does not use block/unblock input + at all, the whole input gathered up to the next call to + unblock_input will be processed inside that call. */ + +void +unblock_input (void) +{ + unblock_input_to (interrupt_input_blocked - 1); +} + +/* Undo any number of BLOCK_INPUT calls, + and also reinvoke any pending signal. */ + +void +totally_unblock_input (void) +{ + unblock_input_to (0); +} + +#ifdef USABLE_SIGIO + +void +handle_input_available_signal (int sig) +{ + pending_signals = 1; + + if (input_available_clear_time) + *input_available_clear_time = make_timespec (0, 0); +} + +static void +deliver_input_available_signal (int sig) +{ + deliver_process_signal (sig, handle_input_available_signal); +} +#endif /* USABLE_SIGIO */ + + +/* User signal events. */ + +struct user_signal_info +{ + /* Signal number. */ + int sig; + + /* Name of the signal. */ + char *name; + + /* Number of pending signals. */ + int npending; + + struct user_signal_info *next; +}; + +/* List of user signals. */ +static struct user_signal_info *user_signals = NULL; + +void +add_user_signal (int sig, const char *name) +{ + struct sigaction action; + struct user_signal_info *p; + + for (p = user_signals; p; p = p->next) + if (p->sig == sig) + /* Already added. */ + return; + + p = xmalloc (sizeof *p); + p->sig = sig; + p->name = xstrdup (name); + p->npending = 0; + p->next = user_signals; + user_signals = p; + + emacs_sigaction_init (&action, deliver_user_signal); + sigaction (sig, &action, 0); +} + +static void +handle_user_signal (int sig) +{ + struct user_signal_info *p; + const char *special_event_name = NULL; + + if (SYMBOLP (Vdebug_on_event)) + special_event_name = SSDATA (SYMBOL_NAME (Vdebug_on_event)); + + for (p = user_signals; p; p = p->next) + if (p->sig == sig) + { + if (special_event_name + && strcmp (special_event_name, p->name) == 0) + { + /* Enter the debugger in many ways. */ + debug_on_next_call = 1; + debug_on_quit = 1; + Vquit_flag = Qt; + Vinhibit_quit = Qnil; + + /* Eat the event. */ + break; + } + + p->npending++; +#ifdef USABLE_SIGIO + if (interrupt_input) + handle_input_available_signal (sig); + else +#endif + { + /* Tell wait_reading_process_output that it needs to wake + up and look around. */ + if (input_available_clear_time) + *input_available_clear_time = make_timespec (0, 0); + } + break; + } +} + +static void +deliver_user_signal (int sig) +{ + deliver_process_signal (sig, handle_user_signal); +} + +static char * +find_user_signal_name (int sig) +{ + struct user_signal_info *p; + + for (p = user_signals; p; p = p->next) + if (p->sig == sig) + return p->name; + + return NULL; +} + +static void +store_user_signal_events (void) +{ + struct user_signal_info *p; + struct input_event buf; + bool buf_initialized = 0; + + for (p = user_signals; p; p = p->next) + if (p->npending > 0) + { + if (! buf_initialized) + { + memset (&buf, 0, sizeof buf); + buf.kind = USER_SIGNAL_EVENT; + buf.frame_or_window = selected_frame; + buf_initialized = 1; + } + + do + { + buf.code = p->sig; + kbd_buffer_store_event (&buf); + p->npending--; + } + while (p->npending > 0); + } +} + + +static void menu_bar_item (Lisp_Object, Lisp_Object, Lisp_Object, void *); +static Lisp_Object menu_bar_one_keymap_changed_items; + +/* These variables hold the vector under construction within + menu_bar_items and its subroutines, and the current index + for storing into that vector. */ +static Lisp_Object menu_bar_items_vector; +static int menu_bar_items_index; + + +static const char *separator_names[] = { + "space", + "no-line", + "single-line", + "double-line", + "single-dashed-line", + "double-dashed-line", + "shadow-etched-in", + "shadow-etched-out", + "shadow-etched-in-dash", + "shadow-etched-out-dash", + "shadow-double-etched-in", + "shadow-double-etched-out", + "shadow-double-etched-in-dash", + "shadow-double-etched-out-dash", + 0, +}; + +/* Return true if LABEL specifies a separator. */ + +bool +menu_separator_name_p (const char *label) +{ + if (!label) + return 0; + else if (strlen (label) > 3 + && memcmp (label, "--", 2) == 0 + && label[2] != '-') + { + int i; + label += 2; + for (i = 0; separator_names[i]; ++i) + if (strcmp (label, separator_names[i]) == 0) + return 1; + } + else + { + /* It's a separator if it contains only dashes. */ + while (*label == '-') + ++label; + return (*label == 0); + } + + return 0; +} + + +/* Return a vector of menu items for a menu bar, appropriate + to the current buffer. Each item has three elements in the vector: + KEY STRING MAPLIST. + + OLD is an old vector we can optionally reuse, or nil. */ + +Lisp_Object +menu_bar_items (Lisp_Object old) +{ + /* The number of keymaps we're scanning right now, and the number of + keymaps we have allocated space for. */ + ptrdiff_t nmaps; + + /* maps[0..nmaps-1] are the prefix definitions of KEYBUF[0..t-1] + in the current keymaps, or nil where it is not a prefix. */ + Lisp_Object *maps; + + Lisp_Object mapsbuf[3]; + Lisp_Object def, tail; + + ptrdiff_t mapno; + Lisp_Object oquit; + + USE_SAFE_ALLOCA; + + /* In order to build the menus, we need to call the keymap + accessors. They all call QUIT. But this function is called + during redisplay, during which a quit is fatal. So inhibit + quitting while building the menus. + We do this instead of specbind because (1) errors will clear it anyway + and (2) this avoids risk of specpdl overflow. */ + oquit = Vinhibit_quit; + Vinhibit_quit = Qt; + + if (!NILP (old)) + menu_bar_items_vector = old; + else + menu_bar_items_vector = Fmake_vector (make_number (24), Qnil); + menu_bar_items_index = 0; + + /* Build our list of keymaps. + If we recognize a function key and replace its escape sequence in + keybuf with its symbol, or if the sequence starts with a mouse + click and we need to switch buffers, we jump back here to rebuild + the initial keymaps from the current buffer. */ + { + Lisp_Object *tmaps; + + /* Should overriding-terminal-local-map and overriding-local-map apply? */ + if (!NILP (Voverriding_local_map_menu_flag) + && !NILP (Voverriding_local_map)) + { + /* Yes, use them (if non-nil) as well as the global map. */ + maps = mapsbuf; + nmaps = 0; + if (!NILP (KVAR (current_kboard, Voverriding_terminal_local_map))) + maps[nmaps++] = KVAR (current_kboard, Voverriding_terminal_local_map); + if (!NILP (Voverriding_local_map)) + maps[nmaps++] = Voverriding_local_map; + } + else + { + /* No, so use major and minor mode keymaps and keymap property. + Note that menu-bar bindings in the local-map and keymap + properties may not work reliable, as they are only + recognized when the menu-bar (or mode-line) is updated, + which does not normally happen after every command. */ + Lisp_Object tem; + ptrdiff_t nminor; + nminor = current_minor_maps (NULL, &tmaps); + SAFE_NALLOCA (maps, 1, nminor + 4); + nmaps = 0; + tem = KVAR (current_kboard, Voverriding_terminal_local_map); + if (!NILP (tem) && !NILP (Voverriding_local_map_menu_flag)) + maps[nmaps++] = tem; + if (tem = get_local_map (PT, current_buffer, Qkeymap), !NILP (tem)) + maps[nmaps++] = tem; + memcpy (maps + nmaps, tmaps, nminor * sizeof (maps[0])); + nmaps += nminor; + maps[nmaps++] = get_local_map (PT, current_buffer, Qlocal_map); + } + maps[nmaps++] = current_global_map; + } + + /* Look up in each map the dummy prefix key `menu-bar'. */ + + for (mapno = nmaps - 1; mapno >= 0; mapno--) + if (!NILP (maps[mapno])) + { + def = get_keymap (access_keymap (maps[mapno], Qmenu_bar, 1, 0, 1), + 0, 1); + if (CONSP (def)) + { + menu_bar_one_keymap_changed_items = Qnil; + map_keymap_canonical (def, menu_bar_item, Qnil, NULL); + } + } + + /* Move to the end those items that should be at the end. */ + + for (tail = Vmenu_bar_final_items; CONSP (tail); tail = XCDR (tail)) + { + int i; + int end = menu_bar_items_index; + + for (i = 0; i < end; i += 4) + if (EQ (XCAR (tail), AREF (menu_bar_items_vector, i))) + { + Lisp_Object tem0, tem1, tem2, tem3; + /* Move the item at index I to the end, + shifting all the others forward. */ + tem0 = AREF (menu_bar_items_vector, i + 0); + tem1 = AREF (menu_bar_items_vector, i + 1); + tem2 = AREF (menu_bar_items_vector, i + 2); + tem3 = AREF (menu_bar_items_vector, i + 3); + if (end > i + 4) + memmove (aref_addr (menu_bar_items_vector, i), + aref_addr (menu_bar_items_vector, i + 4), + (end - i - 4) * word_size); + ASET (menu_bar_items_vector, end - 4, tem0); + ASET (menu_bar_items_vector, end - 3, tem1); + ASET (menu_bar_items_vector, end - 2, tem2); + ASET (menu_bar_items_vector, end - 1, tem3); + break; + } + } + + /* Add nil, nil, nil, nil at the end. */ + { + int i = menu_bar_items_index; + if (i + 4 > ASIZE (menu_bar_items_vector)) + menu_bar_items_vector + = larger_vector (menu_bar_items_vector, 4, -1); + /* Add this item. */ + ASET (menu_bar_items_vector, i, Qnil); i++; + ASET (menu_bar_items_vector, i, Qnil); i++; + ASET (menu_bar_items_vector, i, Qnil); i++; + ASET (menu_bar_items_vector, i, Qnil); i++; + menu_bar_items_index = i; + } + + Vinhibit_quit = oquit; + SAFE_FREE (); + return menu_bar_items_vector; +} + +/* Add one item to menu_bar_items_vector, for KEY, ITEM_STRING and DEF. + If there's already an item for KEY, add this DEF to it. */ + +Lisp_Object item_properties; + +static void +menu_bar_item (Lisp_Object key, Lisp_Object item, Lisp_Object dummy1, void *dummy2) +{ + struct gcpro gcpro1; + int i; + bool parsed; + Lisp_Object tem; + + if (EQ (item, Qundefined)) + { + /* If a map has an explicit `undefined' as definition, + discard any previously made menu bar item. */ + + for (i = 0; i < menu_bar_items_index; i += 4) + if (EQ (key, AREF (menu_bar_items_vector, i))) + { + if (menu_bar_items_index > i + 4) + memmove (aref_addr (menu_bar_items_vector, i), + aref_addr (menu_bar_items_vector, i + 4), + (menu_bar_items_index - i - 4) * word_size); + menu_bar_items_index -= 4; + } + } + + /* If this keymap has already contributed to this KEY, + don't contribute to it a second time. */ + tem = Fmemq (key, menu_bar_one_keymap_changed_items); + if (!NILP (tem) || NILP (item)) + return; + + menu_bar_one_keymap_changed_items + = Fcons (key, menu_bar_one_keymap_changed_items); + + /* We add to menu_bar_one_keymap_changed_items before doing the + parse_menu_item, so that if it turns out it wasn't a menu item, + it still correctly hides any further menu item. */ + GCPRO1 (key); + parsed = parse_menu_item (item, 1); + UNGCPRO; + if (!parsed) + return; + + item = AREF (item_properties, ITEM_PROPERTY_DEF); + + /* Find any existing item for this KEY. */ + for (i = 0; i < menu_bar_items_index; i += 4) + if (EQ (key, AREF (menu_bar_items_vector, i))) + break; + + /* If we did not find this KEY, add it at the end. */ + if (i == menu_bar_items_index) + { + /* If vector is too small, get a bigger one. */ + if (i + 4 > ASIZE (menu_bar_items_vector)) + menu_bar_items_vector = larger_vector (menu_bar_items_vector, 4, -1); + /* Add this item. */ + ASET (menu_bar_items_vector, i, key); i++; + ASET (menu_bar_items_vector, i, + AREF (item_properties, ITEM_PROPERTY_NAME)); i++; + ASET (menu_bar_items_vector, i, list1 (item)); i++; + ASET (menu_bar_items_vector, i, make_number (0)); i++; + menu_bar_items_index = i; + } + /* We did find an item for this KEY. Add ITEM to its list of maps. */ + else + { + Lisp_Object old; + old = AREF (menu_bar_items_vector, i + 2); + /* If the new and the old items are not both keymaps, + the lookup will only find `item'. */ + item = Fcons (item, KEYMAPP (item) && KEYMAPP (XCAR (old)) ? old : Qnil); + ASET (menu_bar_items_vector, i + 2, item); + } +} + + /* This is used as the handler when calling menu_item_eval_property. */ +static Lisp_Object +menu_item_eval_property_1 (Lisp_Object arg) +{ + /* If we got a quit from within the menu computation, + quit all the way out of it. This takes care of C-] in the debugger. */ + if (CONSP (arg) && EQ (XCAR (arg), Qquit)) + Fsignal (Qquit, Qnil); + + return Qnil; +} + +static Lisp_Object +eval_dyn (Lisp_Object form) +{ + return Feval (form, Qnil); +} + +/* Evaluate an expression and return the result (or nil if something + went wrong). Used to evaluate dynamic parts of menu items. */ +Lisp_Object +menu_item_eval_property (Lisp_Object sexpr) +{ + ptrdiff_t count = SPECPDL_INDEX (); + Lisp_Object val; + specbind (Qinhibit_redisplay, Qt); + val = internal_condition_case_1 (eval_dyn, sexpr, Qerror, + menu_item_eval_property_1); + return unbind_to (count, val); +} + +/* This function parses a menu item and leaves the result in the + vector item_properties. + ITEM is a key binding, a possible menu item. + INMENUBAR is > 0 when this is considered for an entry in a menu bar + top level. + INMENUBAR is < 0 when this is considered for an entry in a keyboard menu. + parse_menu_item returns true if the item is a menu item and false + otherwise. */ + +bool +parse_menu_item (Lisp_Object item, int inmenubar) +{ + Lisp_Object def, tem, item_string, start; + Lisp_Object filter; + Lisp_Object keyhint; + int i; + + filter = Qnil; + keyhint = Qnil; + + if (!CONSP (item)) + return 0; + + /* Create item_properties vector if necessary. */ + if (NILP (item_properties)) + item_properties + = Fmake_vector (make_number (ITEM_PROPERTY_ENABLE + 1), Qnil); + + /* Initialize optional entries. */ + for (i = ITEM_PROPERTY_DEF; i < ITEM_PROPERTY_ENABLE; i++) + ASET (item_properties, i, Qnil); + ASET (item_properties, ITEM_PROPERTY_ENABLE, Qt); + + /* Save the item here to protect it from GC. */ + ASET (item_properties, ITEM_PROPERTY_ITEM, item); + + item_string = XCAR (item); + + start = item; + item = XCDR (item); + if (STRINGP (item_string)) + { + /* Old format menu item. */ + ASET (item_properties, ITEM_PROPERTY_NAME, item_string); + + /* Maybe help string. */ + if (CONSP (item) && STRINGP (XCAR (item))) + { + ASET (item_properties, ITEM_PROPERTY_HELP, XCAR (item)); + start = item; + item = XCDR (item); + } + + /* Maybe an obsolete key binding cache. */ + if (CONSP (item) && CONSP (XCAR (item)) + && (NILP (XCAR (XCAR (item))) + || VECTORP (XCAR (XCAR (item))))) + item = XCDR (item); + + /* This is the real definition--the function to run. */ + ASET (item_properties, ITEM_PROPERTY_DEF, item); + + /* Get enable property, if any. */ + if (SYMBOLP (item)) + { + tem = Fget (item, Qmenu_enable); + if (!NILP (Venable_disabled_menus_and_buttons)) + ASET (item_properties, ITEM_PROPERTY_ENABLE, Qt); + else if (!NILP (tem)) + ASET (item_properties, ITEM_PROPERTY_ENABLE, tem); + } + } + else if (EQ (item_string, Qmenu_item) && CONSP (item)) + { + /* New format menu item. */ + ASET (item_properties, ITEM_PROPERTY_NAME, XCAR (item)); + start = XCDR (item); + if (CONSP (start)) + { + /* We have a real binding. */ + ASET (item_properties, ITEM_PROPERTY_DEF, XCAR (start)); + + item = XCDR (start); + /* Is there an obsolete cache list with key equivalences. */ + if (CONSP (item) && CONSP (XCAR (item))) + item = XCDR (item); + + /* Parse properties. */ + while (CONSP (item) && CONSP (XCDR (item))) + { + tem = XCAR (item); + item = XCDR (item); + + if (EQ (tem, QCenable)) + { + if (!NILP (Venable_disabled_menus_and_buttons)) + ASET (item_properties, ITEM_PROPERTY_ENABLE, Qt); + else + ASET (item_properties, ITEM_PROPERTY_ENABLE, XCAR (item)); + } + else if (EQ (tem, QCvisible)) + { + /* If got a visible property and that evaluates to nil + then ignore this item. */ + tem = menu_item_eval_property (XCAR (item)); + if (NILP (tem)) + return 0; + } + else if (EQ (tem, QChelp)) + ASET (item_properties, ITEM_PROPERTY_HELP, XCAR (item)); + else if (EQ (tem, QCfilter)) + filter = item; + else if (EQ (tem, QCkey_sequence)) + { + tem = XCAR (item); + if (SYMBOLP (tem) || STRINGP (tem) || VECTORP (tem)) + /* Be GC protected. Set keyhint to item instead of tem. */ + keyhint = item; + } + else if (EQ (tem, QCkeys)) + { + tem = XCAR (item); + if (CONSP (tem) || STRINGP (tem)) + ASET (item_properties, ITEM_PROPERTY_KEYEQ, tem); + } + else if (EQ (tem, QCbutton) && CONSP (XCAR (item))) + { + Lisp_Object type; + tem = XCAR (item); + type = XCAR (tem); + if (EQ (type, QCtoggle) || EQ (type, QCradio)) + { + ASET (item_properties, ITEM_PROPERTY_SELECTED, + XCDR (tem)); + ASET (item_properties, ITEM_PROPERTY_TYPE, type); + } + } + item = XCDR (item); + } + } + else if (inmenubar || !NILP (start)) + return 0; + } + else + return 0; /* not a menu item */ + + /* If item string is not a string, evaluate it to get string. + If we don't get a string, skip this item. */ + item_string = AREF (item_properties, ITEM_PROPERTY_NAME); + if (!(STRINGP (item_string))) + { + item_string = menu_item_eval_property (item_string); + if (!STRINGP (item_string)) + return 0; + ASET (item_properties, ITEM_PROPERTY_NAME, item_string); + } + + /* If got a filter apply it on definition. */ + def = AREF (item_properties, ITEM_PROPERTY_DEF); + if (!NILP (filter)) + { + def = menu_item_eval_property (list2 (XCAR (filter), + list2 (Qquote, def))); + + ASET (item_properties, ITEM_PROPERTY_DEF, def); + } + + /* Enable or disable selection of item. */ + tem = AREF (item_properties, ITEM_PROPERTY_ENABLE); + if (!EQ (tem, Qt)) + { + tem = menu_item_eval_property (tem); + if (inmenubar && NILP (tem)) + return 0; /* Ignore disabled items in menu bar. */ + ASET (item_properties, ITEM_PROPERTY_ENABLE, tem); + } + + /* If we got no definition, this item is just unselectable text which + is OK in a submenu but not in the menubar. */ + if (NILP (def)) + return (!inmenubar); + + /* See if this is a separate pane or a submenu. */ + def = AREF (item_properties, ITEM_PROPERTY_DEF); + tem = get_keymap (def, 0, 1); + /* For a subkeymap, just record its details and exit. */ + if (CONSP (tem)) + { + ASET (item_properties, ITEM_PROPERTY_MAP, tem); + ASET (item_properties, ITEM_PROPERTY_DEF, tem); + return 1; + } + + /* At the top level in the menu bar, do likewise for commands also. + The menu bar does not display equivalent key bindings anyway. + ITEM_PROPERTY_DEF is already set up properly. */ + if (inmenubar > 0) + return 1; + + { /* This is a command. See if there is an equivalent key binding. */ + Lisp_Object keyeq = AREF (item_properties, ITEM_PROPERTY_KEYEQ); + AUTO_STRING (space_space, " "); + + /* The previous code preferred :key-sequence to :keys, so we + preserve this behavior. */ + if (STRINGP (keyeq) && !CONSP (keyhint)) + keyeq = concat2 (space_space, Fsubstitute_command_keys (keyeq)); + else + { + Lisp_Object prefix = keyeq; + Lisp_Object keys = Qnil; + + if (CONSP (prefix)) + { + def = XCAR (prefix); + prefix = XCDR (prefix); + } + else + def = AREF (item_properties, ITEM_PROPERTY_DEF); + + if (CONSP (keyhint) && !NILP (XCAR (keyhint))) + { + keys = XCAR (keyhint); + tem = Fkey_binding (keys, Qnil, Qnil, Qnil); + + /* We have a suggested key. Is it bound to the command? */ + if (NILP (tem) + || (!EQ (tem, def) + /* If the command is an alias for another + (such as lmenu.el set it up), check if the + original command matches the cached command. */ + && !(SYMBOLP (def) + && EQ (tem, XSYMBOL (def)->function)))) + keys = Qnil; + } + + if (NILP (keys)) + keys = Fwhere_is_internal (def, Qnil, Qt, Qnil, Qnil); + + if (!NILP (keys)) + { + tem = Fkey_description (keys, Qnil); + if (CONSP (prefix)) + { + if (STRINGP (XCAR (prefix))) + tem = concat2 (XCAR (prefix), tem); + if (STRINGP (XCDR (prefix))) + tem = concat2 (tem, XCDR (prefix)); + } + keyeq = concat2 (space_space, tem); + } + else + keyeq = Qnil; + } + + /* If we have an equivalent key binding, use that. */ + ASET (item_properties, ITEM_PROPERTY_KEYEQ, keyeq); + } + + /* Include this when menu help is implemented. + tem = XVECTOR (item_properties)->contents[ITEM_PROPERTY_HELP]; + if (!(NILP (tem) || STRINGP (tem))) + { + tem = menu_item_eval_property (tem); + if (!STRINGP (tem)) + tem = Qnil; + XVECTOR (item_properties)->contents[ITEM_PROPERTY_HELP] = tem; + } + */ + + /* Handle radio buttons or toggle boxes. */ + tem = AREF (item_properties, ITEM_PROPERTY_SELECTED); + if (!NILP (tem)) + ASET (item_properties, ITEM_PROPERTY_SELECTED, + menu_item_eval_property (tem)); + + return 1; +} + + + +/*********************************************************************** + Tool-bars + ***********************************************************************/ + +/* A vector holding tool bar items while they are parsed in function + tool_bar_items. Each item occupies TOOL_BAR_ITEM_NSCLOTS elements + in the vector. */ + +static Lisp_Object tool_bar_items_vector; + +/* A vector holding the result of parse_tool_bar_item. Layout is like + the one for a single item in tool_bar_items_vector. */ + +static Lisp_Object tool_bar_item_properties; + +/* Next free index in tool_bar_items_vector. */ + +static int ntool_bar_items; + +/* Function prototypes. */ + +static void init_tool_bar_items (Lisp_Object); +static void process_tool_bar_item (Lisp_Object, Lisp_Object, Lisp_Object, + void *); +static bool parse_tool_bar_item (Lisp_Object, Lisp_Object); +static void append_tool_bar_item (void); + + +/* Return a vector of tool bar items for keymaps currently in effect. + Reuse vector REUSE if non-nil. Return in *NITEMS the number of + tool bar items found. */ + +Lisp_Object +tool_bar_items (Lisp_Object reuse, int *nitems) +{ + Lisp_Object *maps; + Lisp_Object mapsbuf[3]; + ptrdiff_t nmaps, i; + Lisp_Object oquit; + Lisp_Object *tmaps; + USE_SAFE_ALLOCA; + + *nitems = 0; + + /* In order to build the menus, we need to call the keymap + accessors. They all call QUIT. But this function is called + during redisplay, during which a quit is fatal. So inhibit + quitting while building the menus. We do this instead of + specbind because (1) errors will clear it anyway and (2) this + avoids risk of specpdl overflow. */ + oquit = Vinhibit_quit; + Vinhibit_quit = Qt; + + /* Initialize tool_bar_items_vector and protect it from GC. */ + init_tool_bar_items (reuse); + + /* Build list of keymaps in maps. Set nmaps to the number of maps + to process. */ + + /* Should overriding-terminal-local-map and overriding-local-map apply? */ + if (!NILP (Voverriding_local_map_menu_flag) + && !NILP (Voverriding_local_map)) + { + /* Yes, use them (if non-nil) as well as the global map. */ + maps = mapsbuf; + nmaps = 0; + if (!NILP (KVAR (current_kboard, Voverriding_terminal_local_map))) + maps[nmaps++] = KVAR (current_kboard, Voverriding_terminal_local_map); + if (!NILP (Voverriding_local_map)) + maps[nmaps++] = Voverriding_local_map; + } + else + { + /* No, so use major and minor mode keymaps and keymap property. + Note that tool-bar bindings in the local-map and keymap + properties may not work reliable, as they are only + recognized when the tool-bar (or mode-line) is updated, + which does not normally happen after every command. */ + Lisp_Object tem; + ptrdiff_t nminor; + nminor = current_minor_maps (NULL, &tmaps); + SAFE_NALLOCA (maps, 1, nminor + 4); + nmaps = 0; + tem = KVAR (current_kboard, Voverriding_terminal_local_map); + if (!NILP (tem) && !NILP (Voverriding_local_map_menu_flag)) + maps[nmaps++] = tem; + if (tem = get_local_map (PT, current_buffer, Qkeymap), !NILP (tem)) + maps[nmaps++] = tem; + memcpy (maps + nmaps, tmaps, nminor * sizeof (maps[0])); + nmaps += nminor; + maps[nmaps++] = get_local_map (PT, current_buffer, Qlocal_map); + } + + /* Add global keymap at the end. */ + maps[nmaps++] = current_global_map; + + /* Process maps in reverse order and look up in each map the prefix + key `tool-bar'. */ + for (i = nmaps - 1; i >= 0; --i) + if (!NILP (maps[i])) + { + Lisp_Object keymap; + + keymap = get_keymap (access_keymap (maps[i], Qtool_bar, 1, 0, 1), 0, 1); + if (CONSP (keymap)) + map_keymap (keymap, process_tool_bar_item, Qnil, NULL, 1); + } + + Vinhibit_quit = oquit; + *nitems = ntool_bar_items / TOOL_BAR_ITEM_NSLOTS; + SAFE_FREE (); + return tool_bar_items_vector; +} + + +/* Process the definition of KEY which is DEF. */ + +static void +process_tool_bar_item (Lisp_Object key, Lisp_Object def, Lisp_Object data, void *args) +{ + int i; + struct gcpro gcpro1, gcpro2; + + /* Protect KEY and DEF from GC because parse_tool_bar_item may call + eval. */ + GCPRO2 (key, def); + + if (EQ (def, Qundefined)) + { + /* If a map has an explicit `undefined' as definition, + discard any previously made item. */ + for (i = 0; i < ntool_bar_items; i += TOOL_BAR_ITEM_NSLOTS) + { + Lisp_Object *v = XVECTOR (tool_bar_items_vector)->contents + i; + + if (EQ (key, v[TOOL_BAR_ITEM_KEY])) + { + if (ntool_bar_items > i + TOOL_BAR_ITEM_NSLOTS) + memmove (v, v + TOOL_BAR_ITEM_NSLOTS, + ((ntool_bar_items - i - TOOL_BAR_ITEM_NSLOTS) + * word_size)); + ntool_bar_items -= TOOL_BAR_ITEM_NSLOTS; + break; + } + } + } + else if (parse_tool_bar_item (key, def)) + /* Append a new tool bar item to tool_bar_items_vector. Accept + more than one definition for the same key. */ + append_tool_bar_item (); + + UNGCPRO; +} + +/* Access slot with index IDX of vector tool_bar_item_properties. */ +#define PROP(IDX) AREF (tool_bar_item_properties, (IDX)) +static void +set_prop (ptrdiff_t idx, Lisp_Object val) +{ + ASET (tool_bar_item_properties, idx, val); +} + + +/* Parse a tool bar item specification ITEM for key KEY and return the + result in tool_bar_item_properties. Value is false if ITEM is + invalid. + + ITEM is a list `(menu-item CAPTION BINDING PROPS...)'. + + CAPTION is the caption of the item, If it's not a string, it is + evaluated to get a string. + + BINDING is the tool bar item's binding. Tool-bar items with keymaps + as binding are currently ignored. + + The following properties are recognized: + + - `:enable FORM'. + + FORM is evaluated and specifies whether the tool bar item is + enabled or disabled. + + - `:visible FORM' + + FORM is evaluated and specifies whether the tool bar item is visible. + + - `:filter FUNCTION' + + FUNCTION is invoked with one parameter `(quote BINDING)'. Its + result is stored as the new binding. + + - `:button (TYPE SELECTED)' + + TYPE must be one of `:radio' or `:toggle'. SELECTED is evaluated + and specifies whether the button is selected (pressed) or not. + + - `:image IMAGES' + + IMAGES is either a single image specification or a vector of four + image specifications. See enum tool_bar_item_images. + + - `:help HELP-STRING'. + + Gives a help string to display for the tool bar item. + + - `:label LABEL-STRING'. + + A text label to show with the tool bar button if labels are enabled. */ + +static bool +parse_tool_bar_item (Lisp_Object key, Lisp_Object item) +{ + Lisp_Object filter = Qnil; + Lisp_Object caption; + int i; + bool have_label = 0; + + /* Definition looks like `(menu-item CAPTION BINDING PROPS...)'. + Rule out items that aren't lists, don't start with + `menu-item' or whose rest following `tool-bar-item' is not a + list. */ + if (!CONSP (item)) + return 0; + + /* As an exception, allow old-style menu separators. */ + if (STRINGP (XCAR (item))) + item = list1 (XCAR (item)); + else if (!EQ (XCAR (item), Qmenu_item) + || (item = XCDR (item), !CONSP (item))) + return 0; + + /* Create tool_bar_item_properties vector if necessary. Reset it to + defaults. */ + if (VECTORP (tool_bar_item_properties)) + { + for (i = 0; i < TOOL_BAR_ITEM_NSLOTS; ++i) + set_prop (i, Qnil); + } + else + tool_bar_item_properties + = Fmake_vector (make_number (TOOL_BAR_ITEM_NSLOTS), Qnil); + + /* Set defaults. */ + set_prop (TOOL_BAR_ITEM_KEY, key); + set_prop (TOOL_BAR_ITEM_ENABLED_P, Qt); + + /* Get the caption of the item. If the caption is not a string, + evaluate it to get a string. If we don't get a string, skip this + item. */ + caption = XCAR (item); + if (!STRINGP (caption)) + { + caption = menu_item_eval_property (caption); + if (!STRINGP (caption)) + return 0; + } + set_prop (TOOL_BAR_ITEM_CAPTION, caption); + + /* If the rest following the caption is not a list, the menu item is + either a separator, or invalid. */ + item = XCDR (item); + if (!CONSP (item)) + { + if (menu_separator_name_p (SSDATA (caption))) + { + set_prop (TOOL_BAR_ITEM_TYPE, Qt); +#if !defined (USE_GTK) && !defined (HAVE_NS) + /* If we use build_desired_tool_bar_string to render the + tool bar, the separator is rendered as an image. */ + set_prop (TOOL_BAR_ITEM_IMAGES, + (menu_item_eval_property + (Vtool_bar_separator_image_expression))); + set_prop (TOOL_BAR_ITEM_ENABLED_P, Qnil); + set_prop (TOOL_BAR_ITEM_SELECTED_P, Qnil); + set_prop (TOOL_BAR_ITEM_CAPTION, Qnil); +#endif + return 1; + } + return 0; + } + + /* Store the binding. */ + set_prop (TOOL_BAR_ITEM_BINDING, XCAR (item)); + item = XCDR (item); + + /* Ignore cached key binding, if any. */ + if (CONSP (item) && CONSP (XCAR (item))) + item = XCDR (item); + + /* Process the rest of the properties. */ + for (; CONSP (item) && CONSP (XCDR (item)); item = XCDR (XCDR (item))) + { + Lisp_Object ikey, value; + + ikey = XCAR (item); + value = XCAR (XCDR (item)); + + if (EQ (ikey, QCenable)) + { + /* `:enable FORM'. */ + if (!NILP (Venable_disabled_menus_and_buttons)) + set_prop (TOOL_BAR_ITEM_ENABLED_P, Qt); + else + set_prop (TOOL_BAR_ITEM_ENABLED_P, value); + } + else if (EQ (ikey, QCvisible)) + { + /* `:visible FORM'. If got a visible property and that + evaluates to nil then ignore this item. */ + if (NILP (menu_item_eval_property (value))) + return 0; + } + else if (EQ (ikey, QChelp)) + /* `:help HELP-STRING'. */ + set_prop (TOOL_BAR_ITEM_HELP, value); + else if (EQ (ikey, QCvert_only)) + /* `:vert-only t/nil'. */ + set_prop (TOOL_BAR_ITEM_VERT_ONLY, value); + else if (EQ (ikey, QClabel)) + { + const char *bad_label = "!!?GARBLED ITEM?!!"; + /* `:label LABEL-STRING'. */ + set_prop (TOOL_BAR_ITEM_LABEL, + STRINGP (value) ? value : build_string (bad_label)); + have_label = 1; + } + else if (EQ (ikey, QCfilter)) + /* ':filter FORM'. */ + filter = value; + else if (EQ (ikey, QCbutton) && CONSP (value)) + { + /* `:button (TYPE . SELECTED)'. */ + Lisp_Object type, selected; + + type = XCAR (value); + selected = XCDR (value); + if (EQ (type, QCtoggle) || EQ (type, QCradio)) + { + set_prop (TOOL_BAR_ITEM_SELECTED_P, selected); + set_prop (TOOL_BAR_ITEM_TYPE, type); + } + } + else if (EQ (ikey, QCimage) + && (CONSP (value) + || (VECTORP (value) && ASIZE (value) == 4))) + /* Value is either a single image specification or a vector + of 4 such specifications for the different button states. */ + set_prop (TOOL_BAR_ITEM_IMAGES, value); + else if (EQ (ikey, QCrtl)) + /* ':rtl STRING' */ + set_prop (TOOL_BAR_ITEM_RTL_IMAGE, value); + } + + + if (!have_label) + { + /* Try to make one from caption and key. */ + Lisp_Object tkey = PROP (TOOL_BAR_ITEM_KEY); + Lisp_Object tcapt = PROP (TOOL_BAR_ITEM_CAPTION); + const char *label = SYMBOLP (tkey) ? SSDATA (SYMBOL_NAME (tkey)) : ""; + const char *capt = STRINGP (tcapt) ? SSDATA (tcapt) : ""; + ptrdiff_t max_lbl = + 2 * max (0, min (tool_bar_max_label_size, STRING_BYTES_BOUND / 2)); + char *buf = xmalloc (max_lbl + 1); + Lisp_Object new_lbl; + ptrdiff_t caption_len = strlen (capt); + + if (caption_len <= max_lbl && capt[0] != '\0') + { + strcpy (buf, capt); + while (caption_len > 0 && buf[caption_len - 1] == '.') + caption_len--; + buf[caption_len] = '\0'; + label = capt = buf; + } + + if (strlen (label) <= max_lbl && label[0] != '\0') + { + ptrdiff_t j; + if (label != buf) + strcpy (buf, label); + + for (j = 0; buf[j] != '\0'; ++j) + if (buf[j] == '-') + buf[j] = ' '; + label = buf; + } + else + label = ""; + + new_lbl = Fupcase_initials (build_string (label)); + if (SCHARS (new_lbl) <= tool_bar_max_label_size) + set_prop (TOOL_BAR_ITEM_LABEL, new_lbl); + else + set_prop (TOOL_BAR_ITEM_LABEL, empty_unibyte_string); + xfree (buf); + } + + /* If got a filter apply it on binding. */ + if (!NILP (filter)) + set_prop (TOOL_BAR_ITEM_BINDING, + (menu_item_eval_property + (list2 (filter, + list2 (Qquote, + PROP (TOOL_BAR_ITEM_BINDING)))))); + + /* See if the binding is a keymap. Give up if it is. */ + if (CONSP (get_keymap (PROP (TOOL_BAR_ITEM_BINDING), 0, 1))) + return 0; + + /* Enable or disable selection of item. */ + if (!EQ (PROP (TOOL_BAR_ITEM_ENABLED_P), Qt)) + set_prop (TOOL_BAR_ITEM_ENABLED_P, + menu_item_eval_property (PROP (TOOL_BAR_ITEM_ENABLED_P))); + + /* Handle radio buttons or toggle boxes. */ + if (!NILP (PROP (TOOL_BAR_ITEM_SELECTED_P))) + set_prop (TOOL_BAR_ITEM_SELECTED_P, + menu_item_eval_property (PROP (TOOL_BAR_ITEM_SELECTED_P))); + + return 1; + +#undef PROP +} + + +/* Initialize tool_bar_items_vector. REUSE, if non-nil, is a vector + that can be reused. */ + +static void +init_tool_bar_items (Lisp_Object reuse) +{ + if (VECTORP (reuse)) + tool_bar_items_vector = reuse; + else + tool_bar_items_vector = Fmake_vector (make_number (64), Qnil); + ntool_bar_items = 0; +} + + +/* Append parsed tool bar item properties from + tool_bar_item_properties */ + +static void +append_tool_bar_item (void) +{ + ptrdiff_t incr + = (ntool_bar_items + - (ASIZE (tool_bar_items_vector) - TOOL_BAR_ITEM_NSLOTS)); + + /* Enlarge tool_bar_items_vector if necessary. */ + if (incr > 0) + tool_bar_items_vector = larger_vector (tool_bar_items_vector, incr, -1); + + /* Append entries from tool_bar_item_properties to the end of + tool_bar_items_vector. */ + vcopy (tool_bar_items_vector, ntool_bar_items, + XVECTOR (tool_bar_item_properties)->contents, TOOL_BAR_ITEM_NSLOTS); + ntool_bar_items += TOOL_BAR_ITEM_NSLOTS; +} + + + + + +/* Read a character using menus based on the keymap MAP. + Return nil if there are no menus in the maps. + Return t if we displayed a menu but the user rejected it. + + PREV_EVENT is the previous input event, or nil if we are reading + the first event of a key sequence. + + If USED_MOUSE_MENU is non-null, set *USED_MOUSE_MENU to true + if we used a mouse menu to read the input, or false otherwise. If + USED_MOUSE_MENU is null, don't dereference it. + + The prompting is done based on the prompt-string of the map + and the strings associated with various map elements. + + This can be done with X menus or with menus put in the minibuf. + These are done in different ways, depending on how the input will be read. + Menus using X are done after auto-saving in read-char, getting the input + event from Fx_popup_menu; menus using the minibuf use read_char recursively + and do auto-saving in the inner call of read_char. */ + +static Lisp_Object +read_char_x_menu_prompt (Lisp_Object map, + Lisp_Object prev_event, bool *used_mouse_menu) +{ + if (used_mouse_menu) + *used_mouse_menu = 0; + + /* Use local over global Menu maps. */ + + if (! menu_prompting) + return Qnil; + + /* If we got to this point via a mouse click, + use a real menu for mouse selection. */ + if (EVENT_HAS_PARAMETERS (prev_event) + && !EQ (XCAR (prev_event), Qmenu_bar) + && !EQ (XCAR (prev_event), Qtool_bar)) + { + /* Display the menu and get the selection. */ + Lisp_Object value; + + value = Fx_popup_menu (prev_event, get_keymap (map, 0, 1)); + if (CONSP (value)) + { + Lisp_Object tem; + + record_menu_key (XCAR (value)); + + /* If we got multiple events, unread all but + the first. + There is no way to prevent those unread events + from showing up later in last_nonmenu_event. + So turn symbol and integer events into lists, + to indicate that they came from a mouse menu, + so that when present in last_nonmenu_event + they won't confuse things. */ + for (tem = XCDR (value); CONSP (tem); tem = XCDR (tem)) + { + record_menu_key (XCAR (tem)); + if (SYMBOLP (XCAR (tem)) + || INTEGERP (XCAR (tem))) + XSETCAR (tem, Fcons (XCAR (tem), Qdisabled)); + } + + /* If we got more than one event, put all but the first + onto this list to be read later. + Return just the first event now. */ + Vunread_command_events + = nconc2 (XCDR (value), Vunread_command_events); + value = XCAR (value); + } + else if (NILP (value)) + value = Qt; + if (used_mouse_menu) + *used_mouse_menu = 1; + return value; + } + return Qnil ; +} + +static Lisp_Object +read_char_minibuf_menu_prompt (int commandflag, + Lisp_Object map) +{ + Lisp_Object name; + ptrdiff_t nlength; + /* FIXME: Use the minibuffer's frame width. */ + ptrdiff_t width = FRAME_COLS (SELECTED_FRAME ()) - 4; + ptrdiff_t idx = -1; + bool nobindings = 1; + Lisp_Object rest, vector; + Lisp_Object prompt_strings = Qnil; + + vector = Qnil; + + if (! menu_prompting) + return Qnil; + + map = get_keymap (map, 0, 1); + name = Fkeymap_prompt (map); + + /* If we don't have any menus, just read a character normally. */ + if (!STRINGP (name)) + return Qnil; + +#define PUSH_C_STR(str, listvar) \ + listvar = Fcons (build_unibyte_string (str), listvar) + + /* Prompt string always starts with map's prompt, and a space. */ + prompt_strings = Fcons (name, prompt_strings); + PUSH_C_STR (": ", prompt_strings); + nlength = SCHARS (name) + 2; + + rest = map; + + /* Present the documented bindings, a line at a time. */ + while (1) + { + bool notfirst = 0; + Lisp_Object menu_strings = prompt_strings; + ptrdiff_t i = nlength; + Lisp_Object obj; + Lisp_Object orig_defn_macro; + + /* Loop over elements of map. */ + while (i < width) + { + Lisp_Object elt; + + /* FIXME: Use map_keymap to handle new keymap formats. */ + + /* At end of map, wrap around if just starting, + or end this line if already have something on it. */ + if (NILP (rest)) + { + if (notfirst || nobindings) + break; + else + rest = map; + } + + /* Look at the next element of the map. */ + if (idx >= 0) + elt = AREF (vector, idx); + else + elt = Fcar_safe (rest); + + if (idx < 0 && VECTORP (elt)) + { + /* If we found a dense table in the keymap, + advanced past it, but start scanning its contents. */ + rest = Fcdr_safe (rest); + vector = elt; + idx = 0; + } + else + { + /* An ordinary element. */ + Lisp_Object event, tem; + + if (idx < 0) + { + event = Fcar_safe (elt); /* alist */ + elt = Fcdr_safe (elt); + } + else + { + XSETINT (event, idx); /* vector */ + } + + /* Ignore the element if it has no prompt string. */ + if (INTEGERP (event) && parse_menu_item (elt, -1)) + { + /* True if the char to type matches the string. */ + bool char_matches; + Lisp_Object upcased_event, downcased_event; + Lisp_Object desc = Qnil; + Lisp_Object s + = AREF (item_properties, ITEM_PROPERTY_NAME); + + upcased_event = Fupcase (event); + downcased_event = Fdowncase (event); + char_matches = (XINT (upcased_event) == SREF (s, 0) + || XINT (downcased_event) == SREF (s, 0)); + if (! char_matches) + desc = Fsingle_key_description (event, Qnil); + +#if 0 /* It is redundant to list the equivalent key bindings because + the prefix is what the user has already typed. */ + tem + = XVECTOR (item_properties)->contents[ITEM_PROPERTY_KEYEQ]; + if (!NILP (tem)) + /* Insert equivalent keybinding. */ + s = concat2 (s, tem); +#endif + tem + = AREF (item_properties, ITEM_PROPERTY_TYPE); + if (EQ (tem, QCradio) || EQ (tem, QCtoggle)) + { + /* Insert button prefix. */ + Lisp_Object selected + = AREF (item_properties, ITEM_PROPERTY_SELECTED); + AUTO_STRING (radio_yes, "(*) "); + AUTO_STRING (radio_no , "( ) "); + AUTO_STRING (check_yes, "[X] "); + AUTO_STRING (check_no , "[ ] "); + if (EQ (tem, QCradio)) + tem = NILP (selected) ? radio_yes : radio_no; + else + tem = NILP (selected) ? check_yes : check_no; + s = concat2 (tem, s); + } + + + /* If we have room for the prompt string, add it to this line. + If this is the first on the line, always add it. */ + if ((SCHARS (s) + i + 2 + + (char_matches ? 0 : SCHARS (desc) + 3)) + < width + || !notfirst) + { + ptrdiff_t thiswidth; + + /* Punctuate between strings. */ + if (notfirst) + { + PUSH_C_STR (", ", menu_strings); + i += 2; + } + notfirst = 1; + nobindings = 0; + + /* If the char to type doesn't match the string's + first char, explicitly show what char to type. */ + if (! char_matches) + { + /* Add as much of string as fits. */ + thiswidth = min (SCHARS (desc), width - i); + menu_strings + = Fcons (Fsubstring (desc, make_number (0), + make_number (thiswidth)), + menu_strings); + i += thiswidth; + PUSH_C_STR (" = ", menu_strings); + i += 3; + } + + /* Add as much of string as fits. */ + thiswidth = min (SCHARS (s), width - i); + menu_strings + = Fcons (Fsubstring (s, make_number (0), + make_number (thiswidth)), + menu_strings); + i += thiswidth; + } + else + { + /* If this element does not fit, end the line now, + and save the element for the next line. */ + PUSH_C_STR ("...", menu_strings); + break; + } + } + + /* Move past this element. */ + if (idx >= 0 && idx + 1 >= ASIZE (vector)) + /* Handle reaching end of dense table. */ + idx = -1; + if (idx >= 0) + idx++; + else + rest = Fcdr_safe (rest); + } + } + + /* Prompt with that and read response. */ + message3_nolog (apply1 (intern ("concat"), Fnreverse (menu_strings))); + + /* Make believe it's not a keyboard macro in case the help char + is pressed. Help characters are not recorded because menu prompting + is not used on replay. */ + orig_defn_macro = KVAR (current_kboard, defining_kbd_macro); + kset_defining_kbd_macro (current_kboard, Qnil); + do + obj = read_char (commandflag, Qnil, Qt, 0, NULL); + while (BUFFERP (obj)); + kset_defining_kbd_macro (current_kboard, orig_defn_macro); + + 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); + return obj; + } + /* Help char - go round again. */ + } +} + +/* Reading key sequences. */ + +static Lisp_Object +follow_key (Lisp_Object keymap, Lisp_Object key) +{ + return access_keymap (get_keymap (keymap, 0, 1), + key, 1, 0, 1); +} + +static Lisp_Object +active_maps (Lisp_Object first_event) +{ + Lisp_Object position + = CONSP (first_event) ? CAR_SAFE (XCDR (first_event)) : Qnil; + return Fcons (Qkeymap, Fcurrent_active_maps (Qt, position)); +} + +/* Structure used to keep track of partial application of key remapping + such as Vfunction_key_map and Vkey_translation_map. */ +typedef struct keyremap +{ + /* This is the map originally specified for this use. */ + Lisp_Object parent; + /* This is a submap reached by looking up, in PARENT, + the events from START to END. */ + Lisp_Object map; + /* Positions [START, END) in the key sequence buffer + are the key that we have scanned so far. + Those events are the ones that we will replace + if PARENT maps them into a key sequence. */ + int start, end; +} keyremap; + +/* Lookup KEY in MAP. + MAP is a keymap mapping keys to key vectors or functions. + If the mapping is a function and DO_FUNCALL is true, + the function is called with PROMPT as parameter and its return + value is used as the return value of this function (after checking + that it is indeed a vector). */ + +static Lisp_Object +access_keymap_keyremap (Lisp_Object map, Lisp_Object key, Lisp_Object prompt, + bool do_funcall) +{ + Lisp_Object next; + + next = access_keymap (map, key, 1, 0, 1); + + /* Handle a symbol whose function definition is a keymap + or an array. */ + if (SYMBOLP (next) && !NILP (Ffboundp (next)) + && (ARRAYP (XSYMBOL (next)->function) + || KEYMAPP (XSYMBOL (next)->function))) + next = Fautoload_do_load (XSYMBOL (next)->function, next, Qnil); + + /* If the keymap gives a function, not an + array, then call the function with one arg and use + its value instead. */ + if (do_funcall && FUNCTIONP (next)) + { + Lisp_Object tem; + tem = next; + + next = call1 (next, prompt); + /* If the function returned something invalid, + barf--don't ignore it. + (To ignore it safely, we would need to gcpro a bunch of + other variables.) */ + if (! (NILP (next) || VECTORP (next) || STRINGP (next))) + error ("Function %s returns invalid key sequence", + SSDATA (SYMBOL_NAME (tem))); + } + return next; +} + +/* Do one step of the key remapping used for function-key-map and + key-translation-map: + KEYBUF is the buffer holding the input events. + BUFSIZE is its maximum size. + FKEY is a pointer to the keyremap structure to use. + INPUT is the index of the last element in KEYBUF. + DOIT if true says that the remapping can actually take place. + DIFF is used to return the number of keys added/removed by the remapping. + PARENT is the root of the keymap. + PROMPT is the prompt to use if the remapping happens through a function. + Return true if the remapping actually took place. */ + +static bool +keyremap_step (Lisp_Object *keybuf, int bufsize, volatile keyremap *fkey, + int input, bool doit, int *diff, Lisp_Object prompt) +{ + Lisp_Object next, key; + + key = keybuf[fkey->end++]; + + if (KEYMAPP (fkey->parent)) + next = access_keymap_keyremap (fkey->map, key, prompt, doit); + else + next = Qnil; + + /* If keybuf[fkey->start..fkey->end] is bound in the + map and we're in a position to do the key remapping, replace it with + the binding and restart with fkey->start at the end. */ + if ((VECTORP (next) || STRINGP (next)) && doit) + { + int len = XFASTINT (Flength (next)); + int i; + + *diff = len - (fkey->end - fkey->start); + + if (bufsize - input <= *diff) + error ("Key sequence too long"); + + /* Shift the keys that follow fkey->end. */ + if (*diff < 0) + for (i = fkey->end; i < input; i++) + keybuf[i + *diff] = keybuf[i]; + else if (*diff > 0) + for (i = input - 1; i >= fkey->end; i--) + keybuf[i + *diff] = keybuf[i]; + /* Overwrite the old keys with the new ones. */ + for (i = 0; i < len; i++) + keybuf[fkey->start + i] + = Faref (next, make_number (i)); + + fkey->start = fkey->end += *diff; + fkey->map = fkey->parent; + + return 1; + } + + fkey->map = get_keymap (next, 0, 1); + + /* If we no longer have a bound suffix, try a new position for + fkey->start. */ + if (!CONSP (fkey->map)) + { + fkey->end = ++fkey->start; + fkey->map = fkey->parent; + } + return 0; +} + +static bool +test_undefined (Lisp_Object binding) +{ + return (NILP (binding) + || EQ (binding, Qundefined) + || (SYMBOLP (binding) + && EQ (Fcommand_remapping (binding, Qnil, Qnil), Qundefined))); +} + +/* Read a sequence of keys that ends with a non prefix character, + storing it in KEYBUF, a buffer of size BUFSIZE. + Prompt with PROMPT. + Return the length of the key sequence stored. + Return -1 if the user rejected a command menu. + + Echo starting immediately unless `prompt' is 0. + + If PREVENT_REDISPLAY is non-zero, avoid redisplay by calling + read_char with a suitable COMMANDFLAG argument. + + Where a key sequence ends depends on the currently active keymaps. + These include any minor mode keymaps active in the current buffer, + the current buffer's local map, and the global map. + + If a key sequence has no other bindings, we check Vfunction_key_map + to see if some trailing subsequence might be the beginning of a + function key's sequence. If so, we try to read the whole function + key, and substitute its symbolic name into the key sequence. + + We ignore unbound `down-' mouse clicks. We turn unbound `drag-' and + `double-' events into similar click events, if that would make them + bound. We try to turn `triple-' events first into `double-' events, + then into clicks. + + If we get a mouse click in a mode line, vertical divider, or other + non-text area, we treat the click as if it were prefixed by the + symbol denoting that area - `mode-line', `vertical-line', or + whatever. + + If the sequence starts with a mouse click, we read the key sequence + with respect to the buffer clicked on, not the current buffer. + + If the user switches frames in the midst of a key sequence, we put + off the switch-frame event until later; the next call to + read_char will return it. + + If FIX_CURRENT_BUFFER, we restore current_buffer + from the selected window's buffer. */ + +static int +read_key_sequence (Lisp_Object *keybuf, int bufsize, Lisp_Object prompt, + bool dont_downcase_last, bool can_return_switch_frame, + bool fix_current_buffer, bool prevent_redisplay) +{ + ptrdiff_t count = SPECPDL_INDEX (); + + /* How many keys there are in the current key sequence. */ + int t; + + /* The length of the echo buffer when we started reading, and + the length of this_command_keys when we started reading. */ + ptrdiff_t echo_start IF_LINT (= 0); + ptrdiff_t keys_start; + + Lisp_Object current_binding = Qnil; + Lisp_Object first_event = Qnil; + + /* Index of the first key that has no binding. + It is useless to try fkey.start larger than that. */ + int first_unbound; + + /* If t < mock_input, then KEYBUF[t] should be read as the next + input key. + + We use this to recover after recognizing a function key. Once we + realize that a suffix of the current key sequence is actually a + function key's escape sequence, we replace the suffix with the + function key's binding from Vfunction_key_map. Now keybuf + contains a new and different key sequence, so the echo area, + this_command_keys, and the submaps and defs arrays are wrong. In + this situation, we set mock_input to t, set t to 0, and jump to + restart_sequence; the loop will read keys from keybuf up until + mock_input, thus rebuilding the state; and then it will resume + reading characters from the keyboard. */ + int mock_input = 0; + + /* If the sequence is unbound in submaps[], then + keybuf[fkey.start..fkey.end-1] is a prefix in Vfunction_key_map, + and fkey.map is its binding. + + These might be > t, indicating that all function key scanning + should hold off until t reaches them. We do this when we've just + recognized a function key, to avoid searching for the function + key's again in Vfunction_key_map. */ + keyremap fkey; + + /* Likewise, for key_translation_map and input-decode-map. */ + keyremap keytran, indec; + + /* True if we are trying to map a key by changing an upper-case + letter to lower case, or a shifted function key to an unshifted + one. */ + bool shift_translated = 0; + + /* If we receive a `switch-frame' or `select-window' event in the middle of + a key sequence, we put it off for later. + While we're reading, we keep the event here. */ + Lisp_Object delayed_switch_frame; + + Lisp_Object original_uppercase IF_LINT (= Qnil); + int original_uppercase_position = -1; + + /* Gets around Microsoft compiler limitations. */ + bool dummyflag = 0; + + struct buffer *starting_buffer; + + /* List of events for which a fake prefix key has been generated. */ + Lisp_Object fake_prefixed_keys = Qnil; + + struct gcpro gcpro1; + + GCPRO1 (fake_prefixed_keys); + raw_keybuf_count = 0; + + last_nonmenu_event = Qnil; + + delayed_switch_frame = Qnil; + + if (INTERACTIVE) + { + if (!NILP (prompt)) + { + /* Install the string PROMPT as the beginning of the string + of echoing, so that it serves as a prompt for the next + character. */ + kset_echo_string (current_kboard, prompt); + current_kboard->echo_after_prompt = SCHARS (prompt); + echo_now (); + } + else if (cursor_in_echo_area + && echo_keystrokes_p ()) + /* This doesn't put in a dash if the echo buffer is empty, so + you don't always see a dash hanging out in the minibuffer. */ + echo_dash (); + } + + /* Record the initial state of the echo area and this_command_keys; + we will need to restore them if we replay a key sequence. */ + if (INTERACTIVE) + echo_start = echo_length (); + keys_start = this_command_key_count; + this_single_command_key_start = keys_start; + + /* We jump here when we need to reinitialize fkey and keytran; this + happens if we switch keyboards between rescans. */ + replay_entire_sequence: + + indec.map = indec.parent = KVAR (current_kboard, Vinput_decode_map); + fkey.map = fkey.parent = KVAR (current_kboard, Vlocal_function_key_map); + keytran.map = keytran.parent = Vkey_translation_map; + indec.start = indec.end = 0; + fkey.start = fkey.end = 0; + keytran.start = keytran.end = 0; + + /* We jump here when the key sequence has been thoroughly changed, and + we need to rescan it starting from the beginning. When we jump here, + keybuf[0..mock_input] holds the sequence we should reread. */ + replay_sequence: + + starting_buffer = current_buffer; + first_unbound = bufsize + 1; + + /* Build our list of keymaps. + If we recognize a function key and replace its escape sequence in + keybuf with its symbol, or if the sequence starts with a mouse + click and we need to switch buffers, we jump back here to rebuild + the initial keymaps from the current buffer. */ + current_binding = active_maps (first_event); + + /* Start from the beginning in keybuf. */ + t = 0; + + /* These are no-ops the first time through, but if we restart, they + revert the echo area and this_command_keys to their original state. */ + this_command_key_count = keys_start; + if (INTERACTIVE && t < mock_input) + echo_truncate (echo_start); + + /* If the best binding for the current key sequence is a keymap, or + we may be looking at a function key's escape sequence, keep on + reading. */ + while (!NILP (current_binding) + /* Keep reading as long as there's a prefix binding. */ + ? KEYMAPP (current_binding) + /* Don't return in the middle of a possible function key sequence, + if the only bindings we found were via case conversion. + Thus, if ESC O a has a function-key-map translation + and ESC o has a binding, don't return after ESC O, + so that we can translate ESC O plus the next character. */ + : (/* indec.start < t || fkey.start < t || */ keytran.start < t)) + { + Lisp_Object key; + bool used_mouse_menu = 0; + + /* Where the last real key started. If we need to throw away a + key that has expanded into more than one element of keybuf + (say, a mouse click on the mode line which is being treated + as [mode-line (mouse-...)], then we backtrack to this point + of keybuf. */ + int last_real_key_start; + + /* These variables are analogous to echo_start and keys_start; + while those allow us to restart the entire key sequence, + echo_local_start and keys_local_start allow us to throw away + just one key. */ + ptrdiff_t echo_local_start IF_LINT (= 0); + int keys_local_start; + Lisp_Object new_binding; + + eassert (indec.end == t || (indec.end > t && indec.end <= mock_input)); + eassert (indec.start <= indec.end); + eassert (fkey.start <= fkey.end); + eassert (keytran.start <= keytran.end); + /* key-translation-map is applied *after* function-key-map + which is itself applied *after* input-decode-map. */ + eassert (fkey.end <= indec.start); + eassert (keytran.end <= fkey.start); + + if (/* first_unbound < indec.start && first_unbound < fkey.start && */ + first_unbound < keytran.start) + { /* The prefix upto first_unbound has no binding and has + no translation left to do either, so we know it's unbound. + If we don't stop now, we risk staying here indefinitely + (if the user keeps entering fkey or keytran prefixes + like C-c ESC ESC ESC ESC ...) */ + int i; + for (i = first_unbound + 1; i < t; i++) + keybuf[i - first_unbound - 1] = keybuf[i]; + mock_input = t - first_unbound - 1; + indec.end = indec.start -= first_unbound + 1; + indec.map = indec.parent; + fkey.end = fkey.start -= first_unbound + 1; + fkey.map = fkey.parent; + keytran.end = keytran.start -= first_unbound + 1; + keytran.map = keytran.parent; + goto replay_sequence; + } + + if (t >= bufsize) + error ("Key sequence too long"); + + if (INTERACTIVE) + echo_local_start = echo_length (); + keys_local_start = this_command_key_count; + + replay_key: + /* These are no-ops, unless we throw away a keystroke below and + jumped back up to replay_key; in that case, these restore the + variables to their original state, allowing us to replay the + loop. */ + if (INTERACTIVE && t < mock_input) + echo_truncate (echo_local_start); + this_command_key_count = keys_local_start; + + /* By default, assume each event is "real". */ + last_real_key_start = t; + + /* Does mock_input indicate that we are re-reading a key sequence? */ + if (t < mock_input) + { + key = keybuf[t]; + add_command_key (key); + if (echo_keystrokes_p () + && current_kboard->immediate_echo) + { + echo_add_key (key); + echo_dash (); + } + } + + /* If not, we should actually read a character. */ + else + { + { + KBOARD *interrupted_kboard = current_kboard; + struct frame *interrupted_frame = SELECTED_FRAME (); + /* Calling read_char with COMMANDFLAG = -2 avoids + redisplay in read_char and its subroutines. */ + key = read_char (prevent_redisplay ? -2 : NILP (prompt), + current_binding, last_nonmenu_event, + &used_mouse_menu, NULL); + if ((INTEGERP (key) && XINT (key) == -2) /* wrong_kboard_jmpbuf */ + /* When switching to a new tty (with a new keyboard), + read_char returns the new buffer, rather than -2 + (Bug#5095). This is because `terminal-init-xterm' + calls read-char, which eats the wrong_kboard_jmpbuf + return. Any better way to fix this? -- cyd */ + || (interrupted_kboard != current_kboard)) + { + bool found = 0; + struct kboard *k; + + for (k = all_kboards; k; k = k->next_kboard) + if (k == interrupted_kboard) + found = 1; + + if (!found) + { + /* Don't touch interrupted_kboard when it's been + deleted. */ + delayed_switch_frame = Qnil; + goto replay_entire_sequence; + } + + if (!NILP (delayed_switch_frame)) + { + kset_kbd_queue + (interrupted_kboard, + Fcons (delayed_switch_frame, + KVAR (interrupted_kboard, kbd_queue))); + delayed_switch_frame = Qnil; + } + + while (t > 0) + kset_kbd_queue + (interrupted_kboard, + Fcons (keybuf[--t], KVAR (interrupted_kboard, kbd_queue))); + + /* If the side queue is non-empty, ensure it begins with a + switch-frame, so we'll replay it in the right context. */ + if (CONSP (KVAR (interrupted_kboard, kbd_queue)) + && (key = XCAR (KVAR (interrupted_kboard, kbd_queue)), + !(EVENT_HAS_PARAMETERS (key) + && EQ (EVENT_HEAD_KIND (EVENT_HEAD (key)), + Qswitch_frame)))) + { + Lisp_Object frame; + XSETFRAME (frame, interrupted_frame); + kset_kbd_queue + (interrupted_kboard, + Fcons (make_lispy_switch_frame (frame), + KVAR (interrupted_kboard, kbd_queue))); + } + mock_input = 0; + goto replay_entire_sequence; + } + } + + /* read_char returns t when it shows a menu and the user rejects it. + Just return -1. */ + if (EQ (key, Qt)) + { + unbind_to (count, Qnil); + UNGCPRO; + return -1; + } + + /* read_char returns -1 at the end of a macro. + Emacs 18 handles this by returning immediately with a + zero, so that's what we'll do. */ + if (INTEGERP (key) && XINT (key) == -1) + { + t = 0; + /* The Microsoft C compiler can't handle the goto that + would go here. */ + dummyflag = 1; + break; + } + + /* If the current buffer has been changed from under us, the + keymap may have changed, so replay the sequence. */ + if (BUFFERP (key)) + { + timer_resume_idle (); + + mock_input = t; + /* Reset the current buffer from the selected window + in case something changed the former and not the latter. + This is to be more consistent with the behavior + of the command_loop_1. */ + if (fix_current_buffer) + { + if (! FRAME_LIVE_P (XFRAME (selected_frame))) + Fkill_emacs (Qnil); + if (XBUFFER (XWINDOW (selected_window)->contents) + != current_buffer) + Fset_buffer (XWINDOW (selected_window)->contents); + } + + goto replay_sequence; + } + + /* If we have a quit that was typed in another frame, and + quit_throw_to_read_char switched buffers, + replay to get the right keymap. */ + if (INTEGERP (key) + && XINT (key) == quit_char + && current_buffer != starting_buffer) + { + GROW_RAW_KEYBUF; + ASET (raw_keybuf, raw_keybuf_count, key); + raw_keybuf_count++; + keybuf[t++] = key; + mock_input = t; + Vquit_flag = Qnil; + goto replay_sequence; + } + + Vquit_flag = Qnil; + + if (EVENT_HAS_PARAMETERS (key) + /* Either a `switch-frame' or a `select-window' event. */ + && EQ (EVENT_HEAD_KIND (EVENT_HEAD (key)), Qswitch_frame)) + { + /* If we're at the beginning of a key sequence, and the caller + says it's okay, go ahead and return this event. If we're + in the midst of a key sequence, delay it until the end. */ + if (t > 0 || !can_return_switch_frame) + { + delayed_switch_frame = key; + goto replay_key; + } + } + + if (NILP (first_event)) + { + first_event = key; + /* Even if first_event does not specify a particular + window/position, it's important to recompute the maps here + since a long time might have passed since we entered + read_key_sequence, and a timer (or process-filter or + special-event-map, ...) might have switched the current buffer + or the selected window from under us in the mean time. */ + if (fix_current_buffer + && (XBUFFER (XWINDOW (selected_window)->contents) + != current_buffer)) + Fset_buffer (XWINDOW (selected_window)->contents); + current_binding = active_maps (first_event); + } + + GROW_RAW_KEYBUF; + ASET (raw_keybuf, raw_keybuf_count, key); + raw_keybuf_count++; + } + + /* Clicks in non-text areas get prefixed by the symbol + in their CHAR-ADDRESS field. For example, a click on + the mode line is prefixed by the symbol `mode-line'. + + Furthermore, key sequences beginning with mouse clicks + are read using the keymaps of the buffer clicked on, not + the current buffer. So we may have to switch the buffer + here. + + When we turn one event into two events, we must make sure + that neither of the two looks like the original--so that, + if we replay the events, they won't be expanded again. + If not for this, such reexpansion could happen either here + or when user programs play with this-command-keys. */ + if (EVENT_HAS_PARAMETERS (key)) + { + Lisp_Object kind = EVENT_HEAD_KIND (EVENT_HEAD (key)); + if (EQ (kind, Qmouse_click)) + { + Lisp_Object window = POSN_WINDOW (EVENT_START (key)); + Lisp_Object posn = POSN_POSN (EVENT_START (key)); + + if (CONSP (posn) + || (!NILP (fake_prefixed_keys) + && !NILP (Fmemq (key, fake_prefixed_keys)))) + { + /* We're looking a second time at an event for which + we generated a fake prefix key. Set + last_real_key_start appropriately. */ + if (t > 0) + last_real_key_start = t - 1; + } + + if (last_real_key_start == 0) + { + /* Key sequences beginning with mouse clicks are + read using the keymaps in the buffer clicked on, + not the current buffer. If we're at the + beginning of a key sequence, switch buffers. */ + if (WINDOWP (window) + && BUFFERP (XWINDOW (window)->contents) + && XBUFFER (XWINDOW (window)->contents) != current_buffer) + { + ASET (raw_keybuf, raw_keybuf_count, key); + raw_keybuf_count++; + keybuf[t] = key; + mock_input = t + 1; + + /* Arrange to go back to the original buffer once we're + done reading the key sequence. Note that we can't + use save_excursion_{save,restore} here, because they + save point as well as the current buffer; we don't + want to save point, because redisplay may change it, + to accommodate a Fset_window_start or something. We + don't want to do this at the top of the function, + because we may get input from a subprocess which + wants to change the selected window and stuff (say, + emacsclient). */ + record_unwind_current_buffer (); + + if (! FRAME_LIVE_P (XFRAME (selected_frame))) + Fkill_emacs (Qnil); + set_buffer_internal (XBUFFER (XWINDOW (window)->contents)); + goto replay_sequence; + } + } + + /* Expand mode-line and scroll-bar events into two events: + use posn as a fake prefix key. */ + if (SYMBOLP (posn) + && (NILP (fake_prefixed_keys) + || NILP (Fmemq (key, fake_prefixed_keys)))) + { + if (bufsize - t <= 1) + error ("Key sequence too long"); + + keybuf[t] = posn; + keybuf[t + 1] = key; + mock_input = t + 2; + + /* Record that a fake prefix key has been generated + for KEY. Don't modify the event; this would + prevent proper action when the event is pushed + back into unread-command-events. */ + fake_prefixed_keys = Fcons (key, fake_prefixed_keys); + goto replay_key; + } + } + else if (CONSP (XCDR (key)) + && CONSP (EVENT_START (key)) + && CONSP (XCDR (EVENT_START (key)))) + { + Lisp_Object posn; + + posn = POSN_POSN (EVENT_START (key)); + /* Handle menu-bar events: + insert the dummy prefix event `menu-bar'. */ + if (EQ (posn, Qmenu_bar) || EQ (posn, Qtool_bar)) + { + if (bufsize - t <= 1) + error ("Key sequence too long"); + keybuf[t] = posn; + keybuf[t + 1] = key; + + /* Zap the position in key, so we know that we've + expanded it, and don't try to do so again. */ + POSN_SET_POSN (EVENT_START (key), list1 (posn)); + + mock_input = t + 2; + goto replay_sequence; + } + else if (CONSP (posn)) + { + /* We're looking at the second event of a + sequence which we expanded before. Set + last_real_key_start appropriately. */ + if (last_real_key_start == t && t > 0) + last_real_key_start = t - 1; + } + } + } + + /* We have finally decided that KEY is something we might want + to look up. */ + new_binding = follow_key (current_binding, key); + + /* If KEY wasn't bound, we'll try some fallbacks. */ + if (!NILP (new_binding)) + /* This is needed for the following scenario: + event 0: a down-event that gets dropped by calling replay_key. + event 1: some normal prefix like C-h. + After event 0, first_unbound is 0, after event 1 indec.start, + fkey.start, and keytran.start are all 1, so when we see that + C-h is bound, we need to update first_unbound. */ + first_unbound = max (t + 1, first_unbound); + else + { + Lisp_Object head; + + /* Remember the position to put an upper bound on indec.start. */ + first_unbound = min (t, first_unbound); + + head = EVENT_HEAD (key); + + if (SYMBOLP (head)) + { + Lisp_Object breakdown; + int modifiers; + + breakdown = parse_modifiers (head); + modifiers = XINT (XCAR (XCDR (breakdown))); + /* Attempt to reduce an unbound mouse event to a simpler + event that is bound: + Drags reduce to clicks. + Double-clicks reduce to clicks. + Triple-clicks reduce to double-clicks, then to clicks. + Down-clicks are eliminated. + Double-downs reduce to downs, then are eliminated. + Triple-downs reduce to double-downs, then to downs, + then are eliminated. */ + if (modifiers & (down_modifier | drag_modifier + | double_modifier | triple_modifier)) + { + while (modifiers & (down_modifier | drag_modifier + | double_modifier | triple_modifier)) + { + Lisp_Object new_head, new_click; + if (modifiers & triple_modifier) + modifiers ^= (double_modifier | triple_modifier); + else if (modifiers & double_modifier) + modifiers &= ~double_modifier; + else if (modifiers & drag_modifier) + modifiers &= ~drag_modifier; + else + { + /* Dispose of this `down' event by simply jumping + back to replay_key, to get another event. + + Note that if this event came from mock input, + then just jumping back to replay_key will just + hand it to us again. So we have to wipe out any + mock input. + + We could delete keybuf[t] and shift everything + after that to the left by one spot, but we'd also + have to fix up any variable that points into + keybuf, and shifting isn't really necessary + anyway. + + Adding prefixes for non-textual mouse clicks + creates two characters of mock input, and both + must be thrown away. If we're only looking at + the prefix now, we can just jump back to + replay_key. On the other hand, if we've already + processed the prefix, and now the actual click + itself is giving us trouble, then we've lost the + state of the keymaps we want to backtrack to, and + we need to replay the whole sequence to rebuild + it. + + Beyond that, only function key expansion could + create more than two keys, but that should never + generate mouse events, so it's okay to zero + mock_input in that case too. + + FIXME: The above paragraph seems just plain + wrong, if you consider things like + xterm-mouse-mode. -stef + + Isn't this just the most wonderful code ever? */ + + /* If mock_input > t + 1, the above simplification + will actually end up dropping keys on the floor. + This is probably OK for now, but even + if mock_input <= t + 1, we need to adjust indec, + fkey, and keytran. + Typical case [header-line down-mouse-N]: + mock_input = 2, t = 1, fkey.end = 1, + last_real_key_start = 0. */ + if (indec.end > last_real_key_start) + { + indec.end = indec.start + = min (last_real_key_start, indec.start); + indec.map = indec.parent; + if (fkey.end > last_real_key_start) + { + fkey.end = fkey.start + = min (last_real_key_start, fkey.start); + fkey.map = fkey.parent; + if (keytran.end > last_real_key_start) + { + keytran.end = keytran.start + = min (last_real_key_start, keytran.start); + keytran.map = keytran.parent; + } + } + } + if (t == last_real_key_start) + { + mock_input = 0; + goto replay_key; + } + else + { + mock_input = last_real_key_start; + goto replay_sequence; + } + } + + new_head + = apply_modifiers (modifiers, XCAR (breakdown)); + new_click = list2 (new_head, EVENT_START (key)); + + /* Look for a binding for this new key. */ + new_binding = follow_key (current_binding, new_click); + + /* If that click is bound, go for it. */ + if (!NILP (new_binding)) + { + current_binding = new_binding; + key = new_click; + break; + } + /* Otherwise, we'll leave key set to the drag event. */ + } + } + } + } + current_binding = new_binding; + + keybuf[t++] = key; + /* Normally, last_nonmenu_event gets the previous key we read. + But when a mouse popup menu is being used, + we don't update last_nonmenu_event; it continues to hold the mouse + event that preceded the first level of menu. */ + if (!used_mouse_menu) + last_nonmenu_event = key; + + /* Record what part of this_command_keys is the current key sequence. */ + this_single_command_key_start = this_command_key_count - t; + /* When 'input-method-function' called above causes events to be + put on 'unread-post-input-method-events', and as result + 'reread' is set to 'true', the value of 't' can become larger + than 'this_command_key_count', because 'add_command_key' is + not called to update 'this_command_key_count'. If this + happens, 'this_single_command_key_start' will become negative + above, and any call to 'this-single-command-keys' will return + a garbled vector. See bug #20223 for one such situation. + Here we force 'this_single_command_key_start' to never become + negative, to avoid that. */ + if (this_single_command_key_start < 0) + this_single_command_key_start = 0; + + /* Look for this sequence in input-decode-map. + Scan from indec.end until we find a bound suffix. */ + while (indec.end < t) + { + struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; + bool done; + int diff; + + GCPRO4 (indec.map, fkey.map, keytran.map, delayed_switch_frame); + done = keyremap_step (keybuf, bufsize, &indec, max (t, mock_input), + 1, &diff, prompt); + UNGCPRO; + if (done) + { + mock_input = diff + max (t, mock_input); + goto replay_sequence; + } + } + + if (!KEYMAPP (current_binding) + && !test_undefined (current_binding) + && indec.start >= t) + /* There is a binding and it's not a prefix. + (and it doesn't have any input-decode-map translation pending). + There is thus no function-key in this sequence. + Moving fkey.start is important in this case to allow keytran.start + to go over the sequence before we return (since we keep the + invariant that keytran.end <= fkey.start). */ + { + if (fkey.start < t) + (fkey.start = fkey.end = t, fkey.map = fkey.parent); + } + else + /* If the sequence is unbound, see if we can hang a function key + off the end of it. */ + /* Continue scan from fkey.end until we find a bound suffix. */ + while (fkey.end < indec.start) + { + struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; + bool done; + int diff; + + GCPRO4 (indec.map, fkey.map, keytran.map, delayed_switch_frame); + done = keyremap_step (keybuf, bufsize, &fkey, + max (t, mock_input), + /* If there's a binding (i.e. + first_binding >= nmaps) we don't want + to apply this function-key-mapping. */ + fkey.end + 1 == t + && (test_undefined (current_binding)), + &diff, prompt); + UNGCPRO; + if (done) + { + mock_input = diff + max (t, mock_input); + /* Adjust the input-decode-map counters. */ + indec.end += diff; + indec.start += diff; + + goto replay_sequence; + } + } + + /* Look for this sequence in key-translation-map. + Scan from keytran.end until we find a bound suffix. */ + while (keytran.end < fkey.start) + { + struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; + bool done; + int diff; + + GCPRO4 (indec.map, fkey.map, keytran.map, delayed_switch_frame); + done = keyremap_step (keybuf, bufsize, &keytran, max (t, mock_input), + 1, &diff, prompt); + UNGCPRO; + if (done) + { + mock_input = diff + max (t, mock_input); + /* Adjust the function-key-map and input-decode-map counters. */ + indec.end += diff; + indec.start += diff; + fkey.end += diff; + fkey.start += diff; + + goto replay_sequence; + } + } + + /* If KEY is not defined in any of the keymaps, + and cannot be part of a function key or translation, + and is an upper case letter + use the corresponding lower-case letter instead. */ + if (NILP (current_binding) + && /* indec.start >= t && fkey.start >= t && */ keytran.start >= t + && INTEGERP (key) + && ((CHARACTERP (make_number (XINT (key) & ~CHAR_MODIFIER_MASK)) + && uppercasep (XINT (key) & ~CHAR_MODIFIER_MASK)) + || (XINT (key) & shift_modifier))) + { + Lisp_Object new_key; + + original_uppercase = key; + original_uppercase_position = t - 1; + + if (XINT (key) & shift_modifier) + XSETINT (new_key, XINT (key) & ~shift_modifier); + else + XSETINT (new_key, (downcase (XINT (key) & ~CHAR_MODIFIER_MASK) + | (XINT (key) & CHAR_MODIFIER_MASK))); + + /* We have to do this unconditionally, regardless of whether + the lower-case char is defined in the keymaps, because they + might get translated through function-key-map. */ + keybuf[t - 1] = new_key; + mock_input = max (t, mock_input); + shift_translated = 1; + + goto replay_sequence; + } + + if (NILP (current_binding) + && help_char_p (EVENT_HEAD (key)) && t > 1) + { + read_key_sequence_cmd = Vprefix_help_command; + /* The Microsoft C compiler can't handle the goto that + would go here. */ + dummyflag = 1; + break; + } + + /* If KEY is not defined in any of the keymaps, + and cannot be part of a function key or translation, + and is a shifted function key, + use the corresponding unshifted function key instead. */ + if (NILP (current_binding) + && /* indec.start >= t && fkey.start >= t && */ keytran.start >= t) + { + Lisp_Object breakdown = parse_modifiers (key); + int modifiers + = CONSP (breakdown) ? (XINT (XCAR (XCDR (breakdown)))) : 0; + + if (modifiers & shift_modifier + /* Treat uppercase keys as shifted. */ + || (INTEGERP (key) + && (KEY_TO_CHAR (key) + < XCHAR_TABLE (BVAR (current_buffer, downcase_table))->header.size) + && uppercasep (KEY_TO_CHAR (key)))) + { + Lisp_Object new_key + = (modifiers & shift_modifier + ? apply_modifiers (modifiers & ~shift_modifier, + XCAR (breakdown)) + : make_number (downcase (KEY_TO_CHAR (key)) | modifiers)); + + original_uppercase = key; + original_uppercase_position = t - 1; + + /* We have to do this unconditionally, regardless of whether + the lower-case char is defined in the keymaps, because they + might get translated through function-key-map. */ + keybuf[t - 1] = new_key; + mock_input = max (t, mock_input); + /* Reset fkey (and consequently keytran) to apply + function-key-map on the result, so that S-backspace is + correctly mapped to DEL (via backspace). OTOH, + input-decode-map doesn't need to go through it again. */ + fkey.start = fkey.end = 0; + keytran.start = keytran.end = 0; + shift_translated = 1; + + goto replay_sequence; + } + } + } + if (!dummyflag) + read_key_sequence_cmd = current_binding; + read_key_sequence_remapped + /* Remap command through active keymaps. + Do the remapping here, before the unbind_to so it uses the keymaps + of the appropriate buffer. */ + = SYMBOLP (read_key_sequence_cmd) + ? Fcommand_remapping (read_key_sequence_cmd, Qnil, Qnil) + : Qnil; + + unread_switch_frame = delayed_switch_frame; + unbind_to (count, Qnil); + + /* Don't downcase the last character if the caller says don't. + Don't downcase it if the result is undefined, either. */ + if ((dont_downcase_last || NILP (current_binding)) + && t > 0 + && t - 1 == original_uppercase_position) + { + keybuf[t - 1] = original_uppercase; + shift_translated = 0; + } + + if (shift_translated) + Vthis_command_keys_shift_translated = Qt; + + /* Occasionally we fabricate events, perhaps by expanding something + according to function-key-map, or by adding a prefix symbol to a + mouse click in the scroll bar or modeline. In this cases, return + the entire generated key sequence, even if we hit an unbound + prefix or a definition before the end. This means that you will + be able to push back the event properly, and also means that + read-key-sequence will always return a logical unit. + + Better ideas? */ + for (; t < mock_input; t++) + { + if (echo_keystrokes_p ()) + echo_char (keybuf[t]); + add_command_key (keybuf[t]); + } + + UNGCPRO; + return t; +} + +static Lisp_Object +read_key_sequence_vs (Lisp_Object prompt, Lisp_Object continue_echo, + Lisp_Object dont_downcase_last, + Lisp_Object can_return_switch_frame, + Lisp_Object cmd_loop, bool allow_string) +{ + Lisp_Object keybuf[30]; + register int i; + struct gcpro gcpro1; + ptrdiff_t count = SPECPDL_INDEX (); + + if (!NILP (prompt)) + CHECK_STRING (prompt); + QUIT; + + specbind (Qinput_method_exit_on_first_char, + (NILP (cmd_loop) ? Qt : Qnil)); + specbind (Qinput_method_use_echo_area, + (NILP (cmd_loop) ? Qt : Qnil)); + + memset (keybuf, 0, sizeof keybuf); + GCPRO1 (keybuf[0]); + gcpro1.nvars = ARRAYELTS (keybuf); + + if (NILP (continue_echo)) + { + this_command_key_count = 0; + this_command_key_count_reset = 0; + this_single_command_key_start = 0; + } + +#ifdef HAVE_WINDOW_SYSTEM + if (display_hourglass_p) + cancel_hourglass (); +#endif + + i = read_key_sequence (keybuf, ARRAYELTS (keybuf), + prompt, ! NILP (dont_downcase_last), + ! NILP (can_return_switch_frame), 0, 0); + +#if 0 /* The following is fine for code reading a key sequence and + then proceeding with a lengthy computation, but it's not good + for code reading keys in a loop, like an input method. */ +#ifdef HAVE_WINDOW_SYSTEM + if (display_hourglass_p) + start_hourglass (); +#endif +#endif + + if (i == -1) + { + Vquit_flag = Qt; + QUIT; + } + UNGCPRO; + return unbind_to (count, + ((allow_string ? make_event_array : Fvector) + (i, keybuf))); +} + +DEFUN ("read-key-sequence", Fread_key_sequence, Sread_key_sequence, 1, 5, 0, + doc: /* Read a sequence of keystrokes and return as a string or vector. +The sequence is sufficient to specify a non-prefix command in the +current local and global maps. + +First arg PROMPT is a prompt string. If nil, do not prompt specially. +Second (optional) arg CONTINUE-ECHO, if non-nil, means this key echos +as a continuation of the previous key. + +The third (optional) arg DONT-DOWNCASE-LAST, if non-nil, means do not +convert the last event to lower case. (Normally any upper case event +is converted to lower case if the original event is undefined and the lower +case equivalent is defined.) A non-nil value is appropriate for reading +a key sequence to be defined. + +A C-g typed while in this function is treated like any other character, +and `quit-flag' is not set. + +If the key sequence starts with a mouse click, then the sequence is read +using the keymaps of the buffer of the window clicked in, not the buffer +of the selected window as normal. + +`read-key-sequence' drops unbound button-down events, since you normally +only care about the click or drag events which follow them. If a drag +or multi-click event is unbound, but the corresponding click event would +be bound, `read-key-sequence' turns the event into a click event at the +drag's starting position. This means that you don't have to distinguish +between click and drag, double, or triple events unless you want to. + +`read-key-sequence' prefixes mouse events on mode lines, the vertical +lines separating windows, and scroll bars with imaginary keys +`mode-line', `vertical-line', and `vertical-scroll-bar'. + +Optional fourth argument CAN-RETURN-SWITCH-FRAME non-nil means that this +function will process a switch-frame event if the user switches frames +before typing anything. If the user switches frames in the middle of a +key sequence, or at the start of the sequence but CAN-RETURN-SWITCH-FRAME +is nil, then the event will be put off until after the current key sequence. + +`read-key-sequence' checks `function-key-map' for function key +sequences, where they wouldn't conflict with ordinary bindings. See +`function-key-map' for more details. + +The optional fifth argument CMD-LOOP, if non-nil, means +that this key sequence is being read by something that will +read commands one after another. It should be nil if the caller +will read just one key sequence. */) + (Lisp_Object prompt, Lisp_Object continue_echo, Lisp_Object dont_downcase_last, Lisp_Object can_return_switch_frame, Lisp_Object cmd_loop) +{ + return read_key_sequence_vs (prompt, continue_echo, dont_downcase_last, + can_return_switch_frame, cmd_loop, true); +} + +DEFUN ("read-key-sequence-vector", Fread_key_sequence_vector, + Sread_key_sequence_vector, 1, 5, 0, + doc: /* Like `read-key-sequence' but always return a vector. */) + (Lisp_Object prompt, Lisp_Object continue_echo, Lisp_Object dont_downcase_last, Lisp_Object can_return_switch_frame, Lisp_Object cmd_loop) +{ + return read_key_sequence_vs (prompt, continue_echo, dont_downcase_last, + can_return_switch_frame, cmd_loop, false); +} + +/* Return true if input events are pending. */ + +bool +detect_input_pending (void) +{ + return input_pending || get_input_pending (0); +} + +/* Return true if input events other than mouse movements are + pending. */ + +bool +detect_input_pending_ignore_squeezables (void) +{ + return input_pending || get_input_pending (READABLE_EVENTS_IGNORE_SQUEEZABLES); +} + +/* Return true if input events are pending, and run any pending timers. */ + +bool +detect_input_pending_run_timers (bool do_display) +{ + unsigned old_timers_run = timers_run; + + if (!input_pending) + get_input_pending (READABLE_EVENTS_DO_TIMERS_NOW); + + if (old_timers_run != timers_run && do_display) + redisplay_preserve_echo_area (8); + + return input_pending; +} + +/* This is called in some cases before a possible quit. + It cases the next call to detect_input_pending to recompute input_pending. + So calling this function unnecessarily can't do any harm. */ + +void +clear_input_pending (void) +{ + input_pending = 0; +} + +/* Return true if there are pending requeued events. + This isn't used yet. The hope is to make wait_reading_process_output + call it, and return if it runs Lisp code that unreads something. + The problem is, kbd_buffer_get_event needs to be fixed to know what + to do in that case. It isn't trivial. */ + +bool +requeued_events_pending_p (void) +{ + return (!NILP (Vunread_command_events)); +} + +DEFUN ("input-pending-p", Finput_pending_p, Sinput_pending_p, 0, 1, 0, + doc: /* Return t if command input is currently available with no wait. +Actually, the value is nil only if we can be sure that no input is available; +if there is a doubt, the value is t. + +If CHECK-TIMERS is non-nil, timers that are ready to run will do so. */) + (Lisp_Object check_timers) +{ + if (!NILP (Vunread_command_events) + || !NILP (Vunread_post_input_method_events) + || !NILP (Vunread_input_method_events)) + return (Qt); + + /* Process non-user-visible events (Bug#10195). */ + process_special_events (); + + return (get_input_pending ((NILP (check_timers) + ? 0 : READABLE_EVENTS_DO_TIMERS_NOW) + | READABLE_EVENTS_FILTER_EVENTS) + ? Qt : Qnil); +} + +DEFUN ("recent-keys", Frecent_keys, Srecent_keys, 0, 1, 0, + doc: /* Return vector of last few events, not counting those from keyboard macros. +If INCLUDE-CMDS is non-nil, include the commands that were run, +represented as events of the form (nil . COMMAND). */) + (Lisp_Object include_cmds) +{ + bool cmds = !NILP (include_cmds); + + if (!total_keys + || (cmds && total_keys < NUM_RECENT_KEYS)) + return Fvector (total_keys, + XVECTOR (recent_keys)->contents); + else + { + Lisp_Object es = Qnil; + int i = (total_keys < NUM_RECENT_KEYS + ? 0 : recent_keys_index); + eassert (recent_keys_index < NUM_RECENT_KEYS); + do + { + Lisp_Object e = AREF (recent_keys, i); + if (cmds || !CONSP (e) || !NILP (XCAR (e))) + es = Fcons (e, es); + if (++i >= NUM_RECENT_KEYS) + i = 0; + } while (i != recent_keys_index); + es = Fnreverse (es); + return Fvconcat (1, &es); + } +} + +DEFUN ("this-command-keys", Fthis_command_keys, Sthis_command_keys, 0, 0, 0, + doc: /* Return the key sequence that invoked this command. +However, if the command has called `read-key-sequence', it returns +the last key sequence that has been read. +The value is a string or a vector. + +See also `this-command-keys-vector'. */) + (void) +{ + return make_event_array (this_command_key_count, + XVECTOR (this_command_keys)->contents); +} + +DEFUN ("this-command-keys-vector", Fthis_command_keys_vector, Sthis_command_keys_vector, 0, 0, 0, + doc: /* Return the key sequence that invoked this command, as a vector. +However, if the command has called `read-key-sequence', it returns +the last key sequence that has been read. + +See also `this-command-keys'. */) + (void) +{ + return Fvector (this_command_key_count, + XVECTOR (this_command_keys)->contents); +} + +DEFUN ("this-single-command-keys", Fthis_single_command_keys, + Sthis_single_command_keys, 0, 0, 0, + doc: /* Return the key sequence that invoked this command. +More generally, it returns the last key sequence read, either by +the command loop or by `read-key-sequence'. +Unlike `this-command-keys', this function's value +does not include prefix arguments. +The value is always a vector. */) + (void) +{ + return Fvector (this_command_key_count + - this_single_command_key_start, + (XVECTOR (this_command_keys)->contents + + this_single_command_key_start)); +} + +DEFUN ("this-single-command-raw-keys", Fthis_single_command_raw_keys, + Sthis_single_command_raw_keys, 0, 0, 0, + doc: /* Return the raw events that were read for this command. +More generally, it returns the last key sequence read, either by +the command loop or by `read-key-sequence'. +Unlike `this-single-command-keys', this function's value +shows the events before all translations (except for input methods). +The value is always a vector. */) + (void) +{ + return Fvector (raw_keybuf_count, XVECTOR (raw_keybuf)->contents); +} + +DEFUN ("reset-this-command-lengths", Freset_this_command_lengths, + Sreset_this_command_lengths, 0, 0, 0, + doc: /* Make the unread events replace the last command and echo. +Used in `universal-argument-other-key'. + +`universal-argument-other-key' rereads the event just typed. +It then gets translated through `function-key-map'. +The translated event has to replace the real events, +both in the value of (this-command-keys) and in echoing. +To achieve this, `universal-argument-other-key' calls +`reset-this-command-lengths', which discards the record of reading +these events the first time. */) + (void) +{ + this_command_key_count = before_command_key_count; + if (this_command_key_count < this_single_command_key_start) + this_single_command_key_start = this_command_key_count; + + echo_truncate (before_command_echo_length); + + /* Cause whatever we put into unread-command-events + to echo as if it were being freshly read from the keyboard. */ + this_command_key_count_reset = 1; + + return Qnil; +} + +DEFUN ("clear-this-command-keys", Fclear_this_command_keys, + Sclear_this_command_keys, 0, 1, 0, + doc: /* Clear out the vector that `this-command-keys' returns. +Also clear the record of the last 100 events, unless optional arg +KEEP-RECORD is non-nil. */) + (Lisp_Object keep_record) +{ + int i; + + this_command_key_count = 0; + this_command_key_count_reset = 0; + + if (NILP (keep_record)) + { + for (i = 0; i < ASIZE (recent_keys); ++i) + ASET (recent_keys, i, Qnil); + total_keys = 0; + recent_keys_index = 0; + } + return Qnil; +} + +DEFUN ("recursion-depth", Frecursion_depth, Srecursion_depth, 0, 0, 0, + doc: /* Return the current depth in recursive edits. */) + (void) +{ + Lisp_Object temp; + /* Wrap around reliably on integer overflow. */ + EMACS_INT sum = (command_loop_level & INTMASK) + (minibuf_level & INTMASK); + XSETINT (temp, sum); + return temp; +} + +DEFUN ("open-dribble-file", Fopen_dribble_file, Sopen_dribble_file, 1, 1, + "FOpen dribble file: ", + doc: /* Start writing all keyboard characters to a dribble file called FILE. +If FILE is nil, close any open dribble file. +The file will be closed when Emacs exits. + +Be aware that this records ALL characters you type! +This may include sensitive information such as passwords. */) + (Lisp_Object file) +{ + if (dribble) + { + block_input (); + fclose (dribble); + unblock_input (); + dribble = 0; + } + if (!NILP (file)) + { + int fd; + Lisp_Object encfile; + + file = Fexpand_file_name (file, Qnil); + encfile = ENCODE_FILE (file); + fd = emacs_open (SSDATA (encfile), O_WRONLY | O_CREAT | O_EXCL, 0600); + if (fd < 0 && errno == EEXIST && unlink (SSDATA (encfile)) == 0) + fd = emacs_open (SSDATA (encfile), O_WRONLY | O_CREAT | O_EXCL, 0600); + dribble = fd < 0 ? 0 : fdopen (fd, "w"); + if (dribble == 0) + report_file_error ("Opening dribble", file); + } + return Qnil; +} + +DEFUN ("discard-input", Fdiscard_input, Sdiscard_input, 0, 0, 0, + doc: /* Discard the contents of the terminal input buffer. +Also end any kbd macro being defined. */) + (void) +{ + if (!NILP (KVAR (current_kboard, defining_kbd_macro))) + { + /* Discard the last command from the macro. */ + Fcancel_kbd_macro_events (); + end_kbd_macro (); + } + + Vunread_command_events = Qnil; + + discard_tty_input (); + + kbd_fetch_ptr = kbd_store_ptr; + input_pending = 0; + + return Qnil; +} + +DEFUN ("suspend-emacs", Fsuspend_emacs, Ssuspend_emacs, 0, 1, "", + doc: /* Stop Emacs and return to superior process. You can resume later. +If `cannot-suspend' is non-nil, or if the system doesn't support job +control, run a subshell instead. + +If optional arg STUFFSTRING is non-nil, its characters are stuffed +to be read as terminal input by Emacs's parent, after suspension. + +Before suspending, run the normal hook `suspend-hook'. +After resumption run the normal hook `suspend-resume-hook'. + +Some operating systems cannot stop the Emacs process and resume it later. +On such systems, Emacs starts a subshell instead of suspending. */) + (Lisp_Object stuffstring) +{ + ptrdiff_t count = SPECPDL_INDEX (); + int old_height, old_width; + int width, height; + struct gcpro gcpro1; + + if (tty_list && tty_list->next) + error ("There are other tty frames open; close them before suspending Emacs"); + + if (!NILP (stuffstring)) + CHECK_STRING (stuffstring); + + run_hook (intern ("suspend-hook")); + + GCPRO1 (stuffstring); + get_tty_size (fileno (CURTTY ()->input), &old_width, &old_height); + reset_all_sys_modes (); + /* sys_suspend can get an error if it tries to fork a subshell + and the system resources aren't available for that. */ + record_unwind_protect_void (init_all_sys_modes); + stuff_buffered_input (stuffstring); + if (cannot_suspend) + sys_subshell (); + else + sys_suspend (); + unbind_to (count, Qnil); + + /* Check if terminal/window size has changed. + Note that this is not useful when we are running directly + with a window system; but suspend should be disabled in that case. */ + get_tty_size (fileno (CURTTY ()->input), &width, &height); + if (width != old_width || height != old_height) + change_frame_size (SELECTED_FRAME (), width, + height - FRAME_MENU_BAR_LINES (SELECTED_FRAME ()), + 0, 0, 0, 0); + + run_hook (intern ("suspend-resume-hook")); + + UNGCPRO; + return Qnil; +} + +/* If STUFFSTRING is a string, stuff its contents as pending terminal input. + Then in any case stuff anything Emacs has read ahead and not used. */ + +void +stuff_buffered_input (Lisp_Object stuffstring) +{ +#ifdef SIGTSTP /* stuff_char is defined if SIGTSTP. */ + register unsigned char *p; + + if (STRINGP (stuffstring)) + { + register ptrdiff_t count; + + p = SDATA (stuffstring); + count = SBYTES (stuffstring); + while (count-- > 0) + stuff_char (*p++); + stuff_char ('\n'); + } + + /* Anything we have read ahead, put back for the shell to read. */ + /* ?? What should this do when we have multiple keyboards?? + Should we ignore anything that was typed in at the "wrong" kboard? + + rms: we should stuff everything back into the kboard + it came from. */ + for (; kbd_fetch_ptr != kbd_store_ptr; kbd_fetch_ptr++) + { + + if (kbd_fetch_ptr == kbd_buffer + KBD_BUFFER_SIZE) + kbd_fetch_ptr = kbd_buffer; + if (kbd_fetch_ptr->kind == ASCII_KEYSTROKE_EVENT) + stuff_char (kbd_fetch_ptr->code); + + clear_event (kbd_fetch_ptr); + } + + input_pending = 0; +#endif /* SIGTSTP */ +} + +void +set_waiting_for_input (struct timespec *time_to_clear) +{ + input_available_clear_time = time_to_clear; + + /* Tell handle_interrupt to throw back to read_char, */ + waiting_for_input = 1; + + /* If handle_interrupt was called before and buffered a C-g, + make it run again now, to avoid timing error. */ + if (!NILP (Vquit_flag)) + quit_throw_to_read_char (0); +} + +void +clear_waiting_for_input (void) +{ + /* Tell handle_interrupt not to throw back to read_char, */ + waiting_for_input = 0; + input_available_clear_time = 0; +} + +/* The SIGINT handler. + + If we have a frame on the controlling tty, we assume that the + SIGINT was generated by C-g, so we call handle_interrupt. + Otherwise, tell QUIT to kill Emacs. */ + +static void +handle_interrupt_signal (int sig) +{ + /* See if we have an active terminal on our controlling tty. */ + struct terminal *terminal = get_named_terminal ("/dev/tty"); + if (!terminal) + { + /* If there are no frames there, let's pretend that we are a + well-behaving UN*X program and quit. We must not call Lisp + in a signal handler, so tell QUIT to exit when it is + safe. */ + Vquit_flag = Qkill_emacs; + } + else + { + /* Otherwise, the SIGINT was probably generated by C-g. */ + + /* Set internal_last_event_frame to the top frame of the + controlling tty, if we have a frame there. We disable the + interrupt key on secondary ttys, so the SIGINT must have come + from the controlling tty. */ + internal_last_event_frame = terminal->display_info.tty->top_frame; + + handle_interrupt (1); + } +} + +static void +deliver_interrupt_signal (int sig) +{ + deliver_process_signal (sig, handle_interrupt_signal); +} + + +/* If Emacs is stuck because `inhibit-quit' is true, then keep track + of the number of times C-g has been requested. If C-g is pressed + enough times, then quit anyway. See bug#6585. */ +static int volatile force_quit_count; + +/* This routine is called at interrupt level in response to C-g. + + It is called from the SIGINT handler or kbd_buffer_store_event. + + If `waiting_for_input' is non zero, then unless `echoing' is + nonzero, immediately throw back to read_char. + + Otherwise it sets the Lisp variable quit-flag not-nil. This causes + eval to throw, when it gets a chance. If quit-flag is already + non-nil, it stops the job right away. */ + +static void +handle_interrupt (bool in_signal_handler) +{ + char c; + + cancel_echoing (); + + /* XXX This code needs to be revised for multi-tty support. */ + if (!NILP (Vquit_flag) && get_named_terminal ("/dev/tty")) + { + if (! in_signal_handler) + { + /* If SIGINT isn't blocked, don't let us be interrupted by + a SIGINT. It might be harmful due to non-reentrancy + in I/O functions. */ + sigset_t blocked; + sigemptyset (&blocked); + sigaddset (&blocked, SIGINT); + pthread_sigmask (SIG_BLOCK, &blocked, 0); + } + + fflush (stdout); + reset_all_sys_modes (); + +#ifdef SIGTSTP +/* + * On systems which can suspend the current process and return to the original + * shell, this command causes the user to end up back at the shell. + * The "Auto-save" and "Abort" questions are not asked until + * the user elects to return to emacs, at which point he can save the current + * job and either dump core or continue. + */ + sys_suspend (); +#else + /* Perhaps should really fork an inferior shell? + But that would not provide any way to get back + to the original shell, ever. */ + printf ("No support for stopping a process on this operating system;\n"); + printf ("you can continue or abort.\n"); +#endif /* not SIGTSTP */ +#ifdef MSDOS + /* We must remain inside the screen area when the internal terminal + is used. Note that [Enter] is not echoed by dos. */ + cursor_to (SELECTED_FRAME (), 0, 0); +#endif + /* It doesn't work to autosave while GC is in progress; + the code used for auto-saving doesn't cope with the mark bit. */ + if (!gc_in_progress) + { + printf ("Auto-save? (y or n) "); + fflush (stdout); + if (((c = getchar ()) & ~040) == 'Y') + { + Fdo_auto_save (Qt, Qnil); +#ifdef MSDOS + printf ("\r\nAuto-save done"); +#else /* not MSDOS */ + printf ("Auto-save done\n"); +#endif /* not MSDOS */ + } + while (c != '\n') c = getchar (); + } + else + { + /* During GC, it must be safe to reenable quitting again. */ + Vinhibit_quit = Qnil; +#ifdef MSDOS + printf ("\r\n"); +#endif /* not MSDOS */ + printf ("Garbage collection in progress; cannot auto-save now\r\n"); + printf ("but will instead do a real quit after garbage collection ends\r\n"); + fflush (stdout); + } + +#ifdef MSDOS + printf ("\r\nAbort? (y or n) "); +#else /* not MSDOS */ + printf ("Abort (and dump core)? (y or n) "); +#endif /* not MSDOS */ + fflush (stdout); + if (((c = getchar ()) & ~040) == 'Y') + emacs_abort (); + while (c != '\n') c = getchar (); +#ifdef MSDOS + printf ("\r\nContinuing...\r\n"); +#else /* not MSDOS */ + printf ("Continuing...\n"); +#endif /* not MSDOS */ + fflush (stdout); + init_all_sys_modes (); + } + else + { + /* If executing a function that wants to be interrupted out of + and the user has not deferred quitting by binding `inhibit-quit' + then quit right away. */ + if (immediate_quit && NILP (Vinhibit_quit)) + { + struct gl_state_s saved; + struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; + + immediate_quit = 0; + pthread_sigmask (SIG_SETMASK, &empty_mask, 0); + saved = gl_state; + GCPRO4 (saved.object, saved.global_code, + saved.current_syntax_table, saved.old_prop); + Fsignal (Qquit, Qnil); + gl_state = saved; + UNGCPRO; + } + else + { /* Else request quit when it's safe. */ + int count = NILP (Vquit_flag) ? 1 : force_quit_count + 1; + force_quit_count = count; + if (count == 3) + { + immediate_quit = 1; + Vinhibit_quit = Qnil; + } + Vquit_flag = Qt; + } + } + + pthread_sigmask (SIG_SETMASK, &empty_mask, 0); + +/* TODO: The longjmp in this call throws the NS event loop integration off, + and it seems to do fine without this. Probably some attention + needs to be paid to the setting of waiting_for_input in + wait_reading_process_output() under HAVE_NS because of the call + to ns_select there (needed because otherwise events aren't picked up + outside of polling since we don't get SIGIO like X and we don't have a + separate event loop thread like W32. */ +#ifndef HAVE_NS + if (waiting_for_input && !echoing) + quit_throw_to_read_char (in_signal_handler); +#endif +} + +/* Handle a C-g by making read_char return C-g. */ + +static void +quit_throw_to_read_char (bool from_signal) +{ + /* When not called from a signal handler it is safe to call + Lisp. */ + if (!from_signal && EQ (Vquit_flag, Qkill_emacs)) + Fkill_emacs (Qnil); + + /* Prevent another signal from doing this before we finish. */ + clear_waiting_for_input (); + input_pending = 0; + + Vunread_command_events = Qnil; + + if (FRAMEP (internal_last_event_frame) + && !EQ (internal_last_event_frame, selected_frame)) + do_switch_frame (make_lispy_switch_frame (internal_last_event_frame), + 0, 0, Qnil); + + sys_longjmp (getcjmp, 1); +} + +DEFUN ("set-input-interrupt-mode", Fset_input_interrupt_mode, + Sset_input_interrupt_mode, 1, 1, 0, + doc: /* Set interrupt mode of reading keyboard input. +If INTERRUPT is non-nil, Emacs will use input interrupts; +otherwise Emacs uses CBREAK mode. + +See also `current-input-mode'. */) + (Lisp_Object interrupt) +{ + bool new_interrupt_input; +#ifdef USABLE_SIGIO +#ifdef HAVE_X_WINDOWS + if (x_display_list != NULL) + { + /* When using X, don't give the user a real choice, + because we haven't implemented the mechanisms to support it. */ + new_interrupt_input = 1; + } + else +#endif /* HAVE_X_WINDOWS */ + new_interrupt_input = !NILP (interrupt); +#else /* not USABLE_SIGIO */ + new_interrupt_input = 0; +#endif /* not USABLE_SIGIO */ + + if (new_interrupt_input != interrupt_input) + { +#ifdef POLL_FOR_INPUT + stop_polling (); +#endif +#ifndef DOS_NT + /* this causes startup screen to be restored and messes with the mouse */ + reset_all_sys_modes (); + interrupt_input = new_interrupt_input; + init_all_sys_modes (); +#else + interrupt_input = new_interrupt_input; +#endif + +#ifdef POLL_FOR_INPUT + poll_suppress_count = 1; + start_polling (); +#endif + } + return Qnil; +} + +DEFUN ("set-output-flow-control", Fset_output_flow_control, Sset_output_flow_control, 1, 2, 0, + doc: /* Enable or disable ^S/^Q flow control for output to TERMINAL. +If FLOW is non-nil, flow control is enabled and you cannot use C-s or +C-q in key sequences. + +This setting only has an effect on tty terminals and only when +Emacs reads input in CBREAK mode; see `set-input-interrupt-mode'. + +See also `current-input-mode'. */) + (Lisp_Object flow, Lisp_Object terminal) +{ + struct terminal *t = decode_tty_terminal (terminal); + struct tty_display_info *tty; + + if (!t) + return Qnil; + tty = t->display_info.tty; + + if (tty->flow_control != !NILP (flow)) + { +#ifndef DOS_NT + /* This causes startup screen to be restored and messes with the mouse. */ + reset_sys_modes (tty); +#endif + + tty->flow_control = !NILP (flow); + +#ifndef DOS_NT + init_sys_modes (tty); +#endif + } + return Qnil; +} + +DEFUN ("set-input-meta-mode", Fset_input_meta_mode, Sset_input_meta_mode, 1, 2, 0, + doc: /* Enable or disable 8-bit input on TERMINAL. +If META is t, Emacs will accept 8-bit input, and interpret the 8th +bit as the Meta modifier. + +If META is nil, Emacs will ignore the top bit, on the assumption it is +parity. + +Otherwise, Emacs will accept and pass through 8-bit input without +specially interpreting the top bit. + +This setting only has an effect on tty terminal devices. + +Optional parameter TERMINAL specifies the tty terminal device to use. +It may be a terminal object, a frame, or nil for the terminal used by +the currently selected frame. + +See also `current-input-mode'. */) + (Lisp_Object meta, Lisp_Object terminal) +{ + struct terminal *t = decode_tty_terminal (terminal); + struct tty_display_info *tty; + int new_meta; + + if (!t) + return Qnil; + tty = t->display_info.tty; + + if (NILP (meta)) + new_meta = 0; + else if (EQ (meta, Qt)) + new_meta = 1; + else + new_meta = 2; + + if (tty->meta_key != new_meta) + { +#ifndef DOS_NT + /* this causes startup screen to be restored and messes with the mouse */ + reset_sys_modes (tty); +#endif + + tty->meta_key = new_meta; + +#ifndef DOS_NT + init_sys_modes (tty); +#endif + } + return Qnil; +} + +DEFUN ("set-quit-char", Fset_quit_char, Sset_quit_char, 1, 1, 0, + doc: /* Specify character used for quitting. +QUIT must be an ASCII character. + +This function only has an effect on the controlling tty of the Emacs +process. + +See also `current-input-mode'. */) + (Lisp_Object quit) +{ + struct terminal *t = get_named_terminal ("/dev/tty"); + struct tty_display_info *tty; + + if (!t) + return Qnil; + tty = t->display_info.tty; + + if (NILP (quit) || !INTEGERP (quit) || XINT (quit) < 0 || XINT (quit) > 0400) + error ("QUIT must be an ASCII character"); + +#ifndef DOS_NT + /* this causes startup screen to be restored and messes with the mouse */ + reset_sys_modes (tty); +#endif + + /* Don't let this value be out of range. */ + quit_char = XINT (quit) & (tty->meta_key == 0 ? 0177 : 0377); + +#ifndef DOS_NT + init_sys_modes (tty); +#endif + + return Qnil; +} + +DEFUN ("set-input-mode", Fset_input_mode, Sset_input_mode, 3, 4, 0, + doc: /* Set mode of reading keyboard input. +First arg INTERRUPT non-nil means use input interrupts; + nil means use CBREAK mode. +Second arg FLOW non-nil means use ^S/^Q flow control for output to terminal + (no effect except in CBREAK mode). +Third arg META t means accept 8-bit input (for a Meta key). + META nil means ignore the top bit, on the assumption it is parity. + Otherwise, accept 8-bit input and don't use the top bit for Meta. +Optional fourth arg QUIT if non-nil specifies character to use for quitting. +See also `current-input-mode'. */) + (Lisp_Object interrupt, Lisp_Object flow, Lisp_Object meta, Lisp_Object quit) +{ + Fset_input_interrupt_mode (interrupt); + Fset_output_flow_control (flow, Qnil); + Fset_input_meta_mode (meta, Qnil); + if (!NILP (quit)) + Fset_quit_char (quit); + return Qnil; +} + +DEFUN ("current-input-mode", Fcurrent_input_mode, Scurrent_input_mode, 0, 0, 0, + doc: /* Return information about the way Emacs currently reads keyboard input. +The value is a list of the form (INTERRUPT FLOW META QUIT), where + INTERRUPT is non-nil if Emacs is using interrupt-driven input; if + nil, Emacs is using CBREAK mode. + FLOW is non-nil if Emacs uses ^S/^Q flow control for output to the + terminal; this does not apply if Emacs uses interrupt-driven input. + META is t if accepting 8-bit input with 8th bit as Meta flag. + META nil means ignoring the top bit, on the assumption it is parity. + META is neither t nor nil if accepting 8-bit input and using + all 8 bits as the character code. + QUIT is the character Emacs currently uses to quit. +The elements of this list correspond to the arguments of +`set-input-mode'. */) + (void) +{ + struct frame *sf = XFRAME (selected_frame); + + Lisp_Object interrupt = interrupt_input ? Qt : Qnil; + Lisp_Object flow, meta; + if (FRAME_TERMCAP_P (sf) || FRAME_MSDOS_P (sf)) + { + flow = FRAME_TTY (sf)->flow_control ? Qt : Qnil; + meta = (FRAME_TTY (sf)->meta_key == 2 + ? make_number (0) + : (CURTTY ()->meta_key == 1 ? Qt : Qnil)); + } + else + { + flow = Qnil; + meta = Qt; + } + Lisp_Object quit = make_number (quit_char); + + return list4 (interrupt, flow, meta, quit); +} + +DEFUN ("posn-at-x-y", Fposn_at_x_y, Sposn_at_x_y, 2, 4, 0, + doc: /* Return position information for pixel coordinates X and Y. +By default, X and Y are relative to text area of the selected window. +Optional third arg FRAME-OR-WINDOW non-nil specifies frame or window. +If optional fourth arg WHOLE is non-nil, X is relative to the left +edge of the window. + +The return value is similar to a mouse click position: + (WINDOW AREA-OR-POS (X . Y) TIMESTAMP OBJECT POS (COL . ROW) + IMAGE (DX . DY) (WIDTH . HEIGHT)) +The `posn-' functions access elements of such lists. */) + (Lisp_Object x, Lisp_Object y, Lisp_Object frame_or_window, Lisp_Object whole) +{ + CHECK_NATNUM (x); + CHECK_NATNUM (y); + + if (NILP (frame_or_window)) + frame_or_window = selected_window; + + if (WINDOWP (frame_or_window)) + { + struct window *w = decode_live_window (frame_or_window); + + XSETINT (x, (XINT (x) + + WINDOW_LEFT_EDGE_X (w) + + (NILP (whole) + ? window_box_left_offset (w, TEXT_AREA) + : 0))); + XSETINT (y, WINDOW_TO_FRAME_PIXEL_Y (w, XINT (y))); + frame_or_window = w->frame; + } + + CHECK_LIVE_FRAME (frame_or_window); + + return make_lispy_position (XFRAME (frame_or_window), x, y, 0); +} + +DEFUN ("posn-at-point", Fposn_at_point, Sposn_at_point, 0, 2, 0, + doc: /* Return position information for buffer POS in WINDOW. +POS defaults to point in WINDOW; WINDOW defaults to the selected window. + +Return nil if position is not visible in window. Otherwise, +the return value is similar to that returned by `event-start' for +a mouse click at the upper left corner of the glyph corresponding +to the given buffer position: + (WINDOW AREA-OR-POS (X . Y) TIMESTAMP OBJECT POS (COL . ROW) + IMAGE (DX . DY) (WIDTH . HEIGHT)) +The `posn-' functions access elements of such lists. */) + (Lisp_Object pos, Lisp_Object window) +{ + Lisp_Object tem; + + if (NILP (window)) + window = selected_window; + + tem = Fpos_visible_in_window_p (pos, window, Qt); + if (!NILP (tem)) + { + Lisp_Object x = XCAR (tem); + Lisp_Object y = XCAR (XCDR (tem)); + + /* Point invisible due to hscrolling? */ + if (XINT (x) < 0) + return Qnil; + tem = Fposn_at_x_y (x, y, window, Qnil); + } + + return tem; +} + +/* Set up a new kboard object with reasonable initial values. + TYPE is a window system for which this keyboard is used. */ + +static void +init_kboard (KBOARD *kb, Lisp_Object type) +{ + kset_overriding_terminal_local_map (kb, Qnil); + kset_last_command (kb, Qnil); + kset_real_last_command (kb, Qnil); + kset_keyboard_translate_table (kb, Qnil); + kset_last_repeatable_command (kb, Qnil); + kset_prefix_arg (kb, Qnil); + kset_last_prefix_arg (kb, Qnil); + kset_kbd_queue (kb, Qnil); + kb->kbd_queue_has_data = 0; + kb->immediate_echo = 0; + kset_echo_string (kb, Qnil); + kb->echo_after_prompt = -1; + kb->kbd_macro_buffer = 0; + kb->kbd_macro_bufsize = 0; + kset_defining_kbd_macro (kb, Qnil); + kset_last_kbd_macro (kb, Qnil); + kb->reference_count = 0; + kset_system_key_alist (kb, Qnil); + kset_system_key_syms (kb, Qnil); + kset_window_system (kb, type); + kset_input_decode_map (kb, Fmake_sparse_keymap (Qnil)); + kset_local_function_key_map (kb, Fmake_sparse_keymap (Qnil)); + Fset_keymap_parent (KVAR (kb, Vlocal_function_key_map), Vfunction_key_map); + kset_default_minibuffer_frame (kb, Qnil); +} + +/* Allocate and basically initialize keyboard + object to use with window system TYPE. */ + +KBOARD * +allocate_kboard (Lisp_Object type) +{ + KBOARD *kb = xmalloc (sizeof *kb); + + init_kboard (kb, type); + kb->next_kboard = all_kboards; + all_kboards = kb; + return kb; +} + +/* + * Destroy the contents of a kboard object, but not the object itself. + * We use this just before deleting it, or if we're going to initialize + * it a second time. + */ +static void +wipe_kboard (KBOARD *kb) +{ + xfree (kb->kbd_macro_buffer); +} + +/* Free KB and memory referenced from it. */ + +void +delete_kboard (KBOARD *kb) +{ + KBOARD **kbp; + + for (kbp = &all_kboards; *kbp != kb; kbp = &(*kbp)->next_kboard) + if (*kbp == NULL) + emacs_abort (); + *kbp = kb->next_kboard; + + /* Prevent a dangling reference to KB. */ + if (kb == current_kboard + && FRAMEP (selected_frame) + && FRAME_LIVE_P (XFRAME (selected_frame))) + { + current_kboard = FRAME_KBOARD (XFRAME (selected_frame)); + single_kboard = 0; + if (current_kboard == kb) + emacs_abort (); + } + + wipe_kboard (kb); + xfree (kb); +} + +void +init_keyboard (void) +{ + /* This is correct before outermost invocation of the editor loop. */ + command_loop_level = -1; + immediate_quit = 0; + quit_char = Ctl ('g'); + Vunread_command_events = Qnil; + timer_idleness_start_time = invalid_timespec (); + total_keys = 0; + recent_keys_index = 0; + kbd_fetch_ptr = kbd_buffer; + kbd_store_ptr = kbd_buffer; + do_mouse_tracking = Qnil; + input_pending = 0; + interrupt_input_blocked = 0; + pending_signals = 0; + + /* This means that command_loop_1 won't try to select anything the first + time through. */ + internal_last_event_frame = Qnil; + Vlast_event_frame = internal_last_event_frame; + + current_kboard = initial_kboard; + /* Re-initialize the keyboard again. */ + wipe_kboard (current_kboard); + /* A value of nil for Vwindow_system normally means a tty, but we also use + it for the initial terminal since there is no window system there. */ + init_kboard (current_kboard, Qnil); + + if (!noninteractive) + { + /* Before multi-tty support, these handlers used to be installed + only if the current session was a tty session. Now an Emacs + session may have multiple display types, so we always handle + SIGINT. There is special code in handle_interrupt_signal to exit + Emacs on SIGINT when there are no termcap frames on the + controlling terminal. */ + struct sigaction action; + emacs_sigaction_init (&action, deliver_interrupt_signal); + sigaction (SIGINT, &action, 0); +#ifndef DOS_NT + /* For systems with SysV TERMIO, C-g is set up for both SIGINT and + SIGQUIT and we can't tell which one it will give us. */ + sigaction (SIGQUIT, &action, 0); +#endif /* not DOS_NT */ + } +#ifdef USABLE_SIGIO + if (!noninteractive) + { + struct sigaction action; + emacs_sigaction_init (&action, deliver_input_available_signal); + sigaction (SIGIO, &action, 0); + } +#endif + +/* Use interrupt input by default, if it works and noninterrupt input + has deficiencies. */ + +#ifdef INTERRUPT_INPUT + interrupt_input = 1; +#else + interrupt_input = 0; +#endif + + pthread_sigmask (SIG_SETMASK, &empty_mask, 0); + dribble = 0; + + if (keyboard_init_hook) + (*keyboard_init_hook) (); + +#ifdef POLL_FOR_INPUT + poll_timer = NULL; + poll_suppress_count = 1; + start_polling (); +#endif +} + +/* This type's only use is in syms_of_keyboard, to put properties on the + event header symbols. */ +struct event_head +{ + short var; + short kind; +}; + +static const struct event_head head_table[] = { + {SYMBOL_INDEX (Qmouse_movement), SYMBOL_INDEX (Qmouse_movement)}, + {SYMBOL_INDEX (Qscroll_bar_movement), SYMBOL_INDEX (Qmouse_movement)}, + + /* Some of the event heads. */ + {SYMBOL_INDEX (Qswitch_frame), SYMBOL_INDEX (Qswitch_frame)}, + + {SYMBOL_INDEX (Qfocus_in), SYMBOL_INDEX (Qfocus_in)}, + {SYMBOL_INDEX (Qfocus_out), SYMBOL_INDEX (Qfocus_out)}, + {SYMBOL_INDEX (Qdelete_frame), SYMBOL_INDEX (Qdelete_frame)}, + {SYMBOL_INDEX (Qiconify_frame), SYMBOL_INDEX (Qiconify_frame)}, + {SYMBOL_INDEX (Qmake_frame_visible), SYMBOL_INDEX (Qmake_frame_visible)}, + /* `select-window' should be handled just like `switch-frame' + in read_key_sequence. */ + {SYMBOL_INDEX (Qselect_window), SYMBOL_INDEX (Qswitch_frame)} +}; + +void +syms_of_keyboard (void) +{ + pending_funcalls = Qnil; + staticpro (&pending_funcalls); + + Vlispy_mouse_stem = build_pure_c_string ("mouse"); + staticpro (&Vlispy_mouse_stem); + + regular_top_level_message = build_pure_c_string ("Back to top level"); +#ifdef HAVE_STACK_OVERFLOW_HANDLING + recover_top_level_message + = build_pure_c_string ("Re-entering top level after C stack overflow"); +#endif + DEFVAR_LISP ("internal--top-level-message", Vinternal__top_level_message, + doc: /* Message displayed by `normal-top-level'. */); + Vinternal__top_level_message = regular_top_level_message; + + /* Tool-bars. */ + DEFSYM (QCimage, ":image"); + DEFSYM (Qhelp_echo, "help-echo"); + DEFSYM (QCrtl, ":rtl"); + + staticpro (&item_properties); + item_properties = Qnil; + + staticpro (&tool_bar_item_properties); + tool_bar_item_properties = Qnil; + staticpro (&tool_bar_items_vector); + tool_bar_items_vector = Qnil; + + DEFSYM (Qtimer_event_handler, "timer-event-handler"); + DEFSYM (Qdisabled_command_function, "disabled-command-function"); + DEFSYM (Qself_insert_command, "self-insert-command"); + DEFSYM (Qforward_char, "forward-char"); + DEFSYM (Qbackward_char, "backward-char"); + + /* Non-nil disable property on a command means do not execute it; + call disabled-command-function's value instead. */ + DEFSYM (Qdisabled, "disabled"); + + DEFSYM (Qundefined, "undefined"); + + /* Hooks to run before and after each command. */ + DEFSYM (Qpre_command_hook, "pre-command-hook"); + DEFSYM (Qpost_command_hook, "post-command-hook"); + + DEFSYM (Qdeferred_action_function, "deferred-action-function"); + DEFSYM (Qdelayed_warnings_hook, "delayed-warnings-hook"); + DEFSYM (Qfunction_key, "function-key"); + + /* The values of Qevent_kind properties. */ + DEFSYM (Qmouse_click, "mouse-click"); + + DEFSYM (Qdrag_n_drop, "drag-n-drop"); + DEFSYM (Qsave_session, "save-session"); + DEFSYM (Qconfig_changed_event, "config-changed-event"); + + /* Menu and tool bar item parts. */ + DEFSYM (Qmenu_enable, "menu-enable"); + +#ifdef HAVE_NTGUI + DEFSYM (Qlanguage_change, "language-change"); +#endif + +#ifdef HAVE_DBUS + DEFSYM (Qdbus_event, "dbus-event"); +#endif + +#ifdef USE_FILE_NOTIFY + DEFSYM (Qfile_notify, "file-notify"); +#endif /* USE_FILE_NOTIFY */ + + /* Menu and tool bar item parts. */ + DEFSYM (QCenable, ":enable"); + DEFSYM (QCvisible, ":visible"); + DEFSYM (QChelp, ":help"); + DEFSYM (QCfilter, ":filter"); + DEFSYM (QCbutton, ":button"); + DEFSYM (QCkeys, ":keys"); + DEFSYM (QCkey_sequence, ":key-sequence"); + + /* Non-nil disable property on a command means + do not execute it; call disabled-command-function's value instead. */ + DEFSYM (QCtoggle, ":toggle"); + DEFSYM (QCradio, ":radio"); + DEFSYM (QClabel, ":label"); + DEFSYM (QCvert_only, ":vert-only"); + + /* Symbols to use for parts of windows. */ + DEFSYM (Qvertical_line, "vertical-line"); + DEFSYM (Qright_divider, "right-divider"); + DEFSYM (Qbottom_divider, "bottom-divider"); + + DEFSYM (Qmouse_fixup_help_message, "mouse-fixup-help-message"); + + DEFSYM (Qabove_handle, "above-handle"); + DEFSYM (Qhandle, "handle"); + DEFSYM (Qbelow_handle, "below-handle"); + DEFSYM (Qup, "up"); + DEFSYM (Qdown, "down"); + DEFSYM (Qtop, "top"); + DEFSYM (Qbottom, "bottom"); + DEFSYM (Qend_scroll, "end-scroll"); + DEFSYM (Qratio, "ratio"); + DEFSYM (Qbefore_handle, "before-handle"); + DEFSYM (Qhorizontal_handle, "horizontal-handle"); + DEFSYM (Qafter_handle, "after-handle"); + DEFSYM (Qleft, "left"); + DEFSYM (Qright, "right"); + DEFSYM (Qleftmost, "leftmost"); + DEFSYM (Qrightmost, "rightmost"); + + /* Properties of event headers. */ + DEFSYM (Qevent_kind, "event-kind"); + DEFSYM (Qevent_symbol_elements, "event-symbol-elements"); + + /* An event header symbol HEAD may have a property named + Qevent_symbol_element_mask, which is of the form (BASE MODIFIERS); + BASE is the base, unmodified version of HEAD, and MODIFIERS is the + mask of modifiers applied to it. If present, this is used to help + speed up parse_modifiers. */ + DEFSYM (Qevent_symbol_element_mask, "event-symbol-element-mask"); + + /* An unmodified event header BASE may have a property named + Qmodifier_cache, which is an alist mapping modifier masks onto + modified versions of BASE. If present, this helps speed up + apply_modifiers. */ + DEFSYM (Qmodifier_cache, "modifier-cache"); + + DEFSYM (Qrecompute_lucid_menubar, "recompute-lucid-menubar"); + DEFSYM (Qactivate_menubar_hook, "activate-menubar-hook"); + + DEFSYM (Qpolling_period, "polling-period"); + + DEFSYM (Qgui_set_selection, "gui-set-selection"); + + /* The primary selection. */ + DEFSYM (QPRIMARY, "PRIMARY"); + + DEFSYM (Qhandle_switch_frame, "handle-switch-frame"); + DEFSYM (Qhandle_select_window, "handle-select-window"); + + DEFSYM (Qinput_method_function, "input-method-function"); + DEFSYM (Qinput_method_exit_on_first_char, "input-method-exit-on-first-char"); + DEFSYM (Qinput_method_use_echo_area, "input-method-use-echo-area"); + + DEFSYM (Qhelp_form_show, "help-form-show"); + + DEFSYM (Qecho_keystrokes, "echo-keystrokes"); + + Fset (Qinput_method_exit_on_first_char, Qnil); + Fset (Qinput_method_use_echo_area, Qnil); + + /* Symbols to head events. */ + DEFSYM (Qmouse_movement, "mouse-movement"); + DEFSYM (Qscroll_bar_movement, "scroll-bar-movement"); + DEFSYM (Qswitch_frame, "switch-frame"); + DEFSYM (Qfocus_in, "focus-in"); + DEFSYM (Qfocus_out, "focus-out"); + DEFSYM (Qdelete_frame, "delete-frame"); + DEFSYM (Qiconify_frame, "iconify-frame"); + DEFSYM (Qmake_frame_visible, "make-frame-visible"); + DEFSYM (Qselect_window, "select-window"); + { + int i; + + for (i = 0; i < ARRAYELTS (head_table); i++) + { + const struct event_head *p = &head_table[i]; + Lisp_Object var = builtin_lisp_symbol (p->var); + Lisp_Object kind = builtin_lisp_symbol (p->kind); + Fput (var, Qevent_kind, kind); + Fput (var, Qevent_symbol_elements, list1 (var)); + } + } + + button_down_location = Fmake_vector (make_number (5), Qnil); + staticpro (&button_down_location); + mouse_syms = Fmake_vector (make_number (5), Qnil); + staticpro (&mouse_syms); + wheel_syms = Fmake_vector (make_number (ARRAYELTS (lispy_wheel_names)), + Qnil); + staticpro (&wheel_syms); + + { + int i; + int len = ARRAYELTS (modifier_names); + + modifier_symbols = Fmake_vector (make_number (len), Qnil); + for (i = 0; i < len; i++) + if (modifier_names[i]) + ASET (modifier_symbols, i, intern_c_string (modifier_names[i])); + staticpro (&modifier_symbols); + } + + recent_keys = Fmake_vector (make_number (NUM_RECENT_KEYS), Qnil); + staticpro (&recent_keys); + + this_command_keys = Fmake_vector (make_number (40), Qnil); + staticpro (&this_command_keys); + + raw_keybuf = Fmake_vector (make_number (30), Qnil); + staticpro (&raw_keybuf); + + DEFSYM (Qcommand_execute, "command-execute"); + + accent_key_syms = Qnil; + staticpro (&accent_key_syms); + + func_key_syms = Qnil; + staticpro (&func_key_syms); + + drag_n_drop_syms = Qnil; + staticpro (&drag_n_drop_syms); + + unread_switch_frame = Qnil; + staticpro (&unread_switch_frame); + + internal_last_event_frame = Qnil; + staticpro (&internal_last_event_frame); + + read_key_sequence_cmd = Qnil; + staticpro (&read_key_sequence_cmd); + read_key_sequence_remapped = Qnil; + staticpro (&read_key_sequence_remapped); + + menu_bar_one_keymap_changed_items = Qnil; + staticpro (&menu_bar_one_keymap_changed_items); + + menu_bar_items_vector = Qnil; + staticpro (&menu_bar_items_vector); + + help_form_saved_window_configs = Qnil; + staticpro (&help_form_saved_window_configs); + + defsubr (&Scurrent_idle_time); + defsubr (&Sevent_symbol_parse_modifiers); + defsubr (&Sevent_convert_list); + defsubr (&Sread_key_sequence); + defsubr (&Sread_key_sequence_vector); + defsubr (&Srecursive_edit); + defsubr (&Strack_mouse); + defsubr (&Sinput_pending_p); + defsubr (&Srecent_keys); + defsubr (&Sthis_command_keys); + defsubr (&Sthis_command_keys_vector); + defsubr (&Sthis_single_command_keys); + defsubr (&Sthis_single_command_raw_keys); + defsubr (&Sreset_this_command_lengths); + defsubr (&Sclear_this_command_keys); + defsubr (&Ssuspend_emacs); + defsubr (&Sabort_recursive_edit); + defsubr (&Sexit_recursive_edit); + defsubr (&Srecursion_depth); + defsubr (&Scommand_error_default_function); + defsubr (&Stop_level); + defsubr (&Sdiscard_input); + defsubr (&Sopen_dribble_file); + defsubr (&Sset_input_interrupt_mode); + defsubr (&Sset_output_flow_control); + defsubr (&Sset_input_meta_mode); + defsubr (&Sset_quit_char); + defsubr (&Sset_input_mode); + defsubr (&Scurrent_input_mode); + defsubr (&Sposn_at_point); + defsubr (&Sposn_at_x_y); + + DEFVAR_LISP ("last-command-event", last_command_event, + doc: /* Last input event that was part of a command. */); + + DEFVAR_LISP ("last-nonmenu-event", last_nonmenu_event, + doc: /* Last input event in a command, except for mouse menu events. +Mouse menus give back keys that don't look like mouse events; +this variable holds the actual mouse event that led to the menu, +so that you can determine whether the command was run by mouse or not. */); + + DEFVAR_LISP ("last-input-event", last_input_event, + doc: /* Last input event. */); + + DEFVAR_LISP ("unread-command-events", Vunread_command_events, + doc: /* List of events to be read as the command input. +These events are processed first, before actual keyboard input. +Events read from this list are not normally added to `this-command-keys', +as they will already have been added once as they were read for the first time. +An element of the form (t . EVENT) forces EVENT to be added to that list. */); + Vunread_command_events = Qnil; + + DEFVAR_LISP ("unread-post-input-method-events", Vunread_post_input_method_events, + doc: /* List of events to be processed as input by input methods. +These events are processed before `unread-command-events' +and actual keyboard input, but are not given to `input-method-function'. */); + Vunread_post_input_method_events = Qnil; + + DEFVAR_LISP ("unread-input-method-events", Vunread_input_method_events, + doc: /* List of events to be processed as input by input methods. +These events are processed after `unread-command-events', but +before actual keyboard input. +If there's an active input method, the events are given to +`input-method-function'. */); + Vunread_input_method_events = Qnil; + + DEFVAR_LISP ("meta-prefix-char", meta_prefix_char, + doc: /* Meta-prefix character code. +Meta-foo as command input turns into this character followed by foo. */); + XSETINT (meta_prefix_char, 033); + + DEFVAR_KBOARD ("last-command", Vlast_command, + doc: /* The last command executed. +Normally a symbol with a function definition, but can be whatever was found +in the keymap, or whatever the variable `this-command' was set to by that +command. + +The value `mode-exit' is special; it means that the previous command +read an event that told it to exit, and it did so and unread that event. +In other words, the present command is the event that made the previous +command exit. + +The value `kill-region' is special; it means that the previous command +was a kill command. + +`last-command' has a separate binding for each terminal device. +See Info node `(elisp)Multiple Terminals'. */); + + DEFVAR_KBOARD ("real-last-command", Vreal_last_command, + doc: /* Same as `last-command', but never altered by Lisp code. +Taken from the previous value of `real-this-command'. */); + + DEFVAR_KBOARD ("last-repeatable-command", Vlast_repeatable_command, + doc: /* Last command that may be repeated. +The last command executed that was not bound to an input event. +This is the command `repeat' will try to repeat. +Taken from a previous value of `real-this-command'. */); + + DEFVAR_LISP ("this-command", Vthis_command, + doc: /* The command now being executed. +The command can set this variable; whatever is put here +will be in `last-command' during the following command. */); + Vthis_command = Qnil; + + DEFVAR_LISP ("real-this-command", Vreal_this_command, + doc: /* This is like `this-command', except that commands should never modify it. */); + Vreal_this_command = Qnil; + + DEFVAR_LISP ("this-command-keys-shift-translated", + Vthis_command_keys_shift_translated, + doc: /* Non-nil if the key sequence activating this command was shift-translated. +Shift-translation occurs when there is no binding for the key sequence +as entered, but a binding was found by changing an upper-case letter +to lower-case, or a shifted function key to an unshifted one. */); + Vthis_command_keys_shift_translated = Qnil; + + DEFVAR_LISP ("this-original-command", Vthis_original_command, + doc: /* The command bound to the current key sequence before remapping. +It equals `this-command' if the original command was not remapped through +any of the active keymaps. Otherwise, the value of `this-command' is the +result of looking up the original command in the active keymaps. */); + Vthis_original_command = Qnil; + + DEFVAR_INT ("auto-save-interval", auto_save_interval, + doc: /* Number of input events between auto-saves. +Zero means disable autosaving due to number of characters typed. */); + auto_save_interval = 300; + + DEFVAR_LISP ("auto-save-timeout", Vauto_save_timeout, + doc: /* Number of seconds idle time before auto-save. +Zero or nil means disable auto-saving due to idleness. +After auto-saving due to this many seconds of idle time, +Emacs also does a garbage collection if that seems to be warranted. */); + XSETFASTINT (Vauto_save_timeout, 30); + + DEFVAR_LISP ("echo-keystrokes", Vecho_keystrokes, + doc: /* Nonzero means echo unfinished commands after this many seconds of pause. +The value may be integer or floating point. +If the value is zero, don't echo at all. */); + Vecho_keystrokes = make_number (1); + + DEFVAR_INT ("polling-period", polling_period, + doc: /* Interval between polling for input during Lisp execution. +The reason for polling is to make C-g work to stop a running program. +Polling is needed only when using X windows and SIGIO does not work. +Polling is automatically disabled in all other cases. */); + polling_period = 2; + + DEFVAR_LISP ("double-click-time", Vdouble_click_time, + doc: /* Maximum time between mouse clicks to make a double-click. +Measured in milliseconds. The value nil means disable double-click +recognition; t means double-clicks have no time limit and are detected +by position only. */); + Vdouble_click_time = make_number (500); + + DEFVAR_INT ("double-click-fuzz", double_click_fuzz, + doc: /* Maximum mouse movement between clicks to make a double-click. +On window-system frames, value is the number of pixels the mouse may have +moved horizontally or vertically between two clicks to make a double-click. +On non window-system frames, value is interpreted in units of 1/8 characters +instead of pixels. + +This variable is also the threshold for motion of the mouse +to count as a drag. */); + double_click_fuzz = 3; + + DEFVAR_INT ("num-input-keys", num_input_keys, + doc: /* Number of complete key sequences read as input so far. +This includes key sequences read from keyboard macros. +The number is effectively the number of interactive command invocations. */); + num_input_keys = 0; + + DEFVAR_INT ("num-nonmacro-input-events", num_nonmacro_input_events, + doc: /* Number of input events read from the keyboard so far. +This does not include events generated by keyboard macros. */); + num_nonmacro_input_events = 0; + + DEFVAR_LISP ("last-event-frame", Vlast_event_frame, + doc: /* The frame in which the most recently read event occurred. +If the last event came from a keyboard macro, this is set to `macro'. */); + Vlast_event_frame = Qnil; + + /* This variable is set up in sysdep.c. */ + DEFVAR_LISP ("tty-erase-char", Vtty_erase_char, + doc: /* The ERASE character as set by the user with stty. */); + + DEFVAR_LISP ("help-char", Vhelp_char, + doc: /* Character to recognize as meaning Help. +When it is read, do `(eval help-form)', and display result if it's a string. +If the value of `help-form' is nil, this char can be read normally. */); + XSETINT (Vhelp_char, Ctl ('H')); + + DEFVAR_LISP ("help-event-list", Vhelp_event_list, + doc: /* List of input events to recognize as meaning Help. +These work just like the value of `help-char' (see that). */); + Vhelp_event_list = Qnil; + + DEFVAR_LISP ("help-form", Vhelp_form, + doc: /* Form to execute when character `help-char' is read. +If the form returns a string, that string is displayed. +If `help-form' is nil, the help char is not recognized. */); + Vhelp_form = Qnil; + + DEFVAR_LISP ("prefix-help-command", Vprefix_help_command, + doc: /* Command to run when `help-char' character follows a prefix key. +This command is used only when there is no actual binding +for that character after that prefix key. */); + Vprefix_help_command = Qnil; + + DEFVAR_LISP ("top-level", Vtop_level, + doc: /* Form to evaluate when Emacs starts up. +Useful to set before you dump a modified Emacs. */); + Vtop_level = Qnil; + XSYMBOL (Qtop_level)->declared_special = false; + + DEFVAR_KBOARD ("keyboard-translate-table", Vkeyboard_translate_table, + doc: /* Translate table for local keyboard input, or nil. +If non-nil, the value should be a char-table. Each character read +from the keyboard is looked up in this char-table. If the value found +there is non-nil, then it is used instead of the actual input character. + +The value can also be a string or vector, but this is considered obsolete. +If it is a string or vector of length N, character codes N and up are left +untranslated. In a vector, an element which is nil means "no translation". + +This is applied to the characters supplied to input methods, not their +output. See also `translation-table-for-input'. + +This variable has a separate binding for each terminal. +See Info node `(elisp)Multiple Terminals'. */); + + DEFVAR_BOOL ("cannot-suspend", cannot_suspend, + doc: /* Non-nil means to always spawn a subshell instead of suspending. +\(Even if the operating system has support for stopping a process.\) */); + cannot_suspend = 0; + + DEFVAR_BOOL ("menu-prompting", menu_prompting, + doc: /* Non-nil means prompt with menus when appropriate. +This is done when reading from a keymap that has a prompt string, +for elements that have prompt strings. +The menu is displayed on the screen +if X menus were enabled at configuration +time and the previous event was a mouse click prefix key. +Otherwise, menu prompting uses the echo area. */); + menu_prompting = 1; + + DEFVAR_LISP ("menu-prompt-more-char", menu_prompt_more_char, + doc: /* Character to see next line of menu prompt. +Type this character while in a menu prompt to rotate around the lines of it. */); + XSETINT (menu_prompt_more_char, ' '); + + DEFVAR_INT ("extra-keyboard-modifiers", extra_keyboard_modifiers, + doc: /* A mask of additional modifier keys to use with every keyboard character. +Emacs applies the modifiers of the character stored here to each keyboard +character it reads. For example, after evaluating the expression + (setq extra-keyboard-modifiers ?\\C-x) +all input characters will have the control modifier applied to them. + +Note that the character ?\\C-@, equivalent to the integer zero, does +not count as a control character; rather, it counts as a character +with no modifiers; thus, setting `extra-keyboard-modifiers' to zero +cancels any modification. */); + extra_keyboard_modifiers = 0; + + DEFSYM (Qdeactivate_mark, "deactivate-mark"); + DEFVAR_LISP ("deactivate-mark", Vdeactivate_mark, + doc: /* If an editing command sets this to t, deactivate the mark afterward. +The command loop sets this to nil before each command, +and tests the value when the command returns. +Buffer modification stores t in this variable. */); + Vdeactivate_mark = Qnil; + Fmake_variable_buffer_local (Qdeactivate_mark); + + DEFVAR_LISP ("pre-command-hook", Vpre_command_hook, + doc: /* Normal hook run before each command is executed. +If an unhandled error happens in running this hook, +the function in which the error occurred is unconditionally removed, since +otherwise the error might happen repeatedly and make Emacs nonfunctional. */); + Vpre_command_hook = Qnil; + + DEFVAR_LISP ("post-command-hook", Vpost_command_hook, + doc: /* Normal hook run after each command is executed. +If an unhandled error happens in running this hook, +the function in which the error occurred is unconditionally removed, since +otherwise the error might happen repeatedly and make Emacs nonfunctional. */); + Vpost_command_hook = Qnil; + +#if 0 + DEFVAR_LISP ("echo-area-clear-hook", ..., + doc: /* Normal hook run when clearing the echo area. */); +#endif + DEFSYM (Qecho_area_clear_hook, "echo-area-clear-hook"); + Fset (Qecho_area_clear_hook, Qnil); + + DEFVAR_LISP ("lucid-menu-bar-dirty-flag", Vlucid_menu_bar_dirty_flag, + doc: /* Non-nil means menu bar, specified Lucid style, needs to be recomputed. */); + Vlucid_menu_bar_dirty_flag = Qnil; + + DEFVAR_LISP ("menu-bar-final-items", Vmenu_bar_final_items, + doc: /* List of menu bar items to move to the end of the menu bar. +The elements of the list are event types that may have menu bar bindings. */); + Vmenu_bar_final_items = Qnil; + + DEFVAR_LISP ("tool-bar-separator-image-expression", Vtool_bar_separator_image_expression, + doc: /* Expression evaluating to the image spec for a tool-bar separator. +This is used internally by graphical displays that do not render +tool-bar separators natively. Otherwise it is unused (e.g. on GTK). */); + Vtool_bar_separator_image_expression = Qnil; + + DEFVAR_KBOARD ("overriding-terminal-local-map", + Voverriding_terminal_local_map, + doc: /* Per-terminal keymap that takes precedence over all other keymaps. +This variable is intended to let commands such as `universal-argument' +set up a different keymap for reading the next command. + +`overriding-terminal-local-map' has a separate binding for each +terminal device. See Info node `(elisp)Multiple Terminals'. */); + + DEFVAR_LISP ("overriding-local-map", Voverriding_local_map, + doc: /* Keymap that replaces (overrides) local keymaps. +If this variable is non-nil, Emacs looks up key bindings in this +keymap INSTEAD OF the keymap char property, minor mode maps, and the +buffer's local map. Hence, the only active keymaps would be +`overriding-terminal-local-map', this keymap, and `global-keymap', in +order of precedence. */); + Voverriding_local_map = Qnil; + + DEFVAR_LISP ("overriding-local-map-menu-flag", Voverriding_local_map_menu_flag, + doc: /* Non-nil means `overriding-local-map' applies to the menu bar. +Otherwise, the menu bar continues to reflect the buffer's local map +and the minor mode maps regardless of `overriding-local-map'. */); + Voverriding_local_map_menu_flag = Qnil; + + DEFVAR_LISP ("special-event-map", Vspecial_event_map, + doc: /* Keymap defining bindings for special events to execute at low level. */); + Vspecial_event_map = list1 (Qkeymap); + + DEFVAR_LISP ("track-mouse", do_mouse_tracking, + doc: /* Non-nil means generate motion events for mouse motion. */); + + DEFVAR_KBOARD ("system-key-alist", Vsystem_key_alist, + doc: /* Alist of system-specific X windows key symbols. +Each element should have the form (N . SYMBOL) where N is the +numeric keysym code (sans the \"system-specific\" bit 1<<28) +and SYMBOL is its name. + +`system-key-alist' has a separate binding for each terminal device. +See Info node `(elisp)Multiple Terminals'. */); + + DEFVAR_KBOARD ("local-function-key-map", Vlocal_function_key_map, + doc: /* Keymap that translates key sequences to key sequences during input. +This is used mainly for mapping key sequences into some preferred +key events (symbols). + +The `read-key-sequence' function replaces any subsequence bound by +`local-function-key-map' with its binding. More precisely, when the +active keymaps have no binding for the current key sequence but +`local-function-key-map' binds a suffix of the sequence to a vector or +string, `read-key-sequence' replaces the matching suffix with its +binding, and continues with the new sequence. + +If the binding is a function, it is called with one argument (the prompt) +and its return value (a key sequence) is used. + +The events that come from bindings in `local-function-key-map' are not +themselves looked up in `local-function-key-map'. + +For example, suppose `local-function-key-map' binds `ESC O P' to [f1]. +Typing `ESC O P' to `read-key-sequence' would return [f1]. Typing +`C-x ESC O P' would return [?\\C-x f1]. If [f1] were a prefix key, +typing `ESC O P x' would return [f1 x]. + +`local-function-key-map' has a separate binding for each terminal +device. See Info node `(elisp)Multiple Terminals'. If you need to +define a binding on all terminals, change `function-key-map' +instead. Initially, `local-function-key-map' is an empty keymap that +has `function-key-map' as its parent on all terminal devices. */); + + DEFVAR_KBOARD ("input-decode-map", Vinput_decode_map, + doc: /* Keymap that decodes input escape sequences. +This is used mainly for mapping ASCII function key sequences into +real Emacs function key events (symbols). + +The `read-key-sequence' function replaces any subsequence bound by +`input-decode-map' with its binding. Contrary to `function-key-map', +this map applies its rebinding regardless of the presence of an ordinary +binding. So it is more like `key-translation-map' except that it applies +before `function-key-map' rather than after. + +If the binding is a function, it is called with one argument (the prompt) +and its return value (a key sequence) is used. + +The events that come from bindings in `input-decode-map' are not +themselves looked up in `input-decode-map'. */); + + DEFVAR_LISP ("function-key-map", Vfunction_key_map, + doc: /* The parent keymap of all `local-function-key-map' instances. +Function key definitions that apply to all terminal devices should go +here. If a mapping is defined in both the current +`local-function-key-map' binding and this variable, then the local +definition will take precedence. */); + Vfunction_key_map = Fmake_sparse_keymap (Qnil); + + DEFVAR_LISP ("key-translation-map", Vkey_translation_map, + doc: /* Keymap of key translations that can override keymaps. +This keymap works like `input-decode-map', but comes after `function-key-map'. +Another difference is that it is global rather than terminal-local. */); + Vkey_translation_map = Fmake_sparse_keymap (Qnil); + + DEFVAR_LISP ("deferred-action-list", Vdeferred_action_list, + doc: /* List of deferred actions to be performed at a later time. +The precise format isn't relevant here; we just check whether it is nil. */); + Vdeferred_action_list = Qnil; + + DEFVAR_LISP ("deferred-action-function", Vdeferred_action_function, + doc: /* Function to call to handle deferred actions, after each command. +This function is called with no arguments after each command +whenever `deferred-action-list' is non-nil. */); + Vdeferred_action_function = Qnil; + + DEFVAR_LISP ("delayed-warnings-list", Vdelayed_warnings_list, + doc: /* List of warnings to be displayed after this command. +Each element must be a list (TYPE MESSAGE [LEVEL [BUFFER-NAME]]), +as per the args of `display-warning' (which see). +If this variable is non-nil, `delayed-warnings-hook' will be run +immediately after running `post-command-hook'. */); + Vdelayed_warnings_list = Qnil; + + DEFVAR_LISP ("timer-list", Vtimer_list, + doc: /* List of active absolute time timers in order of increasing time. */); + Vtimer_list = Qnil; + + DEFVAR_LISP ("timer-idle-list", Vtimer_idle_list, + doc: /* List of active idle-time timers in order of increasing time. */); + Vtimer_idle_list = Qnil; + + DEFVAR_LISP ("input-method-function", Vinput_method_function, + doc: /* If non-nil, the function that implements the current input method. +It's called with one argument, a printing character that was just read. +\(That means a character with code 040...0176.) +Typically this function uses `read-event' to read additional events. +When it does so, it should first bind `input-method-function' to nil +so it will not be called recursively. + +The function should return a list of zero or more events +to be used as input. If it wants to put back some events +to be reconsidered, separately, by the input method, +it can add them to the beginning of `unread-command-events'. + +The input method function can find in `input-method-previous-message' +the previous echo area message. + +The input method function should refer to the variables +`input-method-use-echo-area' and `input-method-exit-on-first-char' +for guidance on what to do. */); + Vinput_method_function = Qlist; + + DEFVAR_LISP ("input-method-previous-message", + Vinput_method_previous_message, + doc: /* When `input-method-function' is called, hold the previous echo area message. +This variable exists because `read-event' clears the echo area +before running the input method. It is nil if there was no message. */); + Vinput_method_previous_message = Qnil; + + DEFVAR_LISP ("show-help-function", Vshow_help_function, + doc: /* If non-nil, the function that implements the display of help. +It's called with one argument, the help string to display. */); + Vshow_help_function = Qnil; + + DEFVAR_LISP ("disable-point-adjustment", Vdisable_point_adjustment, + doc: /* If non-nil, suppress point adjustment after executing a command. + +After a command is executed, if point is moved into a region that has +special properties (e.g. composition, display), we adjust point to +the boundary of the region. But, when a command sets this variable to +non-nil, we suppress the point adjustment. + +This variable is set to nil before reading a command, and is checked +just after executing the command. */); + Vdisable_point_adjustment = Qnil; + + DEFVAR_LISP ("global-disable-point-adjustment", + Vglobal_disable_point_adjustment, + doc: /* If non-nil, always suppress point adjustment. + +The default value is nil, in which case, point adjustment are +suppressed only after special commands that set +`disable-point-adjustment' (which see) to non-nil. */); + Vglobal_disable_point_adjustment = Qnil; + + DEFVAR_LISP ("minibuffer-message-timeout", Vminibuffer_message_timeout, + doc: /* How long to display an echo-area message when the minibuffer is active. +If the value is not a number, such messages don't time out. */); + Vminibuffer_message_timeout = make_number (2); + + DEFVAR_LISP ("throw-on-input", Vthrow_on_input, + doc: /* If non-nil, any keyboard input throws to this symbol. +The value of that variable is passed to `quit-flag' and later causes a +peculiar kind of quitting. */); + Vthrow_on_input = Qnil; + + DEFVAR_LISP ("command-error-function", Vcommand_error_function, + doc: /* Function to output error messages. +Called with three arguments: +- the error data, a list of the form (SIGNALED-CONDITION . SIGNAL-DATA) + such as what `condition-case' would bind its variable to, +- the context (a string which normally goes at the start of the message), +- the Lisp function within which the error was signaled. */); + Vcommand_error_function = intern ("command-error-default-function"); + + DEFVAR_LISP ("enable-disabled-menus-and-buttons", + Venable_disabled_menus_and_buttons, + doc: /* If non-nil, don't ignore events produced by disabled menu items and tool-bar. + +Help functions bind this to allow help on disabled menu items +and tool-bar buttons. */); + Venable_disabled_menus_and_buttons = Qnil; + + DEFVAR_LISP ("select-active-regions", + Vselect_active_regions, + doc: /* If non-nil, an active region automatically sets the primary selection. +If the value is `only', only temporarily active regions (usually made +by mouse-dragging or shift-selection) set the window selection. + +This takes effect only when Transient Mark mode is enabled. */); + Vselect_active_regions = Qt; + + DEFVAR_LISP ("saved-region-selection", + Vsaved_region_selection, + doc: /* Contents of active region prior to buffer modification. +If `select-active-regions' is non-nil, Emacs sets this to the +text in the region before modifying the buffer. The next call to +the function `deactivate-mark' uses this to set the window selection. */); + Vsaved_region_selection = Qnil; + + DEFVAR_LISP ("selection-inhibit-update-commands", + Vselection_inhibit_update_commands, + doc: /* List of commands which should not update the selection. +Normally, if `select-active-regions' is non-nil and the mark remains +active after a command (i.e. the mark was not deactivated), the Emacs +command loop sets the selection to the text in the region. However, +if the command is in this list, the selection is not updated. */); + Vselection_inhibit_update_commands + = list2 (Qhandle_switch_frame, Qhandle_select_window); + + DEFVAR_LISP ("debug-on-event", + Vdebug_on_event, + doc: /* Enter debugger on this event. When Emacs +receives the special event specified by this variable, it will try to +break into the debugger as soon as possible instead of processing the +event normally through `special-event-map'. + +Currently, the only supported values for this +variable are `sigusr1' and `sigusr2'. */); + Vdebug_on_event = intern_c_string ("sigusr2"); + + /* Create the initial keyboard. Qt means 'unset'. */ + initial_kboard = allocate_kboard (Qt); +} + +void +keys_of_keyboard (void) +{ + initial_define_key (global_map, Ctl ('Z'), "suspend-emacs"); + initial_define_key (control_x_map, Ctl ('Z'), "suspend-emacs"); + initial_define_key (meta_map, Ctl ('C'), "exit-recursive-edit"); + initial_define_key (global_map, Ctl (']'), "abort-recursive-edit"); + initial_define_key (meta_map, 'x', "execute-extended-command"); + + initial_define_lispy_key (Vspecial_event_map, "delete-frame", + "handle-delete-frame"); + initial_define_lispy_key (Vspecial_event_map, "ns-put-working-text", + "ns-put-working-text"); + initial_define_lispy_key (Vspecial_event_map, "ns-unput-working-text", + "ns-unput-working-text"); + /* Here we used to use `ignore-event' which would simple set prefix-arg to + current-prefix-arg, as is done in `handle-switch-frame'. + But `handle-switch-frame is not run from the special-map. + Commands from that map are run in a special way that automatically + preserves the prefix-arg. Restoring the prefix arg here is not just + redundant but harmful: + - C-u C-x v = + - current-prefix-arg is set to non-nil, prefix-arg is set to nil. + - after the first prompt, the exit-minibuffer-hook is run which may + iconify a frame and thus push a `iconify-frame' event. + - after running exit-minibuffer-hook, current-prefix-arg is + restored to the non-nil value it had before the prompt. + - we enter the second prompt. + current-prefix-arg is non-nil, prefix-arg is nil. + - before running the first real event, we run the special iconify-frame + event, but we pass the `special' arg to command-execute so + current-prefix-arg and prefix-arg are left untouched. + - here we foolishly copy the non-nil current-prefix-arg to prefix-arg. + - the next key event will have a spuriously non-nil current-prefix-arg. */ + initial_define_lispy_key (Vspecial_event_map, "iconify-frame", + "ignore"); + initial_define_lispy_key (Vspecial_event_map, "make-frame-visible", + "ignore"); + /* Handling it at such a low-level causes read_key_sequence to get + * confused because it doesn't realize that the current_buffer was + * changed by read_char. + * + * initial_define_lispy_key (Vspecial_event_map, "select-window", + * "handle-select-window"); */ + initial_define_lispy_key (Vspecial_event_map, "save-session", + "handle-save-session"); + +#ifdef HAVE_DBUS + /* Define a special event which is raised for dbus callback + functions. */ + initial_define_lispy_key (Vspecial_event_map, "dbus-event", + "dbus-handle-event"); +#endif + +#ifdef USE_FILE_NOTIFY + /* Define a special event which is raised for notification callback + functions. */ + initial_define_lispy_key (Vspecial_event_map, "file-notify", + "file-notify-handle-event"); +#endif /* USE_FILE_NOTIFY */ + + initial_define_lispy_key (Vspecial_event_map, "config-changed-event", + "ignore"); +#if defined (WINDOWSNT) + initial_define_lispy_key (Vspecial_event_map, "language-change", + "ignore"); +#endif + initial_define_lispy_key (Vspecial_event_map, "focus-in", + "handle-focus-in"); + initial_define_lispy_key (Vspecial_event_map, "focus-out", + "handle-focus-out"); +} + +/* Mark the pointers in the kboard objects. + Called by Fgarbage_collect. */ +void +mark_kboards (void) +{ + KBOARD *kb; + Lisp_Object *p; + for (kb = all_kboards; kb; kb = kb->next_kboard) + { + if (kb->kbd_macro_buffer) + for (p = kb->kbd_macro_buffer; p < kb->kbd_macro_ptr; p++) + mark_object (*p); + mark_object (KVAR (kb, Voverriding_terminal_local_map)); + mark_object (KVAR (kb, Vlast_command)); + mark_object (KVAR (kb, Vreal_last_command)); + mark_object (KVAR (kb, Vkeyboard_translate_table)); + mark_object (KVAR (kb, Vlast_repeatable_command)); + mark_object (KVAR (kb, Vprefix_arg)); + mark_object (KVAR (kb, Vlast_prefix_arg)); + mark_object (KVAR (kb, kbd_queue)); + mark_object (KVAR (kb, defining_kbd_macro)); + mark_object (KVAR (kb, Vlast_kbd_macro)); + mark_object (KVAR (kb, Vsystem_key_alist)); + mark_object (KVAR (kb, system_key_syms)); + mark_object (KVAR (kb, Vwindow_system)); + mark_object (KVAR (kb, Vinput_decode_map)); + mark_object (KVAR (kb, Vlocal_function_key_map)); + mark_object (KVAR (kb, Vdefault_minibuffer_frame)); + mark_object (KVAR (kb, echo_string)); + } + { + struct input_event *event; + for (event = kbd_fetch_ptr; event != kbd_store_ptr; event++) + { + if (event == kbd_buffer + KBD_BUFFER_SIZE) + event = kbd_buffer; + /* These two special event types has no Lisp_Objects to mark. */ + if (event->kind != SELECTION_REQUEST_EVENT + && event->kind != SELECTION_CLEAR_EVENT) + { + mark_object (event->x); + mark_object (event->y); + mark_object (event->frame_or_window); + mark_object (event->arg); + } + } + } +} 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 00000000000..6d34ce3b052 --- /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 . */ + +#ifndef EMACS_LISP_H +#define EMACS_LISP_H + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +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 's 'assert (COND)' and '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 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 00000000000..3dfecf0a7e5 --- /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 . */ + +#ifndef _REGEX_H +#define _REGEX_H 1 + +/* Allow the use in C++ code. */ +#ifdef __cplusplus +extern "C" { +#endif + +/* POSIX says that must be included (by the caller) before + . */ + +#if !defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE && defined VMS +/* VMS doesn't have `size_t' in , even though POSIX says it + should be there. */ +# include +#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 \ matches . + If not set, then \ 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: must be included before . */ +# include +# include +#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/test/etags/c-src/etags.c b/test/etags/c-src/etags.c new file mode 100644 index 00000000000..f2438213d04 --- /dev/null +++ b/test/etags/c-src/etags.c @@ -0,0 +1,6563 @@ +/* Tags file maker to go with GNU Emacs -*- coding: utf-8 -*- + +Copyright (C) 1984 The Regents of the University of California + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the + distribution. +3. Neither the name of the University nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2015 Free Software +Foundation, Inc. + +This file is not considered part of GNU Emacs. + +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 of the License, 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 . */ + + +/* NB To comply with the above BSD license, copyright information is +reproduced in etc/ETAGS.README. That file should be updated when the +above notices are. + +To the best of our knowledge, this code was originally based on the +ctags.c distributed with BSD4.2, which was copyrighted by the +University of California, as described above. */ + + +/* + * Authors: + * 1983 Ctags originally by Ken Arnold. + * 1984 Fortran added by Jim Kleckner. + * 1984 Ed Pelegri-Llopart added C typedefs. + * 1985 Emacs TAGS format by Richard Stallman. + * 1989 Sam Kendall added C++. + * 1992 Joseph B. Wells improved C and C++ parsing. + * 1993 Francesco Potortì reorganized C and C++. + * 1994 Line-by-line regexp tags by Tom Tromey. + * 2001 Nested classes by Francesco Potortì (concept by Mykola Dzyuba). + * 2002 #line directives by Francesco Potortì. + * + * Francesco Potortì has maintained and improved it since 1993. + */ + +/* + * If you want to add support for a new language, start by looking at the LUA + * language, which is the simplest. Alternatively, consider distributing etags + * together with a configuration file containing regexp definitions for etags. + */ + +char pot_etags_version[] = "@(#) pot revision number is 17.38.1.4"; + +#ifdef DEBUG +# undef DEBUG +# define DEBUG true +#else +# define DEBUG false +# define NDEBUG /* disable assert */ +#endif + +#include + +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 /* enables some compiler checks on GNU */ +#endif + +/* WIN32_NATIVE is for XEmacs. + MSDOS, WINDOWSNT, DOS_NT are for Emacs. */ +#ifdef WIN32_NATIVE +# undef MSDOS +# undef WINDOWSNT +# define WINDOWSNT +#endif /* WIN32_NATIVE */ + +#ifdef MSDOS +# undef MSDOS +# define MSDOS true +# include +#else +# define MSDOS false +#endif /* MSDOS */ + +#ifdef WINDOWSNT +# include +# define MAXPATHLEN _MAX_PATH +# undef HAVE_NTGUI +# undef DOS_NT +# define DOS_NT +#endif /* WINDOWSNT */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#ifdef NDEBUG +# undef assert /* some systems have a buggy assert.h */ +# define assert(x) ((void) 0) +#endif + +#include +#include + +/* Define CTAGS to make the program "ctags" compatible with the usual one. + Leave it undefined to make the program "etags", which makes emacs-style + tag tables and tags typedefs, #defines and struct/union/enum by default. */ +#ifdef CTAGS +# undef CTAGS +# define CTAGS true +#else +# define CTAGS false +#endif + +#define streq(s,t) (assert ((s)!=NULL || (t)!=NULL), !strcmp (s, t)) +#define strcaseeq(s,t) (assert ((s)!=NULL && (t)!=NULL), !c_strcasecmp (s, t)) +#define strneq(s,t,n) (assert ((s)!=NULL || (t)!=NULL), !strncmp (s, t, n)) +#define strncaseeq(s,t,n) (assert ((s)!=NULL && (t)!=NULL), !c_strncasecmp (s, t, n)) + +#define CHARS 256 /* 2^sizeof(char) */ +#define CHAR(x) ((unsigned int)(x) & (CHARS - 1)) +#define iswhite(c) (_wht[CHAR (c)]) /* c is white (see white) */ +#define notinname(c) (_nin[CHAR (c)]) /* c is not in a name (see nonam) */ +#define begtoken(c) (_btk[CHAR (c)]) /* c can start token (see begtk) */ +#define intoken(c) (_itk[CHAR (c)]) /* c can be in token (see midtk) */ +#define endtoken(c) (_etk[CHAR (c)]) /* c ends tokens (see endtk) */ + +#define ISALNUM(c) isalnum (CHAR (c)) +#define ISALPHA(c) isalpha (CHAR (c)) +#define ISDIGIT(c) isdigit (CHAR (c)) +#define ISLOWER(c) islower (CHAR (c)) + +#define lowcase(c) tolower (CHAR (c)) + + +/* + * xnew, xrnew -- allocate, reallocate storage + * + * SYNOPSIS: Type *xnew (int n, Type); + * void xrnew (OldPointer, int n, Type); + */ +#define xnew(n, Type) ((Type *) xmalloc ((n) * sizeof (Type))) +#define xrnew(op, n, Type) ((op) = (Type *) xrealloc (op, (n) * sizeof (Type))) + +typedef void Lang_function (FILE *); + +typedef struct +{ + const char *suffix; /* file name suffix for this compressor */ + const char *command; /* takes one arg and decompresses to stdout */ +} compressor; + +typedef struct +{ + const char *name; /* language name */ + const char *help; /* detailed help for the language */ + Lang_function *function; /* parse function */ + const char **suffixes; /* name suffixes of this language's files */ + const char **filenames; /* names of this language's files */ + const char **interpreters; /* interpreters for this language */ + bool metasource; /* source used to generate other sources */ +} language; + +typedef struct fdesc +{ + struct fdesc *next; /* for the linked list */ + char *infname; /* uncompressed input file name */ + char *infabsname; /* absolute uncompressed input file name */ + char *infabsdir; /* absolute dir of input file */ + char *taggedfname; /* file name to write in tagfile */ + language *lang; /* language of file */ + char *prop; /* file properties to write in tagfile */ + bool usecharno; /* etags tags shall contain char number */ + bool written; /* entry written in the tags file */ +} fdesc; + +typedef struct node_st +{ /* sorting structure */ + struct node_st *left, *right; /* left and right sons */ + fdesc *fdp; /* description of file to whom tag belongs */ + char *name; /* tag name */ + char *regex; /* search regexp */ + bool valid; /* write this tag on the tag file */ + bool is_func; /* function tag: use regexp in CTAGS mode */ + bool been_warned; /* warning already given for duplicated tag */ + int lno; /* line number tag is on */ + long cno; /* character number line starts on */ +} node; + +/* + * A `linebuffer' is a structure which holds a line of text. + * `readline_internal' reads a line from a stream into a linebuffer + * and works regardless of the length of the line. + * SIZE is the size of BUFFER, LEN is the length of the string in + * BUFFER after readline reads it. + */ +typedef struct +{ + long size; + int len; + char *buffer; +} linebuffer; + +/* Used to support mixing of --lang and file names. */ +typedef struct +{ + enum { + at_language, /* a language specification */ + at_regexp, /* a regular expression */ + at_filename, /* a file name */ + at_stdin, /* read from stdin here */ + at_end /* stop parsing the list */ + } arg_type; /* argument type */ + language *lang; /* language associated with the argument */ + char *what; /* the argument itself */ +} argument; + +/* Structure defining a regular expression. */ +typedef struct regexp +{ + struct regexp *p_next; /* pointer to next in list */ + language *lang; /* if set, use only for this language */ + char *pattern; /* the regexp pattern */ + char *name; /* tag name */ + struct re_pattern_buffer *pat; /* the compiled pattern */ + struct re_registers regs; /* re registers */ + bool error_signaled; /* already signaled for this regexp */ + bool force_explicit_name; /* do not allow implicit tag name */ + bool ignore_case; /* ignore case when matching */ + bool multi_line; /* do a multi-line match on the whole file */ +} regexp; + + +/* Many compilers barf on this: + Lang_function Ada_funcs; + so let's write it this way */ +static void Ada_funcs (FILE *); +static void Asm_labels (FILE *); +static void C_entries (int c_ext, FILE *); +static void default_C_entries (FILE *); +static void plain_C_entries (FILE *); +static void Cjava_entries (FILE *); +static void Cobol_paragraphs (FILE *); +static void Cplusplus_entries (FILE *); +static void Cstar_entries (FILE *); +static void Erlang_functions (FILE *); +static void Forth_words (FILE *); +static void Fortran_functions (FILE *); +static void HTML_labels (FILE *); +static void Lisp_functions (FILE *); +static void Lua_functions (FILE *); +static void Makefile_targets (FILE *); +static void Pascal_functions (FILE *); +static void Perl_functions (FILE *); +static void PHP_functions (FILE *); +static void PS_functions (FILE *); +static void Prolog_functions (FILE *); +static void Python_functions (FILE *); +static void Scheme_functions (FILE *); +static void TeX_commands (FILE *); +static void Texinfo_nodes (FILE *); +static void Yacc_entries (FILE *); +static void just_read_file (FILE *); + +static language *get_language_from_langname (const char *); +static void readline (linebuffer *, FILE *); +static long readline_internal (linebuffer *, FILE *); +static bool nocase_tail (const char *); +static void get_tag (char *, char **); + +static void analyze_regex (char *); +static void free_regexps (void); +static void regex_tag_multiline (void); +static void error (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2); +static _Noreturn void suggest_asking_for_help (void); +_Noreturn void fatal (const char *, const char *); +static _Noreturn void pfatal (const char *); +static void add_node (node *, node **); + +static void init (void); +static void process_file_name (char *, language *); +static void process_file (FILE *, char *, language *); +static void find_entries (FILE *); +static void free_tree (node *); +static void free_fdesc (fdesc *); +static void pfnote (char *, bool, char *, int, int, long); +static void invalidate_nodes (fdesc *, node **); +static void put_entries (node *); + +static char *concat (const char *, const char *, const char *); +static char *skip_spaces (char *); +static char *skip_non_spaces (char *); +static char *skip_name (char *); +static char *savenstr (const char *, int); +static char *savestr (const char *); +static char *etags_getcwd (void); +static char *relative_filename (char *, char *); +static char *absolute_filename (char *, char *); +static char *absolute_dirname (char *, char *); +static bool filename_is_absolute (char *f); +static void canonicalize_filename (char *); +static void linebuffer_init (linebuffer *); +static void linebuffer_setlen (linebuffer *, int); +static void *xmalloc (size_t); +static void *xrealloc (void *, size_t); + + +static char searchar = '/'; /* use /.../ searches */ + +static char *tagfile; /* output file */ +static char *progname; /* name this program was invoked with */ +static char *cwd; /* current working directory */ +static char *tagfiledir; /* directory of tagfile */ +static FILE *tagf; /* ioptr for tags file */ +static ptrdiff_t whatlen_max; /* maximum length of any 'what' member */ + +static fdesc *fdhead; /* head of file description list */ +static fdesc *curfdp; /* current file description */ +static int lineno; /* line number of current line */ +static long charno; /* current character number */ +static long linecharno; /* charno of start of current line */ +static char *dbp; /* pointer to start of current tag */ + +static const int invalidcharno = -1; + +static node *nodehead; /* the head of the binary tree of tags */ +static node *last_node; /* the last node created */ + +static linebuffer lb; /* the current line */ +static linebuffer filebuf; /* a buffer containing the whole file */ +static linebuffer token_name; /* a buffer containing a tag name */ + +/* boolean "functions" (see init) */ +static bool _wht[CHARS], _nin[CHARS], _itk[CHARS], _btk[CHARS], _etk[CHARS]; +static const char + /* white chars */ + *white = " \f\t\n\r\v", + /* not in a name */ + *nonam = " \f\t\n\r()=,;", /* look at make_tag before modifying! */ + /* token ending chars */ + *endtk = " \t\n\r\"'#()[]{}=-+%*/&|^~!<>;,.:?", + /* token starting chars */ + *begtk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz$~@", + /* valid in-token chars */ + *midtk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz$0123456789"; + +static bool append_to_tagfile; /* -a: append to tags */ +/* The next five default to true in C and derived languages. */ +static bool typedefs; /* -t: create tags for C and Ada typedefs */ +static bool typedefs_or_cplusplus; /* -T: create tags for C typedefs, level */ + /* 0 struct/enum/union decls, and C++ */ + /* member functions. */ +static bool constantypedefs; /* -d: create tags for C #define, enum */ + /* constants and variables. */ + /* -D: opposite of -d. Default under ctags. */ +static int globals; /* create tags for global variables */ +static int members; /* create tags for C member variables */ +static int declarations; /* --declarations: tag them and extern in C&Co*/ +static int no_line_directive; /* ignore #line directives (undocumented) */ +static int no_duplicates; /* no duplicate tags for ctags (undocumented) */ +static bool update; /* -u: update tags */ +static bool vgrind_style; /* -v: create vgrind style index output */ +static bool no_warnings; /* -w: suppress warnings (undocumented) */ +static bool cxref_style; /* -x: create cxref style output */ +static bool cplusplus; /* .[hc] means C++, not C (undocumented) */ +static bool ignoreindent; /* -I: ignore indentation in C */ +static int packages_only; /* --packages-only: in Ada, only tag packages*/ + +/* STDIN is defined in LynxOS system headers */ +#ifdef STDIN +# undef STDIN +#endif + +#define STDIN 0x1001 /* returned by getopt_long on --parse-stdin */ +static bool parsing_stdin; /* --parse-stdin used */ + +static regexp *p_head; /* list of all regexps */ +static bool need_filebuf; /* some regexes are multi-line */ + +static struct option longopts[] = +{ + { "append", no_argument, NULL, 'a' }, + { "packages-only", no_argument, &packages_only, 1 }, + { "c++", no_argument, NULL, 'C' }, + { "declarations", no_argument, &declarations, 1 }, + { "no-line-directive", no_argument, &no_line_directive, 1 }, + { "no-duplicates", no_argument, &no_duplicates, 1 }, + { "help", no_argument, NULL, 'h' }, + { "help", no_argument, NULL, 'H' }, + { "ignore-indentation", no_argument, NULL, 'I' }, + { "language", required_argument, NULL, 'l' }, + { "members", no_argument, &members, 1 }, + { "no-members", no_argument, &members, 0 }, + { "output", required_argument, NULL, 'o' }, + { "regex", required_argument, NULL, 'r' }, + { "no-regex", no_argument, NULL, 'R' }, + { "ignore-case-regex", required_argument, NULL, 'c' }, + { "parse-stdin", required_argument, NULL, STDIN }, + { "version", no_argument, NULL, 'V' }, + +#if CTAGS /* Ctags options */ + { "backward-search", no_argument, NULL, 'B' }, + { "cxref", no_argument, NULL, 'x' }, + { "defines", no_argument, NULL, 'd' }, + { "globals", no_argument, &globals, 1 }, + { "typedefs", no_argument, NULL, 't' }, + { "typedefs-and-c++", no_argument, NULL, 'T' }, + { "update", no_argument, NULL, 'u' }, + { "vgrind", no_argument, NULL, 'v' }, + { "no-warn", no_argument, NULL, 'w' }, + +#else /* Etags options */ + { "no-defines", no_argument, NULL, 'D' }, + { "no-globals", no_argument, &globals, 0 }, + { "include", required_argument, NULL, 'i' }, +#endif + { NULL } +}; + +static compressor compressors[] = +{ + { "z", "gzip -d -c"}, + { "Z", "gzip -d -c"}, + { "gz", "gzip -d -c"}, + { "GZ", "gzip -d -c"}, + { "bz2", "bzip2 -d -c" }, + { "xz", "xz -d -c" }, + { NULL } +}; + +/* + * Language stuff. + */ + +/* Ada code */ +static const char *Ada_suffixes [] = + { "ads", "adb", "ada", NULL }; +static const char Ada_help [] = +"In Ada code, functions, procedures, packages, tasks and types are\n\ +tags. Use the `--packages-only' option to create tags for\n\ +packages only.\n\ +Ada tag names have suffixes indicating the type of entity:\n\ + Entity type: Qualifier:\n\ + ------------ ----------\n\ + function /f\n\ + procedure /p\n\ + package spec /s\n\ + package body /b\n\ + type /t\n\ + task /k\n\ +Thus, `M-x find-tag bidule/b ' will go directly to the\n\ +body of the package `bidule', while `M-x find-tag bidule '\n\ +will just search for any tag `bidule'."; + +/* Assembly code */ +static const char *Asm_suffixes [] = + { "a", /* Unix assembler */ + "asm", /* Microcontroller assembly */ + "def", /* BSO/Tasking definition includes */ + "inc", /* Microcontroller include files */ + "ins", /* Microcontroller include files */ + "s", "sa", /* Unix assembler */ + "S", /* cpp-processed Unix assembler */ + "src", /* BSO/Tasking C compiler output */ + NULL + }; +static const char Asm_help [] = +"In assembler code, labels appearing at the beginning of a line,\n\ +followed by a colon, are tags."; + + +/* Note that .c and .h can be considered C++, if the --c++ flag was + given, or if the `class' or `template' keywords are met inside the file. + That is why default_C_entries is called for these. */ +static const char *default_C_suffixes [] = + { "c", "h", NULL }; +#if CTAGS /* C help for Ctags */ +static const char default_C_help [] = +"In C code, any C function is a tag. Use -t to tag typedefs.\n\ +Use -T to tag definitions of `struct', `union' and `enum'.\n\ +Use -d to tag `#define' macro definitions and `enum' constants.\n\ +Use --globals to tag global variables.\n\ +You can tag function declarations and external variables by\n\ +using `--declarations', and struct members by using `--members'."; +#else /* C help for Etags */ +static const char default_C_help [] = +"In C code, any C function or typedef is a tag, and so are\n\ +definitions of `struct', `union' and `enum'. `#define' macro\n\ +definitions and `enum' constants are tags unless you specify\n\ +`--no-defines'. Global variables are tags unless you specify\n\ +`--no-globals' and so are struct members unless you specify\n\ +`--no-members'. Use of `--no-globals', `--no-defines' and\n\ +`--no-members' can make the tags table file much smaller.\n\ +You can tag function declarations and external variables by\n\ +using `--declarations'."; +#endif /* C help for Ctags and Etags */ + +static const char *Cplusplus_suffixes [] = + { "C", "c++", "cc", "cpp", "cxx", "H", "h++", "hh", "hpp", "hxx", + "M", /* Objective C++ */ + "pdb", /* PostScript with C syntax */ + NULL }; +static const char Cplusplus_help [] = +"In C++ code, all the tag constructs of C code are tagged. (Use\n\ +--help --lang=c --lang=c++ for full help.)\n\ +In addition to C tags, member functions are also recognized. Member\n\ +variables are recognized unless you use the `--no-members' option.\n\ +Tags for variables and functions in classes are named `CLASS::VARIABLE'\n\ +and `CLASS::FUNCTION'. `operator' definitions have tag names like\n\ +`operator+'."; + +static const char *Cjava_suffixes [] = + { "java", NULL }; +static char Cjava_help [] = +"In Java code, all the tags constructs of C and C++ code are\n\ +tagged. (Use --help --lang=c --lang=c++ --lang=java for full help.)"; + + +static const char *Cobol_suffixes [] = + { "COB", "cob", NULL }; +static char Cobol_help [] = +"In Cobol code, tags are paragraph names; that is, any word\n\ +starting in column 8 and followed by a period."; + +static const char *Cstar_suffixes [] = + { "cs", "hs", NULL }; + +static const char *Erlang_suffixes [] = + { "erl", "hrl", NULL }; +static const char Erlang_help [] = +"In Erlang code, the tags are the functions, records and macros\n\ +defined in the file."; + +const char *Forth_suffixes [] = + { "fth", "tok", NULL }; +static const char Forth_help [] = +"In Forth code, tags are words defined by `:',\n\ +constant, code, create, defer, value, variable, buffer:, field."; + +static const char *Fortran_suffixes [] = + { "F", "f", "f90", "for", NULL }; +static const char Fortran_help [] = +"In Fortran code, functions, subroutines and block data are tags."; + +static const char *HTML_suffixes [] = + { "htm", "html", "shtml", NULL }; +static const char HTML_help [] = +"In HTML input files, the tags are the `title' and the `h1', `h2',\n\ +`h3' headers. Also, tags are `name=' in anchors and all\n\ +occurrences of `id='."; + +static const char *Lisp_suffixes [] = + { "cl", "clisp", "el", "l", "lisp", "LSP", "lsp", "ml", NULL }; +static const char Lisp_help [] = +"In Lisp code, any function defined with `defun', any variable\n\ +defined with `defvar' or `defconst', and in general the first\n\ +argument of any expression that starts with `(def' in column zero\n\ +is a tag.\n\ +The `--declarations' option tags \"(defvar foo)\" constructs too."; + +static const char *Lua_suffixes [] = + { "lua", "LUA", NULL }; +static const char Lua_help [] = +"In Lua scripts, all functions are tags."; + +static const char *Makefile_filenames [] = + { "Makefile", "makefile", "GNUMakefile", "Makefile.in", "Makefile.am", NULL}; +static const char Makefile_help [] = +"In makefiles, targets are tags; additionally, variables are tags\n\ +unless you specify `--no-globals'."; + +static const char *Objc_suffixes [] = + { "lm", /* Objective lex file */ + "m", /* Objective C file */ + NULL }; +static const char Objc_help [] = +"In Objective C code, tags include Objective C definitions for classes,\n\ +class categories, methods and protocols. Tags for variables and\n\ +functions in classes are named `CLASS::VARIABLE' and `CLASS::FUNCTION'.\n\ +(Use --help --lang=c --lang=objc --lang=java for full help.)"; + +static const char *Pascal_suffixes [] = + { "p", "pas", NULL }; +static const char Pascal_help [] = +"In Pascal code, the tags are the functions and procedures defined\n\ +in the file."; +/* " // this is for working around an Emacs highlighting bug... */ + +static const char *Perl_suffixes [] = + { "pl", "pm", NULL }; +static const char *Perl_interpreters [] = + { "perl", "@PERL@", NULL }; +static const char Perl_help [] = +"In Perl code, the tags are the packages, subroutines and variables\n\ +defined by the `package', `sub', `my' and `local' keywords. Use\n\ +`--globals' if you want to tag global variables. Tags for\n\ +subroutines are named `PACKAGE::SUB'. The name for subroutines\n\ +defined in the default package is `main::SUB'."; + +static const char *PHP_suffixes [] = + { "php", "php3", "php4", NULL }; +static const char PHP_help [] = +"In PHP code, tags are functions, classes and defines. Unless you use\n\ +the `--no-members' option, vars are tags too."; + +static const char *plain_C_suffixes [] = + { "pc", /* Pro*C file */ + NULL }; + +static const char *PS_suffixes [] = + { "ps", "psw", NULL }; /* .psw is for PSWrap */ +static const char PS_help [] = +"In PostScript code, the tags are the functions."; + +static const char *Prolog_suffixes [] = + { "prolog", NULL }; +static const char Prolog_help [] = +"In Prolog code, tags are predicates and rules at the beginning of\n\ +line."; + +static const char *Python_suffixes [] = + { "py", NULL }; +static const char Python_help [] = +"In Python code, `def' or `class' at the beginning of a line\n\ +generate a tag."; + +/* Can't do the `SCM' or `scm' prefix with a version number. */ +static const char *Scheme_suffixes [] = + { "oak", "sch", "scheme", "SCM", "scm", "SM", "sm", "ss", "t", NULL }; +static const char Scheme_help [] = +"In Scheme code, tags include anything defined with `def' or with a\n\ +construct whose name starts with `def'. They also include\n\ +variables set with `set!' at top level in the file."; + +static const char *TeX_suffixes [] = + { "bib", "clo", "cls", "ltx", "sty", "TeX", "tex", NULL }; +static const char TeX_help [] = +"In LaTeX text, the argument of any of the commands `\\chapter',\n\ +`\\section', `\\subsection', `\\subsubsection', `\\eqno', `\\label',\n\ +`\\ref', `\\cite', `\\bibitem', `\\part', `\\appendix', `\\entry',\n\ +`\\index', `\\def', `\\newcommand', `\\renewcommand',\n\ +`\\newenvironment' or `\\renewenvironment' is a tag.\n\ +\n\ +Other commands can be specified by setting the environment variable\n\ +`TEXTAGS' to a colon-separated list like, for example,\n\ + TEXTAGS=\"mycommand:myothercommand\"."; + + +static const char *Texinfo_suffixes [] = + { "texi", "texinfo", "txi", NULL }; +static const char Texinfo_help [] = +"for texinfo files, lines starting with @node are tagged."; + +static const char *Yacc_suffixes [] = + { "y", "y++", "ym", "yxx", "yy", NULL }; /* .ym is Objective yacc file */ +static const char Yacc_help [] = +"In Bison or Yacc input files, each rule defines as a tag the\n\ +nonterminal it constructs. The portions of the file that contain\n\ +C code are parsed as C code (use --help --lang=c --lang=yacc\n\ +for full help)."; + +static const char auto_help [] = +"`auto' is not a real language, it indicates to use\n\ +a default language for files base on file name suffix and file contents."; + +static const char none_help [] = +"`none' is not a real language, it indicates to only do\n\ +regexp processing on files."; + +static const char no_lang_help [] = +"No detailed help available for this language."; + + +/* + * Table of languages. + * + * It is ok for a given function to be listed under more than one + * name. I just didn't. + */ + +static language lang_names [] = +{ + { "ada", Ada_help, Ada_funcs, Ada_suffixes }, + { "asm", Asm_help, Asm_labels, Asm_suffixes }, + { "c", default_C_help, default_C_entries, default_C_suffixes }, + { "c++", Cplusplus_help, Cplusplus_entries, Cplusplus_suffixes }, + { "c*", no_lang_help, Cstar_entries, Cstar_suffixes }, + { "cobol", Cobol_help, Cobol_paragraphs, Cobol_suffixes }, + { "erlang", Erlang_help, Erlang_functions, Erlang_suffixes }, + { "forth", Forth_help, Forth_words, Forth_suffixes }, + { "fortran", Fortran_help, Fortran_functions, Fortran_suffixes }, + { "html", HTML_help, HTML_labels, HTML_suffixes }, + { "java", Cjava_help, Cjava_entries, Cjava_suffixes }, + { "lisp", Lisp_help, Lisp_functions, Lisp_suffixes }, + { "lua", Lua_help, Lua_functions, Lua_suffixes }, + { "makefile", Makefile_help,Makefile_targets,NULL,Makefile_filenames}, + { "objc", Objc_help, plain_C_entries, Objc_suffixes }, + { "pascal", Pascal_help, Pascal_functions, Pascal_suffixes }, + { "perl",Perl_help,Perl_functions,Perl_suffixes,NULL,Perl_interpreters}, + { "php", PHP_help, PHP_functions, PHP_suffixes }, + { "postscript",PS_help, PS_functions, PS_suffixes }, + { "proc", no_lang_help, plain_C_entries, plain_C_suffixes }, + { "prolog", Prolog_help, Prolog_functions, Prolog_suffixes }, + { "python", Python_help, Python_functions, Python_suffixes }, + { "scheme", Scheme_help, Scheme_functions, Scheme_suffixes }, + { "tex", TeX_help, TeX_commands, TeX_suffixes }, + { "texinfo", Texinfo_help, Texinfo_nodes, Texinfo_suffixes }, + { "yacc", Yacc_help,Yacc_entries,Yacc_suffixes,NULL,NULL,true}, + { "auto", auto_help }, /* default guessing scheme */ + { "none", none_help, just_read_file }, /* regexp matching only */ + { NULL } /* end of list */ +}; + + +static void +print_language_names (void) +{ + language *lang; + const char **name, **ext; + + puts ("\nThese are the currently supported languages, along with the\n\ +default file names and dot suffixes:"); + for (lang = lang_names; lang->name != NULL; lang++) + { + printf (" %-*s", 10, lang->name); + if (lang->filenames != NULL) + for (name = lang->filenames; *name != NULL; name++) + printf (" %s", *name); + if (lang->suffixes != NULL) + for (ext = lang->suffixes; *ext != NULL; ext++) + printf (" .%s", *ext); + puts (""); + } + puts ("where `auto' means use default language for files based on file\n\ +name suffix, and `none' means only do regexp processing on files.\n\ +If no language is specified and no matching suffix is found,\n\ +the first line of the file is read for a sharp-bang (#!) sequence\n\ +followed by the name of an interpreter. If no such sequence is found,\n\ +Fortran is tried first; if no tags are found, C is tried next.\n\ +When parsing any C file, a \"class\" or \"template\" keyword\n\ +switches to C++."); + puts ("Compressed files are supported using gzip, bzip2, and xz.\n\ +\n\ +For detailed help on a given language use, for example,\n\ +etags --help --lang=ada."); +} + +#ifndef EMACS_NAME +# define EMACS_NAME "standalone" +#endif +#ifndef VERSION +# define VERSION "17.38.1.4" +#endif +static _Noreturn void +print_version (void) +{ + char emacs_copyright[] = COPYRIGHT; + + printf ("%s (%s %s)\n", (CTAGS) ? "ctags" : "etags", EMACS_NAME, VERSION); + puts (emacs_copyright); + puts ("This program is distributed under the terms in ETAGS.README"); + + exit (EXIT_SUCCESS); +} + +#ifndef PRINT_UNDOCUMENTED_OPTIONS_HELP +# define PRINT_UNDOCUMENTED_OPTIONS_HELP false +#endif + +static _Noreturn void +print_help (argument *argbuffer) +{ + bool help_for_lang = false; + + for (; argbuffer->arg_type != at_end; argbuffer++) + if (argbuffer->arg_type == at_language) + { + if (help_for_lang) + puts (""); + puts (argbuffer->lang->help); + help_for_lang = true; + } + + if (help_for_lang) + exit (EXIT_SUCCESS); + + printf ("Usage: %s [options] [[regex-option ...] file-name] ...\n\ +\n\ +These are the options accepted by %s.\n", progname, progname); + puts ("You may use unambiguous abbreviations for the long option names."); + puts (" A - as file name means read names from stdin (one per line).\n\ +Absolute names are stored in the output file as they are.\n\ +Relative ones are stored relative to the output file's directory.\n"); + + puts ("-a, --append\n\ + Append tag entries to existing tags file."); + + puts ("--packages-only\n\ + For Ada files, only generate tags for packages."); + + if (CTAGS) + puts ("-B, --backward-search\n\ + Write the search commands for the tag entries using '?', the\n\ + backward-search command instead of '/', the forward-search command."); + + /* This option is mostly obsolete, because etags can now automatically + detect C++. Retained for backward compatibility and for debugging and + experimentation. In principle, we could want to tag as C++ even + before any "class" or "template" keyword. + puts ("-C, --c++\n\ + Treat files whose name suffix defaults to C language as C++ files."); + */ + + puts ("--declarations\n\ + In C and derived languages, create tags for function declarations,"); + if (CTAGS) + puts ("\tand create tags for extern variables if --globals is used."); + else + puts + ("\tand create tags for extern variables unless --no-globals is used."); + + if (CTAGS) + puts ("-d, --defines\n\ + Create tag entries for C #define constants and enum constants, too."); + else + puts ("-D, --no-defines\n\ + Don't create tag entries for C #define constants and enum constants.\n\ + This makes the tags file smaller."); + + if (!CTAGS) + puts ("-i FILE, --include=FILE\n\ + Include a note in tag file indicating that, when searching for\n\ + a tag, one should also consult the tags file FILE after\n\ + checking the current file."); + + puts ("-l LANG, --language=LANG\n\ + Force the following files to be considered as written in the\n\ + named language up to the next --language=LANG option."); + + if (CTAGS) + puts ("--globals\n\ + Create tag entries for global variables in some languages."); + else + puts ("--no-globals\n\ + Do not create tag entries for global variables in some\n\ + languages. This makes the tags file smaller."); + + if (PRINT_UNDOCUMENTED_OPTIONS_HELP) + puts ("--no-line-directive\n\ + Ignore #line preprocessor directives in C and derived languages."); + + if (CTAGS) + puts ("--members\n\ + Create tag entries for members of structures in some languages."); + else + puts ("--no-members\n\ + Do not create tag entries for members of structures\n\ + in some languages."); + + puts ("-r REGEXP, --regex=REGEXP or --regex=@regexfile\n\ + Make a tag for each line matching a regular expression pattern\n\ + in the following files. {LANGUAGE}REGEXP uses REGEXP for LANGUAGE\n\ + files only. REGEXFILE is a file containing one REGEXP per line.\n\ + REGEXP takes the form /TAGREGEXP/TAGNAME/MODS, where TAGNAME/ is\n\ + optional. The TAGREGEXP pattern is anchored (as if preceded by ^)."); + puts (" If TAGNAME/ is present, the tags created are named.\n\ + For example Tcl named tags can be created with:\n\ + --regex=\"/proc[ \\t]+\\([^ \\t]+\\)/\\1/.\".\n\ + MODS are optional one-letter modifiers: `i' means to ignore case,\n\ + `m' means to allow multi-line matches, `s' implies `m' and\n\ + causes dot to match any character, including newline."); + + puts ("-R, --no-regex\n\ + Don't create tags from regexps for the following files."); + + puts ("-I, --ignore-indentation\n\ + In C and C++ do not assume that a closing brace in the first\n\ + column is the final brace of a function or structure definition."); + + puts ("-o FILE, --output=FILE\n\ + Write the tags to FILE."); + + puts ("--parse-stdin=NAME\n\ + Read from standard input and record tags as belonging to file NAME."); + + if (CTAGS) + { + puts ("-t, --typedefs\n\ + Generate tag entries for C and Ada typedefs."); + puts ("-T, --typedefs-and-c++\n\ + Generate tag entries for C typedefs, C struct/enum/union tags,\n\ + and C++ member functions."); + } + + if (CTAGS) + puts ("-u, --update\n\ + Update the tag entries for the given files, leaving tag\n\ + entries for other files in place. Currently, this is\n\ + implemented by deleting the existing entries for the given\n\ + files and then rewriting the new entries at the end of the\n\ + tags file. It is often faster to simply rebuild the entire\n\ + tag file than to use this."); + + if (CTAGS) + { + puts ("-v, --vgrind\n\ + Print on the standard output an index of items intended for\n\ + human consumption, similar to the output of vgrind. The index\n\ + is sorted, and gives the page number of each item."); + + if (PRINT_UNDOCUMENTED_OPTIONS_HELP) + puts ("-w, --no-duplicates\n\ + Do not create duplicate tag entries, for compatibility with\n\ + traditional ctags."); + + if (PRINT_UNDOCUMENTED_OPTIONS_HELP) + puts ("-w, --no-warn\n\ + Suppress warning messages about duplicate tag entries."); + + puts ("-x, --cxref\n\ + Like --vgrind, but in the style of cxref, rather than vgrind.\n\ + The output uses line numbers instead of page numbers, but\n\ + beyond that the differences are cosmetic; try both to see\n\ + which you like."); + } + + puts ("-V, --version\n\ + Print the version of the program.\n\ +-h, --help\n\ + Print this help message.\n\ + Followed by one or more `--language' options prints detailed\n\ + help about tag generation for the specified languages."); + + print_language_names (); + + puts (""); + puts ("Report bugs to bug-gnu-emacs@gnu.org"); + + exit (EXIT_SUCCESS); +} + + +int +main (int argc, char **argv) +{ + int i; + unsigned int nincluded_files; + char **included_files; + argument *argbuffer; + int current_arg, file_count; + linebuffer filename_lb; + bool help_asked = false; + ptrdiff_t len; + char *optstring; + int opt; + + progname = argv[0]; + nincluded_files = 0; + included_files = xnew (argc, char *); + current_arg = 0; + file_count = 0; + + /* Allocate enough no matter what happens. Overkill, but each one + is small. */ + argbuffer = xnew (argc, argument); + + /* + * Always find typedefs and structure tags. + * Also default to find macro constants, enum constants, struct + * members and global variables. Do it for both etags and ctags. + */ + typedefs = typedefs_or_cplusplus = constantypedefs = true; + globals = members = true; + + /* When the optstring begins with a '-' getopt_long does not rearrange the + non-options arguments to be at the end, but leaves them alone. */ + optstring = concat ("-ac:Cf:Il:o:r:RSVhH", + (CTAGS) ? "BxdtTuvw" : "Di:", + ""); + + while ((opt = getopt_long (argc, argv, optstring, longopts, NULL)) != EOF) + switch (opt) + { + case 0: + /* If getopt returns 0, then it has already processed a + long-named option. We should do nothing. */ + break; + + case 1: + /* This means that a file name has been seen. Record it. */ + argbuffer[current_arg].arg_type = at_filename; + argbuffer[current_arg].what = optarg; + len = strlen (optarg); + if (whatlen_max < len) + whatlen_max = len; + ++current_arg; + ++file_count; + break; + + case STDIN: + /* Parse standard input. Idea by Vivek . */ + argbuffer[current_arg].arg_type = at_stdin; + argbuffer[current_arg].what = optarg; + len = strlen (optarg); + if (whatlen_max < len) + whatlen_max = len; + ++current_arg; + ++file_count; + if (parsing_stdin) + fatal ("cannot parse standard input more than once", (char *)NULL); + parsing_stdin = true; + break; + + /* Common options. */ + case 'a': append_to_tagfile = true; break; + case 'C': cplusplus = true; break; + case 'f': /* for compatibility with old makefiles */ + case 'o': + if (tagfile) + { + error ("-o option may only be given once."); + suggest_asking_for_help (); + /* NOTREACHED */ + } + tagfile = optarg; + break; + case 'I': + case 'S': /* for backward compatibility */ + ignoreindent = true; + break; + case 'l': + { + language *lang = get_language_from_langname (optarg); + if (lang != NULL) + { + argbuffer[current_arg].lang = lang; + argbuffer[current_arg].arg_type = at_language; + ++current_arg; + } + } + break; + case 'c': + /* Backward compatibility: support obsolete --ignore-case-regexp. */ + optarg = concat (optarg, "i", ""); /* memory leak here */ + /* FALLTHRU */ + case 'r': + argbuffer[current_arg].arg_type = at_regexp; + argbuffer[current_arg].what = optarg; + len = strlen (optarg); + if (whatlen_max < len) + whatlen_max = len; + ++current_arg; + break; + case 'R': + argbuffer[current_arg].arg_type = at_regexp; + argbuffer[current_arg].what = NULL; + ++current_arg; + break; + case 'V': + print_version (); + break; + case 'h': + case 'H': + help_asked = true; + break; + + /* Etags options */ + case 'D': constantypedefs = false; break; + case 'i': included_files[nincluded_files++] = optarg; break; + + /* Ctags options. */ + case 'B': searchar = '?'; break; + case 'd': constantypedefs = true; break; + case 't': typedefs = true; break; + case 'T': typedefs = typedefs_or_cplusplus = true; break; + case 'u': update = true; break; + case 'v': vgrind_style = true; /*FALLTHRU*/ + case 'x': cxref_style = true; break; + case 'w': no_warnings = true; break; + default: + suggest_asking_for_help (); + /* NOTREACHED */ + } + + /* No more options. Store the rest of arguments. */ + for (; optind < argc; optind++) + { + argbuffer[current_arg].arg_type = at_filename; + argbuffer[current_arg].what = argv[optind]; + len = strlen (argv[optind]); + if (whatlen_max < len) + whatlen_max = len; + ++current_arg; + ++file_count; + } + + argbuffer[current_arg].arg_type = at_end; + + if (help_asked) + print_help (argbuffer); + /* NOTREACHED */ + + if (nincluded_files == 0 && file_count == 0) + { + error ("no input files specified."); + suggest_asking_for_help (); + /* NOTREACHED */ + } + + if (tagfile == NULL) + tagfile = savestr (CTAGS ? "tags" : "TAGS"); + cwd = etags_getcwd (); /* the current working directory */ + if (cwd[strlen (cwd) - 1] != '/') + { + char *oldcwd = cwd; + cwd = concat (oldcwd, "/", ""); + free (oldcwd); + } + + /* Compute base directory for relative file names. */ + if (streq (tagfile, "-") + || strneq (tagfile, "/dev/", 5)) + tagfiledir = cwd; /* relative file names are relative to cwd */ + else + { + canonicalize_filename (tagfile); + tagfiledir = absolute_dirname (tagfile, cwd); + } + + init (); /* set up boolean "functions" */ + + linebuffer_init (&lb); + linebuffer_init (&filename_lb); + linebuffer_init (&filebuf); + linebuffer_init (&token_name); + + if (!CTAGS) + { + if (streq (tagfile, "-")) + { + tagf = stdout; + SET_BINARY (fileno (stdout)); + } + else + tagf = fopen (tagfile, append_to_tagfile ? "ab" : "wb"); + if (tagf == NULL) + pfatal (tagfile); + } + + /* + * Loop through files finding functions. + */ + for (i = 0; i < current_arg; i++) + { + static language *lang; /* non-NULL if language is forced */ + char *this_file; + + switch (argbuffer[i].arg_type) + { + case at_language: + lang = argbuffer[i].lang; + break; + case at_regexp: + analyze_regex (argbuffer[i].what); + break; + case at_filename: + this_file = argbuffer[i].what; + /* Input file named "-" means read file names from stdin + (one per line) and use them. */ + if (streq (this_file, "-")) + { + if (parsing_stdin) + fatal ("cannot parse standard input AND read file names from it", + (char *)NULL); + while (readline_internal (&filename_lb, stdin) > 0) + process_file_name (filename_lb.buffer, lang); + } + else + process_file_name (this_file, lang); + break; + case at_stdin: + this_file = argbuffer[i].what; + process_file (stdin, this_file, lang); + break; + } + } + + free_regexps (); + free (lb.buffer); + free (filebuf.buffer); + free (token_name.buffer); + + if (!CTAGS || cxref_style) + { + /* Write the remaining tags to tagf (ETAGS) or stdout (CXREF). */ + put_entries (nodehead); + free_tree (nodehead); + nodehead = NULL; + if (!CTAGS) + { + fdesc *fdp; + + /* Output file entries that have no tags. */ + for (fdp = fdhead; fdp != NULL; fdp = fdp->next) + if (!fdp->written) + fprintf (tagf, "\f\n%s,0\n", fdp->taggedfname); + + while (nincluded_files-- > 0) + fprintf (tagf, "\f\n%s,include\n", *included_files++); + + if (fclose (tagf) == EOF) + pfatal (tagfile); + } + + exit (EXIT_SUCCESS); + } + + /* From here on, we are in (CTAGS && !cxref_style) */ + if (update) + { + char *cmd = + xmalloc (strlen (tagfile) + whatlen_max + + sizeof "mv..OTAGS;fgrep -v '\t\t' OTAGS >;rm OTAGS"); + for (i = 0; i < current_arg; ++i) + { + switch (argbuffer[i].arg_type) + { + case at_filename: + case at_stdin: + break; + default: + continue; /* the for loop */ + } + char *z = stpcpy (cmd, "mv "); + z = stpcpy (z, tagfile); + z = stpcpy (z, " OTAGS;fgrep -v '\t"); + z = stpcpy (z, argbuffer[i].what); + z = stpcpy (z, "\t' OTAGS >"); + z = stpcpy (z, tagfile); + strcpy (z, ";rm OTAGS"); + if (system (cmd) != EXIT_SUCCESS) + fatal ("failed to execute shell command", (char *)NULL); + } + free (cmd); + append_to_tagfile = true; + } + + tagf = fopen (tagfile, append_to_tagfile ? "ab" : "wb"); + if (tagf == NULL) + pfatal (tagfile); + put_entries (nodehead); /* write all the tags (CTAGS) */ + free_tree (nodehead); + nodehead = NULL; + if (fclose (tagf) == EOF) + pfatal (tagfile); + + if (CTAGS) + if (append_to_tagfile || update) + { + char *cmd = xmalloc (2 * strlen (tagfile) + sizeof "sort -u -o.."); + /* Maybe these should be used: + setenv ("LC_COLLATE", "C", 1); + setenv ("LC_ALL", "C", 1); */ + char *z = stpcpy (cmd, "sort -u -o "); + z = stpcpy (z, tagfile); + *z++ = ' '; + strcpy (z, tagfile); + exit (system (cmd)); + } + return EXIT_SUCCESS; +} + + +/* + * Return a compressor given the file name. If EXTPTR is non-zero, + * return a pointer into FILE where the compressor-specific + * extension begins. If no compressor is found, NULL is returned + * and EXTPTR is not significant. + * Idea by Vladimir Alexiev (1998) + */ +static compressor * +get_compressor_from_suffix (char *file, char **extptr) +{ + compressor *compr; + char *slash, *suffix; + + /* File has been processed by canonicalize_filename, + so we don't need to consider backslashes on DOS_NT. */ + slash = strrchr (file, '/'); + suffix = strrchr (file, '.'); + if (suffix == NULL || suffix < slash) + return NULL; + if (extptr != NULL) + *extptr = suffix; + suffix += 1; + /* Let those poor souls who live with DOS 8+3 file name limits get + some solace by treating foo.cgz as if it were foo.c.gz, etc. + Only the first do loop is run if not MSDOS */ + do + { + for (compr = compressors; compr->suffix != NULL; compr++) + if (streq (compr->suffix, suffix)) + return compr; + if (!MSDOS) + break; /* do it only once: not really a loop */ + if (extptr != NULL) + *extptr = ++suffix; + } while (*suffix != '\0'); + return NULL; +} + + + +/* + * Return a language given the name. + */ +static language * +get_language_from_langname (const char *name) +{ + language *lang; + + if (name == NULL) + error ("empty language name"); + else + { + for (lang = lang_names; lang->name != NULL; lang++) + if (streq (name, lang->name)) + return lang; + error ("unknown language \"%s\"", name); + } + + return NULL; +} + + +/* + * Return a language given the interpreter name. + */ +static language * +get_language_from_interpreter (char *interpreter) +{ + language *lang; + const char **iname; + + if (interpreter == NULL) + return NULL; + for (lang = lang_names; lang->name != NULL; lang++) + if (lang->interpreters != NULL) + for (iname = lang->interpreters; *iname != NULL; iname++) + if (streq (*iname, interpreter)) + return lang; + + return NULL; +} + + + +/* + * Return a language given the file name. + */ +static language * +get_language_from_filename (char *file, int case_sensitive) +{ + language *lang; + const char **name, **ext, *suffix; + + /* Try whole file name first. */ + for (lang = lang_names; lang->name != NULL; lang++) + if (lang->filenames != NULL) + for (name = lang->filenames; *name != NULL; name++) + if ((case_sensitive) + ? streq (*name, file) + : strcaseeq (*name, file)) + return lang; + + /* If not found, try suffix after last dot. */ + suffix = strrchr (file, '.'); + if (suffix == NULL) + return NULL; + suffix += 1; + for (lang = lang_names; lang->name != NULL; lang++) + if (lang->suffixes != NULL) + for (ext = lang->suffixes; *ext != NULL; ext++) + if ((case_sensitive) + ? streq (*ext, suffix) + : strcaseeq (*ext, suffix)) + return lang; + return NULL; +} + + +/* + * This routine is called on each file argument. + */ +static void +process_file_name (char *file, language *lang) +{ + struct stat stat_buf; + FILE *inf; + fdesc *fdp; + compressor *compr; + char *compressed_name, *uncompressed_name; + char *ext, *real_name; + int retval; + + canonicalize_filename (file); + if (streq (file, tagfile) && !streq (tagfile, "-")) + { + error ("skipping inclusion of %s in self.", file); + return; + } + if ((compr = get_compressor_from_suffix (file, &ext)) == NULL) + { + compressed_name = NULL; + real_name = uncompressed_name = savestr (file); + } + else + { + real_name = compressed_name = savestr (file); + uncompressed_name = savenstr (file, ext - file); + } + + /* If the canonicalized uncompressed name + has already been dealt with, skip it silently. */ + for (fdp = fdhead; fdp != NULL; fdp = fdp->next) + { + assert (fdp->infname != NULL); + if (streq (uncompressed_name, fdp->infname)) + goto cleanup; + } + + if (stat (real_name, &stat_buf) != 0) + { + /* Reset real_name and try with a different name. */ + real_name = NULL; + if (compressed_name != NULL) /* try with the given suffix */ + { + if (stat (uncompressed_name, &stat_buf) == 0) + real_name = uncompressed_name; + } + else /* try all possible suffixes */ + { + for (compr = compressors; compr->suffix != NULL; compr++) + { + compressed_name = concat (file, ".", compr->suffix); + if (stat (compressed_name, &stat_buf) != 0) + { + if (MSDOS) + { + char *suf = compressed_name + strlen (file); + size_t suflen = strlen (compr->suffix) + 1; + for ( ; suf[1]; suf++, suflen--) + { + memmove (suf, suf + 1, suflen); + if (stat (compressed_name, &stat_buf) == 0) + { + real_name = compressed_name; + break; + } + } + if (real_name != NULL) + break; + } /* MSDOS */ + free (compressed_name); + compressed_name = NULL; + } + else + { + real_name = compressed_name; + break; + } + } + } + if (real_name == NULL) + { + perror (file); + goto cleanup; + } + } /* try with a different name */ + + if (!S_ISREG (stat_buf.st_mode)) + { + error ("skipping %s: it is not a regular file.", real_name); + goto cleanup; + } + if (real_name == compressed_name) + { + char *cmd = concat (compr->command, " ", real_name); + inf = popen (cmd, "r" FOPEN_BINARY); + free (cmd); + } + else + inf = fopen (real_name, "r" FOPEN_BINARY); + if (inf == NULL) + { + perror (real_name); + goto cleanup; + } + + process_file (inf, uncompressed_name, lang); + + if (real_name == compressed_name) + retval = pclose (inf); + else + retval = fclose (inf); + if (retval < 0) + pfatal (file); + + cleanup: + free (compressed_name); + free (uncompressed_name); + last_node = NULL; + curfdp = NULL; + return; +} + +static void +process_file (FILE *fh, char *fn, language *lang) +{ + static const fdesc emptyfdesc; + fdesc *fdp; + + /* Create a new input file description entry. */ + fdp = xnew (1, fdesc); + *fdp = emptyfdesc; + fdp->next = fdhead; + fdp->infname = savestr (fn); + fdp->lang = lang; + fdp->infabsname = absolute_filename (fn, cwd); + fdp->infabsdir = absolute_dirname (fn, cwd); + if (filename_is_absolute (fn)) + { + /* An absolute file name. Canonicalize it. */ + fdp->taggedfname = absolute_filename (fn, NULL); + } + else + { + /* A file name relative to cwd. Make it relative + to the directory of the tags file. */ + fdp->taggedfname = relative_filename (fn, tagfiledir); + } + fdp->usecharno = true; /* use char position when making tags */ + fdp->prop = NULL; + fdp->written = false; /* not written on tags file yet */ + + fdhead = fdp; + curfdp = fdhead; /* the current file description */ + + find_entries (fh); + + /* If not Ctags, and if this is not metasource and if it contained no #line + directives, we can write the tags and free all nodes pointing to + curfdp. */ + if (!CTAGS + && curfdp->usecharno /* no #line directives in this file */ + && !curfdp->lang->metasource) + { + node *np, *prev; + + /* Look for the head of the sublist relative to this file. See add_node + for the structure of the node tree. */ + prev = NULL; + for (np = nodehead; np != NULL; prev = np, np = np->left) + if (np->fdp == curfdp) + break; + + /* If we generated tags for this file, write and delete them. */ + if (np != NULL) + { + /* This is the head of the last sublist, if any. The following + instructions depend on this being true. */ + assert (np->left == NULL); + + assert (fdhead == curfdp); + assert (last_node->fdp == curfdp); + put_entries (np); /* write tags for file curfdp->taggedfname */ + free_tree (np); /* remove the written nodes */ + if (prev == NULL) + nodehead = NULL; /* no nodes left */ + else + prev->left = NULL; /* delete the pointer to the sublist */ + } + } +} + +/* + * This routine sets up the boolean pseudo-functions which work + * by setting boolean flags dependent upon the corresponding character. + * Every char which is NOT in that string is not a white char. Therefore, + * all of the array "_wht" is set to false, and then the elements + * subscripted by the chars in "white" are set to true. Thus "_wht" + * of a char is true if it is the string "white", else false. + */ +static void +init (void) +{ + const char *sp; + int i; + + for (i = 0; i < CHARS; i++) + iswhite (i) = notinname (i) = begtoken (i) = intoken (i) = endtoken (i) + = false; + for (sp = white; *sp != '\0'; sp++) iswhite (*sp) = true; + for (sp = nonam; *sp != '\0'; sp++) notinname (*sp) = true; + notinname ('\0') = notinname ('\n'); + for (sp = begtk; *sp != '\0'; sp++) begtoken (*sp) = true; + begtoken ('\0') = begtoken ('\n'); + for (sp = midtk; *sp != '\0'; sp++) intoken (*sp) = true; + intoken ('\0') = intoken ('\n'); + for (sp = endtk; *sp != '\0'; sp++) endtoken (*sp) = true; + endtoken ('\0') = endtoken ('\n'); +} + +/* + * This routine opens the specified file and calls the function + * which finds the function and type definitions. + */ +static void +find_entries (FILE *inf) +{ + char *cp; + language *lang = curfdp->lang; + Lang_function *parser = NULL; + + /* If user specified a language, use it. */ + if (lang != NULL && lang->function != NULL) + { + parser = lang->function; + } + + /* Else try to guess the language given the file name. */ + if (parser == NULL) + { + lang = get_language_from_filename (curfdp->infname, true); + if (lang != NULL && lang->function != NULL) + { + curfdp->lang = lang; + parser = lang->function; + } + } + + /* Else look for sharp-bang as the first two characters. */ + if (parser == NULL + && readline_internal (&lb, inf) > 0 + && lb.len >= 2 + && lb.buffer[0] == '#' + && lb.buffer[1] == '!') + { + char *lp; + + /* Set lp to point at the first char after the last slash in the + line or, if no slashes, at the first nonblank. Then set cp to + the first successive blank and terminate the string. */ + lp = strrchr (lb.buffer+2, '/'); + if (lp != NULL) + lp += 1; + else + lp = skip_spaces (lb.buffer + 2); + cp = skip_non_spaces (lp); + *cp = '\0'; + + if (strlen (lp) > 0) + { + lang = get_language_from_interpreter (lp); + if (lang != NULL && lang->function != NULL) + { + curfdp->lang = lang; + parser = lang->function; + } + } + } + + /* We rewind here, even if inf may be a pipe. We fail if the + length of the first line is longer than the pipe block size, + which is unlikely. */ + rewind (inf); + + /* Else try to guess the language given the case insensitive file name. */ + if (parser == NULL) + { + lang = get_language_from_filename (curfdp->infname, false); + if (lang != NULL && lang->function != NULL) + { + curfdp->lang = lang; + parser = lang->function; + } + } + + /* Else try Fortran or C. */ + if (parser == NULL) + { + node *old_last_node = last_node; + + curfdp->lang = get_language_from_langname ("fortran"); + find_entries (inf); + + if (old_last_node == last_node) + /* No Fortran entries found. Try C. */ + { + /* We do not tag if rewind fails. + Only the file name will be recorded in the tags file. */ + rewind (inf); + curfdp->lang = get_language_from_langname (cplusplus ? "c++" : "c"); + find_entries (inf); + } + return; + } + + if (!no_line_directive + && curfdp->lang != NULL && curfdp->lang->metasource) + /* It may be that this is a bingo.y file, and we already parsed a bingo.c + file, or anyway we parsed a file that is automatically generated from + this one. If this is the case, the bingo.c file contained #line + directives that generated tags pointing to this file. Let's delete + them all before parsing this file, which is the real source. */ + { + fdesc **fdpp = &fdhead; + while (*fdpp != NULL) + if (*fdpp != curfdp + && streq ((*fdpp)->taggedfname, curfdp->taggedfname)) + /* We found one of those! We must delete both the file description + and all tags referring to it. */ + { + fdesc *badfdp = *fdpp; + + /* Delete the tags referring to badfdp->taggedfname + that were obtained from badfdp->infname. */ + invalidate_nodes (badfdp, &nodehead); + + *fdpp = badfdp->next; /* remove the bad description from the list */ + free_fdesc (badfdp); + } + else + fdpp = &(*fdpp)->next; /* advance the list pointer */ + } + + assert (parser != NULL); + + /* Generic initializations before reading from file. */ + linebuffer_setlen (&filebuf, 0); /* reset the file buffer */ + + /* Generic initializations before parsing file with readline. */ + lineno = 0; /* reset global line number */ + charno = 0; /* reset global char number */ + linecharno = 0; /* reset global char number of line start */ + + parser (inf); + + regex_tag_multiline (); +} + + +/* + * Check whether an implicitly named tag should be created, + * then call `pfnote'. + * NAME is a string that is internally copied by this function. + * + * TAGS format specification + * Idea by Sam Kendall (1997) + * The following is explained in some more detail in etc/ETAGS.EBNF. + * + * make_tag creates tags with "implicit tag names" (unnamed tags) + * if the following are all true, assuming NONAM=" \f\t\n\r()=,;": + * 1. NAME does not contain any of the characters in NONAM; + * 2. LINESTART contains name as either a rightmost, or rightmost but + * one character, substring; + * 3. the character, if any, immediately before NAME in LINESTART must + * be a character in NONAM; + * 4. the character, if any, immediately after NAME in LINESTART must + * also be a character in NONAM. + * + * The implementation uses the notinname() macro, which recognizes the + * characters stored in the string `nonam'. + * etags.el needs to use the same characters that are in NONAM. + */ +static void +make_tag (const char *name, /* tag name, or NULL if unnamed */ + int namelen, /* tag length */ + bool is_func, /* tag is a function */ + char *linestart, /* start of the line where tag is */ + int linelen, /* length of the line where tag is */ + int lno, /* line number */ + long int cno) /* character number */ +{ + bool named = (name != NULL && namelen > 0); + char *nname = NULL; + + if (!CTAGS && named) /* maybe set named to false */ + /* Let's try to make an implicit tag name, that is, create an unnamed tag + such that etags.el can guess a name from it. */ + { + int i; + register const char *cp = name; + + for (i = 0; i < namelen; i++) + if (notinname (*cp++)) + break; + if (i == namelen) /* rule #1 */ + { + cp = linestart + linelen - namelen; + if (notinname (linestart[linelen-1])) + cp -= 1; /* rule #4 */ + if (cp >= linestart /* rule #2 */ + && (cp == linestart + || notinname (cp[-1])) /* rule #3 */ + && strneq (name, cp, namelen)) /* rule #2 */ + named = false; /* use implicit tag name */ + } + } + + if (named) + nname = savenstr (name, namelen); + + pfnote (nname, is_func, linestart, linelen, lno, cno); +} + +/* Record a tag. */ +static void +pfnote (char *name, bool is_func, char *linestart, int linelen, int lno, + long int cno) + /* tag name, or NULL if unnamed */ + /* tag is a function */ + /* start of the line where tag is */ + /* length of the line where tag is */ + /* line number */ + /* character number */ +{ + register node *np; + + assert (name == NULL || name[0] != '\0'); + if (CTAGS && name == NULL) + return; + + np = xnew (1, node); + + /* If ctags mode, change name "main" to M. */ + if (CTAGS && !cxref_style && streq (name, "main")) + { + char *fp = strrchr (curfdp->taggedfname, '/'); + np->name = concat ("M", fp == NULL ? curfdp->taggedfname : fp + 1, ""); + fp = strrchr (np->name, '.'); + if (fp != NULL && fp[1] != '\0' && fp[2] == '\0') + fp[0] = '\0'; + } + else + np->name = name; + np->valid = true; + np->been_warned = false; + np->fdp = curfdp; + np->is_func = is_func; + np->lno = lno; + if (np->fdp->usecharno) + /* Our char numbers are 0-base, because of C language tradition? + ctags compatibility? old versions compatibility? I don't know. + Anyway, since emacs's are 1-base we expect etags.el to take care + of the difference. If we wanted to have 1-based numbers, we would + uncomment the +1 below. */ + np->cno = cno /* + 1 */ ; + else + np->cno = invalidcharno; + np->left = np->right = NULL; + if (CTAGS && !cxref_style) + { + if (strlen (linestart) < 50) + np->regex = concat (linestart, "$", ""); + else + np->regex = savenstr (linestart, 50); + } + else + np->regex = savenstr (linestart, linelen); + + add_node (np, &nodehead); +} + +/* + * free_tree () + * recurse on left children, iterate on right children. + */ +static void +free_tree (register node *np) +{ + while (np) + { + register node *node_right = np->right; + free_tree (np->left); + free (np->name); + free (np->regex); + free (np); + np = node_right; + } +} + +/* + * free_fdesc () + * delete a file description + */ +static void +free_fdesc (register fdesc *fdp) +{ + free (fdp->infname); + free (fdp->infabsname); + free (fdp->infabsdir); + free (fdp->taggedfname); + free (fdp->prop); + free (fdp); +} + +/* + * add_node () + * Adds a node to the tree of nodes. In etags mode, sort by file + * name. In ctags mode, sort by tag name. Make no attempt at + * balancing. + * + * add_node is the only function allowed to add nodes, so it can + * maintain state. + */ +static void +add_node (node *np, node **cur_node_p) +{ + register int dif; + register node *cur_node = *cur_node_p; + + if (cur_node == NULL) + { + *cur_node_p = np; + last_node = np; + return; + } + + if (!CTAGS) + /* Etags Mode */ + { + /* For each file name, tags are in a linked sublist on the right + pointer. The first tags of different files are a linked list + on the left pointer. last_node points to the end of the last + used sublist. */ + if (last_node != NULL && last_node->fdp == np->fdp) + { + /* Let's use the same sublist as the last added node. */ + assert (last_node->right == NULL); + last_node->right = np; + last_node = np; + } + else if (cur_node->fdp == np->fdp) + { + /* Scanning the list we found the head of a sublist which is + good for us. Let's scan this sublist. */ + add_node (np, &cur_node->right); + } + else + /* The head of this sublist is not good for us. Let's try the + next one. */ + add_node (np, &cur_node->left); + } /* if ETAGS mode */ + + else + { + /* Ctags Mode */ + dif = strcmp (np->name, cur_node->name); + + /* + * If this tag name matches an existing one, then + * do not add the node, but maybe print a warning. + */ + if (no_duplicates && !dif) + { + if (np->fdp == cur_node->fdp) + { + if (!no_warnings) + { + fprintf (stderr, "Duplicate entry in file %s, line %d: %s\n", + np->fdp->infname, lineno, np->name); + fprintf (stderr, "Second entry ignored\n"); + } + } + else if (!cur_node->been_warned && !no_warnings) + { + fprintf + (stderr, + "Duplicate entry in files %s and %s: %s (Warning only)\n", + np->fdp->infname, cur_node->fdp->infname, np->name); + cur_node->been_warned = true; + } + return; + } + + /* Actually add the node */ + add_node (np, dif < 0 ? &cur_node->left : &cur_node->right); + } /* if CTAGS mode */ +} + +/* + * invalidate_nodes () + * Scan the node tree and invalidate all nodes pointing to the + * given file description (CTAGS case) or free them (ETAGS case). + */ +static void +invalidate_nodes (fdesc *badfdp, node **npp) +{ + node *np = *npp; + + if (np == NULL) + return; + + if (CTAGS) + { + if (np->left != NULL) + invalidate_nodes (badfdp, &np->left); + if (np->fdp == badfdp) + np->valid = false; + if (np->right != NULL) + invalidate_nodes (badfdp, &np->right); + } + else + { + assert (np->fdp != NULL); + if (np->fdp == badfdp) + { + *npp = np->left; /* detach the sublist from the list */ + np->left = NULL; /* isolate it */ + free_tree (np); /* free it */ + invalidate_nodes (badfdp, npp); + } + else + invalidate_nodes (badfdp, &np->left); + } +} + + +static int total_size_of_entries (node *); +static int number_len (long) ATTRIBUTE_CONST; + +/* Length of a non-negative number's decimal representation. */ +static int +number_len (long int num) +{ + int len = 1; + while ((num /= 10) > 0) + len += 1; + return len; +} + +/* + * Return total number of characters that put_entries will output for + * the nodes in the linked list at the right of the specified node. + * This count is irrelevant with etags.el since emacs 19.34 at least, + * but is still supplied for backward compatibility. + */ +static int +total_size_of_entries (register node *np) +{ + register int total = 0; + + for (; np != NULL; np = np->right) + if (np->valid) + { + total += strlen (np->regex) + 1; /* pat\177 */ + if (np->name != NULL) + total += strlen (np->name) + 1; /* name\001 */ + total += number_len ((long) np->lno) + 1; /* lno, */ + if (np->cno != invalidcharno) /* cno */ + total += number_len (np->cno); + total += 1; /* newline */ + } + + return total; +} + +static void +put_entries (register node *np) +{ + register char *sp; + static fdesc *fdp = NULL; + + if (np == NULL) + return; + + /* Output subentries that precede this one */ + if (CTAGS) + put_entries (np->left); + + /* Output this entry */ + if (np->valid) + { + if (!CTAGS) + { + /* Etags mode */ + if (fdp != np->fdp) + { + fdp = np->fdp; + fprintf (tagf, "\f\n%s,%d\n", + fdp->taggedfname, total_size_of_entries (np)); + fdp->written = true; + } + fputs (np->regex, tagf); + fputc ('\177', tagf); + if (np->name != NULL) + { + fputs (np->name, tagf); + fputc ('\001', tagf); + } + fprintf (tagf, "%d,", np->lno); + if (np->cno != invalidcharno) + fprintf (tagf, "%ld", np->cno); + fputs ("\n", tagf); + } + else + { + /* Ctags mode */ + if (np->name == NULL) + error ("internal error: NULL name in ctags mode."); + + if (cxref_style) + { + if (vgrind_style) + fprintf (stdout, "%s %s %d\n", + np->name, np->fdp->taggedfname, (np->lno + 63) / 64); + else + fprintf (stdout, "%-16s %3d %-16s %s\n", + np->name, np->lno, np->fdp->taggedfname, np->regex); + } + else + { + fprintf (tagf, "%s\t%s\t", np->name, np->fdp->taggedfname); + + if (np->is_func) + { /* function or #define macro with args */ + putc (searchar, tagf); + putc ('^', tagf); + + for (sp = np->regex; *sp; sp++) + { + if (*sp == '\\' || *sp == searchar) + putc ('\\', tagf); + putc (*sp, tagf); + } + putc (searchar, tagf); + } + else + { /* anything else; text pattern inadequate */ + fprintf (tagf, "%d", np->lno); + } + putc ('\n', tagf); + } + } + } /* if this node contains a valid tag */ + + /* Output subentries that follow this one */ + put_entries (np->right); + if (!CTAGS) + put_entries (np->left); +} + + +/* C extensions. */ +#define C_EXT 0x00fff /* C extensions */ +#define C_PLAIN 0x00000 /* C */ +#define C_PLPL 0x00001 /* C++ */ +#define C_STAR 0x00003 /* C* */ +#define C_JAVA 0x00005 /* JAVA */ +#define C_AUTO 0x01000 /* C, but switch to C++ if `class' is met */ +#define YACC 0x10000 /* yacc file */ + +/* + * The C symbol tables. + */ +enum sym_type +{ + st_none, + st_C_objprot, st_C_objimpl, st_C_objend, + st_C_gnumacro, + st_C_ignore, st_C_attribute, + st_C_javastruct, + st_C_operator, + st_C_class, st_C_template, + st_C_struct, st_C_extern, st_C_enum, st_C_define, st_C_typedef +}; + +/* Feed stuff between (but not including) %[ and %] lines to: + gperf -m 5 +%[ +%compare-strncmp +%enum +%struct-type +struct C_stab_entry { char *name; int c_ext; enum sym_type type; } +%% +if, 0, st_C_ignore +for, 0, st_C_ignore +while, 0, st_C_ignore +switch, 0, st_C_ignore +return, 0, st_C_ignore +__attribute__, 0, st_C_attribute +GTY, 0, st_C_attribute +@interface, 0, st_C_objprot +@protocol, 0, st_C_objprot +@implementation,0, st_C_objimpl +@end, 0, st_C_objend +import, (C_JAVA & ~C_PLPL), st_C_ignore +package, (C_JAVA & ~C_PLPL), st_C_ignore +friend, C_PLPL, st_C_ignore +extends, (C_JAVA & ~C_PLPL), st_C_javastruct +implements, (C_JAVA & ~C_PLPL), st_C_javastruct +interface, (C_JAVA & ~C_PLPL), st_C_struct +class, 0, st_C_class +namespace, C_PLPL, st_C_struct +domain, C_STAR, st_C_struct +union, 0, st_C_struct +struct, 0, st_C_struct +extern, 0, st_C_extern +enum, 0, st_C_enum +typedef, 0, st_C_typedef +define, 0, st_C_define +undef, 0, st_C_define +operator, C_PLPL, st_C_operator +template, 0, st_C_template +# DEFUN used in emacs, the next three used in glibc (SYSCALL only for mach). +DEFUN, 0, st_C_gnumacro +SYSCALL, 0, st_C_gnumacro +ENTRY, 0, st_C_gnumacro +PSEUDO, 0, st_C_gnumacro +# These are defined inside C functions, so currently they are not met. +# EXFUN used in glibc, DEFVAR_* in emacs. +#EXFUN, 0, st_C_gnumacro +#DEFVAR_, 0, st_C_gnumacro +%] +and replace lines between %< and %> with its output, then: + - remove the #if characterset check + - make in_word_set static and not inline. */ +/*%<*/ +/* C code produced by gperf version 3.0.1 */ +/* Command-line: gperf -m 5 */ +/* Computed positions: -k'2-3' */ + +struct C_stab_entry { const char *name; int c_ext; enum sym_type type; }; +/* maximum key range = 33, duplicates = 0 */ + +static int +hash (const char *str, int len) +{ + static char const asso_values[] = + { + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 3, + 26, 35, 35, 35, 35, 35, 35, 35, 27, 35, + 35, 35, 35, 24, 0, 35, 35, 35, 35, 0, + 35, 35, 35, 35, 35, 1, 35, 16, 35, 6, + 23, 0, 0, 35, 22, 0, 35, 35, 5, 0, + 0, 15, 1, 35, 6, 35, 8, 19, 35, 16, + 4, 5, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35 + }; + int hval = len; + + switch (hval) + { + default: + hval += asso_values[(unsigned char) str[2]]; + /*FALLTHROUGH*/ + case 2: + hval += asso_values[(unsigned char) str[1]]; + break; + } + return hval; +} + +static struct C_stab_entry * +in_word_set (register const char *str, register unsigned int len) +{ + enum + { + TOTAL_KEYWORDS = 33, + MIN_WORD_LENGTH = 2, + MAX_WORD_LENGTH = 15, + MIN_HASH_VALUE = 2, + MAX_HASH_VALUE = 34 + }; + + static struct C_stab_entry wordlist[] = + { + {""}, {""}, + {"if", 0, st_C_ignore}, + {"GTY", 0, st_C_attribute}, + {"@end", 0, st_C_objend}, + {"union", 0, st_C_struct}, + {"define", 0, st_C_define}, + {"import", (C_JAVA & ~C_PLPL), st_C_ignore}, + {"template", 0, st_C_template}, + {"operator", C_PLPL, st_C_operator}, + {"@interface", 0, st_C_objprot}, + {"implements", (C_JAVA & ~C_PLPL), st_C_javastruct}, + {"friend", C_PLPL, st_C_ignore}, + {"typedef", 0, st_C_typedef}, + {"return", 0, st_C_ignore}, + {"@implementation",0, st_C_objimpl}, + {"@protocol", 0, st_C_objprot}, + {"interface", (C_JAVA & ~C_PLPL), st_C_struct}, + {"extern", 0, st_C_extern}, + {"extends", (C_JAVA & ~C_PLPL), st_C_javastruct}, + {"struct", 0, st_C_struct}, + {"domain", C_STAR, st_C_struct}, + {"switch", 0, st_C_ignore}, + {"enum", 0, st_C_enum}, + {"for", 0, st_C_ignore}, + {"namespace", C_PLPL, st_C_struct}, + {"class", 0, st_C_class}, + {"while", 0, st_C_ignore}, + {"undef", 0, st_C_define}, + {"package", (C_JAVA & ~C_PLPL), st_C_ignore}, + {"__attribute__", 0, st_C_attribute}, + {"SYSCALL", 0, st_C_gnumacro}, + {"ENTRY", 0, st_C_gnumacro}, + {"PSEUDO", 0, st_C_gnumacro}, + {"DEFUN", 0, st_C_gnumacro} + }; + + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + int key = hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + { + const char *s = wordlist[key].name; + + if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0') + return &wordlist[key]; + } + } + return 0; +} +/*%>*/ + +static enum sym_type +C_symtype (char *str, int len, int c_ext) +{ + register struct C_stab_entry *se = in_word_set (str, len); + + if (se == NULL || (se->c_ext && !(c_ext & se->c_ext))) + return st_none; + return se->type; +} + + +/* + * Ignoring __attribute__ ((list)) + */ +static bool inattribute; /* looking at an __attribute__ construct */ + +/* + * C functions and variables are recognized using a simple + * finite automaton. fvdef is its state variable. + */ +static enum +{ + fvnone, /* nothing seen */ + fdefunkey, /* Emacs DEFUN keyword seen */ + fdefunname, /* Emacs DEFUN name seen */ + foperator, /* func: operator keyword seen (cplpl) */ + fvnameseen, /* function or variable name seen */ + fstartlist, /* func: just after open parenthesis */ + finlist, /* func: in parameter list */ + flistseen, /* func: after parameter list */ + fignore, /* func: before open brace */ + vignore /* var-like: ignore until ';' */ +} fvdef; + +static bool fvextern; /* func or var: extern keyword seen; */ + +/* + * typedefs are recognized using a simple finite automaton. + * typdef is its state variable. + */ +static enum +{ + tnone, /* nothing seen */ + tkeyseen, /* typedef keyword seen */ + ttypeseen, /* defined type seen */ + tinbody, /* inside typedef body */ + tend, /* just before typedef tag */ + tignore /* junk after typedef tag */ +} typdef; + +/* + * struct-like structures (enum, struct and union) are recognized + * using another simple finite automaton. `structdef' is its state + * variable. + */ +static enum +{ + snone, /* nothing seen yet, + or in struct body if bracelev > 0 */ + skeyseen, /* struct-like keyword seen */ + stagseen, /* struct-like tag seen */ + scolonseen /* colon seen after struct-like tag */ +} structdef; + +/* + * When objdef is different from onone, objtag is the name of the class. + */ +static const char *objtag = ""; + +/* + * Yet another little state machine to deal with preprocessor lines. + */ +static enum +{ + dnone, /* nothing seen */ + dsharpseen, /* '#' seen as first char on line */ + ddefineseen, /* '#' and 'define' seen */ + dignorerest /* ignore rest of line */ +} definedef; + +/* + * State machine for Objective C protocols and implementations. + * Idea by Tom R.Hageman (1995) + */ +static enum +{ + onone, /* nothing seen */ + oprotocol, /* @interface or @protocol seen */ + oimplementation, /* @implementations seen */ + otagseen, /* class name seen */ + oparenseen, /* parenthesis before category seen */ + ocatseen, /* category name seen */ + oinbody, /* in @implementation body */ + omethodsign, /* in @implementation body, after +/- */ + omethodtag, /* after method name */ + omethodcolon, /* after method colon */ + omethodparm, /* after method parameter */ + oignore /* wait for @end */ +} objdef; + + +/* + * Use this structure to keep info about the token read, and how it + * should be tagged. Used by the make_C_tag function to build a tag. + */ +static struct tok +{ + char *line; /* string containing the token */ + int offset; /* where the token starts in LINE */ + int length; /* token length */ + /* + The previous members can be used to pass strings around for generic + purposes. The following ones specifically refer to creating tags. In this + case the token contained here is the pattern that will be used to create a + tag. + */ + bool valid; /* do not create a tag; the token should be + invalidated whenever a state machine is + reset prematurely */ + bool named; /* create a named tag */ + int lineno; /* source line number of tag */ + long linepos; /* source char number of tag */ +} token; /* latest token read */ + +/* + * Variables and functions for dealing with nested structures. + * Idea by Mykola Dzyuba (2001) + */ +static void pushclass_above (int, char *, int); +static void popclass_above (int); +static void write_classname (linebuffer *, const char *qualifier); + +static struct { + char **cname; /* nested class names */ + int *bracelev; /* nested class brace level */ + int nl; /* class nesting level (elements used) */ + int size; /* length of the array */ +} cstack; /* stack for nested declaration tags */ +/* Current struct nesting depth (namespace, class, struct, union, enum). */ +#define nestlev (cstack.nl) +/* After struct keyword or in struct body, not inside a nested function. */ +#define instruct (structdef == snone && nestlev > 0 \ + && bracelev == cstack.bracelev[nestlev-1] + 1) + +static void +pushclass_above (int bracelev, char *str, int len) +{ + int nl; + + popclass_above (bracelev); + nl = cstack.nl; + if (nl >= cstack.size) + { + int size = cstack.size *= 2; + xrnew (cstack.cname, size, char *); + xrnew (cstack.bracelev, size, int); + } + assert (nl == 0 || cstack.bracelev[nl-1] < bracelev); + cstack.cname[nl] = (str == NULL) ? NULL : savenstr (str, len); + cstack.bracelev[nl] = bracelev; + cstack.nl = nl + 1; +} + +static void +popclass_above (int bracelev) +{ + int nl; + + for (nl = cstack.nl - 1; + nl >= 0 && cstack.bracelev[nl] >= bracelev; + nl--) + { + free (cstack.cname[nl]); + cstack.nl = nl; + } +} + +static void +write_classname (linebuffer *cn, const char *qualifier) +{ + int i, len; + int qlen = strlen (qualifier); + + if (cstack.nl == 0 || cstack.cname[0] == NULL) + { + len = 0; + cn->len = 0; + cn->buffer[0] = '\0'; + } + else + { + len = strlen (cstack.cname[0]); + linebuffer_setlen (cn, len); + strcpy (cn->buffer, cstack.cname[0]); + } + for (i = 1; i < cstack.nl; i++) + { + char *s = cstack.cname[i]; + if (s == NULL) + continue; + linebuffer_setlen (cn, len + qlen + strlen (s)); + len += sprintf (cn->buffer + len, "%s%s", qualifier, s); + } +} + + +static bool consider_token (char *, int, int, int *, int, int, bool *); +static void make_C_tag (bool); + +/* + * consider_token () + * checks to see if the current token is at the start of a + * function or variable, or corresponds to a typedef, or + * is a struct/union/enum tag, or #define, or an enum constant. + * + * *IS_FUNC_OR_VAR gets true if the token is a function or #define macro + * with args. C_EXTP points to which language we are looking at. + * + * Globals + * fvdef IN OUT + * structdef IN OUT + * definedef IN OUT + * typdef IN OUT + * objdef IN OUT + */ + +static bool +consider_token (char *str, int len, int c, int *c_extp, + int bracelev, int parlev, bool *is_func_or_var) + /* IN: token pointer */ + /* IN: token length */ + /* IN: first char after the token */ + /* IN, OUT: C extensions mask */ + /* IN: brace level */ + /* IN: parenthesis level */ + /* OUT: function or variable found */ +{ + /* When structdef is stagseen, scolonseen, or snone with bracelev > 0, + structtype is the type of the preceding struct-like keyword, and + structbracelev is the brace level where it has been seen. */ + static enum sym_type structtype; + static int structbracelev; + static enum sym_type toktype; + + + toktype = C_symtype (str, len, *c_extp); + + /* + * Skip __attribute__ + */ + if (toktype == st_C_attribute) + { + inattribute = true; + return false; + } + + /* + * Advance the definedef state machine. + */ + switch (definedef) + { + case dnone: + /* We're not on a preprocessor line. */ + if (toktype == st_C_gnumacro) + { + fvdef = fdefunkey; + return false; + } + break; + case dsharpseen: + if (toktype == st_C_define) + { + definedef = ddefineseen; + } + else + { + definedef = dignorerest; + } + return false; + case ddefineseen: + /* + * Make a tag for any macro, unless it is a constant + * and constantypedefs is false. + */ + definedef = dignorerest; + *is_func_or_var = (c == '('); + if (!*is_func_or_var && !constantypedefs) + return false; + else + return true; + case dignorerest: + return false; + default: + error ("internal error: definedef value."); + } + + /* + * Now typedefs + */ + switch (typdef) + { + case tnone: + if (toktype == st_C_typedef) + { + if (typedefs) + typdef = tkeyseen; + fvextern = false; + fvdef = fvnone; + return false; + } + break; + case tkeyseen: + switch (toktype) + { + case st_none: + case st_C_class: + case st_C_struct: + case st_C_enum: + typdef = ttypeseen; + } + break; + case ttypeseen: + if (structdef == snone && fvdef == fvnone) + { + fvdef = fvnameseen; + return true; + } + break; + case tend: + switch (toktype) + { + case st_C_class: + case st_C_struct: + case st_C_enum: + return false; + } + return true; + } + + switch (toktype) + { + case st_C_javastruct: + if (structdef == stagseen) + structdef = scolonseen; + return false; + case st_C_template: + case st_C_class: + if ((*c_extp & C_AUTO) /* automatic detection of C++ language */ + && bracelev == 0 + && definedef == dnone && structdef == snone + && typdef == tnone && fvdef == fvnone) + *c_extp = (*c_extp | C_PLPL) & ~C_AUTO; + if (toktype == st_C_template) + break; + /* FALLTHRU */ + case st_C_struct: + case st_C_enum: + if (parlev == 0 + && fvdef != vignore + && (typdef == tkeyseen + || (typedefs_or_cplusplus && structdef == snone))) + { + structdef = skeyseen; + structtype = toktype; + structbracelev = bracelev; + if (fvdef == fvnameseen) + fvdef = fvnone; + } + return false; + } + + if (structdef == skeyseen) + { + structdef = stagseen; + return true; + } + + if (typdef != tnone) + definedef = dnone; + + /* Detect Objective C constructs. */ + switch (objdef) + { + case onone: + switch (toktype) + { + case st_C_objprot: + objdef = oprotocol; + return false; + case st_C_objimpl: + objdef = oimplementation; + return false; + } + break; + case oimplementation: + /* Save the class tag for functions or variables defined inside. */ + objtag = savenstr (str, len); + objdef = oinbody; + return false; + case oprotocol: + /* Save the class tag for categories. */ + objtag = savenstr (str, len); + objdef = otagseen; + *is_func_or_var = true; + return true; + case oparenseen: + objdef = ocatseen; + *is_func_or_var = true; + return true; + case oinbody: + break; + case omethodsign: + if (parlev == 0) + { + fvdef = fvnone; + objdef = omethodtag; + linebuffer_setlen (&token_name, len); + memcpy (token_name.buffer, str, len); + token_name.buffer[len] = '\0'; + return true; + } + return false; + case omethodcolon: + if (parlev == 0) + objdef = omethodparm; + return false; + case omethodparm: + if (parlev == 0) + { + int oldlen = token_name.len; + fvdef = fvnone; + objdef = omethodtag; + linebuffer_setlen (&token_name, oldlen + len); + memcpy (token_name.buffer + oldlen, str, len); + token_name.buffer[oldlen + len] = '\0'; + return true; + } + return false; + case oignore: + if (toktype == st_C_objend) + { + /* Memory leakage here: the string pointed by objtag is + never released, because many tests would be needed to + avoid breaking on incorrect input code. The amount of + memory leaked here is the sum of the lengths of the + class tags. + free (objtag); */ + objdef = onone; + } + return false; + } + + /* A function, variable or enum constant? */ + switch (toktype) + { + case st_C_extern: + fvextern = true; + switch (fvdef) + { + case finlist: + case flistseen: + case fignore: + case vignore: + break; + default: + fvdef = fvnone; + } + return false; + case st_C_ignore: + fvextern = false; + fvdef = vignore; + return false; + case st_C_operator: + fvdef = foperator; + *is_func_or_var = true; + return true; + case st_none: + if (constantypedefs + && structdef == snone + && 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) + { + case fdefunkey: + if (bracelev > 0) + break; + fvdef = fdefunname; /* GNU macro */ + *is_func_or_var = true; + return true; + case fvnone: + switch (typdef) + { + case ttypeseen: + return false; + case tnone: + if ((strneq (str, "asm", 3) && endtoken (str[3])) + || (strneq (str, "__asm__", 7) && endtoken (str[7]))) + { + fvdef = vignore; + return false; + } + break; + } + /* FALLTHRU */ + case fvnameseen: + if (len >= 10 && strneq (str+len-10, "::operator", 10)) + { + if (*c_extp & C_AUTO) /* automatic detection of C++ */ + *c_extp = (*c_extp | C_PLPL) & ~C_AUTO; + fvdef = foperator; + *is_func_or_var = true; + return true; + } + if (bracelev > 0 && !instruct) + break; + fvdef = fvnameseen; /* function or variable */ + *is_func_or_var = true; + return true; + } + break; + } + + return false; +} + + +/* + * C_entries often keeps pointers to tokens or lines which are older than + * the line currently read. By keeping two line buffers, and switching + * them at end of line, it is possible to use those pointers. + */ +static struct +{ + long linepos; + linebuffer lb; +} lbs[2]; + +#define current_lb_is_new (newndx == curndx) +#define switch_line_buffers() (curndx = 1 - curndx) + +#define curlb (lbs[curndx].lb) +#define newlb (lbs[newndx].lb) +#define curlinepos (lbs[curndx].linepos) +#define newlinepos (lbs[newndx].linepos) + +#define plainc ((c_ext & C_EXT) == C_PLAIN) +#define cplpl (c_ext & C_PLPL) +#define cjava ((c_ext & C_JAVA) == C_JAVA) + +#define CNL_SAVE_DEFINEDEF() \ +do { \ + curlinepos = charno; \ + readline (&curlb, inf); \ + lp = curlb.buffer; \ + quotednl = false; \ + newndx = curndx; \ +} while (0) + +#define CNL() \ +do { \ + CNL_SAVE_DEFINEDEF(); \ + if (savetoken.valid) \ + { \ + token = savetoken; \ + savetoken.valid = false; \ + } \ + definedef = dnone; \ +} while (0) + + +static void +make_C_tag (bool isfun) +{ + /* This function is never called when token.valid is false, but + we must protect against invalid input or internal errors. */ + if (token.valid) + make_tag (token_name.buffer, token_name.len, isfun, token.line, + token.offset+token.length+1, token.lineno, token.linepos); + else if (DEBUG) + { /* this branch is optimized away if !DEBUG */ + make_tag (concat ("INVALID TOKEN:-->", token_name.buffer, ""), + token_name.len + 17, isfun, token.line, + token.offset+token.length+1, token.lineno, token.linepos); + error ("INVALID TOKEN"); + } + + token.valid = false; +} + + +/* + * C_entries () + * This routine finds functions, variables, typedefs, + * #define's, enum constants and struct/union/enum definitions in + * C syntax and adds them to the list. + */ +static void +C_entries (int c_ext, FILE *inf) + /* extension of C */ + /* input file */ +{ + register char c; /* latest char read; '\0' for end of line */ + register char *lp; /* pointer one beyond the character `c' */ + int curndx, newndx; /* indices for current and new lb */ + register int tokoff; /* offset in line of start of current token */ + register int toklen; /* length of current token */ + const char *qualifier; /* string used to qualify names */ + int qlen; /* length of qualifier */ + int bracelev; /* current brace level */ + int bracketlev; /* current bracket level */ + int parlev; /* current parenthesis level */ + int attrparlev; /* __attribute__ parenthesis level */ + int templatelev; /* current template level */ + int typdefbracelev; /* bracelev where a typedef struct body begun */ + bool incomm, inquote, inchar, quotednl, midtoken; + bool yacc_rules; /* in the rules part of a yacc file */ + struct tok savetoken = {0}; /* token saved during preprocessor handling */ + + + linebuffer_init (&lbs[0].lb); + linebuffer_init (&lbs[1].lb); + if (cstack.size == 0) + { + cstack.size = (DEBUG) ? 1 : 4; + cstack.nl = 0; + cstack.cname = xnew (cstack.size, char *); + cstack.bracelev = xnew (cstack.size, int); + } + + tokoff = toklen = typdefbracelev = 0; /* keep compiler quiet */ + curndx = newndx = 0; + lp = curlb.buffer; + *lp = 0; + + fvdef = fvnone; fvextern = false; typdef = tnone; + structdef = snone; definedef = dnone; objdef = onone; + yacc_rules = false; + midtoken = inquote = inchar = incomm = quotednl = false; + token.valid = savetoken.valid = false; + bracelev = bracketlev = parlev = attrparlev = templatelev = 0; + if (cjava) + { qualifier = "."; qlen = 1; } + else + { qualifier = "::"; qlen = 2; } + + + while (!feof (inf)) + { + c = *lp++; + if (c == '\\') + { + /* If we are at the end of the line, the next character is a + '\0'; do not skip it, because it is what tells us + to read the next line. */ + if (*lp == '\0') + { + quotednl = true; + continue; + } + lp++; + c = ' '; + } + else if (incomm) + { + switch (c) + { + case '*': + if (*lp == '/') + { + c = *lp++; + incomm = false; + } + break; + case '\0': + /* Newlines inside comments do not end macro definitions in + traditional cpp. */ + CNL_SAVE_DEFINEDEF (); + break; + } + continue; + } + else if (inquote) + { + switch (c) + { + case '"': + inquote = false; + break; + case '\0': + /* Newlines inside strings do not end macro definitions + in traditional cpp, even though compilers don't + usually accept them. */ + CNL_SAVE_DEFINEDEF (); + break; + } + continue; + } + else if (inchar) + { + switch (c) + { + case '\0': + /* Hmmm, something went wrong. */ + CNL (); + /* FALLTHRU */ + case '\'': + inchar = false; + break; + } + continue; + } + else switch (c) + { + case '"': + inquote = true; + if (bracketlev > 0) + continue; + if (inattribute) + break; + switch (fvdef) + { + case fdefunkey: + case fstartlist: + case finlist: + case fignore: + case vignore: + break; + default: + fvextern = false; + fvdef = fvnone; + } + continue; + case '\'': + inchar = true; + if (bracketlev > 0) + continue; + if (inattribute) + break; + if (fvdef != finlist && fvdef != fignore && fvdef != vignore) + { + fvextern = false; + fvdef = fvnone; + } + continue; + case '/': + if (*lp == '*') + { + incomm = true; + lp++; + c = ' '; + if (bracketlev > 0) + continue; + } + else if (/* cplpl && */ *lp == '/') + { + c = '\0'; + } + break; + case '%': + if ((c_ext & YACC) && *lp == '%') + { + /* Entering or exiting rules section in yacc file. */ + lp++; + definedef = dnone; fvdef = fvnone; fvextern = false; + typdef = tnone; structdef = snone; + midtoken = inquote = inchar = incomm = quotednl = false; + bracelev = 0; + yacc_rules = !yacc_rules; + continue; + } + else + break; + case '#': + if (definedef == dnone) + { + char *cp; + bool cpptoken = true; + + /* Look back on this line. If all blanks, or nonblanks + followed by an end of comment, this is a preprocessor + token. */ + for (cp = newlb.buffer; cp < lp-1; cp++) + if (!iswhite (*cp)) + { + if (*cp == '*' && cp[1] == '/') + { + cp++; + cpptoken = true; + } + else + cpptoken = false; + } + if (cpptoken) + { + 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 '[': + bracketlev++; + continue; + default: + if (bracketlev > 0) + { + if (c == ']') + --bracketlev; + else if (c == '\0') + CNL_SAVE_DEFINEDEF (); + continue; + } + break; + } /* switch (c) */ + + + /* Consider token only if some involved conditions are satisfied. */ + if (typdef != tignore + && definedef != dignorerest + && fvdef != finlist + && templatelev == 0 + && (definedef != dnone + || structdef != scolonseen) + && !inattribute) + { + if (midtoken) + { + if (endtoken (c)) + { + if (c == ':' && *lp == ':' && begtoken (lp[1])) + /* This handles :: in the middle, + but not at the beginning of an identifier. + Also, space-separated :: is not recognized. */ + { + if (c_ext & C_AUTO) /* automatic detection of C++ */ + c_ext = (c_ext | C_PLPL) & ~C_AUTO; + lp += 2; + toklen += 2; + c = lp[-1]; + goto still_in_token; + } + else + { + bool funorvar = false; + + if (yacc_rules + || consider_token (newlb.buffer + tokoff, toklen, c, + &c_ext, bracelev, parlev, + &funorvar)) + { + if (fvdef == foperator) + { + char *oldlp = lp; + lp = skip_spaces (lp-1); + if (*lp != '\0') + lp += 1; + while (*lp != '\0' + && !iswhite (*lp) && *lp != '(') + lp += 1; + c = *lp++; + toklen += lp - oldlp; + } + token.named = false; + if (!plainc + && nestlev > 0 && definedef == dnone) + /* in struct body */ + { + int len; + write_classname (&token_name, qualifier); + len = token_name.len; + linebuffer_setlen (&token_name, len+qlen+toklen); + sprintf (token_name.buffer + len, "%s%.*s", + qualifier, toklen, newlb.buffer + tokoff); + token.named = true; + } + else if (objdef == ocatseen) + /* Objective C category */ + { + int len = strlen (objtag) + 2 + toklen; + linebuffer_setlen (&token_name, len); + sprintf (token_name.buffer, "%s(%.*s)", + objtag, toklen, newlb.buffer + tokoff); + token.named = true; + } + else if (objdef == omethodtag + || objdef == omethodparm) + /* Objective C method */ + { + token.named = true; + } + else if (fvdef == fdefunname) + /* GNU DEFUN and similar macros */ + { + bool defun = (newlb.buffer[tokoff] == 'F'); + int off = tokoff; + int len = toklen; + + /* Rewrite the tag so that emacs lisp DEFUNs + can be found by their elisp name */ + if (defun) + { + off += 1; + len -= 1; + } + linebuffer_setlen (&token_name, len); + memcpy (token_name.buffer, + newlb.buffer + off, len); + token_name.buffer[len] = '\0'; + if (defun) + while (--len >= 0) + if (token_name.buffer[len] == '_') + token_name.buffer[len] = '-'; + token.named = defun; + } + else + { + linebuffer_setlen (&token_name, toklen); + memcpy (token_name.buffer, + newlb.buffer + tokoff, toklen); + token_name.buffer[toklen] = '\0'; + /* Name macros and members. */ + token.named = (structdef == stagseen + || typdef == ttypeseen + || typdef == tend + || (funorvar + && definedef == dignorerest) + || (funorvar + && definedef == dnone + && structdef == snone + && bracelev > 0)); + } + token.lineno = lineno; + token.offset = tokoff; + token.length = toklen; + token.line = newlb.buffer; + token.linepos = newlinepos; + token.valid = true; + + if (definedef == dnone + && (fvdef == fvnameseen + || fvdef == foperator + || structdef == stagseen + || typdef == tend + || typdef == ttypeseen + || objdef != onone)) + { + if (current_lb_is_new) + switch_line_buffers (); + } + else if (definedef != dnone + || fvdef == fdefunname + || instruct) + make_C_tag (funorvar); + } + else /* not yacc and consider_token failed */ + { + if (inattribute && fvdef == fignore) + { + /* We have just met __attribute__ after a + function parameter list: do not tag the + function again. */ + fvdef = fvnone; + } + } + midtoken = false; + } + } /* if (endtoken (c)) */ + else if (intoken (c)) + still_in_token: + { + toklen++; + continue; + } + } /* if (midtoken) */ + else if (begtoken (c)) + { + switch (definedef) + { + case dnone: + switch (fvdef) + { + case fstartlist: + /* This prevents tagging fb in + void (__attribute__((noreturn)) *fb) (void); + Fixing this is not easy and not very important. */ + fvdef = finlist; + continue; + case flistseen: + if (plainc || declarations) + { + make_C_tag (true); /* a function */ + fvdef = fignore; + } + break; + } + if (structdef == stagseen && !cjava) + { + popclass_above (bracelev); + structdef = snone; + } + break; + case dsharpseen: + savetoken = token; + break; + } + if (!yacc_rules || lp == newlb.buffer + 1) + { + tokoff = lp - 1 - newlb.buffer; + toklen = 1; + midtoken = true; + } + continue; + } /* if (begtoken) */ + } /* if must look at token */ + + + /* Detect end of line, colon, comma, semicolon and various braces + after having handled a token.*/ + switch (c) + { + case ':': + if (inattribute) + break; + if (yacc_rules && token.offset == 0 && token.valid) + { + make_C_tag (false); /* a yacc function */ + break; + } + if (definedef != dnone) + break; + switch (objdef) + { + case otagseen: + objdef = oignore; + make_C_tag (true); /* an Objective C class */ + break; + case omethodtag: + case omethodparm: + objdef = omethodcolon; + int toklen = token_name.len; + linebuffer_setlen (&token_name, toklen + 1); + strcpy (token_name.buffer + toklen, ":"); + break; + } + if (structdef == stagseen) + { + structdef = scolonseen; + break; + } + /* Should be useless, but may be work as a safety net. */ + if (cplpl && fvdef == flistseen) + { + make_C_tag (true); /* a function */ + fvdef = fignore; + break; + } + break; + case ';': + if (definedef != dnone || inattribute) + break; + switch (typdef) + { + case tend: + case ttypeseen: + make_C_tag (false); /* a typedef */ + typdef = tnone; + fvdef = fvnone; + break; + case tnone: + case tinbody: + case tignore: + switch (fvdef) + { + case fignore: + if (typdef == tignore || cplpl) + fvdef = fvnone; + break; + case fvnameseen: + if ((globals && bracelev == 0 && (!fvextern || declarations)) + || (members && instruct)) + make_C_tag (false); /* a variable */ + fvextern = false; + fvdef = fvnone; + token.valid = false; + break; + case flistseen: + if ((declarations + && (cplpl || !instruct) + && (typdef == tnone || (typdef != tignore && instruct))) + || (members + && plainc && instruct)) + make_C_tag (true); /* a function */ + /* FALLTHRU */ + default: + fvextern = false; + fvdef = fvnone; + if (declarations + && cplpl && structdef == stagseen) + make_C_tag (false); /* forward declaration */ + else + token.valid = false; + } /* switch (fvdef) */ + /* FALLTHRU */ + default: + if (!instruct) + typdef = tnone; + } + if (structdef == stagseen) + structdef = snone; + break; + case ',': + if (definedef != dnone || inattribute) + break; + switch (objdef) + { + case omethodtag: + case omethodparm: + make_C_tag (true); /* an Objective C method */ + objdef = oinbody; + break; + } + switch (fvdef) + { + case fdefunkey: + case foperator: + case fstartlist: + case finlist: + case fignore: + break; + case vignore: + if (instruct && parlev == 0) + fvdef = fvnone; + break; + case fdefunname: + fvdef = fignore; + break; + case fvnameseen: + if (parlev == 0 + && ((globals + && bracelev == 0 + && templatelev == 0 + && (!fvextern || declarations)) + || (members && instruct))) + make_C_tag (false); /* a variable */ + break; + case flistseen: + if ((declarations && typdef == tnone && !instruct) + || (members && typdef != tignore && instruct)) + { + make_C_tag (true); /* a function */ + fvdef = fvnameseen; + } + else if (!declarations) + fvdef = fvnone; + token.valid = false; + break; + default: + fvdef = fvnone; + } + if (structdef == stagseen) + structdef = snone; + break; + case ']': + if (definedef != dnone || inattribute) + break; + if (structdef == stagseen) + structdef = snone; + switch (typdef) + { + case ttypeseen: + case tend: + typdef = tignore; + make_C_tag (false); /* a typedef */ + break; + case tnone: + case tinbody: + switch (fvdef) + { + case foperator: + case finlist: + case fignore: + case vignore: + break; + case fvnameseen: + if ((members && bracelev == 1) + || (globals && bracelev == 0 + && (!fvextern || declarations))) + make_C_tag (false); /* a variable */ + /* FALLTHRU */ + default: + fvdef = fvnone; + } + break; + } + break; + case '(': + if (inattribute) + { + attrparlev++; + break; + } + if (definedef != dnone) + break; + if (objdef == otagseen && parlev == 0) + objdef = oparenseen; + switch (fvdef) + { + case fvnameseen: + if (typdef == ttypeseen + && *lp != '*' + && !instruct) + { + /* This handles constructs like: + typedef void OperatorFun (int fun); */ + make_C_tag (false); + typdef = tignore; + fvdef = fignore; + break; + } + /* FALLTHRU */ + case foperator: + fvdef = fstartlist; + break; + case flistseen: + fvdef = finlist; + break; + } + parlev++; + break; + case ')': + if (inattribute) + { + if (--attrparlev == 0) + inattribute = false; + break; + } + if (definedef != dnone) + break; + if (objdef == ocatseen && parlev == 1) + { + make_C_tag (true); /* an Objective C category */ + objdef = oignore; + } + if (--parlev == 0) + { + switch (fvdef) + { + case fstartlist: + case finlist: + fvdef = flistseen; + break; + } + if (!instruct + && (typdef == tend + || typdef == ttypeseen)) + { + typdef = tignore; + make_C_tag (false); /* a typedef */ + } + } + else if (parlev < 0) /* can happen due to ill-conceived #if's. */ + parlev = 0; + break; + case '{': + if (definedef != dnone) + break; + if (typdef == ttypeseen) + { + /* Whenever typdef is set to tinbody (currently only + here), typdefbracelev should be set to bracelev. */ + typdef = tinbody; + typdefbracelev = bracelev; + } + switch (fvdef) + { + case flistseen: + make_C_tag (true); /* a function */ + /* FALLTHRU */ + case fignore: + fvdef = fvnone; + break; + case fvnone: + switch (objdef) + { + case otagseen: + make_C_tag (true); /* an Objective C class */ + objdef = oignore; + break; + case omethodtag: + case omethodparm: + make_C_tag (true); /* an Objective C method */ + objdef = oinbody; + break; + default: + /* Neutralize `extern "C" {' grot. */ + if (bracelev == 0 && structdef == snone && nestlev == 0 + && typdef == tnone) + bracelev = -1; + } + break; + } + switch (structdef) + { + case skeyseen: /* unnamed struct */ + pushclass_above (bracelev, NULL, 0); + structdef = snone; + break; + case stagseen: /* named struct or enum */ + case scolonseen: /* a class */ + pushclass_above (bracelev,token.line+token.offset, token.length); + structdef = snone; + make_C_tag (false); /* a struct or enum */ + break; + } + bracelev += 1; + break; + case '*': + if (definedef != dnone) + break; + if (fvdef == fstartlist) + { + fvdef = fvnone; /* avoid tagging `foo' in `foo (*bar()) ()' */ + token.valid = false; + } + break; + case '}': + if (definedef != dnone) + break; + bracelev -= 1; + if (!ignoreindent && lp == newlb.buffer + 1) + { + if (bracelev != 0) + token.valid = false; /* unexpected value, token unreliable */ + bracelev = 0; /* reset brace level if first column */ + parlev = 0; /* also reset paren level, just in case... */ + } + else if (bracelev < 0) + { + token.valid = false; /* something gone amiss, token unreliable */ + bracelev = 0; + } + if (bracelev == 0 && fvdef == vignore) + fvdef = fvnone; /* end of function */ + popclass_above (bracelev); + structdef = snone; + /* Only if typdef == tinbody is typdefbracelev significant. */ + if (typdef == tinbody && bracelev <= typdefbracelev) + { + assert (bracelev == typdefbracelev); + typdef = tend; + } + break; + case '=': + if (definedef != dnone) + break; + switch (fvdef) + { + case foperator: + case finlist: + case fignore: + case vignore: + break; + case fvnameseen: + if ((members && bracelev == 1) + || (globals && bracelev == 0 && (!fvextern || declarations))) + make_C_tag (false); /* a variable */ + /* FALLTHRU */ + default: + fvdef = vignore; + } + break; + case '<': + if (cplpl + && (structdef == stagseen || fvdef == fvnameseen)) + { + templatelev++; + break; + } + goto resetfvdef; + case '>': + if (templatelev > 0) + { + templatelev--; + break; + } + goto resetfvdef; + case '+': + case '-': + if (objdef == oinbody && bracelev == 0) + { + objdef = omethodsign; + break; + } + /* FALLTHRU */ + resetfvdef: + case '#': case '~': case '&': case '%': case '/': + case '|': case '^': case '!': case '.': case '?': + if (definedef != dnone) + break; + /* These surely cannot follow a function tag in C. */ + switch (fvdef) + { + case foperator: + case finlist: + case fignore: + case vignore: + break; + default: + fvdef = fvnone; + } + break; + case '\0': + if (objdef == otagseen) + { + make_C_tag (true); /* an Objective C class */ + objdef = oignore; + } + /* If a macro spans multiple lines don't reset its state. */ + if (quotednl) + CNL_SAVE_DEFINEDEF (); + else + CNL (); + break; + } /* switch (c) */ + + } /* while not eof */ + + free (lbs[0].lb.buffer); + free (lbs[1].lb.buffer); +} + +/* + * Process either a C++ file or a C file depending on the setting + * of a global flag. + */ +static void +default_C_entries (FILE *inf) +{ + C_entries (cplusplus ? C_PLPL : C_AUTO, inf); +} + +/* Always do plain C. */ +static void +plain_C_entries (FILE *inf) +{ + C_entries (0, inf); +} + +/* Always do C++. */ +static void +Cplusplus_entries (FILE *inf) +{ + C_entries (C_PLPL, inf); +} + +/* Always do Java. */ +static void +Cjava_entries (FILE *inf) +{ + C_entries (C_JAVA, inf); +} + +/* Always do C*. */ +static void +Cstar_entries (FILE *inf) +{ + C_entries (C_STAR, inf); +} + +/* Always do Yacc. */ +static void +Yacc_entries (FILE *inf) +{ + C_entries (YACC, inf); +} + + +/* Useful macros. */ +#define LOOP_ON_INPUT_LINES(file_pointer, line_buffer, char_pointer) \ + for (; /* loop initialization */ \ + !feof (file_pointer) /* loop test */ \ + && /* instructions at start of loop */ \ + (readline (&line_buffer, file_pointer), \ + char_pointer = line_buffer.buffer, \ + true); \ + ) + +#define LOOKING_AT(cp, kw) /* kw is the keyword, a literal string */ \ + ((assert ("" kw), true) /* syntax error if not a literal string */ \ + && strneq ((cp), kw, sizeof (kw)-1) /* cp points at kw */ \ + && notinname ((cp)[sizeof (kw)-1]) /* end of kw */ \ + && ((cp) = skip_spaces ((cp)+sizeof (kw)-1))) /* skip spaces */ + +/* Similar to LOOKING_AT but does not use notinname, does not skip */ +#define LOOKING_AT_NOCASE(cp, kw) /* the keyword is a literal string */ \ + ((assert ("" kw), true) /* syntax error if not a literal string */ \ + && strncaseeq ((cp), kw, sizeof (kw)-1) /* cp points at kw */ \ + && ((cp) += sizeof (kw)-1)) /* skip spaces */ + +/* + * Read a file, but do no processing. This is used to do regexp + * matching on files that have no language defined. + */ +static void +just_read_file (FILE *inf) +{ + while (!feof (inf)) + readline (&lb, inf); +} + + +/* Fortran parsing */ + +static void F_takeprec (void); +static void F_getit (FILE *); + +static void +F_takeprec (void) +{ + dbp = skip_spaces (dbp); + if (*dbp != '*') + return; + dbp++; + dbp = skip_spaces (dbp); + if (strneq (dbp, "(*)", 3)) + { + dbp += 3; + return; + } + if (!ISDIGIT (*dbp)) + { + --dbp; /* force failure */ + return; + } + do + dbp++; + while (ISDIGIT (*dbp)); +} + +static void +F_getit (FILE *inf) +{ + register char *cp; + + dbp = skip_spaces (dbp); + if (*dbp == '\0') + { + readline (&lb, inf); + dbp = lb.buffer; + if (dbp[5] != '&') + return; + dbp += 6; + dbp = skip_spaces (dbp); + } + if (!ISALPHA (*dbp) && *dbp != '_' && *dbp != '$') + return; + for (cp = dbp + 1; *cp != '\0' && intoken (*cp); cp++) + continue; + make_tag (dbp, cp-dbp, true, + lb.buffer, cp - lb.buffer + 1, lineno, linecharno); +} + + +static void +Fortran_functions (FILE *inf) +{ + LOOP_ON_INPUT_LINES (inf, lb, dbp) + { + if (*dbp == '%') + dbp++; /* Ratfor escape to fortran */ + dbp = skip_spaces (dbp); + if (*dbp == '\0') + continue; + + if (LOOKING_AT_NOCASE (dbp, "recursive")) + dbp = skip_spaces (dbp); + + if (LOOKING_AT_NOCASE (dbp, "pure")) + dbp = skip_spaces (dbp); + + if (LOOKING_AT_NOCASE (dbp, "elemental")) + dbp = skip_spaces (dbp); + + switch (lowcase (*dbp)) + { + case 'i': + if (nocase_tail ("integer")) + F_takeprec (); + break; + case 'r': + if (nocase_tail ("real")) + F_takeprec (); + break; + case 'l': + if (nocase_tail ("logical")) + F_takeprec (); + break; + case 'c': + if (nocase_tail ("complex") || nocase_tail ("character")) + F_takeprec (); + break; + case 'd': + if (nocase_tail ("double")) + { + dbp = skip_spaces (dbp); + if (*dbp == '\0') + continue; + if (nocase_tail ("precision")) + break; + continue; + } + break; + } + dbp = skip_spaces (dbp); + if (*dbp == '\0') + continue; + switch (lowcase (*dbp)) + { + case 'f': + if (nocase_tail ("function")) + F_getit (inf); + continue; + case 's': + if (nocase_tail ("subroutine")) + F_getit (inf); + continue; + case 'e': + if (nocase_tail ("entry")) + F_getit (inf); + continue; + case 'b': + if (nocase_tail ("blockdata") || nocase_tail ("block data")) + { + dbp = skip_spaces (dbp); + if (*dbp == '\0') /* assume un-named */ + make_tag ("blockdata", 9, true, + lb.buffer, dbp - lb.buffer, lineno, linecharno); + else + F_getit (inf); /* look for name */ + } + continue; + } + } +} + + +/* + * Ada parsing + * Original code by + * Philippe Waroquiers (1998) + */ + +/* Once we are positioned after an "interesting" keyword, let's get + the real tag value necessary. */ +static void +Ada_getit (FILE *inf, const char *name_qualifier) +{ + register char *cp; + char *name; + char c; + + while (!feof (inf)) + { + dbp = skip_spaces (dbp); + if (*dbp == '\0' + || (dbp[0] == '-' && dbp[1] == '-')) + { + readline (&lb, inf); + dbp = lb.buffer; + } + switch (lowcase (*dbp)) + { + case 'b': + if (nocase_tail ("body")) + { + /* Skipping body of procedure body or package body or .... + resetting qualifier to body instead of spec. */ + name_qualifier = "/b"; + continue; + } + break; + case 't': + /* Skipping type of task type or protected type ... */ + if (nocase_tail ("type")) + continue; + break; + } + if (*dbp == '"') + { + dbp += 1; + for (cp = dbp; *cp != '\0' && *cp != '"'; cp++) + continue; + } + else + { + dbp = skip_spaces (dbp); + for (cp = dbp; + (*cp != '\0' + && (ISALPHA (*cp) || ISDIGIT (*cp) || *cp == '_' || *cp == '.')); + cp++) + continue; + if (cp == dbp) + return; + } + c = *cp; + *cp = '\0'; + name = concat (dbp, name_qualifier, ""); + *cp = c; + make_tag (name, strlen (name), true, + lb.buffer, cp - lb.buffer + 1, lineno, linecharno); + free (name); + if (c == '"') + dbp = cp + 1; + return; + } +} + +static void +Ada_funcs (FILE *inf) +{ + bool inquote = false; + bool skip_till_semicolumn = false; + + LOOP_ON_INPUT_LINES (inf, lb, dbp) + { + while (*dbp != '\0') + { + /* Skip a string i.e. "abcd". */ + if (inquote || (*dbp == '"')) + { + dbp = strchr (dbp + !inquote, '"'); + if (dbp != NULL) + { + inquote = false; + dbp += 1; + continue; /* advance char */ + } + else + { + inquote = true; + break; /* advance line */ + } + } + + /* Skip comments. */ + if (dbp[0] == '-' && dbp[1] == '-') + break; /* advance line */ + + /* Skip character enclosed in single quote i.e. 'a' + and skip single quote starting an attribute i.e. 'Image. */ + if (*dbp == '\'') + { + dbp++ ; + if (*dbp != '\0') + dbp++; + continue; + } + + if (skip_till_semicolumn) + { + if (*dbp == ';') + skip_till_semicolumn = false; + dbp++; + continue; /* advance char */ + } + + /* Search for beginning of a token. */ + if (!begtoken (*dbp)) + { + dbp++; + continue; /* advance char */ + } + + /* We are at the beginning of a token. */ + switch (lowcase (*dbp)) + { + case 'f': + if (!packages_only && nocase_tail ("function")) + Ada_getit (inf, "/f"); + else + break; /* from switch */ + continue; /* advance char */ + case 'p': + if (!packages_only && nocase_tail ("procedure")) + Ada_getit (inf, "/p"); + else if (nocase_tail ("package")) + Ada_getit (inf, "/s"); + else if (nocase_tail ("protected")) /* protected type */ + Ada_getit (inf, "/t"); + else + break; /* from switch */ + continue; /* advance char */ + + case 'u': + if (typedefs && !packages_only && nocase_tail ("use")) + { + /* when tagging types, avoid tagging use type Pack.Typename; + for this, we will skip everything till a ; */ + skip_till_semicolumn = true; + continue; /* advance char */ + } + + case 't': + if (!packages_only && nocase_tail ("task")) + Ada_getit (inf, "/k"); + else if (typedefs && !packages_only && nocase_tail ("type")) + { + Ada_getit (inf, "/t"); + while (*dbp != '\0') + dbp += 1; + } + else + break; /* from switch */ + continue; /* advance char */ + } + + /* Look for the end of the token. */ + while (!endtoken (*dbp)) + dbp++; + + } /* advance char */ + } /* advance line */ +} + + +/* + * Unix and microcontroller assembly tag handling + * Labels: /^[a-zA-Z_.$][a-zA_Z0-9_.$]*[: ^I^J]/ + * Idea by Bob Weiner, Motorola Inc. (1994) + */ +static void +Asm_labels (FILE *inf) +{ + register char *cp; + + LOOP_ON_INPUT_LINES (inf, lb, cp) + { + /* If first char is alphabetic or one of [_.$], test for colon + following identifier. */ + if (ISALPHA (*cp) || *cp == '_' || *cp == '.' || *cp == '$') + { + /* Read past label. */ + cp++; + while (ISALNUM (*cp) || *cp == '_' || *cp == '.' || *cp == '$') + cp++; + if (*cp == ':' || iswhite (*cp)) + /* Found end of label, so copy it and add it to the table. */ + make_tag (lb.buffer, cp - lb.buffer, true, + lb.buffer, cp - lb.buffer + 1, lineno, linecharno); + } + } +} + + +/* + * Perl support + * Perl sub names: /^sub[ \t\n]+[^ \t\n{]+/ + * /^use constant[ \t\n]+[^ \t\n{=,;]+/ + * Perl variable names: /^(my|local).../ + * Original code by Bart Robinson (1995) + * Additions by Michael Ernst (1997) + * Ideas by Kai Großjohann (2001) + */ +static void +Perl_functions (FILE *inf) +{ + char *package = savestr ("main"); /* current package name */ + register char *cp; + + LOOP_ON_INPUT_LINES (inf, lb, cp) + { + cp = skip_spaces (cp); + + if (LOOKING_AT (cp, "package")) + { + free (package); + get_tag (cp, &package); + } + else if (LOOKING_AT (cp, "sub")) + { + char *pos, *sp; + + subr: + sp = cp; + while (!notinname (*cp)) + cp++; + if (cp == sp) + continue; /* nothing found */ + if ((pos = strchr (sp, ':')) != NULL + && pos < cp && pos[1] == ':') + /* The name is already qualified. */ + make_tag (sp, cp - sp, true, + lb.buffer, cp - lb.buffer + 1, lineno, linecharno); + else + /* Qualify it. */ + { + char savechar, *name; + + savechar = *cp; + *cp = '\0'; + name = concat (package, "::", sp); + *cp = savechar; + make_tag (name, strlen (name), true, + lb.buffer, cp - lb.buffer + 1, lineno, linecharno); + free (name); + } + } + else if (LOOKING_AT (cp, "use constant") + || LOOKING_AT (cp, "use constant::defer")) + { + /* For hash style multi-constant like + use constant { FOO => 123, + BAR => 456 }; + only the first FOO is picked up. Parsing across the value + expressions would be difficult in general, due to possible nested + hashes, here-documents, etc. */ + if (*cp == '{') + cp = skip_spaces (cp+1); + goto subr; + } + else if (globals) /* only if we are tagging global vars */ + { + /* Skip a qualifier, if any. */ + bool qual = LOOKING_AT (cp, "my") || LOOKING_AT (cp, "local"); + /* After "my" or "local", but before any following paren or space. */ + char *varstart = cp; + + if (qual /* should this be removed? If yes, how? */ + && (*cp == '$' || *cp == '@' || *cp == '%')) + { + varstart += 1; + do + cp++; + while (ISALNUM (*cp) || *cp == '_'); + } + else if (qual) + { + /* Should be examining a variable list at this point; + could insist on seeing an open parenthesis. */ + while (*cp != '\0' && *cp != ';' && *cp != '=' && *cp != ')') + cp++; + } + else + continue; + + make_tag (varstart, cp - varstart, false, + lb.buffer, cp - lb.buffer + 1, lineno, linecharno); + } + } + free (package); +} + + +/* + * Python support + * Look for /^[\t]*def[ \t\n]+[^ \t\n(:]+/ or /^class[ \t\n]+[^ \t\n(:]+/ + * Idea by Eric S. Raymond (1997) + * More ideas by seb bacon (2002) + */ +static void +Python_functions (FILE *inf) +{ + register char *cp; + + LOOP_ON_INPUT_LINES (inf, lb, cp) + { + cp = skip_spaces (cp); + if (LOOKING_AT (cp, "def") || LOOKING_AT (cp, "class")) + { + char *name = cp; + while (!notinname (*cp) && *cp != ':') + cp++; + make_tag (name, cp - name, true, + lb.buffer, cp - lb.buffer + 1, lineno, linecharno); + } + } +} + + +/* + * PHP support + * Look for: + * - /^[ \t]*function[ \t\n]+[^ \t\n(]+/ + * - /^[ \t]*class[ \t\n]+[^ \t\n]+/ + * - /^[ \t]*define\(\"[^\"]+/ + * Only with --members: + * - /^[ \t]*var[ \t\n]+\$[^ \t\n=;]/ + * Idea by Diez B. Roggisch (2001) + */ +static void +PHP_functions (FILE *inf) +{ + char *cp, *name; + bool search_identifier = false; + + LOOP_ON_INPUT_LINES (inf, lb, cp) + { + cp = skip_spaces (cp); + name = cp; + if (search_identifier + && *cp != '\0') + { + while (!notinname (*cp)) + cp++; + make_tag (name, cp - name, true, + lb.buffer, cp - lb.buffer + 1, lineno, linecharno); + search_identifier = false; + } + else if (LOOKING_AT (cp, "function")) + { + if (*cp == '&') + cp = skip_spaces (cp+1); + if (*cp != '\0') + { + name = cp; + while (!notinname (*cp)) + cp++; + make_tag (name, cp - name, true, + lb.buffer, cp - lb.buffer + 1, lineno, linecharno); + } + else + search_identifier = true; + } + else if (LOOKING_AT (cp, "class")) + { + if (*cp != '\0') + { + name = cp; + while (*cp != '\0' && !iswhite (*cp)) + cp++; + make_tag (name, cp - name, false, + lb.buffer, cp - lb.buffer + 1, lineno, linecharno); + } + else + search_identifier = true; + } + else if (strneq (cp, "define", 6) + && (cp = skip_spaces (cp+6)) + && *cp++ == '(' + && (*cp == '"' || *cp == '\'')) + { + char quote = *cp++; + name = cp; + while (*cp != quote && *cp != '\0') + cp++; + make_tag (name, cp - name, false, + lb.buffer, cp - lb.buffer + 1, lineno, linecharno); + } + else if (members + && LOOKING_AT (cp, "var") + && *cp == '$') + { + name = cp; + while (!notinname (*cp)) + cp++; + make_tag (name, cp - name, false, + lb.buffer, cp - lb.buffer + 1, lineno, linecharno); + } + } +} + + +/* + * Cobol tag functions + * We could look for anything that could be a paragraph name. + * i.e. anything that starts in column 8 is one word and ends in a full stop. + * Idea by Corny de Souza (1993) + */ +static void +Cobol_paragraphs (FILE *inf) +{ + register char *bp, *ep; + + LOOP_ON_INPUT_LINES (inf, lb, bp) + { + if (lb.len < 9) + continue; + bp += 8; + + /* If eoln, compiler option or comment ignore whole line. */ + if (bp[-1] != ' ' || !ISALNUM (bp[0])) + continue; + + for (ep = bp; ISALNUM (*ep) || *ep == '-'; ep++) + continue; + if (*ep++ == '.') + make_tag (bp, ep - bp, true, + lb.buffer, ep - lb.buffer + 1, lineno, linecharno); + } +} + + +/* + * Makefile support + * Ideas by Assar Westerlund (2001) + */ +static void +Makefile_targets (FILE *inf) +{ + register char *bp; + + LOOP_ON_INPUT_LINES (inf, lb, bp) + { + if (*bp == '\t' || *bp == '#') + continue; + while (*bp != '\0' && *bp != '=' && *bp != ':') + bp++; + if (*bp == ':' || (globals && *bp == '=')) + { + /* We should detect if there is more than one tag, but we do not. + We just skip initial and final spaces. */ + char * namestart = skip_spaces (lb.buffer); + while (--bp > namestart) + if (!notinname (*bp)) + break; + make_tag (namestart, bp - namestart + 1, true, + lb.buffer, bp - lb.buffer + 2, lineno, linecharno); + } + } +} + + +/* + * Pascal parsing + * Original code by Mosur K. Mohan (1989) + * + * Locates tags for procedures & functions. Doesn't do any type- or + * var-definitions. It does look for the keyword "extern" or + * "forward" immediately following the procedure statement; if found, + * the tag is skipped. + */ +static void +Pascal_functions (FILE *inf) +{ + linebuffer tline; /* mostly copied from C_entries */ + long save_lcno; + int save_lineno, namelen, taglen; + char c, *name; + + bool /* each of these flags is true if: */ + incomment, /* point is inside a comment */ + inquote, /* point is inside '..' string */ + get_tagname, /* point is after PROCEDURE/FUNCTION + keyword, so next item = potential tag */ + found_tag, /* point is after a potential tag */ + inparms, /* point is within parameter-list */ + verify_tag; /* point has passed the parm-list, so the + next token will determine whether this + is a FORWARD/EXTERN to be ignored, or + whether it is a real tag */ + + save_lcno = save_lineno = namelen = taglen = 0; /* keep compiler quiet */ + name = NULL; /* keep compiler quiet */ + dbp = lb.buffer; + *dbp = '\0'; + linebuffer_init (&tline); + + incomment = inquote = false; + found_tag = false; /* have a proc name; check if extern */ + get_tagname = false; /* found "procedure" keyword */ + inparms = false; /* found '(' after "proc" */ + verify_tag = false; /* check if "extern" is ahead */ + + + while (!feof (inf)) /* long main loop to get next char */ + { + c = *dbp++; + if (c == '\0') /* if end of line */ + { + readline (&lb, inf); + dbp = lb.buffer; + if (*dbp == '\0') + continue; + if (!((found_tag && verify_tag) + || get_tagname)) + c = *dbp++; /* only if don't need *dbp pointing + to the beginning of the name of + the procedure or function */ + } + if (incomment) + { + if (c == '}') /* within { } comments */ + incomment = false; + else if (c == '*' && *dbp == ')') /* within (* *) comments */ + { + dbp++; + incomment = false; + } + continue; + } + else if (inquote) + { + if (c == '\'') + inquote = false; + continue; + } + else + switch (c) + { + case '\'': + inquote = true; /* found first quote */ + continue; + case '{': /* found open { comment */ + incomment = true; + continue; + case '(': + if (*dbp == '*') /* found open (* comment */ + { + incomment = true; + dbp++; + } + else if (found_tag) /* found '(' after tag, i.e., parm-list */ + inparms = true; + continue; + case ')': /* end of parms list */ + if (inparms) + inparms = false; + continue; + case ';': + if (found_tag && !inparms) /* end of proc or fn stmt */ + { + verify_tag = true; + break; + } + continue; + } + if (found_tag && verify_tag && (*dbp != ' ')) + { + /* Check if this is an "extern" declaration. */ + if (*dbp == '\0') + continue; + if (lowcase (*dbp) == 'e') + { + if (nocase_tail ("extern")) /* superfluous, really! */ + { + found_tag = false; + verify_tag = false; + } + } + else if (lowcase (*dbp) == 'f') + { + if (nocase_tail ("forward")) /* check for forward reference */ + { + found_tag = false; + verify_tag = false; + } + } + if (found_tag && verify_tag) /* not external proc, so make tag */ + { + found_tag = false; + verify_tag = false; + make_tag (name, namelen, true, + tline.buffer, taglen, save_lineno, save_lcno); + continue; + } + } + if (get_tagname) /* grab name of proc or fn */ + { + char *cp; + + if (*dbp == '\0') + continue; + + /* Find block name. */ + for (cp = dbp + 1; *cp != '\0' && !endtoken (*cp); cp++) + continue; + + /* Save all values for later tagging. */ + linebuffer_setlen (&tline, lb.len); + strcpy (tline.buffer, lb.buffer); + save_lineno = lineno; + save_lcno = linecharno; + name = tline.buffer + (dbp - lb.buffer); + namelen = cp - dbp; + taglen = cp - lb.buffer + 1; + + dbp = cp; /* set dbp to e-o-token */ + get_tagname = false; + found_tag = true; + continue; + + /* And proceed to check for "extern". */ + } + else if (!incomment && !inquote && !found_tag) + { + /* Check for proc/fn keywords. */ + switch (lowcase (c)) + { + case 'p': + if (nocase_tail ("rocedure")) /* c = 'p', dbp has advanced */ + get_tagname = true; + continue; + case 'f': + if (nocase_tail ("unction")) + get_tagname = true; + continue; + } + } + } /* while not eof */ + + free (tline.buffer); +} + + +/* + * Lisp tag functions + * look for (def or (DEF, quote or QUOTE + */ + +static void L_getit (void); + +static void +L_getit (void) +{ + if (*dbp == '\'') /* Skip prefix quote */ + dbp++; + else if (*dbp == '(') + { + dbp++; + /* Try to skip "(quote " */ + if (!LOOKING_AT (dbp, "quote") && !LOOKING_AT (dbp, "QUOTE")) + /* Ok, then skip "(" before name in (defstruct (foo)) */ + dbp = skip_spaces (dbp); + } + get_tag (dbp, NULL); +} + +static void +Lisp_functions (FILE *inf) +{ + LOOP_ON_INPUT_LINES (inf, lb, dbp) + { + if (dbp[0] != '(') + continue; + + /* "(defvar foo)" is a declaration rather than a definition. */ + if (! declarations) + { + char *p = dbp + 1; + if (LOOKING_AT (p, "defvar")) + { + p = skip_name (p); /* past var name */ + p = skip_spaces (p); + if (*p == ')') + continue; + } + } + + if (strneq (dbp + 1, "cl-", 3) || strneq (dbp + 1, "CL-", 3)) + dbp += 3; + + if (strneq (dbp+1, "def", 3) || strneq (dbp+1, "DEF", 3)) + { + dbp = skip_non_spaces (dbp); + dbp = skip_spaces (dbp); + L_getit (); + } + else + { + /* Check for (foo::defmumble name-defined ... */ + do + dbp++; + while (!notinname (*dbp) && *dbp != ':'); + if (*dbp == ':') + { + do + dbp++; + while (*dbp == ':'); + + if (strneq (dbp, "def", 3) || strneq (dbp, "DEF", 3)) + { + dbp = skip_non_spaces (dbp); + dbp = skip_spaces (dbp); + L_getit (); + } + } + } + } +} + + +/* + * Lua script language parsing + * Original code by David A. Capello (2004) + * + * "function" and "local function" are tags if they start at column 1. + */ +static void +Lua_functions (FILE *inf) +{ + register char *bp; + + LOOP_ON_INPUT_LINES (inf, lb, bp) + { + if (bp[0] != 'f' && bp[0] != 'l') + continue; + + (void)LOOKING_AT (bp, "local"); /* skip possible "local" */ + + if (LOOKING_AT (bp, "function")) + get_tag (bp, NULL); + } +} + + +/* + * PostScript tags + * Just look for lines where the first character is '/' + * Also look at "defineps" for PSWrap + * Ideas by: + * Richard Mlynarik (1997) + * Masatake Yamato (1999) + */ +static void +PS_functions (FILE *inf) +{ + register char *bp, *ep; + + LOOP_ON_INPUT_LINES (inf, lb, bp) + { + if (bp[0] == '/') + { + for (ep = bp+1; + *ep != '\0' && *ep != ' ' && *ep != '{'; + ep++) + continue; + make_tag (bp, ep - bp, true, + lb.buffer, ep - lb.buffer + 1, lineno, linecharno); + } + else if (LOOKING_AT (bp, "defineps")) + get_tag (bp, NULL); + } +} + + +/* + * Forth tags + * Ignore anything after \ followed by space or in ( ) + * Look for words defined by : + * Look for constant, code, create, defer, value, and variable + * OBP extensions: Look for buffer:, field, + * Ideas by Eduardo Horvath (2004) + */ +static void +Forth_words (FILE *inf) +{ + register char *bp; + + LOOP_ON_INPUT_LINES (inf, lb, bp) + while ((bp = skip_spaces (bp))[0] != '\0') + if (bp[0] == '\\' && iswhite (bp[1])) + break; /* read next line */ + else if (bp[0] == '(' && iswhite (bp[1])) + do /* skip to ) or eol */ + bp++; + while (*bp != ')' && *bp != '\0'); + else if ((bp[0] == ':' && iswhite (bp[1]) && bp++) + || LOOKING_AT_NOCASE (bp, "constant") + || LOOKING_AT_NOCASE (bp, "code") + || LOOKING_AT_NOCASE (bp, "create") + || LOOKING_AT_NOCASE (bp, "defer") + || LOOKING_AT_NOCASE (bp, "value") + || LOOKING_AT_NOCASE (bp, "variable") + || LOOKING_AT_NOCASE (bp, "buffer:") + || LOOKING_AT_NOCASE (bp, "field")) + get_tag (skip_spaces (bp), NULL); /* Yay! A definition! */ + else + bp = skip_non_spaces (bp); +} + + +/* + * Scheme tag functions + * look for (def... xyzzy + * (def... (xyzzy + * (def ... ((...(xyzzy .... + * (set! xyzzy + * Original code by Ken Haase (1985?) + */ +static void +Scheme_functions (FILE *inf) +{ + register char *bp; + + LOOP_ON_INPUT_LINES (inf, lb, bp) + { + if (strneq (bp, "(def", 4) || strneq (bp, "(DEF", 4)) + { + bp = skip_non_spaces (bp+4); + /* Skip over open parens and white space. Don't continue past + '\0'. */ + while (*bp && notinname (*bp)) + bp++; + get_tag (bp, NULL); + } + if (LOOKING_AT (bp, "(SET!") || LOOKING_AT (bp, "(set!")) + get_tag (bp, NULL); + } +} + + +/* Find tags in TeX and LaTeX input files. */ + +/* TEX_toktab is a table of TeX control sequences that define tags. + * Each entry records one such control sequence. + * + * Original code from who knows whom. + * Ideas by: + * Stefan Monnier (2002) + */ + +static linebuffer *TEX_toktab = NULL; /* Table with tag tokens */ + +/* Default set of control sequences to put into TEX_toktab. + The value of environment var TEXTAGS is prepended to this. */ +static const char *TEX_defenv = "\ +:chapter:section:subsection:subsubsection:eqno:label:ref:cite:bibitem\ +:part:appendix:entry:index:def\ +:newcommand:renewcommand:newenvironment:renewenvironment"; + +static void TEX_mode (FILE *); +static void TEX_decode_env (const char *, const char *); + +static char TEX_esc = '\\'; +static char TEX_opgrp = '{'; +static char TEX_clgrp = '}'; + +/* + * TeX/LaTeX scanning loop. + */ +static void +TeX_commands (FILE *inf) +{ + char *cp; + linebuffer *key; + + /* Select either \ or ! as escape character. */ + TEX_mode (inf); + + /* Initialize token table once from environment. */ + if (TEX_toktab == NULL) + TEX_decode_env ("TEXTAGS", TEX_defenv); + + LOOP_ON_INPUT_LINES (inf, lb, cp) + { + /* Look at each TEX keyword in line. */ + for (;;) + { + /* Look for a TEX escape. */ + while (*cp++ != TEX_esc) + if (cp[-1] == '\0' || cp[-1] == '%') + goto tex_next_line; + + for (key = TEX_toktab; key->buffer != NULL; key++) + if (strneq (cp, key->buffer, key->len)) + { + char *p; + int namelen, linelen; + bool opgrp = false; + + cp = skip_spaces (cp + key->len); + if (*cp == TEX_opgrp) + { + opgrp = true; + cp++; + } + for (p = cp; + (!iswhite (*p) && *p != '#' && + *p != TEX_opgrp && *p != TEX_clgrp); + p++) + continue; + namelen = p - cp; + linelen = lb.len; + if (!opgrp || *p == TEX_clgrp) + { + while (*p != '\0' && *p != TEX_opgrp && *p != TEX_clgrp) + p++; + linelen = p - lb.buffer + 1; + } + make_tag (cp, namelen, true, + lb.buffer, linelen, lineno, linecharno); + goto tex_next_line; /* We only tag a line once */ + } + } + tex_next_line: + ; + } +} + +#define TEX_LESC '\\' +#define TEX_SESC '!' + +/* Figure out whether TeX's escapechar is '\\' or '!' and set grouping + chars accordingly. */ +static void +TEX_mode (FILE *inf) +{ + int c; + + while ((c = getc (inf)) != EOF) + { + /* Skip to next line if we hit the TeX comment char. */ + if (c == '%') + while (c != '\n' && c != EOF) + c = getc (inf); + else if (c == TEX_LESC || c == TEX_SESC ) + break; + } + + if (c == TEX_LESC) + { + TEX_esc = TEX_LESC; + TEX_opgrp = '{'; + TEX_clgrp = '}'; + } + else + { + TEX_esc = TEX_SESC; + TEX_opgrp = '<'; + TEX_clgrp = '>'; + } + /* If the input file is compressed, inf is a pipe, and rewind may fail. + No attempt is made to correct the situation. */ + rewind (inf); +} + +/* Read environment and prepend it to the default string. + Build token table. */ +static void +TEX_decode_env (const char *evarname, const char *defenv) +{ + register const char *env, *p; + int i, len; + + /* Append default string to environment. */ + env = getenv (evarname); + if (!env) + env = defenv; + else + env = concat (env, defenv, ""); + + /* Allocate a token table */ + for (len = 1, p = env; p;) + if ((p = strchr (p, ':')) && *++p != '\0') + len++; + TEX_toktab = xnew (len, linebuffer); + + /* Unpack environment string into token table. Be careful about */ + /* zero-length strings (leading ':', "::" and trailing ':') */ + for (i = 0; *env != '\0';) + { + p = strchr (env, ':'); + if (!p) /* End of environment string. */ + p = env + strlen (env); + if (p - env > 0) + { /* Only non-zero strings. */ + TEX_toktab[i].buffer = savenstr (env, p - env); + TEX_toktab[i].len = p - env; + i++; + } + if (*p) + env = p + 1; + else + { + TEX_toktab[i].buffer = NULL; /* Mark end of table. */ + TEX_toktab[i].len = 0; + break; + } + } +} + + +/* Texinfo support. Dave Love, Mar. 2000. */ +static void +Texinfo_nodes (FILE *inf) +{ + char *cp, *start; + LOOP_ON_INPUT_LINES (inf, lb, cp) + if (LOOKING_AT (cp, "@node")) + { + start = cp; + while (*cp != '\0' && *cp != ',') + cp++; + make_tag (start, cp - start, true, + lb.buffer, cp - lb.buffer + 1, lineno, linecharno); + } +} + + +/* + * HTML support. + * Contents of , <h1>, <h2>, <h3> are tags. + * Contents of <a name=xxx> are tags with name xxx. + * + * Francesco Potortì, 2002. + */ +static void +HTML_labels (FILE *inf) +{ + bool getnext = false; /* next text outside of HTML tags is a tag */ + bool skiptag = false; /* skip to the end of the current HTML tag */ + bool intag = false; /* inside an html tag, looking for ID= */ + bool inanchor = false; /* when INTAG, is an anchor, look for NAME= */ + char *end; + + + linebuffer_setlen (&token_name, 0); /* no name in buffer */ + + LOOP_ON_INPUT_LINES (inf, lb, dbp) + for (;;) /* loop on the same line */ + { + if (skiptag) /* skip HTML tag */ + { + while (*dbp != '\0' && *dbp != '>') + dbp++; + if (*dbp == '>') + { + dbp += 1; + skiptag = false; + continue; /* look on the same line */ + } + break; /* go to next line */ + } + + else if (intag) /* look for "name=" or "id=" */ + { + while (*dbp != '\0' && *dbp != '>' + && lowcase (*dbp) != 'n' && lowcase (*dbp) != 'i') + dbp++; + if (*dbp == '\0') + break; /* go to next line */ + if (*dbp == '>') + { + dbp += 1; + intag = false; + continue; /* look on the same line */ + } + if ((inanchor && LOOKING_AT_NOCASE (dbp, "name=")) + || LOOKING_AT_NOCASE (dbp, "id=")) + { + bool quoted = (dbp[0] == '"'); + + if (quoted) + for (end = ++dbp; *end != '\0' && *end != '"'; end++) + continue; + else + for (end = dbp; *end != '\0' && intoken (*end); end++) + continue; + linebuffer_setlen (&token_name, end - dbp); + memcpy (token_name.buffer, dbp, end - dbp); + token_name.buffer[end - dbp] = '\0'; + + dbp = end; + intag = false; /* we found what we looked for */ + skiptag = true; /* skip to the end of the tag */ + getnext = true; /* then grab the text */ + continue; /* look on the same line */ + } + dbp += 1; + } + + else if (getnext) /* grab next tokens and tag them */ + { + dbp = skip_spaces (dbp); + if (*dbp == '\0') + break; /* go to next line */ + if (*dbp == '<') + { + intag = true; + inanchor = (lowcase (dbp[1]) == 'a' && !intoken (dbp[2])); + continue; /* look on the same line */ + } + + for (end = dbp + 1; *end != '\0' && *end != '<'; end++) + continue; + make_tag (token_name.buffer, token_name.len, true, + dbp, end - dbp, lineno, linecharno); + linebuffer_setlen (&token_name, 0); /* no name in buffer */ + getnext = false; + break; /* go to next line */ + } + + else /* look for an interesting HTML tag */ + { + while (*dbp != '\0' && *dbp != '<') + dbp++; + if (*dbp == '\0') + break; /* go to next line */ + intag = true; + if (lowcase (dbp[1]) == 'a' && !intoken (dbp[2])) + { + inanchor = true; + continue; /* look on the same line */ + } + else if (LOOKING_AT_NOCASE (dbp, "<title>") + || LOOKING_AT_NOCASE (dbp, "<h1>") + || LOOKING_AT_NOCASE (dbp, "<h2>") + || LOOKING_AT_NOCASE (dbp, "<h3>")) + { + intag = false; + getnext = true; + continue; /* look on the same line */ + } + dbp += 1; + } + } +} + + +/* + * Prolog support + * + * Assumes that the predicate or rule starts at column 0. + * Only the first clause of a predicate or rule is added. + * Original code by Sunichirou Sugou (1989) + * Rewritten by Anders Lindgren (1996) + */ +static size_t prolog_pr (char *, char *); +static void prolog_skip_comment (linebuffer *, FILE *); +static size_t prolog_atom (char *, size_t); + +static void +Prolog_functions (FILE *inf) +{ + char *cp, *last; + size_t len; + size_t allocated; + + allocated = 0; + len = 0; + last = NULL; + + LOOP_ON_INPUT_LINES (inf, lb, cp) + { + if (cp[0] == '\0') /* Empty line */ + continue; + else if (iswhite (cp[0])) /* Not a predicate */ + continue; + else if (cp[0] == '/' && cp[1] == '*') /* comment. */ + prolog_skip_comment (&lb, inf); + else if ((len = prolog_pr (cp, last)) > 0) + { + /* Predicate or rule. Store the function name so that we + only generate a tag for the first clause. */ + if (last == NULL) + last = xnew (len + 1, char); + else if (len + 1 > allocated) + xrnew (last, len + 1, char); + allocated = len + 1; + memcpy (last, cp, len); + last[len] = '\0'; + } + } + free (last); +} + + +static void +prolog_skip_comment (linebuffer *plb, FILE *inf) +{ + char *cp; + + do + { + for (cp = plb->buffer; *cp != '\0'; cp++) + if (cp[0] == '*' && cp[1] == '/') + return; + readline (plb, inf); + } + while (!feof (inf)); +} + +/* + * A predicate or rule definition is added if it matches: + * <beginning of line><Prolog Atom><whitespace>( + * or <beginning of line><Prolog Atom><whitespace>:- + * + * It is added to the tags database if it doesn't match the + * name of the previous clause header. + * + * Return the size of the name of the predicate or rule, or 0 if no + * header was found. + */ +static size_t +prolog_pr (char *s, char *last) + + /* Name of last clause. */ +{ + size_t pos; + size_t len; + + pos = prolog_atom (s, 0); + if (! pos) + return 0; + + len = pos; + pos = skip_spaces (s + pos) - s; + + if ((s[pos] == '.' + || (s[pos] == '(' && (pos += 1)) + || (s[pos] == ':' && s[pos + 1] == '-' && (pos += 2))) + && (last == NULL /* save only the first clause */ + || len != strlen (last) + || !strneq (s, last, len))) + { + make_tag (s, len, true, s, pos, lineno, linecharno); + return len; + } + else + return 0; +} + +/* + * Consume a Prolog atom. + * Return the number of bytes consumed, or 0 if there was an error. + * + * A prolog atom, in this context, could be one of: + * - An alphanumeric sequence, starting with a lower case letter. + * - A quoted arbitrary string. Single quotes can escape themselves. + * Backslash quotes everything. + */ +static size_t +prolog_atom (char *s, size_t pos) +{ + size_t origpos; + + origpos = pos; + + if (ISLOWER (s[pos]) || (s[pos] == '_')) + { + /* The atom is unquoted. */ + pos++; + while (ISALNUM (s[pos]) || (s[pos] == '_')) + { + pos++; + } + return pos - origpos; + } + else if (s[pos] == '\'') + { + pos++; + + for (;;) + { + if (s[pos] == '\'') + { + pos++; + if (s[pos] != '\'') + break; + pos++; /* A double quote */ + } + else if (s[pos] == '\0') + /* Multiline quoted atoms are ignored. */ + return 0; + else if (s[pos] == '\\') + { + if (s[pos+1] == '\0') + return 0; + pos += 2; + } + else + pos++; + } + return pos - origpos; + } + else + return 0; +} + + +/* + * Support for Erlang + * + * Generates tags for functions, defines, and records. + * Assumes that Erlang functions start at column 0. + * Original code by Anders Lindgren (1996) + */ +static int erlang_func (char *, char *); +static void erlang_attribute (char *); +static int erlang_atom (char *); + +static void +Erlang_functions (FILE *inf) +{ + char *cp, *last; + int len; + int allocated; + + allocated = 0; + len = 0; + last = NULL; + + LOOP_ON_INPUT_LINES (inf, lb, cp) + { + if (cp[0] == '\0') /* Empty line */ + continue; + else if (iswhite (cp[0])) /* Not function nor attribute */ + continue; + else if (cp[0] == '%') /* comment */ + continue; + else if (cp[0] == '"') /* Sometimes, strings start in column one */ + continue; + else if (cp[0] == '-') /* attribute, e.g. "-define" */ + { + erlang_attribute (cp); + if (last != NULL) + { + free (last); + last = NULL; + } + } + else if ((len = erlang_func (cp, last)) > 0) + { + /* + * Function. Store the function name so that we only + * generates a tag for the first clause. + */ + if (last == NULL) + last = xnew (len + 1, char); + else if (len + 1 > allocated) + xrnew (last, len + 1, char); + allocated = len + 1; + memcpy (last, cp, len); + last[len] = '\0'; + } + } + free (last); +} + + +/* + * A function definition is added if it matches: + * <beginning of line><Erlang Atom><whitespace>( + * + * It is added to the tags database if it doesn't match the + * name of the previous clause header. + * + * Return the size of the name of the function, or 0 if no function + * was found. + */ +static int +erlang_func (char *s, char *last) + + /* Name of last clause. */ +{ + int pos; + int len; + + pos = erlang_atom (s); + if (pos < 1) + return 0; + + len = pos; + pos = skip_spaces (s + pos) - s; + + /* Save only the first clause. */ + if (s[pos++] == '(' + && (last == NULL + || len != (int)strlen (last) + || !strneq (s, last, len))) + { + make_tag (s, len, true, s, pos, lineno, linecharno); + return len; + } + + return 0; +} + + +/* + * Handle attributes. Currently, tags are generated for defines + * and records. + * + * They are on the form: + * -define(foo, bar). + * -define(Foo(M, N), M+N). + * -record(graph, {vtab = notable, cyclic = true}). + */ +static void +erlang_attribute (char *s) +{ + char *cp = s; + + if ((LOOKING_AT (cp, "-define") || LOOKING_AT (cp, "-record")) + && *cp++ == '(') + { + int len = erlang_atom (skip_spaces (cp)); + if (len > 0) + make_tag (cp, len, true, s, cp + len - s, lineno, linecharno); + } + return; +} + + +/* + * Consume an Erlang atom (or variable). + * Return the number of bytes consumed, or -1 if there was an error. + */ +static int +erlang_atom (char *s) +{ + int pos = 0; + + if (ISALPHA (s[pos]) || s[pos] == '_') + { + /* The atom is unquoted. */ + do + pos++; + while (ISALNUM (s[pos]) || s[pos] == '_'); + } + else if (s[pos] == '\'') + { + for (pos++; s[pos] != '\''; pos++) + if (s[pos] == '\0' /* multiline quoted atoms are ignored */ + || (s[pos] == '\\' && s[++pos] == '\0')) + return 0; + pos++; + } + + return pos; +} + + +static char *scan_separators (char *); +static void add_regex (char *, language *); +static char *substitute (char *, char *, struct re_registers *); + +/* + * Take a string like "/blah/" and turn it into "blah", verifying + * that the first and last characters are the same, and handling + * quoted separator characters. Actually, stops on the occurrence of + * an unquoted separator. Also process \t, \n, etc. and turn into + * appropriate characters. Works in place. Null terminates name string. + * Returns pointer to terminating separator, or NULL for + * unterminated regexps. + */ +static char * +scan_separators (char *name) +{ + char sep = name[0]; + char *copyto = name; + bool quoted = false; + + for (++name; *name != '\0'; ++name) + { + if (quoted) + { + switch (*name) + { + case 'a': *copyto++ = '\007'; break; /* BEL (bell) */ + case 'b': *copyto++ = '\b'; break; /* BS (back space) */ + case 'd': *copyto++ = 0177; break; /* DEL (delete) */ + case 'e': *copyto++ = 033; break; /* ESC (delete) */ + case 'f': *copyto++ = '\f'; break; /* FF (form feed) */ + case 'n': *copyto++ = '\n'; break; /* NL (new line) */ + case 'r': *copyto++ = '\r'; break; /* CR (carriage return) */ + case 't': *copyto++ = '\t'; break; /* TAB (horizontal tab) */ + case 'v': *copyto++ = '\v'; break; /* VT (vertical tab) */ + default: + if (*name == sep) + *copyto++ = sep; + else + { + /* Something else is quoted, so preserve the quote. */ + *copyto++ = '\\'; + *copyto++ = *name; + } + break; + } + quoted = false; + } + else if (*name == '\\') + quoted = true; + else if (*name == sep) + break; + else + *copyto++ = *name; + } + if (*name != sep) + name = NULL; /* signal unterminated regexp */ + + /* Terminate copied string. */ + *copyto = '\0'; + return name; +} + +/* Look at the argument of --regex or --no-regex and do the right + thing. Same for each line of a regexp file. */ +static void +analyze_regex (char *regex_arg) +{ + if (regex_arg == NULL) + { + free_regexps (); /* --no-regex: remove existing regexps */ + return; + } + + /* A real --regexp option or a line in a regexp file. */ + switch (regex_arg[0]) + { + /* Comments in regexp file or null arg to --regex. */ + case '\0': + case ' ': + case '\t': + break; + + /* Read a regex file. This is recursive and may result in a + loop, which will stop when the file descriptors are exhausted. */ + case '@': + { + FILE *regexfp; + linebuffer regexbuf; + char *regexfile = regex_arg + 1; + + /* regexfile is a file containing regexps, one per line. */ + regexfp = fopen (regexfile, "r" FOPEN_BINARY); + if (regexfp == NULL) + pfatal (regexfile); + linebuffer_init (®exbuf); + while (readline_internal (®exbuf, regexfp) > 0) + analyze_regex (regexbuf.buffer); + free (regexbuf.buffer); + fclose (regexfp); + } + break; + + /* Regexp to be used for a specific language only. */ + case '{': + { + language *lang; + char *lang_name = regex_arg + 1; + char *cp; + + for (cp = lang_name; *cp != '}'; cp++) + if (*cp == '\0') + { + error ("unterminated language name in regex: %s", regex_arg); + return; + } + *cp++ = '\0'; + lang = get_language_from_langname (lang_name); + if (lang == NULL) + return; + add_regex (cp, lang); + } + break; + + /* Regexp to be used for any language. */ + default: + add_regex (regex_arg, NULL); + break; + } +} + +/* Separate the regexp pattern, compile it, + and care for optional name and modifiers. */ +static void +add_regex (char *regexp_pattern, language *lang) +{ + static struct re_pattern_buffer zeropattern; + char sep, *pat, *name, *modifiers; + char empty = '\0'; + const char *err; + struct re_pattern_buffer *patbuf; + regexp *rp; + bool + force_explicit_name = true, /* do not use implicit tag names */ + ignore_case = false, /* case is significant */ + multi_line = false, /* matches are done one line at a time */ + single_line = false; /* dot does not match newline */ + + + if (strlen (regexp_pattern) < 3) + { + error ("null regexp"); + return; + } + sep = regexp_pattern[0]; + name = scan_separators (regexp_pattern); + if (name == NULL) + { + error ("%s: unterminated regexp", regexp_pattern); + return; + } + if (name[1] == sep) + { + error ("null name for regexp \"%s\"", regexp_pattern); + return; + } + modifiers = scan_separators (name); + if (modifiers == NULL) /* no terminating separator --> no name */ + { + modifiers = name; + name = ∅ + } + else + modifiers += 1; /* skip separator */ + + /* Parse regex modifiers. */ + for (; modifiers[0] != '\0'; modifiers++) + switch (modifiers[0]) + { + case 'N': + if (modifiers == name) + error ("forcing explicit tag name but no name, ignoring"); + force_explicit_name = true; + break; + case 'i': + ignore_case = true; + break; + case 's': + single_line = true; + /* FALLTHRU */ + case 'm': + multi_line = true; + need_filebuf = true; + break; + default: + error ("invalid regexp modifier `%c', ignoring", modifiers[0]); + break; + } + + patbuf = xnew (1, struct re_pattern_buffer); + *patbuf = zeropattern; + if (ignore_case) + { + static char lc_trans[CHARS]; + int i; + for (i = 0; i < CHARS; i++) + lc_trans[i] = lowcase (i); + patbuf->translate = lc_trans; /* translation table to fold case */ + } + + if (multi_line) + pat = concat ("^", regexp_pattern, ""); /* anchor to beginning of line */ + else + pat = regexp_pattern; + + if (single_line) + re_set_syntax (RE_SYNTAX_EMACS | RE_DOT_NEWLINE); + else + re_set_syntax (RE_SYNTAX_EMACS); + + err = re_compile_pattern (pat, strlen (pat), patbuf); + if (multi_line) + free (pat); + if (err != NULL) + { + error ("%s while compiling pattern", err); + return; + } + + rp = p_head; + p_head = xnew (1, regexp); + p_head->pattern = savestr (regexp_pattern); + p_head->p_next = rp; + p_head->lang = lang; + p_head->pat = patbuf; + p_head->name = savestr (name); + p_head->error_signaled = false; + p_head->force_explicit_name = force_explicit_name; + p_head->ignore_case = ignore_case; + p_head->multi_line = multi_line; +} + +/* + * Do the substitutions indicated by the regular expression and + * arguments. + */ +static char * +substitute (char *in, char *out, struct re_registers *regs) +{ + char *result, *t; + int size, dig, diglen; + + result = NULL; + size = strlen (out); + + /* Pass 1: figure out how much to allocate by finding all \N strings. */ + if (out[size - 1] == '\\') + fatal ("pattern error in \"%s\"", out); + for (t = strchr (out, '\\'); + t != NULL; + t = strchr (t + 2, '\\')) + if (ISDIGIT (t[1])) + { + dig = t[1] - '0'; + diglen = regs->end[dig] - regs->start[dig]; + size += diglen - 2; + } + else + size -= 1; + + /* Allocate space and do the substitutions. */ + assert (size >= 0); + result = xnew (size + 1, char); + + for (t = result; *out != '\0'; out++) + if (*out == '\\' && ISDIGIT (*++out)) + { + dig = *out - '0'; + diglen = regs->end[dig] - regs->start[dig]; + memcpy (t, in + regs->start[dig], diglen); + t += diglen; + } + else + *t++ = *out; + *t = '\0'; + + assert (t <= result + size); + assert (t - result == (int)strlen (result)); + + return result; +} + +/* Deallocate all regexps. */ +static void +free_regexps (void) +{ + regexp *rp; + while (p_head != NULL) + { + rp = p_head->p_next; + free (p_head->pattern); + free (p_head->name); + free (p_head); + p_head = rp; + } + return; +} + +/* + * Reads the whole file as a single string from `filebuf' and looks for + * multi-line regular expressions, creating tags on matches. + * readline already dealt with normal regexps. + * + * Idea by Ben Wing <ben@666.com> (2002). + */ +static void +regex_tag_multiline (void) +{ + char *buffer = filebuf.buffer; + regexp *rp; + char *name; + + for (rp = p_head; rp != NULL; rp = rp->p_next) + { + int match = 0; + + if (!rp->multi_line) + continue; /* skip normal regexps */ + + /* Generic initializations before parsing file from memory. */ + lineno = 1; /* reset global line number */ + charno = 0; /* reset global char number */ + linecharno = 0; /* reset global char number of line start */ + + /* Only use generic regexps or those for the current language. */ + if (rp->lang != NULL && rp->lang != curfdp->lang) + continue; + + while (match >= 0 && match < filebuf.len) + { + match = re_search (rp->pat, buffer, filebuf.len, charno, + filebuf.len - match, &rp->regs); + switch (match) + { + case -2: + /* Some error. */ + if (!rp->error_signaled) + { + error ("regexp stack overflow while matching \"%s\"", + rp->pattern); + rp->error_signaled = true; + } + break; + case -1: + /* No match. */ + break; + default: + if (match == rp->regs.end[0]) + { + if (!rp->error_signaled) + { + error ("regexp matches the empty string: \"%s\"", + rp->pattern); + rp->error_signaled = true; + } + match = -3; /* exit from while loop */ + break; + } + + /* Match occurred. Construct a tag. */ + while (charno < rp->regs.end[0]) + if (buffer[charno++] == '\n') + lineno++, linecharno = charno; + name = rp->name; + if (name[0] == '\0') + name = NULL; + else /* make a named tag */ + name = substitute (buffer, rp->name, &rp->regs); + if (rp->force_explicit_name) + /* Force explicit tag name, if a name is there. */ + pfnote (name, true, buffer + linecharno, + charno - linecharno + 1, lineno, linecharno); + else + make_tag (name, strlen (name), true, buffer + linecharno, + charno - linecharno + 1, lineno, linecharno); + break; + } + } + } +} + + +static bool +nocase_tail (const char *cp) +{ + register int len = 0; + + while (*cp != '\0' && lowcase (*cp) == lowcase (dbp[len])) + cp++, len++; + if (*cp == '\0' && !intoken (dbp[len])) + { + dbp += len; + return true; + } + return false; +} + +static void +get_tag (register char *bp, char **namepp) +{ + register char *cp = bp; + + if (*bp != '\0') + { + /* Go till you get to white space or a syntactic break */ + for (cp = bp + 1; !notinname (*cp); cp++) + continue; + make_tag (bp, cp - bp, true, + lb.buffer, cp - lb.buffer + 1, lineno, linecharno); + } + + if (namepp != NULL) + *namepp = savenstr (bp, cp - bp); +} + +/* + * Read a line of text from `stream' into `lbp', excluding the + * newline or CR-NL, if any. Return the number of characters read from + * `stream', which is the length of the line including the newline. + * + * On DOS or Windows we do not count the CR character, if any before the + * NL, in the returned length; this mirrors the behavior of Emacs on those + * platforms (for text files, it translates CR-NL to NL as it reads in the + * file). + * + * If multi-line regular expressions are requested, each line read is + * appended to `filebuf'. + */ +static long +readline_internal (linebuffer *lbp, register FILE *stream) +{ + char *buffer = lbp->buffer; + register char *p = lbp->buffer; + register char *pend; + int chars_deleted; + + pend = p + lbp->size; /* Separate to avoid 386/IX compiler bug. */ + + for (;;) + { + register int c = getc (stream); + if (p == pend) + { + /* We're at the end of linebuffer: expand it. */ + lbp->size *= 2; + xrnew (buffer, lbp->size, char); + p += buffer - lbp->buffer; + pend = buffer + lbp->size; + lbp->buffer = buffer; + } + if (c == EOF) + { + *p = '\0'; + chars_deleted = 0; + break; + } + if (c == '\n') + { + if (p > buffer && p[-1] == '\r') + { + p -= 1; +#ifdef DOS_NT + /* Assume CRLF->LF translation will be performed by Emacs + when loading this file, so CRs won't appear in the buffer. + It would be cleaner to compensate within Emacs; + however, Emacs does not know how many CRs were deleted + before any given point in the file. */ + chars_deleted = 1; +#else + chars_deleted = 2; +#endif + } + else + { + chars_deleted = 1; + } + *p = '\0'; + break; + } + *p++ = c; + } + lbp->len = p - buffer; + + if (need_filebuf /* we need filebuf for multi-line regexps */ + && chars_deleted > 0) /* not at EOF */ + { + while (filebuf.size <= filebuf.len + lbp->len + 1) /* +1 for \n */ + { + /* Expand filebuf. */ + filebuf.size *= 2; + xrnew (filebuf.buffer, filebuf.size, char); + } + memcpy (filebuf.buffer + filebuf.len, lbp->buffer, lbp->len); + filebuf.len += lbp->len; + filebuf.buffer[filebuf.len++] = '\n'; + filebuf.buffer[filebuf.len] = '\0'; + } + + return lbp->len + chars_deleted; +} + +/* + * Like readline_internal, above, but in addition try to match the + * input line against relevant regular expressions and manage #line + * directives. + */ +static void +readline (linebuffer *lbp, FILE *stream) +{ + long result; + + linecharno = charno; /* update global char number of line start */ + result = readline_internal (lbp, stream); /* read line */ + lineno += 1; /* increment global line number */ + charno += result; /* increment global char number */ + + /* Honor #line directives. */ + if (!no_line_directive) + { + static bool discard_until_line_directive; + + /* Check whether this is a #line directive. */ + if (result > 12 && strneq (lbp->buffer, "#line ", 6)) + { + unsigned int lno; + int start = 0; + + if (sscanf (lbp->buffer, "#line %u \"%n", &lno, &start) >= 1 + && start > 0) /* double quote character found */ + { + char *endp = lbp->buffer + start; + + while ((endp = strchr (endp, '"')) != NULL + && endp[-1] == '\\') + endp++; + if (endp != NULL) + /* Ok, this is a real #line directive. Let's deal with it. */ + { + char *taggedabsname; /* absolute name of original file */ + char *taggedfname; /* name of original file as given */ + char *name; /* temp var */ + + discard_until_line_directive = false; /* found it */ + name = lbp->buffer + start; + *endp = '\0'; + canonicalize_filename (name); + taggedabsname = absolute_filename (name, tagfiledir); + if (filename_is_absolute (name) + || filename_is_absolute (curfdp->infname)) + taggedfname = savestr (taggedabsname); + else + taggedfname = relative_filename (taggedabsname,tagfiledir); + + if (streq (curfdp->taggedfname, taggedfname)) + /* The #line directive is only a line number change. We + deal with this afterwards. */ + free (taggedfname); + else + /* The tags following this #line directive should be + attributed to taggedfname. In order to do this, set + curfdp accordingly. */ + { + fdesc *fdp; /* file description pointer */ + + /* Go look for a file description already set up for the + file indicated in the #line directive. If there is + one, use it from now until the next #line + directive. */ + for (fdp = fdhead; fdp != NULL; fdp = fdp->next) + if (streq (fdp->infname, curfdp->infname) + && streq (fdp->taggedfname, taggedfname)) + /* If we remove the second test above (after the &&) + then all entries pertaining to the same file are + coalesced in the tags file. If we use it, then + entries pertaining to the same file but generated + from different files (via #line directives) will + go into separate sections in the tags file. These + alternatives look equivalent. The first one + destroys some apparently useless information. */ + { + curfdp = fdp; + free (taggedfname); + break; + } + /* Else, if we already tagged the real file, skip all + input lines until the next #line directive. */ + if (fdp == NULL) /* not found */ + for (fdp = fdhead; fdp != NULL; fdp = fdp->next) + if (streq (fdp->infabsname, taggedabsname)) + { + discard_until_line_directive = true; + free (taggedfname); + break; + } + /* Else create a new file description and use that from + now on, until the next #line directive. */ + if (fdp == NULL) /* not found */ + { + fdp = fdhead; + fdhead = xnew (1, fdesc); + *fdhead = *curfdp; /* copy curr. file description */ + fdhead->next = fdp; + fdhead->infname = savestr (curfdp->infname); + fdhead->infabsname = savestr (curfdp->infabsname); + fdhead->infabsdir = savestr (curfdp->infabsdir); + fdhead->taggedfname = taggedfname; + fdhead->usecharno = false; + fdhead->prop = NULL; + fdhead->written = false; + curfdp = fdhead; + } + } + free (taggedabsname); + lineno = lno - 1; + readline (lbp, stream); + return; + } /* if a real #line directive */ + } /* if #line is followed by a number */ + } /* if line begins with "#line " */ + + /* If we are here, no #line directive was found. */ + if (discard_until_line_directive) + { + if (result > 0) + { + /* Do a tail recursion on ourselves, thus discarding the contents + of the line buffer. */ + readline (lbp, stream); + return; + } + /* End of file. */ + discard_until_line_directive = false; + return; + } + } /* if #line directives should be considered */ + + { + int match; + regexp *rp; + char *name; + + /* Match against relevant regexps. */ + if (lbp->len > 0) + for (rp = p_head; rp != NULL; rp = rp->p_next) + { + /* Only use generic regexps or those for the current language. + Also do not use multiline regexps, which is the job of + regex_tag_multiline. */ + if ((rp->lang != NULL && rp->lang != fdhead->lang) + || rp->multi_line) + continue; + + match = re_match (rp->pat, lbp->buffer, lbp->len, 0, &rp->regs); + switch (match) + { + case -2: + /* Some error. */ + if (!rp->error_signaled) + { + error ("regexp stack overflow while matching \"%s\"", + rp->pattern); + rp->error_signaled = true; + } + break; + case -1: + /* No match. */ + break; + case 0: + /* Empty string matched. */ + if (!rp->error_signaled) + { + error ("regexp matches the empty string: \"%s\"", rp->pattern); + rp->error_signaled = true; + } + break; + default: + /* Match occurred. Construct a tag. */ + name = rp->name; + if (name[0] == '\0') + name = NULL; + else /* make a named tag */ + name = substitute (lbp->buffer, rp->name, &rp->regs); + if (rp->force_explicit_name) + /* Force explicit tag name, if a name is there. */ + pfnote (name, true, lbp->buffer, match, lineno, linecharno); + else + make_tag (name, strlen (name), true, + lbp->buffer, match, lineno, linecharno); + break; + } + } + } +} + + +/* + * Return a pointer to a space of size strlen(cp)+1 allocated + * with xnew where the string CP has been copied. + */ +static char * +savestr (const char *cp) +{ + return savenstr (cp, strlen (cp)); +} + +/* + * Return a pointer to a space of size LEN+1 allocated with xnew where + * the string CP has been copied for at most the first LEN characters. + */ +static char * +savenstr (const char *cp, int len) +{ + char *dp = xnew (len + 1, char); + dp[len] = '\0'; + return memcpy (dp, cp, len); +} + +/* Skip spaces (end of string is not space), return new pointer. */ +static char * +skip_spaces (char *cp) +{ + while (iswhite (*cp)) + cp++; + return cp; +} + +/* Skip non spaces, except end of string, return new pointer. */ +static char * +skip_non_spaces (char *cp) +{ + while (*cp != '\0' && !iswhite (*cp)) + cp++; + return cp; +} + +/* Skip any chars in the "name" class.*/ +static char * +skip_name (char *cp) +{ + /* '\0' is a notinname() so loop stops there too */ + while (! notinname (*cp)) + cp++; + return cp; +} + +/* Print error message and exit. */ +void +fatal (const char *s1, const char *s2) +{ + error (s1, s2); + exit (EXIT_FAILURE); +} + +static void +pfatal (const char *s1) +{ + perror (s1); + exit (EXIT_FAILURE); +} + +static void +suggest_asking_for_help (void) +{ + fprintf (stderr, "\tTry `%s --help' for a complete list of options.\n", + progname); + exit (EXIT_FAILURE); +} + +/* Output a diagnostic with printf-style FORMAT and args. */ +static void +error (const char *format, ...) +{ + va_list ap; + va_start (ap, format); + fprintf (stderr, "%s: ", progname); + vfprintf (stderr, format, ap); + fprintf (stderr, "\n"); + va_end (ap); +} + +/* Return a newly-allocated string whose contents + concatenate those of s1, s2, s3. */ +static char * +concat (const char *s1, const char *s2, const char *s3) +{ + int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3); + char *result = xnew (len1 + len2 + len3 + 1, char); + + strcpy (result, s1); + strcpy (result + len1, s2); + strcpy (result + len1 + len2, s3); + + return result; +} + + +/* Does the same work as the system V getcwd, but does not need to + guess the buffer size in advance. */ +static char * +etags_getcwd (void) +{ + int bufsize = 200; + char *path = xnew (bufsize, char); + + while (getcwd (path, bufsize) == NULL) + { + if (errno != ERANGE) + pfatal ("getcwd"); + bufsize *= 2; + free (path); + path = xnew (bufsize, char); + } + + canonicalize_filename (path); + return path; +} + +/* Return a newly allocated string containing the file name of FILE + relative to the absolute directory DIR (which should end with a slash). */ +static char * +relative_filename (char *file, char *dir) +{ + char *fp, *dp, *afn, *res; + int i; + + /* Find the common root of file and dir (with a trailing slash). */ + afn = absolute_filename (file, cwd); + fp = afn; + dp = dir; + while (*fp++ == *dp++) + continue; + fp--, dp--; /* back to the first differing char */ +#ifdef DOS_NT + if (fp == afn && afn[0] != '/') /* cannot build a relative name */ + return afn; +#endif + do /* look at the equal chars until '/' */ + fp--, dp--; + while (*fp != '/'); + + /* Build a sequence of "../" strings for the resulting relative file name. */ + i = 0; + while ((dp = strchr (dp + 1, '/')) != NULL) + i += 1; + res = xnew (3*i + strlen (fp + 1) + 1, char); + char *z = res; + while (i-- > 0) + z = stpcpy (z, "../"); + + /* Add the file name relative to the common root of file and dir. */ + strcpy (z, fp + 1); + free (afn); + + return res; +} + +/* Return a newly allocated string containing the absolute file name + of FILE given DIR (which should end with a slash). */ +static char * +absolute_filename (char *file, char *dir) +{ + char *slashp, *cp, *res; + + if (filename_is_absolute (file)) + res = savestr (file); +#ifdef DOS_NT + /* We don't support non-absolute file names with a drive + letter, like `d:NAME' (it's too much hassle). */ + else if (file[1] == ':') + fatal ("%s: relative file names with drive letters not supported", file); +#endif + else + res = concat (dir, file, ""); + + /* Delete the "/dirname/.." and "/." substrings. */ + slashp = strchr (res, '/'); + while (slashp != NULL && slashp[0] != '\0') + { + if (slashp[1] == '.') + { + if (slashp[2] == '.' + && (slashp[3] == '/' || slashp[3] == '\0')) + { + cp = slashp; + do + cp--; + while (cp >= res && !filename_is_absolute (cp)); + if (cp < res) + cp = slashp; /* the absolute name begins with "/.." */ +#ifdef DOS_NT + /* Under MSDOS and NT we get `d:/NAME' as absolute + file name, so the luser could say `d:/../NAME'. + We silently treat this as `d:/NAME'. */ + else if (cp[0] != '/') + cp = slashp; +#endif + memmove (cp, slashp + 3, strlen (slashp + 2)); + slashp = cp; + continue; + } + else if (slashp[2] == '/' || slashp[2] == '\0') + { + memmove (slashp, slashp + 2, strlen (slashp + 1)); + continue; + } + } + + slashp = strchr (slashp + 1, '/'); + } + + if (res[0] == '\0') /* just a safety net: should never happen */ + { + free (res); + return savestr ("/"); + } + else + return res; +} + +/* Return a newly allocated string containing the absolute + file name of dir where FILE resides given DIR (which should + end with a slash). */ +static char * +absolute_dirname (char *file, char *dir) +{ + char *slashp, *res; + char save; + + slashp = strrchr (file, '/'); + if (slashp == NULL) + return savestr (dir); + save = slashp[1]; + slashp[1] = '\0'; + res = absolute_filename (file, dir); + slashp[1] = save; + + return res; +} + +/* Whether the argument string is an absolute file name. The argument + string must have been canonicalized with canonicalize_filename. */ +static bool +filename_is_absolute (char *fn) +{ + return (fn[0] == '/' +#ifdef DOS_NT + || (ISALPHA (fn[0]) && fn[1] == ':' && fn[2] == '/') +#endif + ); +} + +/* Downcase DOS drive letter and collapse separators into single slashes. + Works in place. */ +static void +canonicalize_filename (register char *fn) +{ + register char* cp; + char sep = '/'; + +#ifdef DOS_NT + /* Canonicalize drive letter case. */ +# define ISUPPER(c) isupper (CHAR (c)) + if (fn[0] != '\0' && fn[1] == ':' && ISUPPER (fn[0])) + fn[0] = lowcase (fn[0]); + + sep = '\\'; +#endif + + /* Collapse multiple separators into a single slash. */ + for (cp = fn; *cp != '\0'; cp++, fn++) + if (*cp == sep) + { + *fn = '/'; + while (cp[1] == sep) + cp++; + } + else + *fn = *cp; + *fn = '\0'; +} + + +/* Initialize a linebuffer for use. */ +static void +linebuffer_init (linebuffer *lbp) +{ + lbp->size = (DEBUG) ? 3 : 200; + lbp->buffer = xnew (lbp->size, char); + lbp->buffer[0] = '\0'; + lbp->len = 0; +} + +/* Set the minimum size of a string contained in a linebuffer. */ +static void +linebuffer_setlen (linebuffer *lbp, int toksize) +{ + while (lbp->size <= toksize) + { + lbp->size *= 2; + xrnew (lbp->buffer, lbp->size, char); + } + lbp->len = toksize; +} + +/* Like malloc but get fatal error if memory is exhausted. */ +static void * +xmalloc (size_t size) +{ + void *result = malloc (size); + if (result == NULL) + fatal ("virtual memory exhausted", (char *)NULL); + return result; +} + +static void * +xrealloc (void *ptr, size_t size) +{ + void *result = realloc (ptr, size); + if (result == NULL) + fatal ("virtual memory exhausted", (char *)NULL); + return result; +} + +/* + * Local Variables: + * indent-tabs-mode: t + * tab-width: 8 + * fill-column: 79 + * c-font-lock-extra-types: ("FILE" "bool" "language" "linebuffer" "fdesc" "node" "regexp") + * c-file-style: "gnu" + * End: + */ + +/* etags.c ends here */ diff --git a/test/etags/c-src/exit.c b/test/etags/c-src/exit.c new file mode 100644 index 00000000000..b8cd22ba3c7 --- /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 00000000000..b8cd22ba3c7 --- /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 00000000000..32482781b11 --- /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 00000000000..93a5cf77816 --- /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 00000000000..f86c00d64ad --- /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 00000000000..44930c33cf3 --- /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 00000000000..8b33dc4e7e5 --- /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 00000000000..298a0e4c5b2 --- /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 00000000000..b25d55cb2e8 --- /dev/null +++ b/test/etags/c-src/tab.c @@ -0,0 +1,112 @@ +/* +** tab.c for in +** +** Made by Pierric +** Login <pierric@seignobosc.com> +** +** 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 00000000000..77c3763564a --- /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" <tom@basil.icce.rug.nl> + Subject: more etags torture;-) [etags 7.3 patch#3] + To: pot@CNUCE.CNR.IT + + 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 00000000000..78ee5e1523c --- /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 00000000000..52d68aa5b24 --- /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 <bmah@ca.sandia.gov> +// +// 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 00000000000..b8cbab47ebf --- /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 00000000000..82aded4f5d8 --- /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 00000000000..05d71cbc1ce --- /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 00000000000..d86ad758d81 --- /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 00000000000..2c5f7e01fac --- /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 00000000000..2d79186f452 --- /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 0000000000000000000000000000000000000000..38b08a8e7f8d97394ec5d93012b9d2468204c023 GIT binary patch literal 408 zcmV;J0cZXniwFo{JVG!617mDxWodFQV{mW)#Z%F0!Y~wl&sSs)q*kWB?4_N1k--Ks zWU!|pp{7@RN1I3zoies>Ut+D=)lMIT-G`FgoSt)XF6sKTf0?3wmvnu4q6Wjqho_g$ zU^F@b%-JsJja;MP=^_T&h_nV}I!WW8hf*5_QC9BqGyznuN4ON)P!xt{(Ta&h#%3Tu zA!l;(4%}$kr?<UcFC^tY^=ZCf3T9|U)^9Zg<B*W0#Mp}99__hSi?~caH(zG~E!3^2 zQc(}BaxbJv@9M1C!*;t>@quIe=kx1u7;ebEw({D*oWT;*dLrWs>XTx&IHleZFITyl zJ<e4XcXQ8WHeVQE0#=4;6B+PY;XnFuffWvl5M$I_fi;;*9vPG(2zUySvZisCOr+A4 zU~}^>-RcEmR94o~6tmpX9GPPIwn0$dpF7ZfJoQ1+W|P(@cR*n+=ezvvd4F(jfgcGd zU?_IP))eMPzZEM`mxxJF*Cz6PB9gNdsxK$9w3a=SOV|u@H?@L$i~a$(EsbDy1poj* C$HKk< literal 0 HcmV?d00001 diff --git a/test/etags/cp-src/clheir.hpp b/test/etags/cp-src/clheir.hpp new file mode 100644 index 00000000000..a9245637413 --- /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 00000000000..1e600147ed9 --- /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 00000000000..9fbb2517526 --- /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 00000000000..c602ed26396 --- /dev/null +++ b/test/etags/cp-src/fail.C @@ -0,0 +1,52 @@ +/* Examples provided by Sam Kendall <kendall@mv.mv.com>, 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 00000000000..fb546ed4de8 --- /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 00000000000..1958a19d628 --- /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, ®s, ®s); + } + +void hide_cursor(void) + { + goto_xy(0, NUM_ROWS); + } + +void cursor_position(void) + { + regs.h.ah = 3; + regs.h.bh = 0; + int86(0x10, ®s, ®s); + 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 00000000000..a7099a3379d --- /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 00000000000..acf0baf82f0 --- /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/test/etags/el-src/emacs/lisp/progmodes/etags.el b/test/etags/el-src/emacs/lisp/progmodes/etags.el new file mode 100644 index 00000000000..6acafdbaba0 --- /dev/null +++ b/test/etags/el-src/emacs/lisp/progmodes/etags.el @@ -0,0 +1,2153 @@ +;;; etags.el --- etags facility for Emacs -*- lexical-binding: t -*- + +;; Copyright (C) 1985-1986, 1988-1989, 1992-1996, 1998, 2000-2015 Free +;; Software Foundation, Inc. + +;; Author: Roland McGrath <roland@gnu.org> +;; Maintainer: emacs-devel@gnu.org +;; Keywords: tools + +;; 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/>. + +;;; Commentary: + +;;; Code: + +(require 'ring) +(require 'button) +(require 'xref) + +;;;###autoload +(defvar tags-file-name nil + "File name of tags table. +To switch to a new tags table, setting this variable is sufficient. +If you set this variable, do not also set `tags-table-list'. +Use the `etags' program to make a tags table file.") +;; Make M-x set-variable tags-file-name like M-x visit-tags-table. +;;;###autoload (put 'tags-file-name 'variable-interactive (purecopy "fVisit tags table: ")) +;;;###autoload (put 'tags-file-name 'safe-local-variable 'stringp) + +(defgroup etags nil "Tags tables." + :group 'tools) + +;;;###autoload +(defcustom tags-case-fold-search 'default + "Whether tags operations should be case-sensitive. +A value of t means case-insensitive, a value of nil means case-sensitive. +Any other value means use the setting of `case-fold-search'." + :group 'etags + :type '(choice (const :tag "Case-sensitive" nil) + (const :tag "Case-insensitive" t) + (other :tag "Use default" default)) + :version "21.1") + +;;;###autoload +;; Use `visit-tags-table-buffer' to cycle through tags tables in this list. +(defcustom tags-table-list nil + "List of file names of tags tables to search. +An element that is a directory means the file \"TAGS\" in that directory. +To switch to a new list of tags tables, setting this variable is sufficient. +If you set this variable, do not also set `tags-file-name'. +Use the `etags' program to make a tags table file." + :group 'etags + :type '(repeat file)) + +;;;###autoload +(defcustom tags-compression-info-list + (purecopy '("" ".Z" ".bz2" ".gz" ".xz" ".tgz")) + "List of extensions tried by etags when `auto-compression-mode' is on. +An empty string means search the non-compressed file." + :version "24.1" ; added xz + :type '(repeat string) + :group 'etags) + +;; !!! tags-compression-info-list should probably be replaced by access +;; to directory list and matching jka-compr-compression-info-list. Currently, +;; this implementation forces each modification of +;; jka-compr-compression-info-list to be reflected in this var. +;; An alternative could be to say that introducing a special +;; element in this list (e.g. t) means : try at this point +;; using directory listing and regexp matching using +;; jka-compr-compression-info-list. + + +;;;###autoload +(defcustom tags-add-tables 'ask-user + "Control whether to add a new tags table to the current list. +t means do; nil means don't (always start a new list). +Any other value means ask the user whether to add a new tags table +to the current list (as opposed to starting a new list)." + :group 'etags + :type '(choice (const :tag "Do" t) + (const :tag "Don't" nil) + (other :tag "Ask" ask-user))) + +(defcustom tags-revert-without-query nil + "Non-nil means reread a TAGS table without querying, if it has changed." + :group 'etags + :type 'boolean) + +(defvar tags-table-computed-list nil + "List of tags tables to search, computed from `tags-table-list'. +This includes tables implicitly included by other tables. The list is not +always complete: the included tables of a table are not known until that +table is read into core. An element that is t is a placeholder +indicating that the preceding element is a table that has not been read +into core and might contain included tables to search. +See `tags-table-check-computed-list'.") + +(defvar tags-table-computed-list-for nil + "Value of `tags-table-list' that `tags-table-computed-list' corresponds to. +If `tags-table-list' changes, `tags-table-computed-list' is thrown away and +recomputed; see `tags-table-check-computed-list'.") + +(defvar tags-table-list-pointer nil + "Pointer into `tags-table-computed-list' for the current state of searching. +Use `visit-tags-table-buffer' to cycle through tags tables in this list.") + +(defvar tags-table-list-started-at nil + "Pointer into `tags-table-computed-list', where the current search started.") + +(defvar tags-table-set-list nil + "List of sets of tags table which have been used together in the past. +Each element is a list of strings which are file names.") + +;;;###autoload +(defcustom find-tag-hook nil + "Hook to be run by \\[find-tag] after finding a tag. See `run-hooks'. +The value in the buffer in which \\[find-tag] is done is used, +not the value in the buffer \\[find-tag] goes to." + :group 'etags + :type 'hook) + +;;;###autoload +(defcustom find-tag-default-function nil + "A function of no arguments used by \\[find-tag] to pick a default tag. +If nil, and the symbol that is the value of `major-mode' +has a `find-tag-default-function' property (see `put'), that is used. +Otherwise, `find-tag-default' is used." + :group 'etags + :type '(choice (const nil) function)) + +(define-obsolete-variable-alias 'find-tag-marker-ring-length + 'xref-marker-ring-length "25.1") + +(defcustom tags-tag-face 'default + "Face for tags in the output of `tags-apropos'." + :group 'etags + :type 'face + :version "21.1") + +(defcustom tags-apropos-verbose nil + "If non-nil, print the name of the tags file in the *Tags List* buffer." + :group 'etags + :type 'boolean + :version "21.1") + +(defcustom tags-apropos-additional-actions nil + "Specify additional actions for `tags-apropos'. + +If non-nil, value should be a list of triples (TITLE FUNCTION +TO-SEARCH). For each triple, `tags-apropos' processes TO-SEARCH and +lists tags from it. TO-SEARCH should be an alist, obarray, or symbol. +If it is a symbol, the symbol's value is used. +TITLE, a string, is a title used to label the additional list of tags. +FUNCTION is a function to call when a symbol is selected in the +*Tags List* buffer. It will be called with one argument SYMBOL which +is the symbol being selected. + +Example value: + + '((\"Emacs Lisp\" Info-goto-emacs-command-node obarray) + (\"Common Lisp\" common-lisp-hyperspec common-lisp-hyperspec-obarray) + (\"SCWM\" scwm-documentation scwm-obarray))" + :group 'etags + :type '(repeat (list (string :tag "Title") + function + (sexp :tag "Tags to search"))) + :version "21.1") + +(defvaralias 'find-tag-marker-ring 'xref--marker-ring) +(make-obsolete-variable + 'find-tag-marker-ring + "use `xref-push-marker-stack' or `xref-pop-marker-stack' instead." + "25.1") + +(defvar default-tags-table-function nil + "If non-nil, a function to choose a default tags file for a buffer. +This function receives no arguments and should return the default +tags table file to use for the current buffer.") + +(defvar tags-location-ring (make-ring xref-marker-ring-length) + "Ring of markers which are locations visited by \\[find-tag]. +Pop back to the last location with \\[negative-argument] \\[find-tag].") + +;; Tags table state. +;; These variables are local in tags table buffers. + +(defvar tags-table-files nil + "List of file names covered by current tags table. +nil means it has not yet been computed; +use function `tags-table-files' to do so.") + +(defvar tags-completion-table nil + "Obarray of tag names defined in current tags table.") + +(defvar tags-included-tables nil + "List of tags tables included by the current tags table.") + +(defvar next-file-list nil + "List of files for \\[next-file] to process.") + +;; Hooks for file formats. + +(defvar tags-table-format-functions '(etags-recognize-tags-table + tags-recognize-empty-tags-table) + "Hook to be called in a tags table buffer to identify the type of tags table. +The functions are called in order, with no arguments, +until one returns non-nil. The function should make buffer-local bindings +of the format-parsing tags function variables if successful.") + +(defvar file-of-tag-function nil + "Function to do the work of `file-of-tag' (which see). +One optional argument, a boolean specifying to return complete path (nil) or +relative path (non-nil).") +(defvar tags-table-files-function nil + "Function to do the work of function `tags-table-files' (which see).") +(defvar tags-completion-table-function nil + "Function to build the `tags-completion-table'.") +(defvar snarf-tag-function nil + "Function to get info about a matched tag for `goto-tag-location-function'. +One optional argument, specifying to use explicit tag (non-nil) or not (nil). +The default is nil.") +(defvar goto-tag-location-function nil + "Function of to go to the location in the buffer specified by a tag. +One argument, the tag info returned by `snarf-tag-function'.") +(defvar find-tag-regexp-search-function nil + "Search function passed to `find-tag-in-order' for finding a regexp tag.") +(defvar find-tag-regexp-tag-order nil + "Tag order passed to `find-tag-in-order' for finding a regexp tag.") +(defvar find-tag-regexp-next-line-after-failure-p nil + "Flag passed to `find-tag-in-order' for finding a regexp tag.") +(defvar find-tag-search-function nil + "Search function passed to `find-tag-in-order' for finding a tag.") +(defvar find-tag-tag-order nil + "Tag order passed to `find-tag-in-order' for finding a tag.") +(defvar find-tag-next-line-after-failure-p nil + "Flag passed to `find-tag-in-order' for finding a tag.") +(defvar list-tags-function nil + "Function to do the work of `list-tags' (which see).") +(defvar tags-apropos-function nil + "Function to do the work of `tags-apropos' (which see).") +(defvar tags-included-tables-function nil + "Function to do the work of function `tags-included-tables' (which see).") +(defvar verify-tags-table-function nil + "Function to return t if current buffer contains valid tags file.") + +(defun initialize-new-tags-table () + "Initialize the tags table in the current buffer. +Return non-nil if it is a valid tags table, and +in that case, also make the tags table state variables +buffer-local and set them to nil." + (set (make-local-variable 'tags-table-files) nil) + (set (make-local-variable 'tags-completion-table) nil) + (set (make-local-variable 'tags-included-tables) nil) + ;; We used to initialize find-tag-marker-ring and tags-location-ring + ;; here, to new empty rings. But that is wrong, because those + ;; are global. + + ;; Value is t if we have found a valid tags table buffer. + (run-hook-with-args-until-success 'tags-table-format-functions)) + +;;;###autoload +(defun tags-table-mode () + "Major mode for tags table file buffers." + (interactive) + (setq major-mode 'tags-table-mode ;FIXME: Use define-derived-mode. + mode-name "Tags Table" + buffer-undo-list t) + (initialize-new-tags-table)) + +;;;###autoload +(defun visit-tags-table (file &optional local) + "Tell tags commands to use tags table file FILE. +FILE should be the name of a file created with the `etags' program. +A directory name is ok too; it means file TAGS in that directory. + +Normally \\[visit-tags-table] sets the global value of `tags-file-name'. +With a prefix arg, set the buffer-local value instead. +When you find a tag with \\[find-tag], the buffer it finds the tag +in is given a local value of this variable which is the name of the tags +file the tag was in." + (interactive (list (read-file-name "Visit tags table (default TAGS): " + default-directory + (expand-file-name "TAGS" + default-directory) + t) + current-prefix-arg)) + (or (stringp file) (signal 'wrong-type-argument (list 'stringp file))) + ;; Bind tags-file-name so we can control below whether the local or + ;; global value gets set. + ;; Calling visit-tags-table-buffer with tags-file-name set to FILE will + ;; initialize a buffer for FILE and set tags-file-name to the + ;; fully-expanded name. + (let ((tags-file-name file)) + (save-excursion + (or (visit-tags-table-buffer file) + (signal 'file-error (list "Visiting tags table" + "No such file or directory" + file))) + ;; Set FILE to the expanded name. + (setq file tags-file-name))) + (if local + ;; Set the local value of tags-file-name. + (set (make-local-variable 'tags-file-name) file) + ;; Set the global value of tags-file-name. + (setq-default tags-file-name file))) + +(defun tags-table-check-computed-list () + "Compute `tags-table-computed-list' from `tags-table-list' if necessary." + (let ((expanded-list (mapcar 'tags-expand-table-name tags-table-list))) + (or (equal tags-table-computed-list-for expanded-list) + ;; The list (or default-directory) has changed since last computed. + (let* ((compute-for (mapcar 'copy-sequence expanded-list)) + (tables (copy-sequence compute-for)) ;Mutated in the loop. + (computed nil) + table-buffer) + + (while tables + (setq computed (cons (car tables) computed) + table-buffer (get-file-buffer (car tables))) + (if (and table-buffer + ;; There is a buffer visiting the file. Now make sure + ;; it is initialized as a tag table buffer. + (save-excursion + (tags-verify-table (buffer-file-name table-buffer)))) + (with-current-buffer table-buffer + ;; Needed so long as etags-tags-included-tables + ;; does not save-excursion. + (save-excursion + (if (tags-included-tables) + ;; Insert the included tables into the list we + ;; are processing. + (setcdr tables (nconc (mapcar 'tags-expand-table-name + (tags-included-tables)) + (cdr tables)))))) + ;; This table is not in core yet. Insert a placeholder + ;; saying we must read it into core to check for included + ;; tables before searching the next table in the list. + (setq computed (cons t computed))) + (setq tables (cdr tables))) + + ;; Record the tags-table-list value (and the context of the + ;; current directory) we computed from. + (setq tags-table-computed-list-for compute-for + tags-table-computed-list (nreverse computed)))))) + +(defun tags-table-extend-computed-list () + "Extend `tags-table-computed-list' to remove the first t placeholder. + +An element of the list that is t is a placeholder indicating that the +preceding element is a table that has not been read in and might +contain included tables to search. This function reads in the first +such table and puts its included tables into the list." + (let ((list tags-table-computed-list)) + (while (not (eq (nth 1 list) t)) + (setq list (cdr list))) + (save-excursion + (if (tags-verify-table (car list)) + ;; We are now in the buffer visiting (car LIST). Extract its + ;; list of included tables and insert it into the computed list. + (let ((tables (tags-included-tables)) + (computed nil) + table-buffer) + (while tables + (setq computed (cons (car tables) computed) + table-buffer (get-file-buffer (car tables))) + (if table-buffer + (with-current-buffer table-buffer + (if (tags-included-tables) + ;; Insert the included tables into the list we + ;; are processing. + (setcdr tables (append (tags-included-tables) + tables)))) + ;; This table is not in core yet. Insert a placeholder + ;; saying we must read it into core to check for included + ;; tables before searching the next table in the list. + (setq computed (cons t computed))) + (setq tables (cdr tables))) + (setq computed (nreverse computed)) + ;; COMPUTED now contains the list of included tables (and + ;; tables included by them, etc.). Now splice this into the + ;; current list. + (setcdr list (nconc computed (cdr (cdr list))))) + ;; It was not a valid table, so just remove the following placeholder. + (setcdr list (cdr (cdr list))))))) + +(defun tags-expand-table-name (file) + "Expand tags table name FILE into a complete file name." + (setq file (expand-file-name file)) + (if (file-directory-p file) + (expand-file-name "TAGS" file) + file)) + +;; Like member, but comparison is done after tags-expand-table-name on both +;; sides and elements of LIST that are t are skipped. +(defun tags-table-list-member (file list) + "Like (member FILE LIST) after applying `tags-expand-table-name'. +More precisely, apply `tags-expand-table-name' to FILE +and each element of LIST, returning the link whose car is the first match. +If an element of LIST is t, ignore it." + (setq file (tags-expand-table-name file)) + (while (and list + (or (eq (car list) t) + (not (string= file (tags-expand-table-name (car list)))))) + (setq list (cdr list))) + list) + +(defun tags-verify-table (file) + "Read FILE into a buffer and verify that it is a valid tags table. +Sets the current buffer to one visiting FILE (if it exists). +Returns non-nil if it is a valid table." + (if (get-file-buffer file) + ;; The file is already in a buffer. Check for the visited file + ;; having changed since we last used it. + (progn + (set-buffer (get-file-buffer file)) + (or verify-tags-table-function (tags-table-mode)) + (if (or (verify-visited-file-modtime (current-buffer)) + ;; Decide whether to revert the file. + ;; revert-without-query can say to revert + ;; or the user can say to revert. + (not (or (let ((tail revert-without-query) + (found nil)) + (while tail + (if (string-match (car tail) buffer-file-name) + (setq found t)) + (setq tail (cdr tail))) + found) + tags-revert-without-query + (yes-or-no-p + (format "Tags file %s has changed, read new contents? " + file))))) + (and verify-tags-table-function + (funcall verify-tags-table-function)) + (revert-buffer t t) + (tags-table-mode))) + (when (file-exists-p file) + (let* ((buf (find-file-noselect file)) + (newfile (buffer-file-name buf))) + (unless (string= file newfile) + ;; find-file-noselect has changed the file name. + ;; Propagate the change to tags-file-name and tags-table-list. + (let ((tail (member file tags-table-list))) + (if tail (setcar tail newfile))) + (if (eq file tags-file-name) (setq tags-file-name newfile))) + ;; Only change buffer now that we're done using potentially + ;; buffer-local variables. + (set-buffer buf) + (tags-table-mode))))) + +;; Subroutine of visit-tags-table-buffer. Search the current tags tables +;; for one that has tags for THIS-FILE (or that includes a table that +;; does). Return the name of the first table listing THIS-FILE; if +;; the table is one included by another table, it is the master table that +;; we return. If CORE-ONLY is non-nil, check only tags tables that are +;; already in buffers--don't visit any new files. +(defun tags-table-including (this-file core-only) + "Search current tags tables for tags for THIS-FILE. +Subroutine of `visit-tags-table-buffer'. +Looks for a tags table that has such tags or that includes a table +that has them. Returns the name of the first such table. +Non-nil CORE-ONLY means check only tags tables that are already in +buffers. If CORE-ONLY is nil, it is ignored." + (let ((tables tags-table-computed-list) + (found nil)) + ;; Loop over the list, looking for a table containing tags for THIS-FILE. + (while (and (not found) + tables) + + (if core-only + ;; Skip tables not in core. + (while (eq (nth 1 tables) t) + (setq tables (cdr (cdr tables)))) + (if (eq (nth 1 tables) t) + ;; This table has not been read into core yet. Read it in now. + (tags-table-extend-computed-list))) + + (if tables + ;; Select the tags table buffer and get the file list up to date. + (let ((tags-file-name (car tables))) + (visit-tags-table-buffer 'same) + (if (member this-file (mapcar 'expand-file-name + (tags-table-files))) + ;; Found it. + (setq found tables)))) + (setq tables (cdr tables))) + (if found + ;; Now determine if the table we found was one included by another + ;; table, not explicitly listed. We do this by checking each + ;; element of the computed list to see if it appears in the user's + ;; explicit list; the last element we will check is FOUND itself. + ;; Then we return the last one which did in fact appear in + ;; tags-table-list. + (let ((could-be nil) + (elt tags-table-computed-list)) + (while (not (eq elt (cdr found))) + (if (tags-table-list-member (car elt) tags-table-list) + ;; This table appears in the user's list, so it could be + ;; the one which includes the table we found. + (setq could-be (car elt))) + (setq elt (cdr elt)) + (if (eq t (car elt)) + (setq elt (cdr elt)))) + ;; The last element we found in the computed list before FOUND + ;; that appears in the user's list will be the table that + ;; included the one we found. + could-be)))) + +(defun tags-next-table () + "Move `tags-table-list-pointer' along and set `tags-file-name'. +Subroutine of `visit-tags-table-buffer'.\ +Returns nil when out of tables." + ;; If there is a placeholder element next, compute the list to replace it. + (while (eq (nth 1 tags-table-list-pointer) t) + (tags-table-extend-computed-list)) + + ;; Go to the next table in the list. + (setq tags-table-list-pointer (cdr tags-table-list-pointer)) + (or tags-table-list-pointer + ;; Wrap around. + (setq tags-table-list-pointer tags-table-computed-list)) + + (if (eq tags-table-list-pointer tags-table-list-started-at) + ;; We have come full circle. No more tables. + (setq tags-table-list-pointer nil) + ;; Set tags-file-name to the name from the list. It is already expanded. + (setq tags-file-name (car tags-table-list-pointer)))) + +;;;###autoload +(defun visit-tags-table-buffer (&optional cont) + "Select the buffer containing the current tags table. +If optional arg is a string, visit that file as a tags table. +If optional arg is t, visit the next table in `tags-table-list'. +If optional arg is the atom `same', don't look for a new table; + just select the buffer visiting `tags-file-name'. +If arg is nil or absent, choose a first buffer from information in + `tags-file-name', `tags-table-list', `tags-table-list-pointer'. +Returns t if it visits a tags table, or nil if there are no more in the list." + + ;; Set tags-file-name to the tags table file we want to visit. + (cond ((eq cont 'same) + ;; Use the ambient value of tags-file-name. + (or tags-file-name + (user-error "%s" + (substitute-command-keys + (concat "No tags table in use; " + "use \\[visit-tags-table] to select one"))))) + ((eq t cont) + ;; Find the next table. + (if (tags-next-table) + ;; Skip over nonexistent files. + (while (and (not (or (get-file-buffer tags-file-name) + (file-exists-p tags-file-name))) + (tags-next-table))))) + (t + ;; Pick a table out of our hat. + (tags-table-check-computed-list) ;Get it up to date, we might use it. + (setq tags-file-name + (or + ;; If passed a string, use that. + (if (stringp cont) + (prog1 cont + (setq cont nil))) + ;; First, try a local variable. + (cdr (assq 'tags-file-name (buffer-local-variables))) + ;; Second, try a user-specified function to guess. + (and default-tags-table-function + (funcall default-tags-table-function)) + ;; Third, look for a tags table that contains tags for the + ;; current buffer's file. If one is found, the lists will + ;; be frobnicated, and CONT will be set non-nil so we don't + ;; do it below. + (and buffer-file-name + (or + ;; First check only tables already in buffers. + (tags-table-including buffer-file-name t) + ;; Since that didn't find any, now do the + ;; expensive version: reading new files. + (tags-table-including buffer-file-name nil))) + ;; Fourth, use the user variable tags-file-name, if it is + ;; not already in the current list. + (and tags-file-name + (not (tags-table-list-member tags-file-name + tags-table-computed-list)) + tags-file-name) + ;; Fifth, use the user variable giving the table list. + ;; Find the first element of the list that actually exists. + (let ((list tags-table-list) + file) + (while (and list + (setq file (tags-expand-table-name (car list))) + (not (get-file-buffer file)) + (not (file-exists-p file))) + (setq list (cdr list))) + (car list)) + ;; Finally, prompt the user for a file name. + (expand-file-name + (read-file-name "Visit tags table (default TAGS): " + default-directory + "TAGS" + t)))))) + + ;; Expand the table name into a full file name. + (setq tags-file-name (tags-expand-table-name tags-file-name)) + + (unless (and (eq cont t) (null tags-table-list-pointer)) + ;; Verify that tags-file-name names a valid tags table. + ;; Bind another variable with the value of tags-file-name + ;; before we switch buffers, in case tags-file-name is buffer-local. + (let ((curbuf (current-buffer)) + (local-tags-file-name tags-file-name)) + (if (tags-verify-table local-tags-file-name) + + ;; We have a valid tags table. + (progn + ;; Bury the tags table buffer so it + ;; doesn't get in the user's way. + (bury-buffer (current-buffer)) + + ;; If this was a new table selection (CONT is nil), make + ;; sure tags-table-list includes the chosen table, and + ;; update the list pointer variables. + (or cont + ;; Look in the list for the table we chose. + (let ((found (tags-table-list-member + local-tags-file-name + tags-table-computed-list))) + (if found + ;; There it is. Just switch to it. + (setq tags-table-list-pointer found + tags-table-list-started-at found) + + ;; The table is not in the current set. + ;; Try to find it in another previously used set. + (let ((sets tags-table-set-list)) + (while (and sets + (not (tags-table-list-member + local-tags-file-name + (car sets)))) + (setq sets (cdr sets))) + (if sets + ;; Found in some other set. Switch to that set. + (progn + (or (memq tags-table-list tags-table-set-list) + ;; Save the current list. + (setq tags-table-set-list + (cons tags-table-list + tags-table-set-list))) + (setq tags-table-list (car sets))) + + ;; Not found in any existing set. + (if (and tags-table-list + (or (eq t tags-add-tables) + (and tags-add-tables + (y-or-n-p + (concat "Keep current list of " + "tags tables also? "))))) + ;; Add it to the current list. + (setq tags-table-list (cons local-tags-file-name + tags-table-list)) + + ;; Make a fresh list, and store the old one. + (message "Starting a new list of tags tables") + (or (null tags-table-list) + (memq tags-table-list tags-table-set-list) + (setq tags-table-set-list + (cons tags-table-list + tags-table-set-list))) + ;; Clear out buffers holding old tables. + (dolist (table tags-table-list) + ;; The list can contain items t. + (if (stringp table) + (let ((buffer (find-buffer-visiting table))) + (if buffer + (kill-buffer buffer))))) + (setq tags-table-list (list local-tags-file-name)))) + + ;; Recompute tags-table-computed-list. + (tags-table-check-computed-list) + ;; Set the tags table list state variables to start + ;; over from tags-table-computed-list. + (setq tags-table-list-started-at tags-table-computed-list + tags-table-list-pointer + tags-table-computed-list))))) + + ;; Return of t says the tags table is valid. + t) + + ;; The buffer was not valid. Don't use it again. + (set-buffer curbuf) + (kill-local-variable 'tags-file-name) + (if (eq local-tags-file-name tags-file-name) + (setq tags-file-name nil)) + (user-error (if (file-exists-p local-tags-file-name) + "File %s is not a valid tags table" + "File %s does not exist") + local-tags-file-name))))) + +(defun tags-reset-tags-tables () + "Reset tags state to cancel effect of any previous \\[visit-tags-table] or \\[find-tag]." + (interactive) + ;; Clear out the markers we are throwing away. + (let ((i 0)) + (while (< i xref-marker-ring-length) + (if (aref (cddr tags-location-ring) i) + (set-marker (aref (cddr tags-location-ring) i) nil)) + (setq i (1+ i)))) + (xref-clear-marker-stack) + (setq tags-file-name nil + tags-location-ring (make-ring xref-marker-ring-length) + tags-table-list nil + tags-table-computed-list nil + tags-table-computed-list-for nil + tags-table-list-pointer nil + tags-table-list-started-at nil + tags-table-set-list nil)) + +(defun file-of-tag (&optional relative) + "Return the file name of the file whose tags point is within. +Assumes the tags table is the current buffer. +If RELATIVE is non-nil, file name returned is relative to tags +table file's directory. If RELATIVE is nil, file name returned +is complete." + (funcall file-of-tag-function relative)) + +;;;###autoload +(defun tags-table-files () + "Return a list of files in the current tags table. +Assumes the tags table is the current buffer. The file names are returned +as they appeared in the `etags' command that created the table, usually +without directory names." + (or tags-table-files + (setq tags-table-files + (funcall tags-table-files-function)))) + +(defun tags-included-tables () + "Return a list of tags tables included by the current table. +Assumes the tags table is the current buffer." + (or tags-included-tables + (setq tags-included-tables (funcall tags-included-tables-function)))) + +(defun tags-completion-table () + "Build `tags-completion-table' on demand. +The tags included in the completion table are those in the current +tags table and its (recursively) included tags tables." + (or tags-completion-table + ;; No cached value for this buffer. + (condition-case () + (let (current-table combined-table) + (message "Making tags completion table for %s..." buffer-file-name) + (save-excursion + ;; Iterate over the current list of tags tables. + (while (visit-tags-table-buffer (and combined-table t)) + ;; Find possible completions in this table. + (setq current-table (funcall tags-completion-table-function)) + ;; Merge this buffer's completions into the combined table. + (if combined-table + (mapatoms + (lambda (sym) (intern (symbol-name sym) combined-table)) + current-table) + (setq combined-table current-table)))) + (message "Making tags completion table for %s...done" + buffer-file-name) + ;; Cache the result in a buffer-local variable. + (setq tags-completion-table combined-table)) + (quit (message "Tags completion table construction aborted.") + (setq tags-completion-table nil))))) + +;;;###autoload +(defun tags-lazy-completion-table () + (let ((buf (current-buffer))) + (lambda (string pred action) + (with-current-buffer buf + (save-excursion + ;; If we need to ask for the tag table, allow that. + (let ((enable-recursive-minibuffers t)) + (visit-tags-table-buffer)) + (complete-with-action action (tags-completion-table) string pred)))))) + +;;;###autoload (defun tags-completion-at-point-function () +;;;###autoload (if (or tags-table-list tags-file-name) +;;;###autoload (progn +;;;###autoload (load "etags") +;;;###autoload (tags-completion-at-point-function)))) + +(defun tags-completion-at-point-function () + "Using tags, return a completion table for the text around point. +If no tags table is loaded, do nothing and return nil." + (when (or tags-table-list tags-file-name) + (let ((completion-ignore-case (if (memq tags-case-fold-search '(t nil)) + tags-case-fold-search + case-fold-search)) + (pattern (funcall (or find-tag-default-function + (get major-mode 'find-tag-default-function) + 'find-tag-default))) + beg) + (when pattern + (save-excursion + (forward-char (1- (length pattern))) + (search-backward pattern) + (setq beg (point)) + (forward-char (length pattern)) + (list beg (point) (tags-lazy-completion-table) :exclusive 'no)))))) + +(defun find-tag-tag (string) + "Read a tag name, with defaulting and completion." + (let* ((completion-ignore-case (if (memq tags-case-fold-search '(t nil)) + tags-case-fold-search + case-fold-search)) + (default (funcall (or find-tag-default-function + (get major-mode 'find-tag-default-function) + 'find-tag-default))) + (spec (completing-read (if default + (format "%s (default %s): " + (substring string 0 (string-match "[ :]+\\'" string)) + default) + string) + (tags-lazy-completion-table) + nil nil nil nil default))) + (if (equal spec "") + (or default (user-error "There is no default tag")) + spec))) + +(defvar last-tag nil + "Last tag found by \\[find-tag].") + +(defun find-tag-interactive (prompt &optional no-default) + "Get interactive arguments for tag functions. +The functions using this are `find-tag-noselect', +`find-tag-other-window', and `find-tag-regexp'." + (if (and current-prefix-arg last-tag) + (list nil (if (< (prefix-numeric-value current-prefix-arg) 0) + '- + t)) + (list (if no-default + (read-string prompt) + (find-tag-tag prompt))))) + +(defvar find-tag-history nil) ; Doc string? + +;; Dynamic bondage: +(defvar etags-case-fold-search) +(defvar etags-syntax-table) +(defvar local-find-tag-hook) + +;;;###autoload +(defun find-tag-noselect (tagname &optional next-p regexp-p) + "Find tag (in current tags table) whose name contains TAGNAME. +Returns the buffer containing the tag's definition and moves its point there, +but does not select the buffer. +The default for TAGNAME is the expression in the buffer near point. + +If second arg NEXT-P is t (interactively, with prefix arg), search for +another tag that matches the last tagname or regexp used. When there are +multiple matches for a tag, more exact matches are found first. If NEXT-P +is the atom `-' (interactively, with prefix arg that is a negative number +or just \\[negative-argument]), pop back to the previous tag gone to. + +If third arg REGEXP-P is non-nil, treat TAGNAME as a regexp. + +A marker representing the point when this command is invoked is pushed +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'." + (interactive (find-tag-interactive "Find tag: ")) + + (setq find-tag-history (cons tagname find-tag-history)) + ;; Save the current buffer's value of `find-tag-hook' before + ;; selecting the tags table buffer. For the same reason, save value + ;; of `tags-file-name' in case it has a buffer-local value. + (let ((local-find-tag-hook find-tag-hook)) + (if (eq '- next-p) + ;; Pop back to a previous location. + (if (ring-empty-p tags-location-ring) + (user-error "No previous tag locations") + (let ((marker (ring-remove tags-location-ring 0))) + (prog1 + ;; Move to the saved location. + (set-buffer (or (marker-buffer marker) + (error "The marked buffer has been deleted"))) + (goto-char (marker-position marker)) + ;; Kill that marker so it doesn't slow down editing. + (set-marker marker nil nil) + ;; Run the user's hook. Do we really want to do this for pop? + (run-hooks 'local-find-tag-hook)))) + ;; Record whence we came. + (xref-push-marker-stack) + (if (and next-p last-tag) + ;; Find the same table we last used. + (visit-tags-table-buffer 'same) + ;; Pick a table to use. + (visit-tags-table-buffer) + ;; Record TAGNAME for a future call with NEXT-P non-nil. + (setq last-tag tagname)) + ;; Record the location so we can pop back to it later. + (let ((marker (make-marker))) + (with-current-buffer + ;; find-tag-in-order does the real work. + (find-tag-in-order + (if (and next-p last-tag) last-tag tagname) + (if regexp-p + find-tag-regexp-search-function + find-tag-search-function) + (if regexp-p + find-tag-regexp-tag-order + find-tag-tag-order) + (if regexp-p + find-tag-regexp-next-line-after-failure-p + find-tag-next-line-after-failure-p) + (if regexp-p "matching" "containing") + (or (not next-p) (not last-tag))) + (set-marker marker (point)) + (run-hooks 'local-find-tag-hook) + (ring-insert tags-location-ring marker) + (current-buffer)))))) + +;;;###autoload +(defun find-tag (tagname &optional next-p regexp-p) + "Find tag (in current tags table) whose name contains TAGNAME. +Select the buffer containing the tag's definition, and move point there. +The default for TAGNAME is the expression in the buffer around or before point. + +If second arg NEXT-P is t (interactively, with prefix arg), search for +another tag that matches the last tagname or regexp used. When there are +multiple matches for a tag, more exact matches are found first. If NEXT-P +is the atom `-' (interactively, with prefix arg that is a negative number +or just \\[negative-argument]), pop back to the previous tag gone to. + +If third arg REGEXP-P is non-nil, treat TAGNAME as a regexp. + +A marker representing the point when this command is invoked is pushed +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'." + (interactive (find-tag-interactive "Find tag: ")) + (let* ((buf (find-tag-noselect tagname next-p regexp-p)) + (pos (with-current-buffer buf (point)))) + (condition-case nil + (switch-to-buffer buf) + (error (pop-to-buffer buf))) + (goto-char pos))) + +;;;###autoload +(defun find-tag-other-window (tagname &optional next-p regexp-p) + "Find tag (in current tags table) whose name contains TAGNAME. +Select the buffer containing the tag's definition in another window, and +move point there. The default for TAGNAME is the expression in the buffer +around or before point. + +If second arg NEXT-P is t (interactively, with prefix arg), search for +another tag that matches the last tagname or regexp used. When there are +multiple matches for a tag, more exact matches are found first. If NEXT-P +is negative (interactively, with prefix arg that is a negative number or +just \\[negative-argument]), pop back to the previous tag gone to. + +If third arg REGEXP-P is non-nil, treat TAGNAME as a regexp. + +A marker representing the point when this command is invoked is pushed +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-other-window "25.1")) + (interactive (find-tag-interactive "Find tag other window: ")) + + ;; This hair is to deal with the case where the tag is found in the + ;; selected window's buffer; without the hair, point is moved in both + ;; windows. To prevent this, we save the selected window's point before + ;; doing find-tag-noselect, and restore it after. + (let* ((window-point (window-point)) + (tagbuf (find-tag-noselect tagname next-p regexp-p)) + (tagpoint (progn (set-buffer tagbuf) (point)))) + (set-window-point (prog1 + (selected-window) + (switch-to-buffer-other-window tagbuf) + ;; We have to set this new window's point; it + ;; might already have been displaying a + ;; different portion of tagbuf, in which case + ;; switch-to-buffer-other-window doesn't set + ;; the window's point from the buffer. + (set-window-point (selected-window) tagpoint)) + window-point))) + +;;;###autoload +(defun find-tag-other-frame (tagname &optional next-p) + "Find tag (in current tags table) whose name contains TAGNAME. +Select the buffer containing the tag's definition in another frame, and +move point there. The default for TAGNAME is the expression in the buffer +around or before point. + +If second arg NEXT-P is t (interactively, with prefix arg), search for +another tag that matches the last tagname or regexp used. When there are +multiple matches for a tag, more exact matches are found first. If NEXT-P +is negative (interactively, with prefix arg that is a negative number or +just \\[negative-argument]), pop back to the previous tag gone to. + +If third arg REGEXP-P is non-nil, treat TAGNAME as a regexp. + +A marker representing the point when this command is invoked is pushed +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-other-frame "25.1")) + (interactive (find-tag-interactive "Find tag other frame: ")) + (let ((pop-up-frames t)) + (find-tag-other-window tagname next-p))) + +;;;###autoload +(defun find-tag-regexp (regexp &optional next-p other-window) + "Find tag (in current tags table) whose name matches REGEXP. +Select the buffer containing the tag's definition and move point there. + +If second arg NEXT-P is t (interactively, with prefix arg), search for +another tag that matches the last tagname or regexp used. When there are +multiple matches for a tag, more exact matches are found first. If NEXT-P +is negative (interactively, with prefix arg that is a negative number or +just \\[negative-argument]), pop back to the previous tag gone to. + +If third arg OTHER-WINDOW is non-nil, select the buffer in another window. + +A marker representing the point when this command is invoked is pushed +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-apropos "25.1")) + (interactive (find-tag-interactive "Find tag regexp: " t)) + ;; We go through find-tag-other-window to do all the display hair there. + (funcall (if other-window 'find-tag-other-window 'find-tag) + regexp next-p t)) + +;;;###autoload +(defalias 'pop-tag-mark 'xref-pop-marker-stack) + + +(defvar tag-lines-already-matched nil + "Matches remembered between calls.") ; Doc string: calls to what? + +(defun find-tag-in-order (pattern + search-forward-func + order + next-line-after-failure-p + matching + first-search) + "Internal tag-finding function. +PATTERN is a string to pass to arg SEARCH-FORWARD-FUNC, and to any +member of the function list ORDER. If ORDER is nil, use saved state +to continue a previous search. + +Arg NEXT-LINE-AFTER-FAILURE-P is non-nil if after a failed match, +point should be moved to the next line. + +Arg MATCHING is a string, an English `-ing' word, to be used in an +error message." +;; Algorithm is as follows: +;; For each qualifier-func in ORDER, go to beginning of tags file, and +;; perform inner loop: for each naive match for PATTERN found using +;; SEARCH-FORWARD-FUNC, qualify the naive match using qualifier-func. If +;; it qualifies, go to the specified line in the specified source file +;; and return. Qualified matches are remembered to avoid repetition. +;; State is saved so that the loop can be continued. + (let (file ;name of file containing tag + tag-info ;where to find the tag in FILE + (first-table t) + (tag-order order) + (match-marker (make-marker)) + goto-func + (case-fold-search (if (memq tags-case-fold-search '(nil t)) + tags-case-fold-search + case-fold-search)) + ) + (save-excursion + + (if first-search + ;; This is the start of a search for a fresh tag. + ;; Clear the list of tags matched by the previous search. + ;; find-tag-noselect has already put us in the first tags table + ;; buffer before we got called. + (setq tag-lines-already-matched nil) + ;; Continuing to search for the tag specified last time. + ;; tag-lines-already-matched lists locations matched in previous + ;; calls so we don't visit the same tag twice if it matches twice + ;; during two passes with different qualification predicates. + ;; Switch to the current tags table buffer. + (visit-tags-table-buffer 'same)) + + ;; Get a qualified match. + (catch 'qualified-match-found + + ;; Iterate over the list of tags tables. + (while (or first-table + (visit-tags-table-buffer t)) + + (and first-search first-table + ;; Start at beginning of tags file. + (goto-char (point-min))) + + (setq first-table nil) + + ;; Iterate over the list of ordering predicates. + (while order + (while (funcall search-forward-func pattern nil t) + ;; Naive match found. Qualify the match. + (and (funcall (car order) pattern) + ;; Make sure it is not a previous qualified match. + (not (member (set-marker match-marker (point-at-bol)) + tag-lines-already-matched)) + (throw 'qualified-match-found nil)) + (if next-line-after-failure-p + (forward-line 1))) + ;; Try the next flavor of match. + (setq order (cdr order)) + (goto-char (point-min))) + (setq order tag-order)) + ;; We throw out on match, so only get here if there were no matches. + ;; Clear out the markers we use to avoid duplicate matches so they + ;; don't slow down editing and are immediately available for GC. + (while tag-lines-already-matched + (set-marker (car tag-lines-already-matched) nil nil) + (setq tag-lines-already-matched (cdr tag-lines-already-matched))) + (set-marker match-marker nil nil) + (user-error "No %stags %s %s" (if first-search "" "more ") + matching pattern)) + + ;; Found a tag; extract location info. + (beginning-of-line) + (setq tag-lines-already-matched (cons match-marker + tag-lines-already-matched)) + ;; Expand the filename, using the tags table buffer's default-directory. + ;; We should be able to search for file-name backwards in file-of-tag: + ;; the beginning-of-line is ok except when positioned on a "file-name" tag. + (setq file (expand-file-name + (if (memq (car order) '(tag-exact-file-name-match-p + tag-file-name-match-p + tag-partial-file-name-match-p)) + (save-excursion (forward-line 1) + (file-of-tag)) + (file-of-tag))) + tag-info (funcall snarf-tag-function)) + + ;; Get the local value in the tags table buffer before switching buffers. + (setq goto-func goto-tag-location-function) + (tag-find-file-of-tag-noselect file) + (widen) + (push-mark) + (funcall goto-func tag-info) + + ;; Return the buffer where the tag was found. + (current-buffer)))) + +(defun tag-find-file-of-tag-noselect (file) + "Find the right line in the specified FILE." + ;; If interested in compressed-files, search files with extensions. + ;; Otherwise, search only the real file. + (let* ((buffer-search-extensions (if auto-compression-mode + tags-compression-info-list + '(""))) + the-buffer + (file-search-extensions buffer-search-extensions)) + ;; search a buffer visiting the file with each possible extension + ;; Note: there is a small inefficiency in find-buffer-visiting : + ;; truename is computed even if not needed. Not too sure about this + ;; but I suspect truename computation accesses the disk. + ;; It is maybe a good idea to optimize this find-buffer-visiting. + ;; An alternative would be to use only get-file-buffer + ;; but this looks less "sure" to find the buffer for the file. + (while (and (not the-buffer) buffer-search-extensions) + (setq the-buffer (find-buffer-visiting (concat file (car buffer-search-extensions)))) + (setq buffer-search-extensions (cdr buffer-search-extensions))) + ;; if found a buffer but file modified, ensure we re-read ! + (if (and the-buffer (not (verify-visited-file-modtime the-buffer))) + (find-file-noselect (buffer-file-name the-buffer))) + ;; if no buffer found, search for files with possible extensions on disk + (while (and (not the-buffer) file-search-extensions) + (if (not (file-exists-p (concat file (car file-search-extensions)))) + (setq file-search-extensions (cdr file-search-extensions)) + (setq the-buffer (find-file-noselect (concat file (car file-search-extensions)))))) + (if (not the-buffer) + (if auto-compression-mode + (error "File %s (with or without extensions %s) not found" file tags-compression-info-list) + (error "File %s not found" file)) + (set-buffer the-buffer)))) + +(defun tag-find-file-of-tag (file) ; Doc string? + (let ((buf (tag-find-file-of-tag-noselect file))) + (condition-case nil + (switch-to-buffer buf) + (error (pop-to-buffer buf))))) + +;; `etags' TAGS file format support. + +(defun etags-recognize-tags-table () + "If `etags-verify-tags-table', make buffer-local format variables. +If current buffer is a valid etags TAGS file, then give it +buffer-local values of tags table format variables." + (and (etags-verify-tags-table) + ;; It is annoying to flash messages on the screen briefly, + ;; and this message is not useful. -- rms + ;; (message "%s is an `etags' TAGS file" buffer-file-name) + (mapc (lambda (elt) (set (make-local-variable (car elt)) (cdr elt))) + '((file-of-tag-function . etags-file-of-tag) + (tags-table-files-function . etags-tags-table-files) + (tags-completion-table-function . etags-tags-completion-table) + (snarf-tag-function . etags-snarf-tag) + (goto-tag-location-function . etags-goto-tag-location) + (find-tag-regexp-search-function . re-search-forward) + (find-tag-regexp-tag-order . (tag-re-match-p)) + (find-tag-regexp-next-line-after-failure-p . t) + (find-tag-search-function . search-forward) + (find-tag-tag-order . (tag-exact-file-name-match-p + tag-file-name-match-p + tag-exact-match-p + tag-implicit-name-match-p + tag-symbol-match-p + tag-word-match-p + tag-partial-file-name-match-p + tag-any-match-p)) + (find-tag-next-line-after-failure-p . nil) + (list-tags-function . etags-list-tags) + (tags-apropos-function . etags-tags-apropos) + (tags-included-tables-function . etags-tags-included-tables) + (verify-tags-table-function . etags-verify-tags-table) + )))) + +(defun etags-verify-tags-table () + "Return non-nil if the current buffer is a valid etags TAGS file." + ;; Use eq instead of = in case char-after returns nil. + (eq (char-after (point-min)) ?\f)) + +(defun etags-file-of-tag (&optional relative) ; Doc string? + (save-excursion + (re-search-backward "\f\n\\([^\n]+\\),[0-9]*\n") + (let ((str (convert-standard-filename + (buffer-substring (match-beginning 1) (match-end 1))))) + (if relative + str + (expand-file-name str (file-truename default-directory)))))) + + +(defun etags-tags-completion-table () ; Doc string? + (let ((table (make-vector 511 0)) + (progress-reporter + (make-progress-reporter + (format "Making tags completion table for %s..." buffer-file-name) + (point-min) (point-max)))) + (save-excursion + (goto-char (point-min)) + ;; This monster regexp matches an etags tag line. + ;; \1 is the string to match; + ;; \2 is not interesting; + ;; \3 is the guessed tag name; XXX guess should be better eg DEFUN + ;; \4 is not interesting; + ;; \5 is the explicitly-specified tag name. + ;; \6 is the line to start searching at; + ;; \7 is the char to start searching at. + (while (re-search-forward + "^\\(\\([^\177]+[^-a-zA-Z0-9_+*$:\177]+\\)?\ +\\([-a-zA-Z0-9_+*$?:]+\\)[^-a-zA-Z0-9_+*$?:\177]*\\)\177\ +\\(\\([^\n\001]+\\)\001\\)?\\([0-9]+\\)?,\\([0-9]+\\)?\n" + nil t) + (intern (prog1 (if (match-beginning 5) + ;; There is an explicit tag name. + (buffer-substring (match-beginning 5) (match-end 5)) + ;; No explicit tag name. Best guess. + (buffer-substring (match-beginning 3) (match-end 3))) + (progress-reporter-update progress-reporter (point))) + table))) + table)) + +(defun etags-snarf-tag (&optional use-explicit) ; Doc string? + (let (tag-text line startpos explicit-start) + (if (save-excursion + (forward-line -1) + (looking-at "\f\n")) + ;; The match was for a source file name, not any tag within a file. + ;; Give text of t, meaning to go exactly to the location we specify, + ;; the beginning of the file. + (setq tag-text t + line nil + startpos (point-min)) + + ;; Find the end of the tag and record the whole tag text. + (search-forward "\177") + (setq tag-text (buffer-substring (1- (point)) (point-at-bol))) + ;; If use-explicit is non nil and explicit tag is present, use it as part of + ;; return value. Else just skip it. + (setq explicit-start (point)) + (when (and (search-forward "\001" (point-at-bol 2) t) + use-explicit) + (setq tag-text (buffer-substring explicit-start (1- (point))))) + + + (if (looking-at "[0-9]") + (setq line (string-to-number (buffer-substring + (point) + (progn (skip-chars-forward "0-9") + (point)))))) + (search-forward ",") + (if (looking-at "[0-9]") + (setq startpos (string-to-number (buffer-substring + (point) + (progn (skip-chars-forward "0-9") + (point))))))) + ;; Leave point on the next line of the tags file. + (forward-line 1) + (cons tag-text (cons line startpos)))) + +(defun etags-goto-tag-location (tag-info) + "Go to location of tag specified by TAG-INFO. +TAG-INFO is a cons (TEXT LINE . POSITION). +TEXT is the initial part of a line containing the tag. +LINE is the line number. +POSITION is the (one-based) char position of TEXT within the file. + +If TEXT is t, it means the tag refers to exactly LINE or POSITION, +whichever is present, LINE having preference, no searching. +Either LINE or POSITION can be nil. POSITION is used if present. + +If the tag isn't exactly at the given position, then look near that +position using a search window that expands progressively until it +hits the start of file." + (let ((startpos (cdr (cdr tag-info))) + (line (car (cdr tag-info))) + offset found pat) + (if (eq (car tag-info) t) + ;; Direct file tag. + (cond (line (progn (goto-char (point-min)) + (forward-line (1- line)))) + (startpos (goto-char startpos)) + (t (error "etags.el BUG: bogus direct file tag"))) + ;; This constant is 1/2 the initial search window. + ;; There is no sense in making it too small, + ;; since just going around the loop once probably + ;; costs about as much as searching 2000 chars. + (setq offset 1000 + found nil + pat (concat (if (eq selective-display t) + "\\(^\\|\^m\\)" "^") + (regexp-quote (car tag-info)))) + ;; The character position in the tags table is 0-origin. + ;; Convert it to a 1-origin Emacs character position. + (if startpos (setq startpos (1+ startpos))) + ;; If no char pos was given, try the given line number. + (or startpos + (if line + (setq startpos (progn (goto-char (point-min)) + (forward-line (1- line)) + (point))))) + (or startpos + (setq startpos (point-min))) + ;; First see if the tag is right at the specified location. + (goto-char startpos) + (setq found (looking-at pat)) + (while (and (not found) + (progn + (goto-char (- startpos offset)) + (not (bobp)))) + (setq found + (re-search-forward pat (+ startpos offset) t) + offset (* 3 offset))) ; expand search window + (or found + (re-search-forward pat nil t) + (user-error "Rerun etags: `%s' not found in %s" + pat buffer-file-name))) + ;; Position point at the right place + ;; if the search string matched an extra Ctrl-m at the beginning. + (and (eq selective-display t) + (looking-at "\^m") + (forward-char 1)) + (beginning-of-line))) + +(defun etags-list-tags (file) ; Doc string? + (goto-char (point-min)) + (when (re-search-forward (concat "\f\n" "\\(" file "\\)" ",") nil t) + (let ((path (save-excursion (forward-line 1) (file-of-tag))) + ;; Get the local value in the tags table + ;; buffer before switching buffers. + (goto-func goto-tag-location-function) + tag tag-info pt) + (forward-line 1) + (while (not (or (eobp) (looking-at "\f"))) + ;; We used to use explicit tags when available, but the current goto-func + ;; can only handle implicit tags. + (setq tag-info (save-excursion (funcall snarf-tag-function nil)) + tag (car tag-info) + pt (with-current-buffer standard-output (point))) + (princ tag) + (when (= (aref tag 0) ?\() (princ " ...)")) + (with-current-buffer standard-output + (make-text-button pt (point) + 'tag-info tag-info + 'file-path path + 'goto-func goto-func + 'action (lambda (button) + (let ((tag-info (button-get button 'tag-info)) + (goto-func (button-get button 'goto-func))) + (tag-find-file-of-tag (button-get button 'file-path)) + (widen) + (funcall goto-func tag-info))) + 'follow-link t + 'face tags-tag-face + 'type 'button)) + (terpri) + (forward-line 1)) + t))) + +(defmacro tags-with-face (face &rest body) + "Execute BODY, give output to `standard-output' face FACE." + (let ((pp (make-symbol "start"))) + `(let ((,pp (with-current-buffer standard-output (point)))) + ,@body + (put-text-property ,pp (with-current-buffer standard-output (point)) + 'face ,face standard-output)))) + +(defun etags-tags-apropos-additional (regexp) + "Display tags matching REGEXP from `tags-apropos-additional-actions'." + (with-current-buffer standard-output + (dolist (oba tags-apropos-additional-actions) + (princ "\n\n") + (tags-with-face 'highlight (princ (car oba))) + (princ":\n\n") + (let* ((beg (point)) + (symbs (car (cddr oba))) + (ins-symb (lambda (sy) + (let ((sn (symbol-name sy))) + (when (string-match regexp sn) + (make-text-button (point) + (progn (princ sy) (point)) + 'action-internal(cadr oba) + 'action (lambda (button) (funcall + (button-get button 'action-internal) + (button-get button 'item))) + 'item sn + 'face tags-tag-face + 'follow-link t + 'type 'button) + (terpri)))))) + (when (symbolp symbs) + (if (boundp symbs) + (setq symbs (symbol-value symbs)) + (insert "symbol `" (symbol-name symbs) "' has no value\n") + (setq symbs nil))) + (if (vectorp symbs) + (mapatoms ins-symb symbs) + (dolist (sy symbs) + (funcall ins-symb (car sy)))) + (sort-lines nil beg (point)))))) + +(defun etags-tags-apropos (string) ; Doc string? + (when tags-apropos-verbose + (princ "Tags in file `") + (tags-with-face 'highlight (princ buffer-file-name)) + (princ "':\n\n")) + (goto-char (point-min)) + (let ((progress-reporter (make-progress-reporter + (format "Making tags apropos buffer for `%s'..." + string) + (point-min) (point-max)))) + (while (re-search-forward string nil t) + (progress-reporter-update progress-reporter (point)) + (beginning-of-line) + + (let* ( ;; Get the local value in the tags table + ;; buffer before switching buffers. + (goto-func goto-tag-location-function) + (tag-info (save-excursion (funcall snarf-tag-function))) + (tag (if (eq t (car tag-info)) nil (car tag-info))) + (file-path (save-excursion (if tag (file-of-tag) + (save-excursion (forward-line 1) + (file-of-tag))))) + (file-label (if tag (file-of-tag t) + (save-excursion (forward-line 1) + (file-of-tag t)))) + (pt (with-current-buffer standard-output (point)))) + (if tag + (progn + (princ (format "[%s]: " file-label)) + (princ tag) + (when (= (aref tag 0) ?\() (princ " ...)")) + (with-current-buffer standard-output + (make-text-button pt (point) + 'tag-info tag-info + 'file-path file-path + 'goto-func goto-func + 'action (lambda (button) + (let ((tag-info (button-get button 'tag-info)) + (goto-func (button-get button 'goto-func))) + (tag-find-file-of-tag (button-get button 'file-path)) + (widen) + (funcall goto-func tag-info))) + 'follow-link t + 'face tags-tag-face + 'type 'button))) + (princ (format "- %s" file-label)) + (with-current-buffer standard-output + (make-text-button pt (point) + 'file-path file-path + 'action (lambda (button) + (tag-find-file-of-tag (button-get button 'file-path)) + ;; Get the local value in the tags table + ;; buffer before switching buffers. + (goto-char (point-min))) + 'follow-link t + 'face tags-tag-face + 'type 'button)))) + (terpri) + (forward-line 1)) + (message nil)) + (when tags-apropos-verbose (princ "\n"))) + +(defun etags-tags-table-files () ; Doc string? + (let ((files nil) + beg) + (goto-char (point-min)) + (while (search-forward "\f\n" nil t) + (setq beg (point)) + (end-of-line) + (skip-chars-backward "^," beg) + (or (looking-at "include$") + (push (convert-standard-filename + (buffer-substring beg (1- (point)))) + files))) + (nreverse files))) + +;; FIXME? Should this save-excursion? +(defun etags-tags-included-tables () ; Doc string? + (let ((files nil) + beg) + (goto-char (point-min)) + (while (search-forward "\f\n" nil t) + (setq beg (point)) + (end-of-line) + (skip-chars-backward "^," beg) + (when (looking-at "include$") + ;; Expand in the default-directory of the tags table buffer. + (push (expand-file-name (convert-standard-filename + (buffer-substring beg (1- (point))))) + files))) + (nreverse files))) + +;; Empty tags file support. + +(defun tags-recognize-empty-tags-table () + "Return non-nil if current buffer is empty. +If empty, make buffer-local values of the tags table format variables +that do nothing." + (and (zerop (buffer-size)) + (mapc (lambda (sym) (set (make-local-variable sym) 'ignore)) + '(tags-table-files-function + tags-completion-table-function + find-tag-regexp-search-function + find-tag-search-function + tags-apropos-function + tags-included-tables-function)) + (set (make-local-variable 'verify-tags-table-function) + (lambda () (zerop (buffer-size)))))) + +;; Match qualifier functions for tagnames. +;; These functions assume the etags file format defined in etc/ETAGS.EBNF. + +;; This might be a neat idea, but it's too hairy at the moment. +;;(defmacro tags-with-syntax (&rest body) +;; `(with-syntax-table +;; (with-current-buffer (find-file-noselect (file-of-tag)) +;; (syntax-table)) +;; ,@body)) +;;(put 'tags-with-syntax 'edebug-form-spec '(&rest form)) + +;; exact file name match, i.e. searched tag must match complete file +;; name including directories parts if there are some. +(defun tag-exact-file-name-match-p (tag) + "Return non-nil if TAG matches complete file name. +Any directory part of the file name is also matched." + (and (looking-at ",[0-9\n]") + (save-excursion (backward-char (+ 2 (length tag))) + (looking-at "\f\n")))) + +;; file name match as above, but searched tag must match the file +;; name not including the directories if there are some. +(defun tag-file-name-match-p (tag) + "Return non-nil if TAG matches file name, excluding directory part." + (and (looking-at ",[0-9\n]") + (save-excursion (backward-char (1+ (length tag))) + (looking-at "/")))) + +;; this / to detect we are after a directory separator is ok for unix, +;; is there a variable that contains the regexp for directory separator +;; on whatever operating system ? +;; Looks like ms-win will lose here :). + +;; t if point is at a tag line that matches TAG exactly. +;; point should be just after a string that matches TAG. +(defun tag-exact-match-p (tag) + "Return non-nil if current tag line matches TAG exactly. +Point should be just after a string that matches TAG." + ;; The match is really exact if there is an explicit tag name. + (or (and (eq (char-after (point)) ?\001) + (eq (char-after (- (point) (length tag) 1)) ?\177)) + ;; We are not on the explicit tag name, but perhaps it follows. + (looking-at (concat "[^\177\n]*\177" (regexp-quote tag) "\001")))) + +;; t if point is at a tag line that has an implicit name. +;; point should be just after a string that matches TAG. +(defun tag-implicit-name-match-p (tag) + "Return non-nil if current tag line has an implicit name. +Point should be just after a string that matches TAG." + ;; Look at the comment of the make_tag function in lib-src/etags.c for + ;; a textual description of the four rules. + (and (string-match "^[^ \t()=,;]+$" tag) ;rule #1 + (looking-at "[ \t()=,;]?\177") ;rules #2 and #4 + (save-excursion + (backward-char (1+ (length tag))) + (looking-at "[\n \t()=,;]")))) ;rule #3 + +;; t if point is at a tag line that matches TAG as a symbol. +;; point should be just after a string that matches TAG. +(defun tag-symbol-match-p (tag) + "Return non-nil if current tag line matches TAG as a symbol. +Point should be just after a string that matches TAG." + (and (looking-at "\\Sw.*\177") (looking-at "\\S_.*\177") + (save-excursion + (backward-char (1+ (length tag))) + (and (looking-at "\\Sw") (looking-at "\\S_"))))) + +;; t if point is at a tag line that matches TAG as a word. +;; point should be just after a string that matches TAG. +(defun tag-word-match-p (tag) + "Return non-nil if current tag line matches TAG as a word. +Point should be just after a string that matches TAG." + (and (looking-at "\\b.*\177") + (save-excursion (backward-char (length tag)) + (looking-at "\\b")))) + +;; partial file name match, i.e. searched tag must match a substring +;; of the file name (potentially including a directory separator). +(defun tag-partial-file-name-match-p (_tag) + "Return non-nil if current tag matches file name. +This is a substring match, and it can include directory separators. +Point should be just after a string that matches TAG." + (and (looking-at ".*,[0-9\n]") + (save-excursion (beginning-of-line) + (backward-char 2) + (looking-at "\f\n")))) + +;; t if point is in a tag line with a tag containing TAG as a substring. +(defun tag-any-match-p (_tag) + "Return non-nil if current tag line contains TAG as a substring." + (looking-at ".*\177")) + +;; t if point is at a tag line that matches RE as a regexp. +(defun tag-re-match-p (re) + "Return non-nil if current tag line matches regexp RE." + (save-excursion + (beginning-of-line) + (let ((bol (point))) + (and (search-forward "\177" (line-end-position) t) + (re-search-backward re bol t))))) + +(defcustom tags-loop-revert-buffers nil + "Non-nil means tags-scanning loops should offer to reread changed files. +These loops normally read each file into Emacs, but when a file +is already visited, they use the existing buffer. +When this flag is non-nil, they offer to revert the existing buffer +in the case where the file has changed since you visited it." + :type 'boolean + :group 'etags) + +;;;###autoload +(defun next-file (&optional initialize novisit) + "Select next file among files in current tags table. + +A first argument of t (prefix arg, if interactive) initializes to the +beginning of the list of files in the tags table. If the argument is +neither nil nor t, it is evalled to initialize the list of files. + +Non-nil second argument NOVISIT means use a temporary buffer + to save time and avoid uninteresting warnings. + +Value is nil if the file was already visited; +if the file was newly read in, the value is the filename." + ;; Make the interactive arg t if there was any prefix arg. + (interactive (list (if current-prefix-arg t))) + (cond ((not initialize) + ;; Not the first run. + ) + ((eq initialize t) + ;; Initialize the list from the tags table. + (save-excursion + ;; Visit the tags table buffer to get its list of files. + (visit-tags-table-buffer) + ;; Copy the list so we can setcdr below, and expand the file + ;; names while we are at it, in this buffer's default directory. + (setq next-file-list (mapcar 'expand-file-name (tags-table-files))) + ;; Iterate over all the tags table files, collecting + ;; a complete list of referenced file names. + (while (visit-tags-table-buffer t) + ;; Find the tail of the working list and chain on the new + ;; sublist for this tags table. + (let ((tail next-file-list)) + (while (cdr tail) + (setq tail (cdr tail))) + ;; Use a copy so the next loop iteration will not modify the + ;; list later returned by (tags-table-files). + (if tail + (setcdr tail (mapcar 'expand-file-name (tags-table-files))) + (setq next-file-list (mapcar 'expand-file-name + (tags-table-files)))))))) + (t + ;; Initialize the list by evalling the argument. + (setq next-file-list (eval initialize)))) + (unless next-file-list + (and novisit + (get-buffer " *next-file*") + (kill-buffer " *next-file*")) + (user-error "All files processed")) + (let* ((next (car next-file-list)) + (buffer (get-file-buffer next)) + (new (not buffer))) + ;; Advance the list before trying to find the file. + ;; If we get an error finding the file, don't get stuck on it. + (setq next-file-list (cdr next-file-list)) + ;; Optionally offer to revert buffers + ;; if the files have changed on disk. + (and buffer tags-loop-revert-buffers + (not (verify-visited-file-modtime buffer)) + (y-or-n-p + (format + (if (buffer-modified-p buffer) + "File %s changed on disk. Discard your edits? " + "File %s changed on disk. Reread from disk? ") + next)) + (with-current-buffer buffer + (revert-buffer t t))) + (if (not (and new novisit)) + (find-file next novisit) + ;; Like find-file, but avoids random warning messages. + (switch-to-buffer (get-buffer-create " *next-file*")) + (kill-all-local-variables) + (erase-buffer) + (setq new next) + (insert-file-contents new nil)) + new)) + +(defvar tags-loop-operate nil + "Form for `tags-loop-continue' to eval to change one file.") + +(defvar tags-loop-scan + '(user-error "%s" + (substitute-command-keys + "No \\[tags-search] or \\[tags-query-replace] in progress")) + "Form for `tags-loop-continue' to eval to scan one file. +If it returns non-nil, this file needs processing by evalling +\`tags-loop-operate'. Otherwise, move on to the next file.") + +(defun tags-loop-eval (form) + "Evaluate FORM and return its result. +Bind `case-fold-search' during the evaluation, depending on the value of +`tags-case-fold-search'." + (let ((case-fold-search (if (memq tags-case-fold-search '(t nil)) + tags-case-fold-search + case-fold-search))) + (eval form))) + + +;;;###autoload +(defun tags-loop-continue (&optional first-time) + "Continue last \\[tags-search] or \\[tags-query-replace] command. +Used noninteractively with non-nil argument to begin such a command (the +argument is passed to `next-file', which see). + +Two variables control the processing we do on each file: the value of +`tags-loop-scan' is a form to be executed on each file to see if it is +interesting (it returns non-nil if so) and `tags-loop-operate' is a form to +evaluate to operate on an interesting file. If the latter evaluates to +nil, we exit; otherwise we scan the next file." + (declare (obsolete "use `xref-find-definitions' interface instead." "25.1")) + (interactive) + (let (new + ;; Non-nil means we have finished one file + ;; and should not scan it again. + file-finished + original-point + (messaged nil)) + (while + (progn + ;; Scan files quickly for the first or next interesting one. + ;; This starts at point in the current buffer. + (while (or first-time file-finished + (save-restriction + (widen) + (not (tags-loop-eval tags-loop-scan)))) + ;; If nothing was found in the previous file, and + ;; that file isn't in a temp buffer, restore point to + ;; where it was. + (when original-point + (goto-char original-point)) + + (setq file-finished nil) + (setq new (next-file first-time t)) + + ;; If NEW is non-nil, we got a temp buffer, + ;; and NEW is the file name. + (when (or messaged + (and (not first-time) + (> baud-rate search-slow-speed) + (setq messaged t))) + (message "Scanning file %s..." (or new buffer-file-name))) + + (setq first-time nil) + (setq original-point (if new nil (point))) + (goto-char (point-min))) + + ;; If we visited it in a temp buffer, visit it now for real. + (if new + (let ((pos (point))) + (erase-buffer) + (set-buffer (find-file-noselect new)) + (setq new nil) ;No longer in a temp buffer. + (widen) + (goto-char pos)) + (push-mark original-point t)) + + (switch-to-buffer (current-buffer)) + + ;; Now operate on the file. + ;; If value is non-nil, continue to scan the next file. + (tags-loop-eval tags-loop-operate)) + (setq file-finished t)) + (and messaged + (null tags-loop-operate) + (message "Scanning file %s...found" buffer-file-name)))) + +;;;###autoload +(defun tags-search (regexp &optional file-list-form) + "Search through all files listed in tags table for match for REGEXP. +Stops when a match is found. +To continue searching for next match, use command \\[tags-loop-continue]. + +If FILE-LIST-FORM is non-nil, it should be a form that, when +evaluated, will return a list of file names. The search will be +restricted to these files. + +Also see the documentation of the `tags-file-name' variable." + (interactive "sTags search (regexp): ") + (if (and (equal regexp "") + (eq (car tags-loop-scan) 're-search-forward) + (null tags-loop-operate)) + ;; Continue last tags-search as if by M-,. + (tags-loop-continue nil) + (setq tags-loop-scan `(re-search-forward ',regexp nil t) + tags-loop-operate nil) + (tags-loop-continue (or file-list-form t)))) + +;;;###autoload +(defun tags-query-replace (from to &optional delimited file-list-form) + "Do `query-replace-regexp' of FROM with TO on all files listed in tags table. +Third arg DELIMITED (prefix arg) means replace only word-delimited matches. +If you exit (\\[keyboard-quit], RET or q), you can resume the query replace +with the command \\[tags-loop-continue]. +Fourth arg FILE-LIST-FORM non-nil means initialize the replacement loop. +Fifth and sixth arguments START and END are accepted, for compatibility +with `query-replace-regexp', and ignored. + +If FILE-LIST-FORM is non-nil, it is a form to evaluate to +produce the list of files to search. + +See also the documentation of the variable `tags-file-name'." + (interactive (query-replace-read-args "Tags query replace (regexp)" t t)) + (setq tags-loop-scan `(let ,(unless (equal from (downcase from)) + '((case-fold-search nil))) + (if (re-search-forward ',from nil t) + ;; When we find a match, move back + ;; to the beginning of it so perform-replace + ;; will see it. + (goto-char (match-beginning 0)))) + tags-loop-operate `(perform-replace ',from ',to t t ',delimited + nil multi-query-replace-map)) + (tags-loop-continue (or file-list-form t))) + +(defun tags-complete-tags-table-file (string predicate what) ; Doc string? + (save-excursion + ;; If we need to ask for the tag table, allow that. + (let ((enable-recursive-minibuffers t)) + (visit-tags-table-buffer)) + (if (eq what t) + (all-completions string (tags-table-files) predicate) + (try-completion string (tags-table-files) predicate)))) + +;;;###autoload +(defun list-tags (file &optional _next-match) + "Display list of tags in file FILE. +This searches only the first table in the list, and no included tables. +FILE should be as it appeared in the `etags' command, usually without a +directory specification." + (interactive (list (completing-read "List tags in file: " + 'tags-complete-tags-table-file + nil t nil))) + (with-output-to-temp-buffer "*Tags List*" + (princ "Tags in file `") + (tags-with-face 'highlight (princ file)) + (princ "':\n\n") + (save-excursion + (let ((first-time t) + (gotany nil)) + (while (visit-tags-table-buffer (not first-time)) + (setq first-time nil) + (if (funcall list-tags-function file) + (setq gotany t))) + (or gotany + (user-error "File %s not in current tags tables" file))))) + (with-current-buffer "*Tags List*" + (require 'apropos) + (with-no-warnings + (apropos-mode)) + (setq buffer-read-only t))) + +;;;###autoload +(defun tags-apropos (regexp) + "Display list of all tags in tags table REGEXP matches." + (declare (obsolete xref-find-apropos "25.1")) + (interactive "sTags apropos (regexp): ") + (with-output-to-temp-buffer "*Tags List*" + (princ "Click mouse-2 to follow tags.\n\nTags matching regexp `") + (tags-with-face 'highlight (princ regexp)) + (princ "':\n\n") + (save-excursion + (let ((first-time t)) + (while (visit-tags-table-buffer (not first-time)) + (setq first-time nil) + (funcall tags-apropos-function regexp)))) + (etags-tags-apropos-additional regexp)) + (with-current-buffer "*Tags List*" + (eval-and-compile (require 'apropos)) + (apropos-mode) + ;; apropos-mode is derived from fundamental-mode and it kills + ;; all local variables. + (setq buffer-read-only t))) + +;; XXX Kludge interface. + +(define-button-type 'tags-select-tags-table + 'action 'select-tags-table-select + 'follow-link t + 'help-echo "RET, t or mouse-2: select tags table") + +;; XXX If a file is in multiple tables, selection may get the wrong one. +;;;###autoload +(defun select-tags-table () + "Select a tags table file from a menu of those you have already used. +The list of tags tables to select from is stored in `tags-table-set-list'; +see the doc of that variable if you want to add names to the list." + (interactive) + (pop-to-buffer "*Tags Table List*") + (setq buffer-read-only nil + buffer-undo-list t) + (erase-buffer) + (let ((set-list tags-table-set-list) + (desired-point nil) + b) + (when tags-table-list + (setq desired-point (point-marker)) + (setq b (point)) + (princ (mapcar 'abbreviate-file-name tags-table-list) (current-buffer)) + (make-text-button b (point) 'type 'tags-select-tags-table + 'etags-table (car tags-table-list)) + (insert "\n")) + (while set-list + (unless (eq (car set-list) tags-table-list) + (setq b (point)) + (princ (mapcar 'abbreviate-file-name (car set-list)) (current-buffer)) + (make-text-button b (point) 'type 'tags-select-tags-table + 'etags-table (car (car set-list))) + (insert "\n")) + (setq set-list (cdr set-list))) + (when tags-file-name + (or desired-point + (setq desired-point (point-marker))) + (setq b (point)) + (insert (abbreviate-file-name tags-file-name)) + (make-text-button b (point) 'type 'tags-select-tags-table + 'etags-table tags-file-name) + (insert "\n")) + (setq set-list (delete tags-file-name + (apply 'nconc (cons (copy-sequence tags-table-list) + (mapcar 'copy-sequence + tags-table-set-list))))) + (while set-list + (setq b (point)) + (insert (abbreviate-file-name (car set-list))) + (make-text-button b (point) 'type 'tags-select-tags-table + 'etags-table (car set-list)) + (insert "\n") + (setq set-list (delete (car set-list) set-list))) + (goto-char (point-min)) + (insert-before-markers + "Type `t' to select a tags table or set of tags tables:\n\n") + (if desired-point + (goto-char desired-point)) + (set-window-start (selected-window) 1 t)) + (set-buffer-modified-p nil) + (select-tags-table-mode)) + +(defvar select-tags-table-mode-map ; Doc string? + (let ((map (make-sparse-keymap))) + (set-keymap-parent map button-buffer-map) + (define-key map "t" 'push-button) + (define-key map " " 'next-line) + (define-key map "\^?" 'previous-line) + (define-key map "n" 'next-line) + (define-key map "p" 'previous-line) + (define-key map "q" 'select-tags-table-quit) + map)) + +(define-derived-mode select-tags-table-mode special-mode "Select Tags Table" + "Major mode for choosing a current tags table among those already loaded." + (setq buffer-read-only t)) + +(defun select-tags-table-select (button) + "Select the tags table named on this line." + (interactive (list (or (button-at (line-beginning-position)) + (error "No tags table on current line")))) + (let ((name (button-get button 'etags-table))) + (visit-tags-table name) + (select-tags-table-quit) + (message "Tags table now %s" name))) + +(defun select-tags-table-quit () + "Kill the buffer and delete the selected window." + (interactive) + (quit-window t (selected-window))) + +;;;###autoload +(defun complete-tag () + "Perform tags completion on the text around point. +Completes to the set of names listed in the current tags table. +The string to complete is chosen in the same way as the default +for \\[find-tag] (which see)." + (interactive) + (or tags-table-list + tags-file-name + (user-error "%s" + (substitute-command-keys + "No tags table loaded; try \\[visit-tags-table]"))) + (let ((comp-data (tags-completion-at-point-function))) + (if (null comp-data) + (user-error "Nothing to complete") + (completion-in-region (car comp-data) (cadr comp-data) + (nth 2 comp-data) + (plist-get (nthcdr 3 comp-data) :predicate))))) + + +;;; Xref backend + +;; Stop searching if we find more than xref-limit matches, as the xref +;; infrastructure is not designed to handle very long lists. +;; Switching to some kind of lazy list might be better, but hopefully +;; we hit the limit rarely. +(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 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))) + (`apropos (etags--xref-find-definitions id t)))) + +(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. + ;; NOTE: find-tag-tag-order is typically a buffer-local variable. + (let* ((xrefs '()) + (first-time t) + (search-fun (if regexp? #'re-search-forward #'search-forward)) + (marks (make-hash-table :test 'equal)) + (case-fold-search (if (memq tags-case-fold-search '(nil t)) + tags-case-fold-search + case-fold-search))) + (save-excursion + (while (visit-tags-table-buffer (not first-time)) + (setq first-time nil) + (dolist (order-fun (cond (regexp? find-tag-regexp-tag-order) + (t etags-xref-find-definitions-tag-order))) + (goto-char (point-min)) + (while (and (funcall search-fun pattern nil t) + (< (hash-table-count marks) etags--xref-limit)) + (when (funcall order-fun pattern) + (beginning-of-line) + (pcase-let* ((tag-info (etags-snarf-tag)) + (`(,hint ,line . _) tag-info)) + (unless (eq hint t) ; hint==t if we are in a filename line + (let* ((file (file-of-tag)) + (mark-key (cons file line))) + (unless (gethash mark-key marks) + (let ((loc (xref-make-etags-location + tag-info (expand-file-name file)))) + (push (xref-make hint loc) xrefs) + (puthash mark-key t marks))))))))))) + (nreverse xrefs))) + +(defclass xref-etags-location (xref-location) + ((tag-info :type list :initarg :tag-info) + (file :type string :initarg :file + :reader xref-location-group)) + :documentation "Location of an etags tag.") + +(defun xref-make-etags-location (tag-info file) + (make-instance 'xref-etags-location :tag-info tag-info + :file (expand-file-name file))) + +(cl-defmethod xref-location-marker ((l xref-etags-location)) + (with-slots (tag-info file) l + (let ((buffer (find-file-noselect file))) + (with-current-buffer buffer + (etags-goto-tag-location tag-info) + (point-marker))))) + +(cl-defmethod xref-location-line ((l xref-etags-location)) + (with-slots (tag-info) l + (nth 1 tag-info))) + + +(provide 'etags) + +;;; etags.el ends here diff --git a/test/etags/erl-src/gs_dialog.erl b/test/etags/erl-src/gs_dialog.erl new file mode 100644 index 00000000000..c04ee8be0cd --- /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('cpressey@catseye.mb.ca'). +-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 00000000000..6ec87500fc7 --- /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 <ulf.wiger@ericsson.com> +%%% 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('ulf.wiger@ericsson.com'). + +-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 0000000000000000000000000000000000000000..5ba2e1676aba985a0faa0f964947b01ce49e2287 GIT binary patch literal 2667 zcmV-x3Y7I9iwFpCYCkao18iw?baO6ca%=#VS#59II1>IG<9@{SLvR*Wacg(K?7CSX z?Im#U+@NTLg;T@uF*0on)r(gzZMt>;`^^kViK67Rm!g(9^UQEKoFRwQ`8mAF4qx+V zw=ZG%#)I*1zrFC`I*w&h$`}F}%P>olDvd%>Mp;_G-PfX&Nda^5kmaJx@<<kg^K-a~ zVhQ;7JH$~@79*L*M82xZeU=mX-<gD~JSoaNOLsne$R1=~!k<yTiP9ZG-&gq|D<nc+ ziy{h@9ysJ#D2oCyu&vUNjTj9E7fH6MVmV}xM+EtJ$ntWyOk{$ZpHF-chl5Nv*4x;J zTz-~$A???RKRAQ5+!GKVrHEpBJ>+s5J<?lIZS`9$ijqW8ppbtlUP6RTb%@DDqz#fN zC0ZgL=}}Y<WaRUg)XfGRsz3!A%P5)em=I<uDnJs#wy`Kn$y&_oM7^$KneNb5hJBJ> z^=M!E)F`CL!@X|ku2dtJhggL2`L9}xd!P790~w%Ti8xqqzpmPjW#%@EH!<p=XO7Rm zx6fZP4rfpqGhFyE_u%3W7?yb@;Rst17t$jHl(Hxx+QI^&0)&=;YzyUH@{GfLFlh8F z7svIAbPdi(*VJaMkN29@5bwPfMDw|SWul4%1=Wp0N7@2Jx`F$_pvK(uC@_*my8GRh z905>l!|S&<AW9Akc=qfW^`K$P*)dr8@R1ETKR?5^<^)7tO)V(m78(a<i<X`9#>m=1 z=qzRMyf$@ttwu@-cs(81Hq>-YoSAGG2A<bI8{BfGEYRseCg@iXaSRw$iA=HgC~eJ| zfiG%BHH9Z))IhXv?mI|y4f1eSrwz7t4gs}uFiVHG9AvpHt2|ZCx&3dsH|9AJrDQ0x zPstI_4MXZ?%qCfGoJ|M1dkjFLf7#0vZs89Y8wm5^0#G)faht9?x`OGzGE4J%^(l<e z*@(U1(Xa?vJ)GCN=gL)T6&t?i2Z9mQmzo2O!+b+%fT~xVeEe4HY?KilEx}(j#>lQ3 z{R~$btGR1`T{BERl7VV*9p3Td2?HIRdOBS>7@DA#{SIH7?@FyYcA}Y-;zMPe9Xp)) zCgw0B1WyBsFy2W^O*>u}4Vh`zg<e2$QyIRCQXk$49vdvFh5vuSc^{2N%vkY4YFmL~ zl}tkkh#ZX&!U$}@t4osLg^im0#CB4l*$)yeF69pM4Bgx6nFC5QiR}4J3;8}PyL`pE z&`RZ8(jXq0XEMIgN<Z^@NXI!YfNcTA)U=DSQG*Qx8~0QRMR-w}aaW1SS$kQUQ?xL$ z{v*{y^5F&QqF22L-BpQaxB)le7npHWBplHUP#W-6*-`KIl(q{ss)bMgM)c<|Rsfi- zWt7N5ZF_pUFt5YxfE5#&y%-E!MJ>PIqMvacxP%wfK^tlu+)!~PSQ{_Srvn$R7#5XW ztTtHXUf#c>RIMPb=t63gpkMlz)&U9C%NnadKh8*H&Ed(^qnp7ijvgC3RnT<<ZT&S+ z;%P7<0s6s|1)v5b9{UC)9-kZ#3RwffRy`oYvD0LROSR5}8aq|cbp!1TNI{9G!FoV_ zU?iFZcu>nc{$Oa9BFD#^D?$}#AM913dbr>*6@;S#8cP+H;Sz$Sv@oS=TXnOq%uNXD zB~-!826RVp#OoqSSbDUdEG>-^<QW+HV16;CdZ=x{yi<>;dUp60PaoDcK`;O0q5q5d zJo0UnQ=JrsRW4{*#Nm<{Z1XI!rke7{R=T9e@dH+<&H7BOsRNri7$md+#HA6nrMeXs z72!HO>9uG@Av2eYm0n%QK}<mcQw(9@>E#VGyIkV}zgA@Gv0jGTyycbunkQ#r7hw*F zYO$;1f^@uAC7G*b_5%&v|BO}K_lUdFd=44vF{$&>@ZK{+;L`;GjEt)46cIi5C1VM> zaf^9Js%aX{in5%IkHMHNo*aXT6}hu9u2{24+st6>*FX}TulV4hSuG{590U^uuw-<y z5T_$y1X}o&n%;S*gq~|>snaAymwJm*p_79H49|nPEO7DTQ@y*1vS(={#e%c5xk4yX zsvYp`pA>anz&jeA?QxmG<GH;QiTczM?nN%b62WMrHn8`MQtnaBy3E$RAj~{-I95j% zBk3emTgcr^)h?}D7HWDzZX0KUT4yB2jh_%Amlzp({|OP@V3Eb>?Ckuiz{&%|xXjqe z+NV6H`YJ$`p)Ns}v+VjCMc1y!1K)=3SRgylWQ&*&JLs{NzPjdZ>1@`Jp1w|tFxwK+ z@%<)CYuRS>vyLJ>qb`FZp;vX4{)DP#88)Dx1z1_qYE80L_jGQ_I-;&npggJPLSN1_ z69jKW99D6idTP(bR1oc>ymnPf-nPqTs1mk?clO#IuNvg6b&JHiucyb@Rn{X<0$3oA zU73~uZmj>H(bv~g!~e*yKD<pgl1^P%gUZ@N^{v&@7`>G~iP3jl{U9u*<ri+%-O>hg zN|#z@HTRA;mKrneP$qajbq0IOAsiIuK(Cijs>TBkE-wL5?ZfM71sc``1clct*FC{H zZgy@PEaPUbao;|RxRS{DK0U3avC!cMUawTIf%Y8#9|i`~)56Wl(1irFF7!w`+lmud z@3X?kXvbjkOc~aPz|c^44+_~D1Obrmj$?^PIP!{eLMbPv?pcou1$vMHqqOyQoVV&p zmuFR$4y#*Z8bDoU>Wphwn+DY?I1RE}H5#~6dK!UgpXS+5YqiVKCsm%%=&lMKA9YAg z_3Fyj<!B$HE2L`7{_@mB6@q4C4@*^>FzK-#BfqbBbuBqj#yYT0J?rp$3tLx5yTWx1 z`9ZC#zEupry~{Q}+*E1!-3Q8n)>Y(_Ank9Bp<9$Ss4mxbj`u6zOb2~odi_}D;ws-2 zrr%|OON*8Ew9)YWd;GPnYw4oAW20^5dB@suy;i8}*rxlH-hl~yqraM2eC-@ATj+Dn z35?)_xQ)zDYg2ee{=NM{rx5HVeNM<FT=T~jpb6#Ai*$;}5=nO!=|<!m*hjlPeId#> z_*;JgWG&k)S7p>8&vv;;5-f5@V7dkrlj<u|NgFkg+p1Xlw<3|>>3GOWzDTIZ7Mhdi z6DqqU?RZ$SjT+n8)TU;WL`T}LYK}`JD8fCSj^cPk1FZSR_AFQ4=94LVlhr0tq@__2 zr5nDVqjE9IG19Tfiatv?WJRRDzv|B})C~#nb%!3YI(N|rIW_FP2tRSRe1;>Nm17S2 z3h3hv3_r>|k#Pn$xkx`reSVOSbUM@%qJ11@2@-L|DbyF(^K*t?#pbgKIx)_&PmomT zg)|Cr$m&8I=eH6&311@m&O*2PYECcMFKQ;uygnPyEgJ@{4_B03vyF3wzf{R{qj*=C z8%GOo%6(gf-tlNR)WNP8D!jWrv_MU74A)&YXM-MvjV2=KUh~d~biP<8-+EYnOG2sT z4!QHGqtMl)d!-~aUD~x!C``1g-dHD2q58nepG$Sg)M(&R>FgT;{69tfy+L8CgX5B} ZhS*#-01x<6+q!nW^*=Y|ao&<3008s;6wCks literal 0 HcmV?d00001 diff --git a/test/etags/f-src/entry.for b/test/etags/f-src/entry.for new file mode 100644 index 00000000000..52b8a2487c6 --- /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 0000000000000000000000000000000000000000..5f22edc86bb1b36fdb56f0749bc88c6af3cf982d GIT binary patch literal 3265 zcmV;y3_kN8iwFq0j94`S17&V>a(OOubaG*CXJr7@T5WIJI1>JzU%@Mib+S;L&3)>o zC<@0>Qe9m;XDjLUz7&i_$K1%GD@t+m?{9{0qGZWVuh&J_C<@0K4u`|x%=3&me0iOV zIZMi%5%syA#@Fw!$RW94^OVA`gZ#c+v8<3}A#xJtIsE^DNlEV+nToRD8I$DbfE?)Y zqsdh?9E`~2&3G6`lX0bR_HHtb0}vQr1tk3AdK8d&Iv9olxwstMjNnoH={i)ZhA+wB zP8K<x7YD<Gq1J2-Dwd4Uno;-*Q--aKVUne6UT~2S5XzsdinZV{rVqL%WITxp7&;>H zyJ$wHlbbjihkcyxC7H4>CC^#%dCF+Qv-`@3a5|k#wa|O^v=MnCTOVp;DViXiZ=7@L zALW?cBIvH&66n_563W@TMf65knc=$u42i?(uZO=LRcc_9sue}!IJ^p{4Lz69C>&dn zYtZr`jB7%NT7<kIr~iDVqX)fqo^!VN9Gy%mpWY6p(cpX(!c->{aKt#CezMPw%}0H! z{(SzYnnvw`SrYyk#t^q|U%~sN>mfS6^P%#2*F){?u90{as*xXNSF><rA8O}m?|Kh) z;1!go5V}#eF1^z;WBTMM2bzPR4o|}6yp$3Hm52q(@Vq)-{f5>_S^OW>Uc(Vtv4Z9D zf7Q5l8jQ;D>zu9iv2!ZpC6^@Exr#`BpV3qjnwgvtU6Lp!kOMFqgcnB7B`nudF%}uC zj4t@RgyZc!-<eRX6-;L%yQoAbw1n^sR^yonKc0CGsl`RL*G?<sL>Qb2k~1nH<rRX= zX_{)Cvb-~D`@SLTGG7bHv?FU`s0%c#=!4n^J1FrI8cd|~Be{E0d-X_jE=pNjUcc4* zOR6m`v*UuV7+I8=%F}N5=xV*~_-7<+s1|(Q*!MkyMjYaX7Et;i&o97@*}P-R2W7Do z`DdEpv62NZN}LIw;nQ1)KJ(|X9gOKytT5K07U@caF}!B^sw~u&C+sVcqRi)vq^gE) zz%?{USmNneh%^-&s6fiiOQ=RH@9TMwf6+NJLQS7T@I3ddcg8C*lU}FnkxT0$c%&rH z;b_|>kkkHe{nLQ__UiaDJU>4D{nhW4KO8s+z!*{9F9|PjL9nh>`=$nDRm#E}53Yl_ z%o+GRBNW0WEm?r!4|SB~DsTnt{}b8pVyTvVDRO`TSxpCQ1I-f%ikS#t-VNH32&OZ@ zw=e1=%`@<@aXuP>nFe+Sfkf$@k>)u<huHK}KOZacs5QOtali{33ciMTBS<RXymn|n zC(K2j!$>7(##h^Fbj_}#VK|D;o%3;%o1m<LJ9J{%C1SEoHO)wwiszl)!8ye=wFMSb zb<%+0BD{@;6<qLyPJeTdVx%F(E{VwyWc<}qbWe*J9V@+^z1y?W*{z4Mx<ovX)g^)z ze~-w;C1NZiG#lK8Wb0EixJ$${xJ$${xJ$${xJ$$sY@Huvyx=Md;P`sJzZk>=&wBWB zLi+LaChU`wZ4m>ic8M5hwMzu8-y?$7H$>c0!mn&z78pa2t`k*tU94i&xC&zkVPr!p zkUgHG9)FyUpq#kJfqvGn`>&_7<{2TML<t4(k*V?w@k=wmVv^00&zC)Na?-A*vv$7L z>1jouu&i*%5v)hL)ljm|#XaOLa#!BN)9Vyq1K6}=^9Pk~w7oqo->D`MbA{z}M#5kA zIEVC9jygP_T;0qRx;yg67@qis^e+da8PsU|U>e3Z)3Hf+ww5(mt4?J|G7AB})mdu% zv}Ov^+%cl@t0tKS+$)?(lvU*LkAQp%$bXIwEPFAJs|hrV)%;a+*&2)O=C9hcLkjh8 zoik}&2j%5RxxM17Sa6ih@I_%%tHRJ*yBMJs^Ow`vVMTqq>FjVXogMC_v%~##cK8fB zJA59sya;E*X>^TEi@$(is?9b#i2E!7U>5Z*#@jCb*&NHhu2Y)XXfmprN}4>isU#JE zGTY~Gve@QO40Lu!=MQhYsBLpZ!WOhleIs{rSL-{Q-T*8w8Jrp2`e|_;k{ErSYH(VA zAdLb#HXO1(u70v`mdp{wEj=75T%qQGGdR%o5Y?JOQ(0RqY2lNp3e2{c4#(G;?y*M~ z1MNPrAt0cd6zpr^`eJH^t$910wbMCUYPy}(>6|ScozCi9(|35$9fEc*Zl8g_OCYsa z-tGZ+mfJnxj`H7S;g!Md>vfr^eZ7rD^mkcx)9mKjclPY+y{xSUocFk`ndUwIK|Qj? zLKTZT>qf7EN5k=LG@Xn;04#%YuX{t-V6qCVwBMJ|oAR1qpFkoAliM3;$5$W>K=LC` zbVlS@kNW;f3s&VRKzSw5A+H|SLnC2pmL+J4OT;2ep9r?<YPfGj6YMzXc2BkR0DyWy zXevcDyah43B^g5!_Q>Y|I3;5U<p6~r+3_?>bYo#DP{f%Gu35uot0kdYI~ExEQJ+LE zd7D+Ei0V8Rq!(R{C)2P;4%b3Tj)Y1pm)Om;<E#{Lfx$V{bo_D=suPM|r{T5!5$)?~ z+}}G2{8?R{YWR4AjU_mMo17N~%UtJVDFA3Yx78feU9Y-&k*9qmzj|+&ej0cP1g%zi z*ja_It6FkW^~H3&6*_7tX)JKzHnu+a@FOHKk@X5?5r)1p2)IQlO{Wd}v}{hXm6eJ5 zXf=tp)2<$Sx|;1Aop}b=Q_w6P#6XwcRJ=&%uE4UlVC#pPg8p`!!N`%$&yh}SKUur? zTN|;>Htg|tbRr=yd80Ft9jpC3UV`N*W|6r_FhN#X-Zi7u42=fy&Yp<j!_lRBduJiJ z>d?jSs+WDP`SZpEfO!zY-nPkDu5Y;Z1x#RBer-Mje_Q8M&-Tn`Wu7~q0gA2jsb_oU zvog<}&%m<Q`BaZ<&wN&<W4_v47812irn+T&CbKeKi?fjgsfkK_-)4LL7}7dp=$fX2 zSwC?l9IMHSQ9KBXGVS;KuD@t<O=VnHi)gDoq}$lI_(<yaQGRd8Bw#pkm}E6tdh2zj zY!Aq2IoxwkAu{l-&QaHF&KDf!u#gQqJgTL4$Dj^1L1&fje{c^+_1=Gq4oTyUx7ry< zc-CJVEae{LF(nT6@=M9U^rYYQcAS3Yt8ztBmfaUiR7uGKkSoa`DK@aDZK;xiJ{Xv& z!_z`@jk9WdXyLlsJ1C%PEnA!G?WzSREr@L!z&F|<#!;$>DdIu3Ax-3oncspj-K%f# z2rT<OmB|r(VTv3?WBiKQtA@>*0}-F8lyyEBzVGe3B=A#tww?5tnBm&8)!vY4=SG7h z;rJ6x(<gkd2`l7@@jYr$#`|Ea5q@or49N<2L12!JdM+I<GadD4d^;FL7m%NDf}>tt zsY3%6JvhKiby@=Mf{I_OP<j+#aSjN;fE;siDi;t%D;bbkbOkxZ!hZ82LqX}v>2)k^ zv!W~@bG72-2Gm6d*?r^q;xm16XW|<vXWU?rYY?(z$-Obv(>ph<*c`rdxoRbR>`^UM zz5k}<o~u6_sS4l3sP{Y=qjhFk3svomIx9h^)XA75ZH6S4Qj@`I3a@*&hMijH91e|g znjU#0Edx}q*p~t`>GsrUSbZy+8h{5jG_>+Y>}q6B<_|}{Of3Y)<;dbjUk8xb%HUZu z4(^z$b9#7#*tIcT6@@K~rte=ZGOJJ*id4RmEp*Q(d;nrLG*fBiL0vXjcp+?eyt9ti zYx!B7N7et(0SnBgrMcZX&sjs?R;LJ1(<mGwYI5+!q<l-Ly6BX5wtfJ0`d;4Db_t_F zZ(dio!~Dw?TbFFGb%)qTfgGnnk_}7KZ=p!ltIyHDZf3Coih;S{fPk@*xET&+_-=Hh zMVy2W*3DC(#^JyF)vg)He$cq2fn?m=8t`Cyiym9&cWcs@3wCQ#Fk!bEeF0&&nhHql z)}?PM?AB!w%Wh4z8yK41_z`tZld36;$^9QH4XAuuubBjI-(lgb1~)2b0Ab{iNd<7E zD{UUOg7|bfQr+Ow#kTK-*ZzwMov+`!(86=Z_DDla-^c-Hn(M%x_pnx;fy1y`rb0YO zlJW<pK`J)MQ%s^V>lJu!0o>Q~U@291;ovwj`atNSut~5)mW9Q+=ZI9V_A&{jULf~* z;fZXh?6o;>``Siz$Dyag<P1xgLvVFOrpi6u)|2IWopRM8?rmL`=;^NUYyDaUhxm4# zp}@&Wb+f6xE#_y02AlV<Z0etWff=DhN?tsj9<s$_0RQA8&)~l=B|tB^SU&~;ZP$Um zc=snJ-rym4_%rx(C6a){da8>L0D_R$vRvK%cJO^6#Gw-clMen1hQ``ILNEXTBNAw& literal 0 HcmV?d00001 diff --git a/test/etags/f-src/entry.strange_suffix b/test/etags/f-src/entry.strange_suffix new file mode 100644 index 00000000000..52b8a2487c6 --- /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 00000000000..ce4069dfa8f --- /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 00000000000..322dafa5054 --- /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 + + +Description +of the Algorithms  (Part 1) +

 The steps involved in simulating a communication channel using +convolutional encoding and Viterbi decoding are as follows: +

    +
  • +Generate the data to be transmitted through +the channel-result is binary data bits
  • + +
  • +Convolutionally encode the data-result is channel +symbols
  • + +
  • +Map the one/zero channel symbols onto an antipodal +baseband signal, producing transmitted channel symbols
  • + +
  • +Add noise to the transmitted channel symbols-result +is received channel symbols
  • + +
  • +Quantize 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)
  • + +
  • +Perform Viterbi decoding on the quantized +received channel symbols-result is again binary data bits
  • + +
  • +Compare the decoded data bits to the transmitted data bits and count the +number of errors.
  • +
+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. +

Generating the Data +

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: rand (). 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. +

Convolutionally +Encoding the Data +

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, +

+

exclusive-or gate symbol

+ +

that implement the following truth-table: +
  +
  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
Input A
+
+
Input B
+
+
Output +

(A xor B)

+
+
0
+
+
0
+
+
0
+
+
0
+
+
1
+
+
1
+
+
1
+
+
0
+
+
1
+
+
1
+
+
1
+
+
0
+
+ +

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. +

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: +

+

modulo-two adder symbol

+ +

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: +
  +
  +
+

+

rate 1/2 K = 3 (7, 5) convolutional encoder

+ +

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. +

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 (1112 and 1012) 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. +

Let's look at an example input data stream, and the corresponding output +data stream: +

Let the input sequence be 0101110010100012. +

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 002. +

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 1002, so the output +is a one. The inputs to the bottom modulo-two adder are 102, +so the output is also a one. So the encoder outputs 112 for +the channel symbols. +

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 0102, so the +output is a one. The inputs to the bottom modulo-two adder are 002, +so the output is zero. So the encoder outputs 102 for the channel +symbols. +

And so on. The timing diagram shown below illustrates the process: +
  +
  +
+

+

timing diagram for rate 1/2 convolutional encoder

+ +


+
+
+

After all of the inputs have been presented to the encoder, the output +sequence will be: +

00 11 10 00 01 10 01 11 11 10 00 10 11 00 112. +

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. +

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. +

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 +112. 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. +

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 21, and the right-hand flip-flop +a binary weight of 20. 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 102 state at the next clock edge. Then, if +the next input bit is zero, the encoder transitions to the 012 +state, otherwise, it transitions to the 112 state. The following +table gives the next state given the current state and the input, with +the states given in binary: +
  +
  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  +
Next +State, if 
+
+
Current State
+
+
Input = 0:
+
+
Input = 1:
+
+
00
+
+
00
+
+
10
+
+
01
+
+
00
+
+
10
+
+
10
+
+
01
+
+
11
+
+
11
+
+
01
+
+
11
+
+ +
  +

The above table is often called a state transition table. We'll refer +to it as the next state table. 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 output table: +
  +
  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
Output +Symbols, if
+
+
Current State
+
+
Input = 0:
+
+
Input = 1:
+
+
00
+
+
00
+
+
11
+
+
01
+
+
11
+
+
00
+
+
10
+
+
10
+
+
01
+
+
11
+
+
01
+
+
10
+
+ +
  +

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(K - 1) rows, and 2k +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. +

Mapping the Channel Symbols +to Signal Levels +

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. +

Adding Noise to the +Transmitted Symbols +

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, Es/N0, +and adding the scaled Gaussian random numbers to the channel symbol values. +

For the uncoded channel, Es/N0 = Eb/N0, +since there is one channel symbol per bit.  However, for the coded +channel, Es/N0 = Eb/N0 + 10log10(k/n).  +For example, for rate 1/2 coding, Es/N0 = Eb/N0 ++ 10log10(1/2) = Eb/N0 - 3.01 dB.  +Similarly, for rate 2/3 coding, Es/N0 = Eb/N0 ++ 10log10(2/3) = Eb/N0 - 1.76 dB. +

The Gaussian random number generator is the only interesting part of +this task. C only provides a uniform random number generator, rand(). +In order to obtain Gaussian random numbers, we take advantage of relationships +between uniform, Rayleigh, and Gaussian distributions: +

Given a uniform random variable U, a Rayleigh random variable R can +be obtained by: +

equation for Rayleigh random deviate given uniform random deviate +

where 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 +

G = R cos U and H = R sin V. +

In the AWGN channel, the signal is corrupted by additive noise, n(t), +which has the power spectrum No/2 watts/Hz. The variance varianceof +this noise is equal to noise density div by two. +If we set the energy per symbol Es equal to 1, then equation relating variance to SNR. +So equation for AWGN st dev given SNR. +

Quantizing the Received +Channel Symbols +

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 +(< 0V = 1, > 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. +

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 equation for AWGN st dev given SNR. +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: +

+

8-level quantizer function plot

+ +

The decision level, D, can be calculated according to the formula equation for quantizer decision level, +where Es/N0 is the energy per symbol to noise density +ratio. (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 bibliography  +for a link to their web pages.) +

Click here to proceed to the description +of the Viterbi decoding algorithm itself... +

Or click on one of the links below to go to the beginning of that section: +

 Introduction +
 Description of the Algorithms  +(Part 2) +
 Simulation Source Code Examples +
 Example Simulation Results +
 Bibliography +
 About Spectrum Applications... +
  +
  +
+
+

+

+ + + diff --git a/test/etags/html-src/index.shtml b/test/etags/html-src/index.shtml new file mode 100644 index 00000000000..24f269f035f --- /dev/null +++ b/test/etags/html-src/index.shtml @@ -0,0 +1,70 @@ + + + + + +

 

+ + +

+ In evidenza +

+ +
    + +
  • Assieme alla Italian Linux + Society sollecitiamo una raccolta di firme per + sostenere il disegno di legge sul + software libero dal titolo "Norme in materia di pluralismo + informatico sulla adozione e la diffusione del software libero e sulla + portabilità dei documenti informatici nella Pubblica + Amministrazione" (XIV Legislatura Atto Senato n. 1188).

    + +

+ +

+ Comunicati e iniziative +

+ +
    + +

  • + Combattiamo il "bollino SIAE". Nel notiziario + tutte le nostre iniziative in proposito. Insieme al LUG Roma abbiamo scritto il Bollino-HOWTO, istruzioni passo passo su come + ottenere l'esenzione dal bollilno SIAE per la distribuzione di + software libero a titolo oneroso o gratuito. Qui il disegno di legge + Semenzato Pieroni sul diritto d'autore. E non è finita. + +

  • + Salutiamo l'arrivo di ADEOS, kernel + real-time per Linux libero da brevetti + +

  • + Comunicato stampa di FSF Europa + ed Assoli in appoggio al disegno di legge per l'uso del software libero + nella pubblica amministrazione + +

  • + Posizione dell'Associazione sulle + attuali campagna anti-"pirateria" + +
+ +

+ Ultime notizie dall'associazione +

+

+ +

+ + + diff --git a/test/etags/html-src/software.html b/test/etags/html-src/software.html new file mode 100644 index 00000000000..4d174c63b07 --- /dev/null +++ b/test/etags/html-src/software.html @@ -0,0 +1,241 @@ + + + + + Francesco Potortì Software Page + + + + + + +
+ [home] + | [FODA/IBEA] + | [GaliLEO] + | [fracas] + | [leasqr]
+ [etags] + | [checkiso] + | [cgrep] + | [debian-bug] +
+ +
+ +

+ CNR logo (png 3k) + Software that I wrote for supporting my research activity +

+ + +
+ MTG +
+ +

The Multi-Application + traffic generator 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 + curses-based frontend and a backend that I wrote. MTG was + used to develop, test and evaluate the FODA/IBEA + satellite access protocol. + +

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 Writing a + Unix device driver 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, here is the code. + + +

+ Fracas +
+ +

The Framed + Channel Access Simulator 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: +

+ +

Everyone is welcome to download the complete sources and a draft manual. There is also a short presentation + (10 slides, 340KB). I will be happy to assist those who would like to + adapt Fracas to their purposes. + + +

+ GaliLEO +
+ +

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 presentation + (10 slides, 500KB). GaliLEO has its + own page and a local mirror. + + + +

+ Leasqr +
+ +

This is a package for Octave, 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 published it. +Since then, the original authors Richard I. Shrager, A.Jutan, Ray Muzic, and +Sean Brennan agreed to put it under the GPL. Matthias Jueschke tested +the program using a non-linear optimisation test suite, +and was satisfied with the results. + +

The most current version of the leasqr is part of the optimization package +at octave-forge. You should refer to the +files leasqr.m, leasqrdemo.m and dfdp.m therein. +The names of the individual files may change in the future. Please let me know +if that happens so I can update this page. + +


+ +

+ small GNU Head (png 3k) + Free software that I wrote for the GNU project or for my personal or work + interest +

+ + +
+ Etags +
+ +

On behalf of the Free + Software Foundation (FSF) I currently volunteer to maintain + etags, a program that can be compiled either as a replacement + of the classic ctags Unix program or as etags, + whose output file format is used by Emacs. The latest (unofficial) version + of etags is available for download (30 KB). + + +

+ checkiso +
+ +

A Unix shell script 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 Debian CD images. + + +

+ cgrep +
+ +

A Unix shell script 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. + + +

+ debian-bug.el +
+ +

An Emacs add-on script in emacs lisp which simplifies + the task of submitting a bug report to the Debian bug tracking system. Part of + the debbugs-el + Debian package. I handed the package over to Peter Galbraith, who is + maintaining it much more actively than I was. You can download its latest version. + + +

+ tcpdump +
+ +

A Unix shell wrapper around + tcpdump which optionally displays the contents of the packets. + + +


+ + + + +
+
The Error Correcting Codes (ECC) Page +
This is a + really good list of free (in various senses) programs for coding and + decoding. I keep a mirror of this page. + +
Forward error correcting codes by Phil Karn +
Phil Karn's optimised really free + codes. + +
+ + + + + + diff --git a/test/etags/html-src/softwarelibero.html b/test/etags/html-src/softwarelibero.html new file mode 100644 index 00000000000..7aa74c55bd0 --- /dev/null +++ b/test/etags/html-src/softwarelibero.html @@ -0,0 +1,313 @@ +
+ +

+ Cos'è il software libero? +

+ +

+ 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. +

+

+ 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. +

+

+ Fu Richard M. Stallman, nei primi anni Ottanta, a formalizzare per la + prima volta il concetto di software libero. La definizione + di Stallman, che da subito assurse al ruolo di definizione per + eccellenza di software libero, assume la forma di quattro principi di + libertà: +

+

+

+
Libertà 0, o libertà fondamentale: +
La libertà di eseguire il programma per qualunque scopo, senza + vincoli sul suo utilizzo. + +
Libertà 1: +
La libertà di studiare il funzionamento del programma, e + di adattarlo alle proprie esigenze. + +
Libertà 2: +
La libertà di redistribuire copie del programma. + +
Libertà 3: +
La libertà di migliorare il programma, e di distribuirne + i miglioramenti. +
+

+

+ Il software distribuito con una licenza che rispetti questi principi è + detto software libero (in inglese free + software). Nel 1984 Richard M. Stallman diede vita al + progetto GNU, con lo scopo di tradurre in pratica il concetto di + software libero, e creò la Free Software Foundation per + dare supporto logistico, legale ed economico al progetto GNU. +

+ +

+ Licenze d'uso di un programma +

+ +

+ La licenza d'uso è 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. +

+

+ Gran parte delle licenze comunemente usate sono proprietarie, + 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. +

+

+ La licenza del progetto GNU, la Licenza Pubblica Generica GNU (GNU GPL), + 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. +

+

+ Con un gioco di parole, il nome dato a questo tipo di protezione + è permesso d'autore (in inglese copyleft): + è 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. +

+

+ La GNU GPL non è unica nel suo genere. Diverse altre + licenze 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 licenza BSD, + 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. +

+

+ 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. +

+ +

+ Sfatiamo alcuni miti +

+ +

+

+ +
Il software libero è gratuito + +
È 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. + +
Il software gratuito è libero + +
È falso. Molti programmi proprietari vengono distribuiti + gratuitamente. + +
Il software libero è privo di copyright + +
È 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). + +
L'introduzione del software libero nella scuola e nella pubblica + amministrazione, ma anche nei paesi poveri, ridurrebbe i costi + relativi al software + +
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. + + + +
+

+ +

+ Il movimento open source +

+ +

+ 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 vantaggi + pratici, come la facilità di adattamento, l'affidabilità, la + sicurezza, la conformità agli standard, l'indipendenza dai singoli + fornitori. A tal fine scrissero la Open Source + Definition, il documento fondamentale del movimento open source. +

+

+ 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. +

+

+ 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. +

+ +

+ Impatto pratico del software libero +

+ +

+ La rilevanza + economica del software libero è ancora molto ridotta, ma è in + fortissima crescita ormai da alcuni anni, e tutto consente di supporre + che tale crescita continui + nel prossimo futuro, anche grazie ai vantaggi + tecnici ed economici del software libero. +

+

+ 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. +

+

+ 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. +

+

+ 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à. +

+

+ È 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. +

+ +

+ scritto da Francesco Potortì per l'Associazione Software + Libero +

+
+

+ Copyright © 2002 Francesco Potortì +
+ Ultima versione ipertestuale disponibile su <http://softwarelibero.it/documentazione/softwarelibero.html> +

+

+ La copia letterale e integrale e la distribuzione sono permesse con + qualsiasi mezzo, a condizione che questa nota sia riprodotta. +

+ + + +
diff --git a/test/etags/java-src/AWTEMul.java b/test/etags/java-src/AWTEMul.java new file mode 100644 index 00000000000..c66f16ebee5 --- /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: + * + *

+ * 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());
+ *         }         
+ * }
+ * 
+ * + * @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 00000000000..dc07fb2f3db --- /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 00000000000..ccc9bf159e4 --- /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. + *

+ * The SecurityManager class contains many methods with + * names that begin with the word check. 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: + *

+ *     SecurityManager security = System.getSecurityManager();
+ *     if (security != null) {
+ *         security.checkXXX(argument,  . . . );
+ *     }
+ * 
+ *

+ * 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 SecurityException if the operation is not + * permitted. The only exception to this convention is + * checkTopLevelWindow, which returns a + * boolean value. + *

+ * The current security manager is set by the + * setSecurityManager method in class + * System. The current security manager is obtained + * by the getSecurityManager method. + *

+ * The default implementation of each of the + * checkXXX methods is to assume that the caller + * does not 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 true if there is a security check in + * progress; false 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 inCheck field. This field should + * contain true if a security check is in progress; + * false otherwise. + * @see java.lang.SecurityManager#inCheck + * @since JDK1.0 + */ + public boolean getInCheck() { + return inCheck; + } + + /** + * Constructs a new SecurityManager. 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. + *

+ * The length of the array is the number of methods on the execution + * stack. The element at index 0 is the class of the + * currently executing method, the element at index 1 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 null 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; + * -1 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 + * -1 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 true if a method from a class with the specified + * name is on the execution stack; false otherwise. + * @since JDK1.0 + */ + protected boolean inClass(String name) { + return classDepth(name) >= 0; + } + + /** + * Tests if the current ClassLoader is equal to + * null. + * + * @return true 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 checkConnect method and by the + * two-argument checkRead method. + *

+ * 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 SecurityException if the + * calling thread is not allowed to create a new class loader. + *

+ * The checkCreateClassLoader method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException if the + * calling thread is not allowed to modify the thread argument. + *

+ * This method is invoked for the current security manager by the + * stop, suspend, resume, + * setPriority, setName, and + * setDaemon methods of class Thread. + *

+ * The checkAccess method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException if the + * calling thread is not allowed to modify the thread group argument. + *

+ * This method is invoked for the current security manager when a + * new child thread or child thread group is created, and by the + * setDaemon, setMaxPriority, + * stop, suspend, resume, and + * destroy methods of class ThreadGroup. + *

+ * The checkAccess method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException if the + * calling thread is not allowed to cause the Java Virtual Machine to + * halt with the specified status code. + *

+ * This method is invoked for the current security manager by the + * exit method of class Runtime. A status + * of 0 indicates success; other values indicate various + * errors. + *

+ * The checkExit method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException if the + * calling thread is not allowed to create a subprocss. + *

+ * This method is invoked for the current security manager by the + * exec methods of class Runtime. + *

+ * The checkExec method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException 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. + *

+ * This method is invoked for the current security manager by + * methods load and loadLibrary of class + * Runtime. + *

+ * The checkLink method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException if the + * calling thread is not allowed to read from the specified file + * descriptor. + *

+ * The checkRead method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException if the + * calling thread is not allowed to read the file specified by the + * string argument. + *

+ * The checkRead method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException 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 + * getSecurityContext. + *

+ * The checkRead method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException if the + * calling thread is not allowed to write to the specified file + * descriptor. + *

+ * The checkWrite method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException if the + * calling thread is not allowed to write to the file specified by + * the string argument. + *

+ * The checkWrite method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException if the + * calling thread is not allowed to delete the specified file. + *

+ * This method is invoked for the current security manager by the + * delete method of class File. + *

+ * The checkDelete method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException if the + * calling thread is not allowed to open a socket connection to the + * specified host and port number. + *

+ * A port number of -1 indicates that the calling + * method is attempting to determine the IP address of the specified + * host name. + *

+ * The checkConnect method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 + * host and port. + * @since JDK1.0 + */ + public void checkConnect(String host, int port) { + throw new SecurityException(); + } + + /** + * Throws a SecurityException if the + * specified security context is not allowed to open a socket + * connection to the specified host and port number. + *

+ * A port number of -1 indicates that the calling + * method is attempting to determine the IP address of the specified + * host name. + *

+ * The checkConnect method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 host and port. + * @see java.lang.SecurityManager#getSecurityContext() + * @since JDK1.0 + */ + public void checkConnect(String host, int port, Object context) { + throw new SecurityException(); + } + + /** + * Throws a SecurityException if the + * calling thread is not allowed to wait for a connection request on + * the specified local port number. + *

+ * The checkListen method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException if the + * calling thread is not permitted to accept a socket connection from + * the specified host and port number. + *

+ * This method is invoked for the current security manager by the + * accept method of class ServerSocket. + *

+ * The checkAccept method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException if the + * calling thread is not allowed to access or modify the system + * properties. + *

+ * This method is used by the getProperties and + * setProperties methods of class System. + *

+ * The checkPropertiesAccess method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException if the + * calling thread is not allowed to access the system property with + * the specified key name. + *

+ * This method is used by the getProperty method of + * class System. + *

+ * The checkPropertiesAccess method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 false if the calling + * thread is not trusted to bring up the top-level window indicated + * by the window 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 + * true, then the window can be shown without any + * special restrictions. + *

+ * See class Window for more information on trusted and + * untrusted windows. + *

+ * The checkSetFactory method for class + * SecurityManager always returns false. + * + * @param window the new window that is being created. + * @return true if the caller is trusted to put up + * top-level windows; false 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 SecurityException if the + * calling thread is not allowed to access the package specified by + * the argument. + *

+ * This method is used by the loadClass method of class + * loaders. + *

+ * The checkPackageAccess method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException if the + * calling thread is not allowed to define classes in the package + * specified by the argument. + *

+ * This method is used by the loadClass method of some + * class loaders. + *

+ * The checkPackageDefinition method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 SecurityException if the + * calling thread is not allowed to set the socket factory used by + * ServerSocket or Socket, or the stream + * handler factory used by URL. + *

+ * The checkSetFactory method for class + * SecurityManager always throws a + * SecurityException. + * + * @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 00000000000..53564428d15 --- /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 & 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 00000000000..707c2fcac45 --- /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. + *

+ * 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. + *

+ * The checkAccess 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 + * null. + * @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 null. + * @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 true if this thread group is a daemon thread group; + * false 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. + *

+ * First, the checkAccess method of this thread group is + * called with no arguments; this may result in a security exception. + *

+ * A daemon thread group is automatically destroyed when its last + * thread is stopped or its last thread group is destroyed. + * + * @param daemon if true, 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. + *

+ * First, the checkAccess method of this thread group is + * called with no arguments; this may result in a security exception. + *

+ * 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 true if this thread group is the thread group + * argument or one of its ancestor thread groups; + * false 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. + *

+ * If there is a security manager, its checkAccess method + * is called with this thread group as its argument. This may result + * in throwing a SecurityException. + * + * @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. + *

+ * An application should use the activeCount 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 recurse flag is + * true, 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. + *

+ * An application should use the activeCount 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. + *

+ * An application should use the activeGroupCount + * 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 recurse flag is + * true, references to all active subgroups of the + * subgroups and so forth are also included. + *

+ * An application should use the activeGroupCount + * 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. + *

+ * First, the checkAccess method of this thread group is + * called with no arguments; this may result in a security exception. + *

+ * This method then calls the stop 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. + *

+ * First, the checkAccess method of this thread group is + * called with no arguments; this may result in a security exception. + *

+ * This method then calls the suspend 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. + *

+ * First, the checkAccess method of this thread group is + * called with no arguments; this may result in a security exception. + *

+ * This method then calls the resume 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. + *

+ * The uncaughtException method of + * ThreadGroup does the following: + *

    + *
  • If this thread group has a parent thread group, the + * uncaughtException method of that parent is called + * with the same two arguments. + *
  • Otherwise, this method determines if the Throwable + * argument is an instance of ThreadDeath. If so, nothing + * special is done. Otherwise, the Throwable's + * printStackTrace method is called to print a stack + * backtrace to the standard error stream. + *
+ *

+ * Applications can override this method in subclasses of + * ThreadGroup 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 00000000000..c316b6f26a0 --- /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 00000000000..daf605d0016 --- /dev/null +++ b/test/etags/make-src/Makefile @@ -0,0 +1,226 @@ +LATEST=17 +RELEASELIST=pot@gnu.org xemacs-review@xemacs.org jcwren@jcwren.com sxemacs-devel@sxemacs.org + +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 --regex=@regexfile +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='--regex=@regexfile --no-members' ${LATEST}ediff + @-$(MAKE) OPTIONS='nonexistent --members --declarations --regex=@regexfile' ${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='--regex=@regexfile --no-members' ${LATEST}ediff + @$(MAKE) OPTIONS='nonexistent --members --declarations --regex=@regexfile' ${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 pot@gnu.org ${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$* --regex=@regexfile} -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 $@ --regex=@regexfile ${ARGS} + +CTAGS%: ctags% ${infiles} + ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=@regexfile ${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 00000000000..0e3643c8281 --- /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 +#import + +#include + +#import "Subprocess.h" + +#define NUMSTATS 4 +#define TYPESTOSTAT "bom", "info", "sizes", "tiff" + +@interface 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; + +@end // 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 00000000000..41cc876850f --- /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 +#include +#include + +// 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) + + +@implementation 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, "<>"); + // 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; +} + +@end + +/*====================================================================== + * 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 00000000000..7e586a16a12 --- /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 +#import + +/* + 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 + +@interface 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; + +@end diff --git a/test/etags/objc-src/Subprocess.m b/test/etags/objc-src/Subprocess.m new file mode 100644 index 00000000000..2d8d586507e --- /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 // needed to compile under Release 1.0 +#import +#import +#import +#import + +#define PTY_TEMPLATE "/dev/pty??" +#define PTY_LENGTH 11 + +static void showError(); + + +/*========================================================== + * + * Private Instance Methods + * + *==========================================================*/ + +@interface Subprocess(Private) +- childDidExit; +- fdHandler:(int)theFd; +@end + +@implementation 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; +} + +@end + + +/*========================================================== + * + * 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; +} + + +@implementation 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 + +@interface 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; + +@end diff --git a/test/etags/objcpp-src/SimpleCalc.M b/test/etags/objcpp-src/SimpleCalc.M new file mode 100644 index 00000000000..34846a7aceb --- /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 +#import +#import +#import +} + +extern "C" +{ +#import +#import +#import +#import +} + +// 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" + +@implementation 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; +} + +@end diff --git a/test/etags/pas-src/common.pas b/test/etags/pas-src/common.pas new file mode 100644 index 00000000000..ec8e80c4a7a --- /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 *) +(* /*#*/ or /*#*/ *) +(* =G pagename xcoord ycoord *) +(* T pagename xcoord ycoord *) +(* M diagramtype diagramname pagename xcoord ycoord *) +(* D databankname *) +(* =INCLUDE 'filename' *) +(* InfoType will contain the type of the comment *) +(* Info will contain or the filename in 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 00000000000..de150a72b8f --- /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 " +CYSTIC-L FAQ Table of Contents + + + +

CYSTIC-L Frequently Asked Questions

+

Knowledge Is Power

+"; + next; } + + if ($line =~ /^\s*~ Knowledge Is Power ~$/) + { next; } + + ### Table of contents + if ($line =~ /^\s*~ FAQ Table of Contents ~$/) + { read_toc(); + print "
Info-Zone CF-WEB\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 "$line\n

$line

\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 "$line\n

$line

\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 "

", section_name($line), "

\n"; + next; } + + if ($line =~ s/^>?-\s+//) + { $line =~ s/^>//; # sometimes the > follows the itemization + if (!defined($subsubsection)) + { $subsubsection = 1; } + else + { $subsubsection++; } + print "

", section_name($line), "

\n"; + next; } + + ### A paragraph of ordinary text + if ($line !~ /^\s*$/) + { print "

$line"; + while (defined($line = <>) && ($line ne "\n")) + { print $line; } + print "

\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

\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 "

    \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 = "
      \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 = "
        \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 = "
          \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 = "
            \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 = "
              \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 = "
            \n"; + print $entry; + $this_file_toc .= $entry; + $subsubsection = undef; } } + +sub finish_subsections () +{ finish_subsubsections(); + if (defined($subsection)) + { my $entry = " \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 = "
        \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 "
    \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 "$text"; } + +sub section_name ($) +{ my ($text) = @_; + return "$text"; } + +sub toc_line ($) +{ return "
  1. " . section_href($line) . ($new ? " $new_tag" : "") . "\n"; } + +sub file_end () +{ print "\n\n
    \n" + . (($file_index < $#output_files) + ? "Next " : "") + . (($file_index > 0) + ? "Previous " : "") + . "FAQ Info-Zone CF-WEB\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 00000000000..51b66728f1e --- /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 00000000000..2bbbb76a617 --- /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 +# 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"; +@assocs = ( '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' } = "$me\@$hostname"; +$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!!!) + +@boolean_values = ( '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 ); + +@regexp_values = ( '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, jkn@softavenue.fi + 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 = ; + 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( ); + $_ = &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/, ); + $_ = &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, adam@usa.net + $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" + &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, iml@debian.org, 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" + 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 2>&1"; + print "Password for $user: "; + + $pass = ; + print "\n"; + chop( $pass ); + + system "stty echo /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, dsb@smart.net. + $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 00000000000..be9f09c02d4 --- /dev/null +++ b/test/etags/perl-src/yagrip.pl @@ -0,0 +1,54 @@ +#Yet Another Getopt Routine In Perl +# jgreely@cis.ohio-state.edu, 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 00000000000..65738134593 --- /dev/null +++ b/test/etags/php-src/lce_functions.php @@ -0,0 +1,699 @@ +' . $value . '"
    '; + $result = AD::validate(trim($value)); + //return $result; + if($result[0]) + { + $lines = explode("\n", ereg_replace("\r", "", $result[1])); + //$lines = explode("\n", $result[1]); + /* print "
    ";
    +	   print_r($lines);
    +	   print "
    ";*/ + $res = array(); + for($i = 0; $i < count($lines); $i++) + { + if(trim($lines[$i]) != "") + $res[] = $lines[$i]; + } + $result[1] = join("\n", $res); + /* print "
    ";
    +	   print_r($result[1]);
    +	   print "
    ";*/ + + $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
    "; + $state_ret = $this->$state($line, $class); + } + //print "state_ret = $state_ret
    "; + } + 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
    "; + } + } + + 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] . "
    "; + $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
    "; + $lang_suffix = $LC_MESSAGES; + } + else if(isset($LC_ALL)) + { + //print "LC_ALL
    "; + $lang_suffix = $LC_ALL; + } + else if(isset($LANG)) + { + //print "LANG
    "; + $lang_suffix = $LANG; + } + else + { + //print "LCE_LANG
    "; + $lang_suffix = $LCE_LANG; + } + + //print "LangSuffix: $lang_suffix \n"; + //print "D_Path: " . fileJoin($d_path, $lang_suffix, "LC_MESSAGES", $d_name . $LCE_PO_SUFFIX) . "
    "; + // 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 "Domain: $por->domain
    "; + } + } + } + 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 "
    \n" . $text . "\n
    "; + } + else + { + return ""; + } + } +} +/* + ;;; 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 00000000000..9893839b493 --- /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 00000000000..1d15e4ad9f6 --- /dev/null +++ b/test/etags/php-src/sendmail.php @@ -0,0 +1,527 @@ + 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("^[^@ ]+@[^@ ]+\.[^@ ]+$", $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 00000000000..f0ee6b41b12 --- /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: carp+@cmu.edu +% 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 +% ========================================================================= + +% ::= +% | +% | @ +% | ^ + +% ::= var() + +% ::= con() + +% ::= tree(,,)>) +% | ass(,,) +% | leaf() + +% ::= + +% ::= : + +% ::= +% | / | \ +% | scop(,) +% | - + +% ::= bas() + +% ::= )> +% )> +% )> + +% ::= ==> . + +% ::= empty . + +% ::= ===> )> if . + +% ::= + +% ::= + +% ::= edge(, , ) + +% 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:, -MExp:) +% ---------------------------------------------------------------------- +% 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(M@N,MExp@NExp):- + expandmng(M,MExp), + expandmng(N,NExp). + + +% normalize(+M:, -MNorm:) +% ---------------------------------------------------------------------- +% 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:, -MFr:) +% ---------------------------------------------------------------------- +% 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(M@N,MFr@NFr):- + 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:, +X:, +N:, -L:) +% ---------------------------------------------------------------------- +% L = M[X |--> N] +% ---------------------------------------------------------------------- +subst(var(Y),var(X),M,N):- + ( X == Y + -> N=M + ; N = var(Y) + ). +subst(con(C),_,_,con(C)). +subst(M@L,X,N,M2@L2):- + 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:, -N:) +% ---------------------------------------------------------------------- +% 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:, -N:) +% ---------------------------------------------------------------------- +% 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(M@N,M2@N):- + reduce_subterm(M,M2). +reduce_subterm(M@N,M@N2):- + reduce_subterm(N,N2). +reduce_subterm(X^M,X^N):- + reduce_subterm(M,N). + +% reduce(+M:, -N:) +% ---------------------------------------------------------------------- +% 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^(M@Y),M):- % eta reduction + X == Y, + \+ ( free_var(M,Z), + Z == X ). + +% free_var(+M:, -X:) +% ---------------------------------------------------------------------- +% X is free in M +% ---------------------------------------------------------------------- +free_var(var(V),var(V)). +free_var(M@N,X):- + ( free_var(M,X) + ; free_var(N,X) + ). +free_var(X^M,Y):- + free_var(M,Y), + Y \== X. + +% free_for(+N:, +X:, +M:) +% ---------------------------------------------------------------------- +% M is free for X in N +% ---------------------------------------------------------------------- +free_for(var(_),_,_). +free_for(con(_),_,_). +free_for(L@K,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:) +% ---------------------------------------------------------------------- +% 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:, ?Syn:, ?Sem:) +% ---------------------------------------------------------------------- +% word W has syntactic category Syn and smenantic term Sem +% ---------------------------------------------------------------------- +lex(W,SynOut,Sem):- + W ==> Syn : Sem, + expandsyn(Syn,SynOut). + +% expandsyn(+SynIn:, ?SynOut:) +% ---------------------------------------------------------------------- +% 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 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 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:+)>, +Cat:, +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:+)>, 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:+)>, WsOut:-)>) +% ---------------------------------------------------------------------- +% 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:+)>, Right:+, Left:-) +% ---------------------------------------------------------------------- +% 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:, +Left:, +Right:) +% ---------------------------------------------------------------------- +% 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('
    '). + +% mapsyn(+SynCat:, -SynCatOut:, Right:+, 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:+, Cats:+, Right:-) +% ---------------------------------------------------------------------- +% 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:?, Right:?, Cat:?) (dynamic) +% ---------------------------------------------------------------------- +% There is an edge with category Cat from Left to Right; +% ---------------------------------------------------------------------- + +% normalize_tree(+TreeIn:, -TreeOut:) +% ---------------------------------------------------------------------- +% 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:, -TreeOut:) +% ---------------------------------------------------------------------- +% 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()> +% ---------------------------------------------------------------------- +% C can be composed of Cs; may be conditions + +% / elimination +% ------------- +cat(A, Alpha@Beta, Ass3, Qs3, tree(fe,A:Alpha@Beta,[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, Alpha@Beta, Ass3, Qs3, tree(be,A:Alpha@Beta,[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)@Alpha1P@Alpha3P, [], [], +% tree(nbc,np(pl,-):con(union)@Alpha1P@Alpha3P,[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:, +T:) +% ---------------------------------------------------------------------- +% 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,Alpha@Sem1@Sem2). +make_coor(n(_),Alpha,Sem1,Sem2,var(X)^Alpha@(Sem1@var(X))@(Sem2@var(X))). +make_coor(A/_,Alpha,Sem1,Sem2,var(X)^Sem):- + make_coor(A,Alpha,Sem1@var(X),Sem2@var(X),Sem). +make_coor(_\A,Alpha,Sem1,Sem2,var(X)^Sem):- + make_coor(A,Alpha,Sem1@var(X),Sem2@var(X),Sem). +make_coor(A-_,Alpha,Sem1,Sem2,var(X)^Sem):- + make_coor(A,Alpha,Sem1@var(X),Sem2@var(X),Sem). +make_coor(q(_,_,A),Alpha,Sem1,Sem2,var(X)^Sem):- + make_coor(A,Alpha,Sem1@var(X),Sem2@var(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('

    '), write(Arg), nl, ttyflush, + ( tokenizeatom(Arg,TokenList) + % ,write('

    '), write(TokenList), ttyflush + ; write('Input '), write(Arg), write(' could not be tokenized'), ttyflush, halt + ), + ( parse_cgi(TokenList,KeyVals) + % , write('

    '), 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:, -Tokens:)>) +% ---------------------------------------------------------------------- +% breaks input Input into list of tokens; +% ---------------------------------------------------------------------- +tokenizeatom(Atom,Ws):- + name(Atom,Cs), + tokenize(Cs,Xs-Xs,Ws). + +% tokenize(+Chars:)>, +CharsSoFar:)>, +% -Tokens:)>) +% ---------------------------------------------------------------------- +% 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 is the name of an operator character +% ---------------------------------------------------------------------- +isoperator(Char):- + name(Op,[Char]), + isoptab(Op). + +isoptab('%'). +isoptab('+'). +isoptab('&'). +isoptab('='). + +% specialsymbol(+C1:, +C2:, -S:) +% ---------------------------------------------------------------------- +% 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:)>, -KeyVals:)>) +% ---------------------------------------------------------------------- +% 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:)>) +% ---------------------------------------------------------------------- +% 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('

    '), write(Ws), nl, + nl, write('PARSE RESULTS FOR: '), + writelist(Ws), + write('

    '), 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:

    , ?Syn:, +Ws:)>) +% ---------------------------------------------------------------------- +% 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('
    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).
    '), nl, + actout(OutForm,Trees3) + ). + + + +% actout(+Form:, +Ts:)>) +% ---------------------------------------------------------------------- +% return output for list of trees Ts in form Form +% ---------------------------------------------------------------------- +actout('Text',Trees):- + write('
    '), nl,  
    +  texttreelist(Trees),
    +  nl, write('
    '). +actout('Prawitz',Ts):- + htmltreelist(Ts). +actout('Fitch',Ts):- + fitchtreelist(Ts). + + + +texttreelist([]). +texttreelist([T|Ts]):- + pp_tree(T), + nl, write('
    '), nl, + texttreelist(Ts). + +htmltreelist([]). +htmltreelist([T|Ts]):- + pp_html_table_tree(T), + nl, write('
    '), nl, + htmltreelist(Ts). + +fitchtreelist([]). +fitchtreelist([T|Ts]):- + pp_html_table_fitch_tree(T), + nl, write('
    '), nl, + fitchtreelist(Ts). + + +% PRETTY PRINTING ROUTINES +% ====================================================================== + +% pp_html_table_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('

    '), + pp_html_tree(T). + +% pp_html_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(']'), write(N), write(''). +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(''), nl, + write(' + + + '), + nl, + write(' + '), + nl, + write('
    -Nil
    '), + pp_cat(Syn:Sem), + write('
    '). +pp_html_tree(tree(Rule,Root,SubTrees)):- + nl, write(''), nl, + write(''), nl, + pp_html_trees(SubTrees,0,N), + nl, + ( Rule = lex + -> true + ; write('') + ), + write(''), + write(''), + nl, write('
    '), pp_rule(Rule), write('
    '), + pp_cat(Root), + write('
    '). + +% pp_html_trees(+Trees: )>,+N:,-M:) +% ---------------------------------------------------------------------- +% 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(''), pp_html_tree(T), + write(''), + K is N+1, + pp_html_trees(Ts,K,M). +pp_html_trees([],N,N). + +% pp_html_table_fitch_tree(+T:) +% ---------------------------------------------------------------------- +% T is numbered and output as a table Fitch-style +% ---------------------------------------------------------------------- +pp_html_table_fitch_tree(T):- + numbervars(T), + nl, write(''), + pp_html_fitch_tree(T,1,_,_,_,[],_), + nl, write('
    '). + +% pp_html_fitch_tree(+Tree:, +Start:, -Next:, -Me:, +% +Exp:, +% +AssIn:)>, -AssOut:)>) +% ---------------------------------------------------------------------- +% 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 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(''), + write(M), write(''), + map_word(Words,Exp), pp_exp(Exp), + write('-'), pp_cat(Root), + write(''), write('Der'), write(''), nl, + N is M+1. +pp_html_fitch_tree(tree(lex,Root,[leaf(Word)]),M,N,M,Word,Ass,Ass):- + !, nl, write(''), + write(M), write(''), pp_exp(Word), write('-'), pp_cat(Root), + write(''), write('Lex'), write(''), 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(''), + write(L), write(''), pp_exp(Exp1+Exp2), write('-'), pp_cat(Root), + write(''), write('E/ '), write((Source1,Source2)), write(''), 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(''), + write(L), write(''), pp_exp(Exp1+Exp2), write('-'), pp_cat(Root), + write(''), write('E\\ '), write((Source1,Source2)), write(''), 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(''), + write(Me), write(''), pp_exp(Exp), write('-'), pp_cat(Root), + write(''), write('q I '), write(Source), write(''), 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(''), + write(L), write(''), pp_exp(Exp1+Exp2+Exp3), write('-'), pp_cat(Root), + write(''), write('E co '), write((Source1,Source2,Source3)), write(''), 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(''), + write(''), + pp_html_fitch_tree(T,K,N,L, Exp, [ass(M,X)|AssIn],AssOut), + write(''), + write('
    '), write(M), write(''), + X = '$VAR'(Num), + cat_atoms(Num,'',ExpMid), + cat_atoms('e',ExpMid,ExpNum), + pp_exp(ExpNum), write(' - '), + pp_cat(C2:var(X)), write(''), write('Assume
    '), write(N), write(''), + removeexp(ExpNum,Exp,ExpNew), + pp_exp(ExpNew), write(' - '), pp_cat(C1/C2:var(X)^Sem), write(''), + write('/I '), write((M,L)), write('
    '), + 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(''), + write(''), + pp_html_fitch_tree(T,K,N,L, Exp, [ass(M,X)|AssIn],AssOut), + write(''), + write('
    '), write(M), write(''), + X = '$VAR'(Num), + cat_atoms(Num,'',ExpMid), + cat_atoms('e',ExpMid,ExpNum), + pp_exp(ExpNum), write(' - '), + pp_cat(C2:var(X)), write(''), write('Assume
    '), write(N), write(''), + removeexp(ExpNum,Exp,ExpNew), + pp_exp(ExpNew), write(' - '), pp_cat(C2\C1:var(X)^Sem), write(''), + write('/I '), write((M,L)), write('
    '), + 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(''), + write(''), + pp_html_fitch_tree(T,K,N,L,Exp, [ass(M,X)|AssIn],AssOut), + write(''), + write('
    '), write(M), write(''), + X = '$VAR'(Num), + cat_atoms(Num,'',ExpMid), + cat_atoms('e',ExpMid,ExpNum), + pp_exp(ExpNum), write(' - '), + pp_cat(C2:var(X)), write(''), write('Assume
    '), write(N), write(''), + splitexp(ExpNum,Exp,ExpNew), + pp_exp(ExpNew), write(' - '), + pp_cat((C1-C2):var(X)^Sem), write(''), + write('I- '), write((M,L)), write('
    '), + 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(''), write(P), write(''), +% pp_exp(Exp), write(' - '), +% pp_cat(A:(Q@(X^Alpha))), write(''), +% write(' '). +pp_html_fitch_tree(empty(Syn,Sem),M,N,M,[],Ass,Ass):- + !, nl, write(''), + write(M), write(''), write('NIL'), write(' '), pp_cat(Syn:Sem), + write(''), write('Empty'), write(''), 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,'',ExpMid), + cat_atoms('e',ExpMid,Exp). + +% removexp(+ExpRem:,+Exp:,-ExpOut:) +% ---------------------------------------------------------------------- +% 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:, -ExpOut:) +% ---------------------------------------------------------------------- +% 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:) +% ---------------------------------------------------------------------- +% 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 T is output in indented list notation; first number +% ---------------------------------------------------------------------- +pp_tree(T):- + numbervars(T), + pp_tree(T,0). + +% pp_tree(+T:, +Col:) +% ---------------------------------------------------------------------- +% 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(''), write(N), write(''). +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:)>, +Col:) +% ---------------------------------------------------------------------- +% 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:)>) +% ---------------------------------------------------------------------- +% 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(''), write(W), write(''). + +% pp_word_list_rest(+Ws:)>) +% ---------------------------------------------------------------------- +% 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:) +% ---------------------------------------------------------------------- +% pretty print category Cat +% ---------------------------------------------------------------------- +pp_cat(Syn:Sem):- + pp_lam(Sem), write(' : '), pp_syn(Syn). + +% pp_syn(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:) +% ---------------------------------------------------------------------- +% 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:) +% ---------------------------------------------------------------------- +% category Cat is pretty printed with surrounding parens +% ---------------------------------------------------------------------- +pp_paren(C):- + write('('), pp_syn(C), write(')'). + +% pp_syn_back(+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:) +% ---------------------------------------------------------------------- +% the basic category BasCat is pretty printed +% ---------------------------------------------------------------------- +pp_bas_cat(Cat):- + writecat(Cat,Atom,Subs,Sups), + write(Atom), + writesubs(Subs), + writesups(Sups). + +% writecat(+BasCat:,-Root:,-Subs:,-Sups:) +% ---------------------------------------------------------------------- +% 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 is output as a subscript +% ---------------------------------------------------------------------- +writesubs([]). +writesubs([X|Xs]):- + write(''), + writelistsubs(Xs,X), + write(''). + +% writesups(+List:) +% ---------------------------------------------------------------------- +% List is output as a superscript +% ---------------------------------------------------------------------- +writesups([]). +writesups([X|Xs]):- + write(''), + writelistsubs(Xs,X), + write(''). + +% writelistsubs(+Xs:, +X:) +% ---------------------------------------------------------------------- +% 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:) +% ---------------------------------------------------------------------- +% lambda term Term is pretty printed +% ---------------------------------------------------------------------- +pp_lam(Var^Alpha):- + !, pp_lam(Var), write('. '), pp_lam(Alpha). +pp_lam(con(and)@Alpha@Beta):- + !, pp_lam_paren(Alpha), write(' & '), pp_lam_paren(Beta). +pp_lam(con(or)@Alpha@Beta):- + !, pp_lam_paren(Alpha), write(' or '), pp_lam_paren(Beta). +pp_lam(con(not)@Alpha):- + !, write(' ¬ '), write('('), pp_lam_paren(Alpha), write(')'). +pp_lam(Alpha@Beta):- + !, pp_lam_bracket(Alpha), + write('('), + pp_lam(Beta), + write(')'). +pp_lam(var('$VAR'(N))):- + !, write(''), write(x), write(''), write(N), write(''). +pp_lam(con(Con)):- + write(''), write(Con), write(''). + +pp_lam_bracket(A^B):- + !, write('('), pp_lam(A^B), write(')'). +pp_lam_bracket(A):- + pp_lam(A). + +% pp_lam_paren(+Term:) +% ---------------------------------------------------------------------- +% lambda term Term is pretty printed +% ---------------------------------------------------------------------- +pp_lam_paren(Var^Alpha):- + !, pp_lam(Var), write('. '), pp_lam(Alpha). +pp_lam_paren(con(and)@Alpha@Beta):- + !, write('('), pp_lam_paren(Alpha), write(' & '), pp_lam_paren(Beta), write(')'). +pp_lam_paren(con(or)@Alpha@Beta):- + !, write('('), pp_lam_paren(Alpha), write(' or '), pp_lam_paren(Beta), write(')'). +pp_lam_paren(con(not)@Alpha):- + !, write(' ¬ '), write('('), pp_lam_paren(Alpha), write(')'). +pp_lam_paren(Alpha@Beta):- + !, pp_lam(Alpha), + write('('), + pp_lam(Beta), + write(')'). +pp_lam_paren(var('$VAR'(N))):- + !, write(''), write(x), write(''), write(N), write(''). +pp_lam_paren(con(Con)):- + write(''), write(Con), write(''). + +% pp_rule(+Rule:) +% ---------------------------------------------------------------------- +% rule Rule is pretty printed +% ---------------------------------------------------------------------- +pp_rule(fe):-write('/E'). +pp_rule(be):-write('\\E'). +pp_rule(fi('$VAR'(N))):-write('/I'), write(N), write(''). +pp_rule(bi('$VAR'(N))):-write('\\I'), write(N), write(''). +pp_rule(gi('$VAR'(N))):-write('-I'), write(N), write(''). +pp_rule(qqpush('$VAR'(N))):-write('qE'), write(N), write(''). +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('Natural Deduction CG Parser LEXICON

    '), nl, nl, + setof(lexe(W,Syn:Sem),lexentry(W,Syn,Sem),Ws), + !, writebreaklex(Ws), + nl, write(''), 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('
    '), nl, + writebreaklex(Ws,W2). + +write_lex(File):- + tell(File), + write('Natural Deduction CG Parser LEXICON

    '), nl, + setof(W,C^(W==>C),Ws), + !, writebreak(Ws), + nl, write('
    '), nl, + told. + +writebreak([]). +writebreak([W|Ws]):- + writebreak(Ws,W). + +writebreak([],W):- + write(W), nl. +writebreak([W2|Ws],W):- + write(W), write('
    '), 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 00000000000..7192129fdce --- /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 00000000000..ad2244f1dc0 --- /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 { 8 1 setpattern } put +fillprocs 11 { 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 { 8 1 setpattern } put +fillprocs 25 { 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 { 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 ospf@trantor) 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: jmoy@proteon.com) 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 00000000000..68aa29abcfd --- /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('', self.handleNew) + newwin.bind('', 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('', self.handleList); + listwidget.bind('', 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 00000000000..07be37187d7 --- /dev/null +++ b/test/etags/tex-src/gzip.texi @@ -0,0 +1,479 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename gzip.info +@settitle Gzip User's Manual +@finalout +@setchapternewpage odd +@c %**end of header + +@ifinfo +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. + +@ignore +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). + +@end 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. +@end ifinfo + +@titlepage +@title gzip +@subtitle The data compression program +@subtitle Edition 1.2.4, for Gzip Version 1.2.4 +@subtitle July 1993 +@author by Jean-loup Gailly + +@page +@vskip 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. +@end titlepage + +@node Top, , , (dir) + +@ifinfo +This file documents the @code{gzip} command to compress files. +@end ifinfo + +@menu +* 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. +@end menu + +@node Copying, Overview, , Top +@include gpl.texinfo + +@node Overview, Sample, Copying, Top +@chapter Overview +@cindex overview + +@code{gzip} 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, +@samp{z} 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 +@samp{-N} 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. + +@code{gunzip} takes a list of files on its command line and replaces +each file whose name ends with @samp{.gz}, @samp{.z}, @samp{.Z}, +@samp{-gz}, @samp{-z} or @samp{_z} and which begins with the correct +magic number with an uncompressed file without the original extension. +@code{gunzip} also recognizes the special extensions @samp{.tgz} and +@samp{.taz} 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. + +@code{gunzip} can currently decompress files created by @code{gzip}, +@code{zip}, @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}, +@code{gunzip} 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}. + +@code{zcat} 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. + +@code{gzip} 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. + +@node Sample, Invoking gzip, Overview, Top +@chapter Sample Output +@cindex sample + +Here are some realistic examples of running @code{gzip}. + +This is the output of the command @samp{gzip -h}: + +@example +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. +@end example + +This is the output of the command @samp{gzip -v texinfo.tex}: + +@example +texinfo.tex: 71.6% -- replaced with texinfo.tex.gz +@end 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: + +@example +find . -name '*.gz' -print | sed 's/^\(.*\)[.]gz$/gunzip < "&" > "\1"/' | sh +@end example + +@node Invoking gzip, Advanced usage, Sample, Top +@chapter Invoking @code{gzip} +@cindex invoking +@cindex options + +The format for running the @code{gzip} program is: + +@example +gzip @var{option} @dots{} +@end example + +@code{gzip} supports the following options: + +@table @samp +@item --stdout +@itemx --to-stdout +@itemx -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. + +@item --decompress +@itemx --uncompress +@itemx -d +Decompress. + +@item --force +@itemx -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 +@code{zcat} 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. + +@item --help +@itemx -h +Print an informative help message describing the options then quit. + +@item --list +@itemx -l +For each compressed file, list the following fields: + +@example +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 +@end 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: + +@example +zcat file.Z | wc -c +@end example + +In combination with the --verbose option, the following fields are also +displayed: + +@example +method: compression method (deflate,compress,lzh,pack) +crc: the 32-bit CRC of the uncompressed data +date & time: time stamp for the uncompressed file +@end 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. + +@item --license +@itemx -L +Display the @code{gzip} license then quit. + +@item --no-name +@itemx -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. + +@item --name +@itemx -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. + +@item --quiet +@itemx -q +Suppress all warning messages. + +@item --recursive +@itemx -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}). + +@item --suffix @var{suf} +@itemx -S @var{suf} +Use suffix @samp{@var{suf}} 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: + +@example +gunzip -S "" * (*.* for MSDOS) +@end example + +Previous versions of gzip used the @samp{.z} suffix. This was changed to +avoid a conflict with @code{pack}. + +@item --test +@itemx -t +Test. Check the compressed file integrity. + +@item --verbose +@itemx -v +Verbose. Display the name and percentage reduction for each file compressed. + +@item --version +@itemx -V +Version. Display the version number and compilation options, then quit. + +@item --fast +@itemx --best +@itemx -@var{n} +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). +@end table + +@node Advanced usage, Environment, Invoking gzip, Top +@chapter Advanced usage +@cindex concatenated files + +Multiple compressed files can be concatenated. In this case, +@code{gunzip} 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: + +@example +gzip -c file1 > foo.gz +gzip -c file2 >> foo.gz +@end example + +Then + +@example +gunzip -c foo +@end example + +is equivalent to + +@example +cat file1 file2 +@end 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: + +@example +cat file1 file2 | gzip > foo.gz +@end example + +compresses better than + +@example +gzip -c file1 file2 > foo.gz +@end example + +If you want to recompress concatenated files to get better compression, do: + +@example +zcat old.gz | gzip > new.gz +@end 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: + +@example +zcat file.gz | wc -c +@end 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. + +@node Environment, Tapes, Advanced usage, Top +@chapter Environment +@cindex Environment + +The environment variable @code{GZIP} can hold a set of default options for +@code{gzip}. These options are interpreted first and can be overwritten by +explicit command line parameters. For example: + +@example +for sh: GZIP="-8v --name"; export GZIP +for csh: setenv GZIP "-8v --name" +for MSDOS: set GZIP=-8v --name +@end 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. + +@node Tapes, Problems, Environment, Top +@chapter Using @code{gzip} on tapes +@cindex 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, +@code{gunzip} detects that there is extra trailing garbage after the +compressed data and emits a warning by default. You have to use the +@samp{--quiet} option to suppress the warning. This option can be set in the +@code{GZIP} environment variable, as in: + +@example +for sh: GZIP="-q" tar -xfz --block-compress /dev/rst0 +for csh: (setenv GZIP "-q"; tar -xfz --block-compress /dev/rst0) +@end 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 +@code{tar}.) + +@node Problems, Concept Index, Tapes, Top +@chapter Reporting Bugs +@cindex bugs + +If you find a bug in @code{gzip}, please send electronic mail to +@w{@samp{jloup@@chorus.fr}} or, if this fails, to +@w{@samp{bug-gnu-utils@@prep.ai.mit.edu}}. Include the version number, +which you can find by running @w{@samp{gzip -V}}. Also include in your +message the hardware and operating system, the compiler used to compile +@code{gzip}, +a description of the bug behavior, and the input to @code{gzip} that triggered +the bug.@refill + +@node Concept Index, , Problems, Top +@unnumbered Concept Index + +@printindex cp + +@contents +@bye diff --git a/test/etags/tex-src/nonewline.tex b/test/etags/tex-src/nonewline.tex new file mode 100644 index 00000000000..8cc01ce9151 --- /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 00000000000..efb83cb834f --- /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 00000000000..203dca72c22 --- /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 +\dimen@=\dp#1 \unvbox#1 +\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi +\ifr@ggedbottom \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 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 \errmessage{@end #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). +\def\@{{\tt \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 + \errmessage{@group 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 `@group 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} + +{\catcode`\@=0 % + +\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 +} + +\def\item{\errmessage{@item while not in a table}} +\def\itemx{\errmessage{@itemx while not in a table}} +\def\kitem{\errmessage{@kitem while not in a table}} +\def\kitemx{\errmessage{@kitemx while not in a table}} +\def\xitem{\errmessage{@xitem while not in a table}} +\def\xitemx{\errmessage{@xitemx 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 . + % + \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. +{\catcode`\@=11 +\gdef\newwrite{\alloc@7\write\chardef\sixt@@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. + +{\catcode`\@=0 \catcode`\\=\other +@gdef@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 `\@=11 + +\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 + \dimen@=\pageheight \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} + \dimen@=\ht255 + \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip + \divide\dimen@ by2 + \availdimen@=\pageheight \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 + \dimen@=\pageheight \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. + \dimen@=\ht255 + \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 to\dimen@{\unvbox1} \setbox2=\vbox to\dimen@{\unvbox3} + \pagesofar} + +\catcode `\@=\other +\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 % +\errmessage{@#1 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 \catcode`\@=11 + \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 +\def\@{@}% +\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 Pavel@xerox. 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\}\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 {\errmessage{@deffnx in invalid context}} +\def\defunx #1 {\errmessage{@defunx in invalid context}} +\def\defmacx #1 {\errmessage{@defmacx in invalid context}} +\def\defspecx #1 {\errmessage{@defspecx in invalid context}} +\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}} +\def\deftypeunx #1 {\errmessage{@deftypeunx 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 {\errmessage{@defopx in invalid context}} +\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}} +\def\defcvx #1 {\errmessage{@defcvx in invalid context}} +\def\defivarx #1 {\errmessage{@defivarx 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 {\errmessage{@defvrx in invalid context}} +\def\defvarx #1 {\errmessage{@defvarx in invalid context}} +\def\defoptx #1 {\errmessage{@defoptx in invalid context}} +\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}} +\def\deftypevrx #1 {\errmessage{@deftypevrx 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 {\errmessage{@deftpx 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 `\^^@=\other +\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 `\@=\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 +% 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 `\@=11 +\long\gdef\footnote #1{\global\advance \footnoteno by \@ne +\unskip +\edef\thisfootno{$^{\the\footnoteno}$}% +\let\@sf\empty +\ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi +\thisfootno\@sf \footnotezzz{#1}} +% \parsearg\footnotezzz} + +\long\gdef\footnotezzz #1{\insert\footins{ +\interlinepenalty\interfootnotelinepenalty +\splittopskip\ht\strutbox % top baseline for broken footnotes +\splitmaxdepth\dp\strutbox \floatingpenalty\@MM +\leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip +\footstrut\parindent=\defaultparindent\hang\textindent{\thisfootno}#1\strut}} + +}%end \catcode `\@=11 + +% 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 +% \voidb@x'' ---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}}} + +\catcode`\@=0 + +% \rawbackslashxx output one backslash character in current font +\global\chardef\rawbackslashxx=`\\ +%{\catcode`\\=\other +%@gdef@rawbackslashxx{\}} + +% \rawbackslash redefines \ as input to do \rawbackslashxx. +{\catcode`\\=\active +@gdef@rawbackslash{@let\=@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. +% +@gdef@eatinput input texinfo{@fixbackslash} +@global@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. +% +@gdef@fixbackslash{@ifx\@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 +@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other + +@textfonts +@rm + +@c Local variables: +@c page-delimiter: "^\\\\message" +@c End: diff --git a/test/etags/y-src/atest.y b/test/etags/y-src/atest.y new file mode 100644 index 00000000000..81087b8d86e --- /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 00000000000..6996705d7cb --- /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 +/* #define YYDEBUG 1 */ + +#ifdef MULTIBYTE_CHARS +#include +#include +#endif + +#include + +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 /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T std::size_t +# else +# ifdef __STDC__ +# include /* 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 /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T std::size_t +# else +# ifdef __STDC__ +# include /* 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 /* INFRINGES ON USER NAME SPACE */ +# else +# include /* 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 00000000000..1cd2111464c --- /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 +/* #define YYDEBUG 1 */ + +#ifdef MULTIBYTE_CHARS +#include +#include +#endif + +#include + +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 exp exp1 start +%type keywords +%token INT CHAR +%token NAME +%token 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 00000000000..7b1eedc85db --- /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 + +#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 /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T std::size_t +# else +# ifdef __STDC__ +# include /* 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 /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T std::size_t +# else +# ifdef __STDC__ +# include /* 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 /* INFRINGES ON USER NAME SPACE */ +# else +# include /* 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=&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(tmpcMAX_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(tmprMAX_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(tmpc1MAX_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(tmpr1MAX_ROW) + return 0; + + if(tmprlr=tmpr; + retp->hr=tmpr1; + } else { + retp->lr=tmpr1; + retp->hr=tmpr; + } + if(tmpclc=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)MAX_ROW) \ + return 0; \ + else + +#define CK_REL_R(x) if( ((x)>0 && MAX_ROW-(x)cur_row)) \ + return 0; \ + else + +#define CK_ABS_C(x) if((x)MAX_COL) \ + return 0; \ + else + +#define CK_REL_C(x) if( ((x)>0 && MAX_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 00000000000..75fd7870ff8 --- /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 + +#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=&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(tmpcMAX_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(tmprMAX_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(tmpc1MAX_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(tmpr1MAX_ROW) + return 0; + + if(tmprlr=tmpr; + retp->hr=tmpr1; + } else { + retp->lr=tmpr1; + retp->hr=tmpr; + } + if(tmpclc=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)MAX_ROW) \ + return 0; \ + else + +#define CK_REL_R(x) if( ((x)>0 && MAX_ROW-(x)cur_row)) \ + return 0; \ + else + +#define CK_ABS_C(x) if((x)MAX_COL) \ + return 0; \ + else + +#define CK_REL_C(x) if( ((x)>0 && MAX_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; +} -- 2.39.5