* etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
authorFrancesco Potortì <pot@gnu.org>
Fri, 25 Mar 1994 14:31:24 +0000 (14:31 +0000)
committerFrancesco Potortì <pot@gnu.org>
Fri, 25 Mar 1994 14:31:24 +0000 (14:31 +0000)
(main): don't allow the use of -t and -T in etags mode.
(print_help): don't show options enabled by default.
(print_version): show the emacs version number if VERSION is #defined.
(find_entries): add "ss" as suffix for Chez Scheme.

lib-src/etags.c

index 461d9dc..0a77dbc 100644 (file)
@@ -28,7 +28,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  *     Francesco Potorti` (pot@cnuce.cnr.it) is the current maintainer.
  */
 
-char etags_version[] = "@(#) pot revision number is 10.15";
+char pot_etags_version[] = "@(#) pot revision number is 10.18";
 
 #ifdef MSDOS
 #include <fcntl.h>
@@ -53,33 +53,23 @@ extern char *getenv ();
 extern char *getcwd ();
 
 
-/* Define the symbol ETAGS to make the program "etags",
- which makes emacs-style tag tables by default.
- Define CTAGS to make the program "ctags" compatible with the usual one.
- Define neither one to get behavior that depends
- on the name with which the program is invoked
- (but we don't normally compile it that way).  */
-
-#if !defined(ETAGS) && !defined(CTAGS)
-/* If neither is defined, program can be run as either. */
-#define ETAGS
-#define CTAGS
-#endif
-
-/* On VMS, CTAGS is not useful, so always do ETAGS.  */
-#ifdef VMS
-#ifndef ETAGS
-#define ETAGS
-#endif
+/* Define CTAGS to make the program "ctags" compatible with the usual one.
+ Let 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
 
 /* Exit codes for success and failure.  */
 #ifdef VMS
-#define        GOOD    (1)
-#define BAD    (0)
+#define        GOOD    1
+#define BAD    0
 #else
-#define        GOOD    (0)
-#define        BAD     (1)
+#define        GOOD    0
+#define        BAD     1
 #endif
 
 /*
@@ -247,15 +237,13 @@ char *curfile,                    /* current input file name              */
  *intk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz$0123456789";
 
 int append_to_tagfile;         /* -a: append to tags */
-int emacs_tags_format;         /* emacs style output (no -e option any more) */
 /* The following three default to 1 for etags, but to 0 for ctags.  */
 int typedefs;                  /* -t: create tags for typedefs */
 int typedefs_and_cplusplus;    /* -T: create tags for typedefs, level */
                                /* 0 struct/enum/union decls, and C++ */
-                               /* member functions */
+                               /* member functions. */
 int constantypedefs;           /* -d: create tags for C #define and enum */
-                               /* constants. Default under etags.  Enum */
-                               /* constants not implemented. */
+                               /* constants.  Enum consts not implemented. */
                                /* -D: opposite of -d.  Default under ctags. */
 int update;                    /* -u: update tags */
 int vgrind_style;              /* -v: create vgrind style index output */
@@ -316,16 +304,11 @@ struct
 void
 print_version ()
 {
-#ifdef CTAGS
-  printf ("CTAGS ");
-#ifdef ETAGS
-  printf ("and ");
-#endif
-#endif
-#ifdef ETAGS
-  printf ("ETAGS ");
-#endif
-  printf ("for Emacs version 19.\n");
+#ifdef VERSION
+  printf ("%s for Emacs version %g.\n", (CTAGS) ? "CTAGS" : "ETAGS", VERSION);
+#else
+  printf ("%s for Emacs version 19.\n", (CTAGS) ? "CTAGS" : "ETAGS");
+#endif  
 
   exit (GOOD);
 }
@@ -340,48 +323,34 @@ names from stdin.\n\n", progname);
   puts ("-a, --append\n\
         Append tag entries to existing tags file.");
 
-#ifdef CTAGS
-  puts ("-B, --backward-search\n\
+  if (CTAGS)
+    puts ("-B, --backward-search\n\
         Write the search commands for the tag entries using '?', the\n\
         backward-search command.");
-#endif
 
   puts ("-C, --c++\n\
         Treat files with `.c' and `.h' extensions as C++ code, not C\n\
         code.  Files with `.C', `.H', `.cxx', `.hxx', or `.cc'\n\
         extensions are always assumed to be C++ code.");
 
-#ifdef ETAGS
-  puts ("-d, --defines\n\
-        Create tag entries for #defines, too.  This is the default\n\
-        behavior.");
-#else
-  puts ("-d, --defines\n\
-        Create tag entries for #defines, too.");
-#endif
-
-#ifdef CTAGS
-  puts ("-D, --no-defines\n\
-        Don't create tag entries for #defines.  This is the default\n\
-        behavior.");
-#else
-  puts ("-D, --no-defines\n\
-        Don't create tag entries for #defines.");
-#endif
+  if (CTAGS)
+    puts ("-d, --defines\n\
+        Create tag entries for C #defines, too.");
+  else
+    puts ("-D, --no-defines\n\
+        Don't create tag entries for C #defines.  This makes the tags\n\
+       file smaller.");
 
-#ifdef CTAGS
-  puts ("-F, --forward-search\n\
+  if (CTAGS)
+    puts ("-F, --forward-search\n\
         Write the search commands for the tag entries using '/', the\n\
         forward-search command.");
-#endif
 
-
-#ifdef ETAGS
-  puts ("-i FILE, --include=FILE\n\
+  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.");
-#endif
 
   puts ("-o FILE, --output=FILE\n\
         Write the tags to FILE.");
@@ -389,35 +358,39 @@ names from stdin.\n\n", progname);
         Don't rely on indentation quite as much as normal.  Currently,\n\
         this means not to assume that a closing brace in the first\n\
         column is the final brace of a function or structure\n\
-        definition.");
-  puts ("-t, --typedefs\n\
-        Generate tag entries for typedefs.  This is the default\n\
-        behavior.");
-  puts ("-T, --typedefs-and-c++\n\
-        Generate tag entries for typedefs, struct/enum/union tags, and\n\
-        C++ member functions.");
+        definition in C and C++.");
 
-#ifdef CTAGS
-  puts ("-u, --update\n\
+  if (CTAGS)
+    {
+      puts ("-t, --typedefs\n\
+        Generate tag entries for C 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.");
-  puts ("-v, --vgrind\n\
+      puts ("-v, --vgrind\n\
         Generates an index of items intended for human consumption,\n\
         similar to the output of vgrind.  The index is sorted, and\n\
         gives the page number of each item.");
-  puts ("-x, --cxref\n\
+      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 ("-w, --no-warn\n\
+      puts ("-w, --no-warn\n\
         Suppress warning messages about entries defined in multiple\n\
         files.");
-#endif
+    }
 
   puts ("-V, --version\n\
         Print the version of the program.\n\
@@ -451,23 +424,17 @@ main (argc, argv)
 
   progname = argv[0];
 
-#ifndef CTAGS
-  emacs_tags_format = 1;
-#else
-  emacs_tags_format = 0;
-#endif
-
   /*
    * If etags, always find typedefs and structure tags.  Why not?
    * Also default is to find macro constants.
    */
-  if (emacs_tags_format)
+  if (!CTAGS)
     typedefs = typedefs_and_cplusplus = constantypedefs = 1;
 
   for (;;)
     {
       int opt;
-      opt = getopt_long (argc, argv, "aCdDo:f:StTi:BFuvxwVH", longopts, 0);
+      opt = getopt_long (argc, argv, "aCdDf:o:StTi:BFuvxwVH", longopts, 0);
 
       if (opt == EOF)
        break;
@@ -492,7 +459,7 @@ main (argc, argv)
        case 'D':
          constantypedefs = 0;
          break;
-       case 'f':
+       case 'f':               /* for compatibility with old makefiles */
        case 'o':
          if (outfile)
            {
@@ -505,13 +472,6 @@ main (argc, argv)
        case 'S':
          noindentypedefs++;
          break;
-       case 't':
-         typedefs++;
-         break;
-       case 'T':
-         typedefs++;
-         typedefs_and_cplusplus++;
-         break;
        case 'V':
          print_version ();
          break;
@@ -521,7 +481,7 @@ main (argc, argv)
 
          /* Etags options */
        case 'i':
-         if (!emacs_tags_format)
+         if (CTAGS)
            goto usage;
          included_files[nincluded_files++] = optarg;
          break;
@@ -529,31 +489,35 @@ main (argc, argv)
          /* Ctags options. */
        case 'B':
          searchar = '?';
-         if (emacs_tags_format)
-           goto usage;
+         if (!CTAGS) goto usage;
          break;
        case 'F':
          searchar = '/';
-         if (emacs_tags_format)
-           goto usage;
+         if (!CTAGS) goto usage;
+         break;
+       case 't':
+         typedefs++;
+         if (!CTAGS) goto usage;
+         break;
+       case 'T':
+         typedefs++;
+         typedefs_and_cplusplus++;
+         if (!CTAGS) goto usage;
          break;
        case 'u':
          update++;
-         if (emacs_tags_format)
-           goto usage;
+         if (!CTAGS) goto usage;
          break;
        case 'v':
          vgrind_style++;
          /*FALLTHRU*/
        case 'x':
          cxref_style++;
-         if (emacs_tags_format)
-           goto usage;
+         if (!CTAGS) goto usage;
          break;
        case 'w':
          no_warnings++;
-         if (emacs_tags_format)
-           goto usage;
+         if (!CTAGS) goto usage;
          break;
 
        default:
@@ -573,7 +537,7 @@ main (argc, argv)
 
   if (outfile == NULL)
     {
-      outfile = emacs_tags_format ? "TAGS" : "tags";
+      outfile = CTAGS ? "tags" : "TAGS";
     }
   getcwd (cwd, BUFSIZ);                /* the current working directory */
   strcat (cwd, "/");
@@ -595,7 +559,7 @@ main (argc, argv)
   /*
    * loop through files finding functions
    */
-  if (emacs_tags_format)
+  if (!CTAGS)
     {
       if (streq (outfile, "-"))
        outf = stdout;
@@ -644,7 +608,7 @@ main (argc, argv)
        process_file (this_file);
     }
 
-  if (emacs_tags_format)
+  if (!CTAGS)
     {
       while (nincluded_files-- > 0)
        fprintf (outf, "\f\n%s,include\n", *included_files++);
@@ -711,7 +675,7 @@ process_file (file)
     {
       return;
     }
-  if (emacs_tags_format)
+  if (!CTAGS)
     {
       char *filename;
 
@@ -809,6 +773,7 @@ find_entries (file)
             || streq (cp + 1, "scheme")
             || streq (cp + 1, "t")
             || streq (cp + 1, "sch")
+            || streq (cp + 1, "ss")
             || streq (cp + 1, "SM")
             || streq (cp + 1, "SCM")
             /* The `SCM' or `scm' prefix with a version number */
@@ -923,7 +888,7 @@ pfnote (name, is_func, named, linestart, linelen, lno, cno)
   np = xnew (1, NODE);
   if (np == NULL)
     {
-      if (!emacs_tags_format)
+      if (CTAGS)
        {
          /* It's okay to output early in etags -- it only disrupts the
           * character count of the tag entries, which is no longer used
@@ -937,7 +902,7 @@ pfnote (name, is_func, named, linestart, linelen, lno, cno)
       np = xnew (1, NODE);
     }
   /* If ctags mode, change name "main" to M<thisfilename>. */
-  if (!emacs_tags_format && !cxref_style && streq (name, "main"))
+  if (CTAGS && !cxref_style && streq (name, "main"))
     {
       fp = etags_rindex (curfile, '/');
       name = concat ("M", fp == 0 ? curfile : fp + 1, "");
@@ -954,7 +919,7 @@ pfnote (name, is_func, named, linestart, linelen, lno, cno)
   /* UNCOMMENT THE +1 HERE: */
   np->cno = cno /* + 1 */ ;    /* our char numbers are 0-base; emacs's are 1-base */
   np->left = np->right = 0;
-  if (emacs_tags_format)
+  if (!CTAGS)
     {
       c = linestart[linelen];
       linestart[linelen] = 0;
@@ -965,7 +930,7 @@ pfnote (name, is_func, named, linestart, linelen, lno, cno)
       linestart = tem;
     }
   np->pat = savestr (linestart);
-  if (emacs_tags_format)
+  if (!CTAGS)
     {
       linestart[linelen] = c;
     }
@@ -1019,7 +984,7 @@ add_node (node, cur_node_p)
       return;
     }
 
-  if (emacs_tags_format)
+  if (!CTAGS)
     {
       /* Etags Mode */
       if (last_node == NULL)
@@ -1085,7 +1050,7 @@ put_entries (node)
 
   /* Output this entry */
 
-  if (emacs_tags_format)
+  if (!CTAGS)
     {
       if (node->named)
        {
@@ -1150,9 +1115,10 @@ number_len (num)
 
 /*
  * Return total number of characters that put_entries will output for
- * the nodes in the subtree of the specified node.  Works only if emacs_tags_format
- * is set, but called only in that case.  This count is irrelevant with
- * the new tags.el, but is still supplied for backward compatibility.
+ * the nodes in the subtree of the specified node.  Works only if
+ * we are not ctags, but called only in that case.  This count
+ * is irrelevant with the new tags.el, but is still supplied for
+ * backward compatibility.
  */
 int
 total_size_of_entries (node)