home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #19 / NN_1992_19.iso / spool / comp / sources / misc / 3874 < prev    next >
Encoding:
Text File  |  1992-08-26  |  44.1 KB  |  1,157 lines

  1. Newsgroups: comp.sources.misc
  2. Path: sparky!kent
  3. From: kendall@centerline.com (Sam Kendall)
  4. Subject:  v31i124:  tags++ - etags/ctags for C and C++, version 1.1, Part01/03
  5. Message-ID: <csm-v31i124=tags++.094745@sparky.IMD.Sterling.COM>
  6. Followup-To: comp.sources.d
  7. X-Md4-Signature: 709bfaf56c2320e324fa71f271773fe4
  8. Sender: kent@sparky.imd.sterling.com (Kent Landfield)
  9. Organization: CenterLine Software, Inc.
  10. Date: Wed, 26 Aug 1992 14:48:58 GMT
  11. Approved: kent@sparky.imd.sterling.com
  12. Lines: 1143
  13.  
  14. Submitted-by: kendall@centerline.com (Sam Kendall)
  15. Posting-number: Volume 31, Issue 124
  16. Archive-name: tags++/part01
  17. Environment: UNIX, GNU Emacs, vi
  18.  
  19. >From the README:
  20.  
  21.            Tags++: etags/ctags for C and C++
  22.                   Version 1.1
  23.  
  24.  
  25.    This package is tags++, an enhanced version of etags and tags.el (for
  26. use with GNU Emacs Version 18) and ctags (for use with vi).  The
  27. enhancements support C++, and they support C better than the standard
  28. etags, tags.el, and ctags.
  29.  
  30.    This should work on all Unix(tm of AT&T) systems.  It may work on VMS
  31. (with VMS GNU Emacs), but that has not been tested; please let me know
  32. if you have tried it on VMS, successfully or unsuccessfully.
  33.  
  34.    Tags++ has not changed significantly in several years and is robust.
  35.  
  36.  
  37.  Advantages of Tags++
  38.  --------------------
  39.  
  40.    The major advantage of tags++ over the standard version in Emacs
  41. Version 18 is support for C++.  For example, given this program:
  42.  
  43.     class A {
  44.         int i;
  45.     public:
  46.         A() { i = 5; }
  47.         int get_i();
  48.     };
  49.  
  50.     int A::get_i() { return i; }
  51.  
  52. you can find the tags "A", "A::A", or "A::get_i".  Caveat: if you are
  53. using ctags and vi, you must supply the "-T" switch when you run ctags
  54. to get this to happen.
  55.  
  56.    Even for C, tags++ finds more stuff (such as macro constants and
  57. structure tags) than other versions.
  58.  
  59.    In Emacs, you get name completion in the minibuffer (on all
  60. identifiers in the program).  See the man page for an example of why
  61. this is useful.  Note that the visit-tags-table operation is slow
  62. because it is building an alist for name completion.
  63.  
  64.    Also in Emacs, M-. finds exact matches first; then M-, (or C-U M-.)
  65. finds other exact matches, followed by successively less exact matches.
  66. For example, suppose you type M-. f RET, and your sources contain
  67. functions "efface", "f_internal", "foo", and "f" in that order.  The
  68. standard tags facility will find these in that order -- frustrating if
  69. you just wanted "f".  Tags++ will find "f" first (exact match), then
  70. "f_internal" (word match), then "efface" and "foo" (inexact matches).
  71.  
  72.  
  73.  Compatibility
  74.  -------------
  75.  
  76.    Tags++ is forward- and backward-compatible with the standard versions
  77. of etags and tags.el (for Emacs Version 18) and ctags.  In other words,
  78. if some people at a site are using the standard tags facility and others
  79. are using tags++, no one will notice -- except that tags++ users will be
  80. unhappy with the sparse tags files produced by the standard etags or
  81. ctags.
  82.  
  83.    Tags++ almost certainly works with Epoch, although we haven't tried.
  84. Tags++ -- along with all other Emacs Version 18 tags programs -- is
  85. probably incompatible with the upcoming Emacs Version 19.
  86.  
  87.  
  88.    *** For more info see the 'README' file ***
  89.  
  90. Sam Kendall                             kendall@CenterLine.COM
  91. CenterLine Software Inc. (formerly Saber Software)   uunet!saber!kendall
  92. -----
  93. #! /bin/sh
  94. # This is a shell archive.  Remove anything before this line, then unpack
  95. # it by saving it into a file and typing "sh file".  To overwrite existing
  96. # files, type "sh file -c".  You can also feed this as standard input via
  97. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  98. # will see the following message at the end:
  99. #        "End of archive 1 (of 3)."
  100. # Contents:  COPYING Makefile README README.2 etags.1
  101. # Wrapped by kendall@pen on Tue Aug 25 13:34:19 1992
  102. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  103. if test -f 'COPYING' -a "${1}" != "-c" ; then 
  104.   echo shar: Will not clobber existing file \"'COPYING'\"
  105. else
  106. echo shar: Extracting \"'COPYING'\" \(17982 characters\)
  107. sed "s/^X//" >'COPYING' <<'END_OF_FILE'
  108. X            GNU GENERAL PUBLIC LICENSE
  109. X               Version 2, June 1991
  110. X
  111. X Copyright (C) 1989, 1991 Free Software Foundation, Inc.
  112. X                          675 Mass Ave, Cambridge, MA 02139, USA
  113. X Everyone is permitted to copy and distribute verbatim copies
  114. X of this license document, but changing it is not allowed.
  115. X
  116. X                Preamble
  117. X
  118. X  The licenses for most software are designed to take away your
  119. Xfreedom to share and change it.  By contrast, the GNU General Public
  120. XLicense is intended to guarantee your freedom to share and change free
  121. Xsoftware--to make sure the software is free for all its users.  This
  122. XGeneral Public License applies to most of the Free Software
  123. XFoundation's software and to any other program whose authors commit to
  124. Xusing it.  (Some other Free Software Foundation software is covered by
  125. Xthe GNU Library General Public License instead.)  You can apply it to
  126. Xyour programs, too.
  127. X
  128. X  When we speak of free software, we are referring to freedom, not
  129. Xprice.  Our General Public Licenses are designed to make sure that you
  130. Xhave the freedom to distribute copies of free software (and charge for
  131. Xthis service if you wish), that you receive source code or can get it
  132. Xif you want it, that you can change the software or use pieces of it
  133. Xin new free programs; and that you know you can do these things.
  134. X
  135. X  To protect your rights, we need to make restrictions that forbid
  136. Xanyone to deny you these rights or to ask you to surrender the rights.
  137. XThese restrictions translate to certain responsibilities for you if you
  138. Xdistribute copies of the software, or if you modify it.
  139. X
  140. X  For example, if you distribute copies of such a program, whether
  141. Xgratis or for a fee, you must give the recipients all the rights that
  142. Xyou have.  You must make sure that they, too, receive or can get the
  143. Xsource code.  And you must show them these terms so they know their
  144. Xrights.
  145. X
  146. X  We protect your rights with two steps: (1) copyright the software, and
  147. X(2) offer you this license which gives you legal permission to copy,
  148. Xdistribute and/or modify the software.
  149. X
  150. X  Also, for each author's protection and ours, we want to make certain
  151. Xthat everyone understands that there is no warranty for this free
  152. Xsoftware.  If the software is modified by someone else and passed on, we
  153. Xwant its recipients to know that what they have is not the original, so
  154. Xthat any problems introduced by others will not reflect on the original
  155. Xauthors' reputations.
  156. X
  157. X  Finally, any free program is threatened constantly by software
  158. Xpatents.  We wish to avoid the danger that redistributors of a free
  159. Xprogram will individually obtain patent licenses, in effect making the
  160. Xprogram proprietary.  To prevent this, we have made it clear that any
  161. Xpatent must be licensed for everyone's free use or not licensed at all.
  162. X
  163. X  The precise terms and conditions for copying, distribution and
  164. Xmodification follow.
  165. X
  166. X            GNU GENERAL PUBLIC LICENSE
  167. X   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  168. X
  169. X  0. This License applies to any program or other work which contains
  170. Xa notice placed by the copyright holder saying it may be distributed
  171. Xunder the terms of this General Public License.  The "Program", below,
  172. Xrefers to any such program or work, and a "work based on the Program"
  173. Xmeans either the Program or any derivative work under copyright law:
  174. Xthat is to say, a work containing the Program or a portion of it,
  175. Xeither verbatim or with modifications and/or translated into another
  176. Xlanguage.  (Hereinafter, translation is included without limitation in
  177. Xthe term "modification".)  Each licensee is addressed as "you".
  178. X
  179. XActivities other than copying, distribution and modification are not
  180. Xcovered by this License; they are outside its scope.  The act of
  181. Xrunning the Program is not restricted, and the output from the Program
  182. Xis covered only if its contents constitute a work based on the
  183. XProgram (independent of having been made by running the Program).
  184. XWhether that is true depends on what the Program does.
  185. X
  186. X  1. You may copy and distribute verbatim copies of the Program's
  187. Xsource code as you receive it, in any medium, provided that you
  188. Xconspicuously and appropriately publish on each copy an appropriate
  189. Xcopyright notice and disclaimer of warranty; keep intact all the
  190. Xnotices that refer to this License and to the absence of any warranty;
  191. Xand give any other recipients of the Program a copy of this License
  192. Xalong with the Program.
  193. X
  194. XYou may charge a fee for the physical act of transferring a copy, and
  195. Xyou may at your option offer warranty protection in exchange for a fee.
  196. X
  197. X  2. You may modify your copy or copies of the Program or any portion
  198. Xof it, thus forming a work based on the Program, and copy and
  199. Xdistribute such modifications or work under the terms of Section 1
  200. Xabove, provided that you also meet all of these conditions:
  201. X
  202. X    a) You must cause the modified files to carry prominent notices
  203. X    stating that you changed the files and the date of any change.
  204. X
  205. X    b) You must cause any work that you distribute or publish, that in
  206. X    whole or in part contains or is derived from the Program or any
  207. X    part thereof, to be licensed as a whole at no charge to all third
  208. X    parties under the terms of this License.
  209. X
  210. X    c) If the modified program normally reads commands interactively
  211. X    when run, you must cause it, when started running for such
  212. X    interactive use in the most ordinary way, to print or display an
  213. X    announcement including an appropriate copyright notice and a
  214. X    notice that there is no warranty (or else, saying that you provide
  215. X    a warranty) and that users may redistribute the program under
  216. X    these conditions, and telling the user how to view a copy of this
  217. X    License.  (Exception: if the Program itself is interactive but
  218. X    does not normally print such an announcement, your work based on
  219. X    the Program is not required to print an announcement.)
  220. X
  221. XThese requirements apply to the modified work as a whole.  If
  222. Xidentifiable sections of that work are not derived from the Program,
  223. Xand can be reasonably considered independent and separate works in
  224. Xthemselves, then this License, and its terms, do not apply to those
  225. Xsections when you distribute them as separate works.  But when you
  226. Xdistribute the same sections as part of a whole which is a work based
  227. Xon the Program, the distribution of the whole must be on the terms of
  228. Xthis License, whose permissions for other licensees extend to the
  229. Xentire whole, and thus to each and every part regardless of who wrote it.
  230. X
  231. XThus, it is not the intent of this section to claim rights or contest
  232. Xyour rights to work written entirely by you; rather, the intent is to
  233. Xexercise the right to control the distribution of derivative or
  234. Xcollective works based on the Program.
  235. X
  236. XIn addition, mere aggregation of another work not based on the Program
  237. Xwith the Program (or with a work based on the Program) on a volume of
  238. Xa storage or distribution medium does not bring the other work under
  239. Xthe scope of this License.
  240. X
  241. X  3. You may copy and distribute the Program (or a work based on it,
  242. Xunder Section 2) in object code or executable form under the terms of
  243. XSections 1 and 2 above provided that you also do one of the following:
  244. X
  245. X    a) Accompany it with the complete corresponding machine-readable
  246. X    source code, which must be distributed under the terms of Sections
  247. X    1 and 2 above on a medium customarily used for software interchange; or,
  248. X
  249. X    b) Accompany it with a written offer, valid for at least three
  250. X    years, to give any third party, for a charge no more than your
  251. X    cost of physically performing source distribution, a complete
  252. X    machine-readable copy of the corresponding source code, to be
  253. X    distributed under the terms of Sections 1 and 2 above on a medium
  254. X    customarily used for software interchange; or,
  255. X
  256. X    c) Accompany it with the information you received as to the offer
  257. X    to distribute corresponding source code.  (This alternative is
  258. X    allowed only for noncommercial distribution and only if you
  259. X    received the program in object code or executable form with such
  260. X    an offer, in accord with Subsection b above.)
  261. X
  262. XThe source code for a work means the preferred form of the work for
  263. Xmaking modifications to it.  For an executable work, complete source
  264. Xcode means all the source code for all modules it contains, plus any
  265. Xassociated interface definition files, plus the scripts used to
  266. Xcontrol compilation and installation of the executable.  However, as a
  267. Xspecial exception, the source code distributed need not include
  268. Xanything that is normally distributed (in either source or binary
  269. Xform) with the major components (compiler, kernel, and so on) of the
  270. Xoperating system on which the executable runs, unless that component
  271. Xitself accompanies the executable.
  272. X
  273. XIf distribution of executable or object code is made by offering
  274. Xaccess to copy from a designated place, then offering equivalent
  275. Xaccess to copy the source code from the same place counts as
  276. Xdistribution of the source code, even though third parties are not
  277. Xcompelled to copy the source along with the object code.
  278. X
  279. X  4. You may not copy, modify, sublicense, or distribute the Program
  280. Xexcept as expressly provided under this License.  Any attempt
  281. Xotherwise to copy, modify, sublicense or distribute the Program is
  282. Xvoid, and will automatically terminate your rights under this License.
  283. XHowever, parties who have received copies, or rights, from you under
  284. Xthis License will not have their licenses terminated so long as such
  285. Xparties remain in full compliance.
  286. X
  287. X  5. You are not required to accept this License, since you have not
  288. Xsigned it.  However, nothing else grants you permission to modify or
  289. Xdistribute the Program or its derivative works.  These actions are
  290. Xprohibited by law if you do not accept this License.  Therefore, by
  291. Xmodifying or distributing the Program (or any work based on the
  292. XProgram), you indicate your acceptance of this License to do so, and
  293. Xall its terms and conditions for copying, distributing or modifying
  294. Xthe Program or works based on it.
  295. X
  296. X  6. Each time you redistribute the Program (or any work based on the
  297. XProgram), the recipient automatically receives a license from the
  298. Xoriginal licensor to copy, distribute or modify the Program subject to
  299. Xthese terms and conditions.  You may not impose any further
  300. Xrestrictions on the recipients' exercise of the rights granted herein.
  301. XYou are not responsible for enforcing compliance by third parties to
  302. Xthis License.
  303. X
  304. X  7. If, as a consequence of a court judgment or allegation of patent
  305. Xinfringement or for any other reason (not limited to patent issues),
  306. Xconditions are imposed on you (whether by court order, agreement or
  307. Xotherwise) that contradict the conditions of this License, they do not
  308. Xexcuse you from the conditions of this License.  If you cannot
  309. Xdistribute so as to satisfy simultaneously your obligations under this
  310. XLicense and any other pertinent obligations, then as a consequence you
  311. Xmay not distribute the Program at all.  For example, if a patent
  312. Xlicense would not permit royalty-free redistribution of the Program by
  313. Xall those who receive copies directly or indirectly through you, then
  314. Xthe only way you could satisfy both it and this License would be to
  315. Xrefrain entirely from distribution of the Program.
  316. X
  317. XIf any portion of this section is held invalid or unenforceable under
  318. Xany particular circumstance, the balance of the section is intended to
  319. Xapply and the section as a whole is intended to apply in other
  320. Xcircumstances.
  321. X
  322. XIt is not the purpose of this section to induce you to infringe any
  323. Xpatents or other property right claims or to contest validity of any
  324. Xsuch claims; this section has the sole purpose of protecting the
  325. Xintegrity of the free software distribution system, which is
  326. Ximplemented by public license practices.  Many people have made
  327. Xgenerous contributions to the wide range of software distributed
  328. Xthrough that system in reliance on consistent application of that
  329. Xsystem; it is up to the author/donor to decide if he or she is willing
  330. Xto distribute software through any other system and a licensee cannot
  331. Ximpose that choice.
  332. X
  333. XThis section is intended to make thoroughly clear what is believed to
  334. Xbe a consequence of the rest of this License.
  335. X
  336. X  8. If the distribution and/or use of the Program is restricted in
  337. Xcertain countries either by patents or by copyrighted interfaces, the
  338. Xoriginal copyright holder who places the Program under this License
  339. Xmay add an explicit geographical distribution limitation excluding
  340. Xthose countries, so that distribution is permitted only in or among
  341. Xcountries not thus excluded.  In such case, this License incorporates
  342. Xthe limitation as if written in the body of this License.
  343. X
  344. X  9. The Free Software Foundation may publish revised and/or new versions
  345. Xof the General Public License from time to time.  Such new versions will
  346. Xbe similar in spirit to the present version, but may differ in detail to
  347. Xaddress new problems or concerns.
  348. X
  349. XEach version is given a distinguishing version number.  If the Program
  350. Xspecifies a version number of this License which applies to it and "any
  351. Xlater version", you have the option of following the terms and conditions
  352. Xeither of that version or of any later version published by the Free
  353. XSoftware Foundation.  If the Program does not specify a version number of
  354. Xthis License, you may choose any version ever published by the Free Software
  355. XFoundation.
  356. X
  357. X  10. If you wish to incorporate parts of the Program into other free
  358. Xprograms whose distribution conditions are different, write to the author
  359. Xto ask for permission.  For software which is copyrighted by the Free
  360. XSoftware Foundation, write to the Free Software Foundation; we sometimes
  361. Xmake exceptions for this.  Our decision will be guided by the two goals
  362. Xof preserving the free status of all derivatives of our free software and
  363. Xof promoting the sharing and reuse of software generally.
  364. X
  365. X                NO WARRANTY
  366. X
  367. X  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
  368. XFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
  369. XOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
  370. XPROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
  371. XOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  372. XMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
  373. XTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
  374. XPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
  375. XREPAIR OR CORRECTION.
  376. X
  377. X  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
  378. XWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
  379. XREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
  380. XINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
  381. XOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
  382. XTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
  383. XYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
  384. XPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
  385. XPOSSIBILITY OF SUCH DAMAGES.
  386. X
  387. X             END OF TERMS AND CONDITIONS
  388. X
  389. X    Appendix: How to Apply These Terms to Your New Programs
  390. X
  391. X  If you develop a new program, and you want it to be of the greatest
  392. Xpossible use to the public, the best way to achieve this is to make it
  393. Xfree software which everyone can redistribute and change under these terms.
  394. X
  395. X  To do so, attach the following notices to the program.  It is safest
  396. Xto attach them to the start of each source file to most effectively
  397. Xconvey the exclusion of warranty; and each file should have at least
  398. Xthe "copyright" line and a pointer to where the full notice is found.
  399. X
  400. X    <one line to give the program's name and a brief idea of what it does.>
  401. X    Copyright (C) 19yy  <name of author>
  402. X
  403. X    This program is free software; you can redistribute it and/or modify
  404. X    it under the terms of the GNU General Public License as published by
  405. X    the Free Software Foundation; either version 2 of the License, or
  406. X    (at your option) any later version.
  407. X
  408. X    This program is distributed in the hope that it will be useful,
  409. X    but WITHOUT ANY WARRANTY; without even the implied warranty of
  410. X    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  411. X    GNU General Public License for more details.
  412. X
  413. X    You should have received a copy of the GNU General Public License
  414. X    along with this program; if not, write to the Free Software
  415. X    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  416. X
  417. XAlso add information on how to contact you by electronic and paper mail.
  418. X
  419. XIf the program is interactive, make it output a short notice like this
  420. Xwhen it starts in an interactive mode:
  421. X
  422. X    Gnomovision version 69, Copyright (C) 19yy name of author
  423. X    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
  424. X    This is free software, and you are welcome to redistribute it
  425. X    under certain conditions; type `show c' for details.
  426. X
  427. XThe hypothetical commands `show w' and `show c' should show the appropriate
  428. Xparts of the General Public License.  Of course, the commands you use may
  429. Xbe called something other than `show w' and `show c'; they could even be
  430. Xmouse-clicks or menu items--whatever suits your program.
  431. X
  432. XYou should also get your employer (if you work as a programmer) or your
  433. Xschool, if any, to sign a "copyright disclaimer" for the program, if
  434. Xnecessary.  Here is a sample; alter the names:
  435. X
  436. X  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  437. X  `Gnomovision' (which makes passes at compilers) written by James Hacker.
  438. X
  439. X  <signature of Ty Coon>, 1 April 1989
  440. X  Ty Coon, President of Vice
  441. X
  442. XThis General Public License does not permit incorporating your program into
  443. Xproprietary programs.  If your program is a subroutine library, you may
  444. Xconsider it more useful to permit linking proprietary applications with the
  445. Xlibrary.  If this is what you want to do, use the GNU Library General
  446. XPublic License instead of this License.
  447. END_OF_FILE
  448. if test 17982 -ne `wc -c <'COPYING'`; then
  449.     echo shar: \"'COPYING'\" unpacked with wrong size!
  450. fi
  451. # end of 'COPYING'
  452. fi
  453. if test -f 'Makefile' -a "${1}" != "-c" ; then 
  454.   echo shar: Will not clobber existing file \"'Makefile'\"
  455. else
  456. echo shar: Extracting \"'Makefile'\" \(1277 characters\)
  457. sed "s/^X//" >'Makefile' <<'END_OF_FILE'
  458. X# GFLAG = -g
  459. XOFLAG = -O
  460. XCFLAGS = $(OFLAG) $(GFLAG)
  461. XSRCFILES = COPYING Makefile README README.2 etags.c etags.1 tags.el
  462. XVERSION=1.0
  463. X
  464. X# Install binaries 'etags' and 'ctags' (a symlink) here.
  465. XBIN_DIR = /usr/local/bin
  466. X# Install man pages here.
  467. XMAN_DIR = /usr/local/man/man1
  468. X# Man page source filenames get this extension.
  469. XMAN_EXT = .1
  470. X
  471. Xetags: etags.o
  472. X    $(CC) $(CFLAGS) -o etags etags.o
  473. X
  474. Xctags: etags
  475. X    rm -f ctags
  476. X    cp etags ctags
  477. X
  478. X# Install etags and ctags in $(BIN_DIR).  Don't use a symlink;
  479. X# it messes up rdist.
  480. X# Note: this does not install tags.el in your local Emacs area;
  481. X# you must do that manually.
  482. Xinstall: etags
  483. X    cp etags $(BIN_DIR)/etags
  484. X    chmod 775 $(BIN_DIR)/etags
  485. X    cp etags $(BIN_DIR)/ctags
  486. X    chmod 775 $(BIN_DIR)/ctags
  487. X
  488. X# Install etags and ctags man pages (copies of the same page).
  489. Xinstall_man: etags.1
  490. X    cp etags.1 $(MAN_DIR)/etags$(MAN_EXT)
  491. X    cp etags.1 $(MAN_DIR)/ctags$(MAN_EXT)
  492. X
  493. Xcl_etags:
  494. X    ##load -DDEBUG etags.c
  495. X
  496. Xclean:
  497. X    rm -f etags ctags *.o
  498. X
  499. X# -s is needed because etags.c is so big.
  500. Xkit:
  501. X    makekit -s60000 $(SRCFILES)
  502. X
  503. X# Make a tar file with fictional directory 'tags-VERSION'.
  504. Xtar tags-$(VERSION).tar.Z: $(SRCFILES)
  505. X    rm -f tags-$(VERSION)
  506. X    ln -s . tags-$(VERSION)
  507. X    tar cf - `ls $(SRCFILES) | sed 's|^|tags-$(VERSION)/|'` | \
  508. X        compress > tags-$(VERSION).tar.Z
  509. END_OF_FILE
  510. if test 1277 -ne `wc -c <'Makefile'`; then
  511.     echo shar: \"'Makefile'\" unpacked with wrong size!
  512. fi
  513. # end of 'Makefile'
  514. fi
  515. if test -f 'README' -a "${1}" != "-c" ; then 
  516.   echo shar: Will not clobber existing file \"'README'\"
  517. else
  518. echo shar: Extracting \"'README'\" \(4255 characters\)
  519. sed "s/^X//" >'README' <<'END_OF_FILE'
  520. X$Id: README,v 1.4 1992/08/25 17:27:30 kendall Exp $
  521. X
  522. X           Tags++: etags/ctags for C and C++
  523. X                  Version 1.1
  524. X
  525. X
  526. X   This package is tags++, an enhanced version of etags and tags.el (for
  527. Xuse with GNU Emacs Version 18) and ctags (for use with vi).  The
  528. Xenhancements support C++, and they support C better than the standard
  529. Xetags, tags.el, and ctags.
  530. X
  531. X   This should work on all Unix(tm of AT&T) systems.  It may work on VMS
  532. X(with VMS GNU Emacs), but that has not been tested; please let me know
  533. Xif you have tried it on VMS, successfully or unsuccessfully.
  534. X
  535. X   Tags++ has not changed significantly in several years and is robust.
  536. X
  537. X
  538. XAdvantages of Tags++
  539. X--------------------
  540. X
  541. X   The major advantage of tags++ over the standard version in Emacs
  542. XVersion 18 is support for C++.  For example, given this program:
  543. X
  544. X    class A {
  545. X        int i;
  546. X    public:
  547. X        A() { i = 5; }
  548. X        int get_i();
  549. X    };
  550. X
  551. X    int A::get_i() { return i; }
  552. X
  553. Xyou can find the tags "A", "A::A", or "A::get_i".  Caveat: if you are
  554. Xusing ctags and vi, you must supply the "-T" switch when you run ctags
  555. Xto get this to happen.
  556. X
  557. X   Even for C, tags++ finds more stuff (such as macro constants and
  558. Xstructure tags) than other versions.
  559. X
  560. X   In Emacs, you get name completion in the minibuffer (on all
  561. Xidentifiers in the program).  See the man page for an example of why
  562. Xthis is useful.  Note that the visit-tags-table operation is slow
  563. Xbecause it is building an alist for name completion.
  564. X
  565. X   Also in Emacs, M-. finds exact matches first; then M-, (or C-U M-.)
  566. Xfinds other exact matches, followed by successively less exact matches.
  567. XFor example, suppose you type M-. f RET, and your sources contain
  568. Xfunctions "efface", "f_internal", "foo", and "f" in that order.  The
  569. Xstandard tags facility will find these in that order -- frustrating if
  570. Xyou just wanted "f".  Tags++ will find "f" first (exact match), then
  571. X"f_internal" (word match), then "efface" and "foo" (inexact matches).
  572. X
  573. X
  574. XCompatibility
  575. X-------------
  576. X
  577. X   Tags++ is forward- and backward-compatible with the standard versions
  578. Xof etags and tags.el (for Emacs Version 18) and ctags.  In other words,
  579. Xif some people at a site are using the standard tags facility and others
  580. Xare using tags++, no one will notice -- except that tags++ users will be
  581. Xunhappy with the sparse tags files produced by the standard etags or
  582. Xctags.
  583. X
  584. X   Tags++ almost certainly works with Epoch, although we haven't tried.
  585. XTags++ -- along with all other Emacs Version 18 tags programs -- is
  586. Xprobably incompatible with the upcoming Emacs Version 19.
  587. X
  588. X
  589. XWhat is Included
  590. X----------------
  591. X
  592. XCOPYING        GNU general public license
  593. XMakefile
  594. XREADME        this file
  595. XREADME.2    more detailed notes and bugs
  596. Xetags.c        source for etags and ctags
  597. Xetags.1        etags and ctags man page
  598. Xtags.el        tags facility for Emacs, elisp code
  599. X
  600. X
  601. XHow to Build and Install
  602. X------------------------
  603. X
  604. X   To build etags, inspect the Makefile, change GFLAG and OFLAG if
  605. Xnecessary, and type "make".  Type "make ctags" to make ctags (it's just
  606. Xa symlink to etags).  etags.c is written in old-style (non-ANSI) C.
  607. X
  608. X   To install etags and ctags, change BIN_DIR in the Makefile as
  609. Xappropriate and type "make install".
  610. X
  611. X   To install the man page, change MAN_DIR and MAN_EXT in the Makefile
  612. Xas appropriate and type "make install_man".
  613. X
  614. X   Install tags.el by copying it to an appropriate directory and
  615. Xbyte-compiling it (using Emacs M-x byte-compile-file).  Users can get
  616. Xthis version of tags.el by:
  617. X
  618. X    - Loading it explicitly from their .emacs files, OR
  619. X    - Making sure that the directory in which this tags.el{,c} is
  620. X      installed is in their load-path before the standard lisp
  621. X      directory.  This works because Emacs autoloads tags.
  622. X
  623. X
  624. XNotes
  625. X-----
  626. X
  627. X   Emacs users may also be interested in c++-mode.el, which is available
  628. Xfor anonymous ftp on archive.cis.ohio-state.edu.
  629. X
  630. X   Send comments, bugs, and enhancements to me.
  631. X
  632. X
  633. XVersions
  634. X--------
  635. X
  636. X8/25/92     1.1    Renamed the package "tags++" for easy archie-ability.
  637. X        Updated the man page to reflect the fact that templates
  638. X        work (serendipity!).  Member functions of nested classes
  639. X        should work a little better.
  640. X
  641. X6/4/92      1.0    FCS.
  642. X
  643. X
  644. X----
  645. XSam Kendall                             kendall@CenterLine.COM
  646. XCenterLine Software Inc. (formerly Saber Software)   uunet!saber!kendall
  647. X10 Fawcett Street
  648. XCambridge, MA  02138  USA
  649. END_OF_FILE
  650. if test 4255 -ne `wc -c <'README'`; then
  651.     echo shar: \"'README'\" unpacked with wrong size!
  652. fi
  653. # end of 'README'
  654. fi
  655. if test -f 'README.2' -a "${1}" != "-c" ; then 
  656.   echo shar: Will not clobber existing file \"'README.2'\"
  657. else
  658. echo shar: Extracting \"'README.2'\" \(7209 characters\)
  659. sed "s/^X//" >'README.2' <<'END_OF_FILE'
  660. X       Changes and suggested enhancements to etags.c and tags.el
  661. X                  Sam Kendall
  662. X
  663. X$Id: README.2,v 1.2 1992/04/28 13:26:59 kendall Exp $
  664. X
  665. XEtags options added include -D, -S, and others.
  666. X
  667. XI've made it illegal to pass most ctags options to etags.  (To use the
  668. Xprogram as ctags, it must be compiled with -DCTAGS, or with neither
  669. X-DETAGS nor -DCTAGS.)
  670. X
  671. XI haven't documented the ctags-only options here.
  672. X
  673. Xtags.el modified as follows:
  674. X
  675. X 1. When finding multiple matches for the same tag (via a prefix arg
  676. X    to find-tag, usually invoked with "ESC ,"), exact matches
  677. X    are found first; then word matches; then other matches.  In other
  678. X    words, if I "ESC ." on "foo", the first match found will be "foo"
  679. X    itself (exact match); then perhaps "bar_foo_baz" (word match); then
  680. X    finally "foobar" (inexact match).
  681. X
  682. X 2. find-tag modified to handle the new "tag" field in a tag
  683. X    line.  A tag line can either be in the old format:
  684. X
  685. X        definition\177lineno,charno
  686. X
  687. X    or can have the additional "tag" field:
  688. X
  689. X            definition\177lineno,charno,\001tag
  690. X
  691. X    This "tag" field is necessary for C++, where the entire tag is NOT
  692. X    necessarily found on the definition line.  The "tag" field also
  693. X    helps with exact tag matching.  There may be more than one tag,
  694. X    separated by \001 characters.
  695. X
  696. X    The theory here is that you provide the tag field when the
  697. X    definition field does not contain the correct tag.  This theory could
  698. X    be made more rigorous, to help with, for instance, exact tag matching
  699. X    in mixed Lisp/C programs.
  700. X    
  701. X    The old tags.el will fail with new-format lines in TAGS files, but
  702. X    there are many new-format lines only in C++ programs.
  703. X
  704. X    This tags.el will work fine with old-format TAGS files.
  705. X
  706. X 3. All tags functions modified to ignore the character count that
  707. X    follows each filename in the TAGS file.  Behavior is not changed,
  708. X    but this makes it much easier to write a program that edits the
  709. X    TAGS file.
  710. X
  711. Xtags.el enhancements needed:
  712. X
  713. X    doesn't know how to handle included TAGS files yet
  714. X    per-mode and/or local versions of find-tag-default,
  715. X        for easy customization
  716. X    eliminate duplicates in alist when prompting
  717. X
  718. XEnhancements to make:
  719. X
  720. X   * Is it possible to match C/C++ global variables?  It would be really
  721. X     nice.
  722. X   * Generalize file suffix stuff -- clumsy and verbose now.  Should
  723. X     be config-file- or environment variable- or option-driven.
  724. X   * Treat C++ "operator token" as a single identifier -- canonicalicalize
  725. X     to leave one space between "operator" and token when token is
  726. X     an identifier, no space when token is an operator.
  727. X   * Make a tag for a struct tag in plain C as `struct name' (likewise
  728. X     for union etc.).  In canonical form, exactly one space in between.
  729. X     Currently we make `name' into a tag in etags only; we don't by
  730. X     default in ctags because `name' may not be unique, which breaks
  731. X     ctags.
  732. X   * Symbol table should be implemented as a hash table instead of as a
  733. X     linked list.
  734. X   * The TeX stuff should use the Stab abstraction.
  735. X   * Needs profiling and performance enhancements.
  736. X   * The C line "struct foo { ... };" will create a tag line that
  737. X     searches for "struct foo ".  If the search included the "{" it
  738. X     would be more specific.  This point is even more true if "foo" and
  739. X     "{" are separated by a newline rather than a space, but having the
  740. X     search pattern include a newline would require changes in the TAGS
  741. X     file format.
  742. X   * C programs that employ heavy macrification need a config file to
  743. X     specify the conventions to etags.  Config file must allow the
  744. X     definition of macros that expand to types (e.g.  `Seq(T)' expands
  745. X     to `Seq_T'), symbol-defining macros (e.g.  `DefineSeq(T)' should be
  746. X     interpreted as a definition of `Seq_T'), macros that expand to
  747. X     symbols (e.g.  `M(Foo,Bar)' expands to `Type_Foo_Bar'), and macros
  748. X     that cause unbalanced braces or parens (e.g. `LOOP', whose C
  749. X     definition is "while(1){", leaves one left brace).  Probably
  750. X     others.  This is much less important for C++ now that templates are
  751. X     in the language.
  752. X   * Config file should also handle definition of the "DEF" convention
  753. X     of the Gnu Emacs source, and definition of the C* language
  754. X     ("domain" keyword), so these can be taken out of the etags source.
  755. X   * For C++, "::" is only understood if it occurs between identifiers with no
  756. X     intervening whitespace.  This style of C++ function definition:
  757. X            returnntpype classname::
  758. X       functionname(formals) {
  759. X            ...
  760. X       }
  761. X     is not understood.
  762. X   * Is there "::" handling needed for Common Lisp?
  763. X   * Nroff/troff handling would be easy to write and useful.  It could
  764. X     be one of the default file modes, along with Pascal, Fortran and C
  765. X     -- if a source file starts with "'" or ".", it's nroff/troff
  766. X     source.
  767. X   * There should be a defined interface between the
  768. X     language-independent part of etags and the language modules.  This
  769. X     would make it easier to add a module.
  770. X   * Macros defined inside braces aren't found, e.g.,
  771. X        struct foo {
  772. X    #define FOO() BAR
  773. X    ... };
  774. X   * '#' is only recognized to start a preprocessor line if it is in
  775. X     column 0.  According to ANSI it can be preceded by whitespace.
  776. X   * A constant macro with no definition, e.g. `#define FOO', will not
  777. X     be tagged, because `definedef' is prematurely reset by CNL.
  778. X   * `typedef unsigned char TOK;' will get `char' defined as well as `TOK'.
  779. X   * An extra ' or " wipes out the rest of the file; etags should take a
  780. X     newline (not preceded by a \) as ending a string or char constant.
  781. X   * C++ destructors are not understood correctly.
  782. X   * In this program, we incorrectly think this is a def'n of
  783. X     char_mask::sizeof:
  784. X    union char_mask {
  785. X        unsigned in[sizeof(int)];
  786. X    };
  787. X   * Needs to handle C++ nested classes, templates.
  788. X
  789. XItems about the format of the TAGS file:
  790. X
  791. X   * Should make some special indication in a tags line that means both
  792. X     (1) the pattern is an exact match for the definition line, and (2)
  793. X     the ^? immediately follows the tag.  In absence of this indication,
  794. X     the pattern is only the beginning of the definition line, and the
  795. X     last character before the ^? is not part of the tag.  Helps in the
  796. X     following situation:
  797. X    struct foo *p;
  798. X    struct foo
  799. X    {
  800. X     ...
  801. X    };
  802. X     Currently find-tag finds the first line instead of the correct
  803. X     second one.
  804. X   * Some way to tell whether the line `char *foo^?5,200' is the tag
  805. X     `foo' or `*foo'.  Since there are no modes in the TAGS file, we
  806. X     can't (easily) say that since this is C, it can't be `*foo'.  So
  807. X     this line should be `char *foo^?5,200,^Afoo'.  We need to decide on
  808. X     the characters that are not in identifiers for any language.  How
  809. X     about space, TAB, FF, `(', `)', and `;'?
  810. X   * Along the same lines, both etags and tags.el should canonicalize
  811. X     tags to lowercase for case-independent languages.  So `(defun
  812. X     Foo^?5,200' in Lisp (but not Elisp) should be `(defun
  813. X     Foo^?5,200,^Afoo'.
  814. X
  815. XFor Emacs Version 19:
  816. X
  817. X   * This etags.c and tags.el (in a slightly earlier version) was fed
  818. X     back to FSF several years ago, so I hope something like it will
  819. X     come out with Emacs Version 19.
  820. END_OF_FILE
  821. if test 7209 -ne `wc -c <'README.2'`; then
  822.     echo shar: \"'README.2'\" unpacked with wrong size!
  823. fi
  824. # end of 'README.2'
  825. fi
  826. if test -f 'etags.1' -a "${1}" != "-c" ; then 
  827.   echo shar: Will not clobber existing file \"'etags.1'\"
  828. else
  829. echo shar: Extracting \"'etags.1'\" \(7488 characters\)
  830. sed "s/^X//" >'etags.1' <<'END_OF_FILE'
  831. X.TH ETAGS 1 "4 June 1992"
  832. X.\"
  833. X.\" This text is in the public domain.  You are welcome to use it for
  834. X.\" any purpose.  It is not warranted to accurately describe anything.
  835. X.\" It was derived by Sam Kendall from the original ctags man page.
  836. X.\"
  837. X.UC 4
  838. X.SH NAME
  839. Xetags, ctags \- create tags files for GNU Emacs and ex/vi
  840. X.SH SYNOPSIS
  841. X.B etags
  842. X[ 
  843. X.B \-aDS
  844. X] [
  845. X.B \-o
  846. Xtagsfile ] file ...
  847. X.br
  848. X.B ctags
  849. X[ 
  850. X.B \-aBdFStTuwvx
  851. X] [
  852. X.B \-o
  853. Xtagsfile ] file ...
  854. X.SH DESCRIPTION
  855. X.I Etags
  856. Xmakes a tags file for GNU Emacs Version 18, and
  857. X.I ctags
  858. Xmakes a tags file for
  859. X.IR ex (1)/ vi (1),
  860. Xfrom the specified source files.
  861. XA tags file gives the locations of the definitions of named objects
  862. X(functions, variables, macros, types) in a group of source files.
  863. XEach name recorded is called a `tag'.
  864. XGiven a tag by the user, the editor uses a tags file to map
  865. Xthe name into a location in a source file, and takes the user there.
  866. X.PP
  867. XThe following filename extensions are understood:
  868. X.TP 10
  869. X.B "\.c  \.h  \.y  \.C  \.H  \.cxx  \.hxx  \.ixx  \.hc  \.cc  \.hpp  \.cpp"
  870. XC or C++ source files.
  871. X.IR Etags :
  872. Xby default,
  873. Xfiles are searched for function, member function, macro function,
  874. Xmacro constant, and type definitions.
  875. X.IR Ctags :
  876. Xby default, files are searched for function and macro function definitions;
  877. Xuse the
  878. X.B \-Tdw
  879. Xoptions to also search for the rest and to suppress annoying warnings.
  880. X.\" .TP 10
  881. X.\" .B "\.cs  \.hs"
  882. X.\" Dataparallel C source files.
  883. X.\" (Dataparallel C, formerly known as C*, is a parallel cousin of C++.)
  884. X.\" NOTE: Dataparallel C support is still in the source; I'll document
  885. X.\" it if someone tells me they are actually using it.
  886. X.\" -kendall@centerline.com 6/4/92
  887. X.TP 10
  888. X.B "\.tex  \.aux  \.bbl"
  889. XLaTex source files.
  890. X.TP 10
  891. X.B "\.s  \.a"
  892. XAssembly language source files.
  893. X.TP 10
  894. X.B "\.l  \.el  \.lisp  \.cl  \.clisp"
  895. XEmacs Lisp or Common Lisp source files.
  896. X.TP 10
  897. X.B "\.scm  \.sm  \.scheme  \.SM  \.SCM  \.scm\.\fIn\fP  \.SCM\.\fIn\fP"
  898. XScheme source files.
  899. X.PP
  900. XOther files are first examined to see if they contain any
  901. XPascal or Fortran routine definitions; if not, they are processed again
  902. Xlooking for C or C++ definitions.
  903. X.SH "OPTIONS"
  904. X.TP 5
  905. X.B \-a
  906. Xappend to tags file.
  907. X.TP 5
  908. X.BR \-o " tagsfile"
  909. Xspecify tags file to output.
  910. XDefault is
  911. X.B TAGS
  912. Xfor
  913. X.I etags
  914. Xand
  915. X.B tags
  916. Xfor
  917. X.IR ctags .
  918. XA tagsfile of
  919. X.B \-
  920. Xmeans standard output.
  921. X.SH "OPTIONS FOR C AND C++"
  922. X.TP 5
  923. X.B \-d
  924. Xcreate tags for macro constant definitions
  925. X(default for
  926. X.BR etags ).
  927. X.TP 5
  928. X.B \-D
  929. Xdo not create tags for macro constant definitions (default for
  930. X.BR ctags ).
  931. XThis can halve the size of the TAGS file.
  932. X.TP 5
  933. X.B \-S
  934. Xdo
  935. X.I not
  936. Xassume that a `}' in column 0 indicates the end of a function body;
  937. Xthe default is to make this assumption.
  938. XUse this option with code that is poorly indented.
  939. XDo not use this option with code containing unbalanced curly braces,
  940. Xas can happen with sloppy conditional compilation.
  941. X.TP 5
  942. X.B \-t
  943. Xcreate tags for typedefs.
  944. X.TP 5
  945. X.B \-T
  946. Xcreate tags for type definitions (including typedefs)
  947. Xand member function definitions (default for
  948. X.BR etags ).
  949. X.SH "CTAGS ONLY"
  950. X.TP 5
  951. X.B \-F
  952. Xuse forward searching patterns (/.../) (default).
  953. X.TP 5
  954. X.B \-B
  955. Xuse backward searching patterns (?...?).
  956. X.TP 5
  957. X.B \-w
  958. Xsuppress warning diagnostics.
  959. X.TP 5
  960. X.B \-u
  961. Xcausing the specified files to be
  962. X.I updated
  963. Xin tags, that is, all references to them are deleted,
  964. Xand the new values are appended to the file.
  965. X(Beware: this option is implemented in a way which is rather slow;
  966. Xit is usually faster to simply rebuild the
  967. X.I tags
  968. Xfile.)
  969. X.TP 5
  970. X.B \-x
  971. Xproduce a list of object names, the line number and file
  972. Xname on which each is defined, as well as the text of that line,
  973. Xand print it on the standard output.  This is a simple index
  974. Xwhich can be printed out as an off-line readable function index.
  975. X.TP 5
  976. X.B \-v
  977. Xproduce an index of the form expected by
  978. X.IR vgrind (1)
  979. Xand print it on the standard output.
  980. XThis listing contains the function name,
  981. Xfile name, and page number
  982. X(assuming 64 line pages).
  983. XSince the output will be sorted into lexicographic order,
  984. Xit may be desired to run the output through
  985. X.BR "sort \-f" .
  986. XSample use:
  987. X.nf
  988. X        ctags \-v files | sort \-f > index
  989. X        vgrind \-x index
  990. X.fi
  991. X.PP
  992. X.I Ctags
  993. Xtreats the tag
  994. X.I main
  995. Xspecially in C programs.
  996. XThe tag formed is created by prepending
  997. X.I M
  998. Xto the name of the file, with a trailing .c removed, if
  999. Xany, and leading pathname components also removed.
  1000. XThis makes use of
  1001. X.I ctags
  1002. Xpractical in directories with more than one program.
  1003. X.SH "HOW TO USE WITH GNU EMACS"
  1004. XFirst, be sure
  1005. X.B "tags.el"
  1006. Xfrom this distribution is loaded, or is in a directory in your
  1007. Xload-path.
  1008. XThen you can use these commands:
  1009. X.TP 12
  1010. X.B "Meta-x visit-tags-table"
  1011. XVisit a TAGS file.
  1012. X.TP 12
  1013. X.B "Meta-."
  1014. XFind a definition for a tag.
  1015. XThe default tag is the identifier under the cursor.
  1016. XThere is name completion in the minibuffer;
  1017. Xtyping
  1018. X.B "foo TAB"
  1019. Xcompletes the identifier starting with `foo' (`foobar',
  1020. Xfor example) or lists the alternatives.
  1021. XTyping
  1022. X.B "Classname::?"
  1023. Xlists all member functions of `Classname'.
  1024. X.TP 12
  1025. X.B "Meta-,"
  1026. XFind the next definition for the tag.
  1027. XExact matches are found first, followed
  1028. Xby fuzzier matches.
  1029. X.PP
  1030. XFor more commands, see the
  1031. X.I Tags
  1032. Xtopic in the Emacs info tree.
  1033. X.SH "HOW TO USE WITH VI"
  1034. XOnce you have created a tags file, any use of
  1035. X.I vi
  1036. Xin the same directory will use that tags file.
  1037. XHere are commands that you can use:
  1038. X.TP 12
  1039. X.B "vi -t \fItag\fR"
  1040. XStarts up vi at the definition of tag.
  1041. X.TP 12
  1042. X.B "Control-]"
  1043. XFind the tag under the cursor.
  1044. X.TP 12
  1045. X.B ":ta \fItag\fR"
  1046. XFind a tag.
  1047. X.PP
  1048. XThese commands will find the first definition of tag.
  1049. XUnfortunately, there is no way to find other definitions;
  1050. Xthis is a limitation of
  1051. X.IR vi .
  1052. XFor more information, see the
  1053. X.I vi
  1054. Xdocumentation.
  1055. X.SH "ENVIRONMENT VARIABLES"
  1056. X.DT
  1057. XTEXTAGS    additional control sequences for LaTex
  1058. X.SH FILES
  1059. XTAGS        default \fIetags\fP output tags file
  1060. X.br
  1061. Xtags        default \fIctags\fP output tags file
  1062. X.SH SEE ALSO
  1063. Xemacs(1) (GNU Emacs), ex(1), vi(1)
  1064. X.br
  1065. X.IR Tags ,
  1066. Xa topic under
  1067. X.I Emacs
  1068. Xin the GNU Emacs info tree; type
  1069. X.B "C-H i"
  1070. Xto read info.
  1071. X.br
  1072. X.IR Completion ,
  1073. Xa topic under
  1074. X.I Emacs
  1075. Xin the GNU Emacs info tree.
  1076. X.SH AUTHOR
  1077. XKen Arnold wrote ctags.
  1078. XContributors include Jim Kleckner, Bill Joy, Ed Pelegri-Llopart, and
  1079. XRichard Stallman.
  1080. XSam Kendall (kendall@centerline.com) added C++ support and maintains
  1081. Xthis version.
  1082. X.SH BUGS
  1083. X.IR Ex (1)/ vi (1),
  1084. Xand thus
  1085. X.IR ctags ,
  1086. Xcannot handle more than one tag with the same name;
  1087. Xall but the first are discarded (and a warning is generated).
  1088. XThis is a problem for many languages, but particularly for C++,
  1089. Xwhich has overloaded functions,
  1090. Xand for Pascal, which can have procedures in
  1091. Xdifferent blocks with the same name.
  1092. XThis is why the
  1093. X.B \-T
  1094. Xand
  1095. X.B \-d
  1096. Xoptions are not the default for
  1097. X.IR ctags .
  1098. X.I Emacs
  1099. Xand
  1100. X.I etags
  1101. Xdo not share this limitation.
  1102. X.PP
  1103. XTricky macros in C and C++ (for example, macros that implement
  1104. Xparameterized types) can lead to spurious or missing tag entries.
  1105. X.PP
  1106. XDoes not record C/C++ macros defined to nothing.
  1107. X.PP
  1108. XDoes not understand C++ nested classes.
  1109. X.PP
  1110. XRecognition of functions, subroutines and procedures
  1111. Xfor Fortran and Pascal
  1112. Xis done is a very simpleminded way.
  1113. X.PP
  1114. XThe method of deciding whether to look for C or Pascal
  1115. Xand FORTRAN functions is a hack.
  1116. X.PP
  1117. XShould know about Pascal types.
  1118. X.PP
  1119. X.B \-x
  1120. Xseems broken.
  1121. XOn platforms that have it, use
  1122. X.B "/usr/ucb/ctags \-x"
  1123. Xinstead.
  1124. X.PP
  1125. XUse of
  1126. X.B \-tx
  1127. Xshows only the last line of each typedef.
  1128. X.PP
  1129. XSee the source code and
  1130. X.B README.2
  1131. Xfor additional bugs and suggestions for further work.
  1132. END_OF_FILE
  1133. if test 7488 -ne `wc -c <'etags.1'`; then
  1134.     echo shar: \"'etags.1'\" unpacked with wrong size!
  1135. fi
  1136. # end of 'etags.1'
  1137. fi
  1138. echo shar: End of archive 1 \(of 3\).
  1139. cp /dev/null ark1isdone
  1140. MISSING=""
  1141. for I in 1 2 3 ; do
  1142.     if test ! -f ark${I}isdone ; then
  1143.     MISSING="${MISSING} ${I}"
  1144.     fi
  1145. done
  1146. if test "${MISSING}" = "" ; then
  1147.     echo You have unpacked all 3 archives.
  1148.     rm -f ark[1-9]isdone
  1149. else
  1150.     echo You still need to unpack the following archives:
  1151.     echo "        " ${MISSING}
  1152. fi
  1153. ##  End of shell archive.
  1154. exit 0
  1155.  
  1156. exit 0 # Just in case...
  1157.