Copyright (C) 1984, 1987, 1988, 1989, 1993, 1994, 1995, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
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
+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.
+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
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with this program; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA. */
+along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* NB To comply with the above BSD license, copyright information is
* 1985 Emacs TAGS format by Richard Stallman.
* 1989 Sam Kendall added C++.
* 1992 Joseph B. Wells improved C and C++ parsing.
- * 1993 Francesco Potortì reorganised C and C++.
+ * 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ì.
extern void exit __P((int));
extern void free __P((void *));
extern void *memmove __P((void *, const void *, unsigned long));
-# ifdef VMS
-# define EXIT_SUCCESS 1
-# define EXIT_FAILURE 0
-# else /* no VMS */
-# define EXIT_SUCCESS 0
-# define EXIT_FAILURE 1
-# endif
+# define EXIT_SUCCESS 0
+# define EXIT_FAILURE 1
# endif
#endif /* !WINDOWSNT */
print_version ()
{
/* Makes it easier to update automatically. */
- char emacs_copyright[] = "Copyright (C) 2007 Free Software Foundation, Inc.";
+ char emacs_copyright[] = "Copyright (C) 2008 Free Software Foundation, Inc.";
printf ("%s (%s %s)\n", (CTAGS) ? "ctags" : "etags", EMACS_NAME, VERSION);
puts (emacs_copyright);
}
\f
-#ifdef VMS /* VMS specific functions */
-
-#define EOS '\0'
-
-/* This is a BUG! ANY arbitrary limit is a BUG!
- Won't someone please fix this? */
-#define MAX_FILE_SPEC_LEN 255
-typedef struct {
- short curlen;
- char body[MAX_FILE_SPEC_LEN + 1];
-} vspec;
-
-/*
- v1.05 nmm 26-Jun-86 fn_exp - expand specification of list of file names
- returning in each successive call the next file name matching the input
- spec. The function expects that each in_spec passed
- to it will be processed to completion; in particular, up to and
- including the call following that in which the last matching name
- is returned, the function ignores the value of in_spec, and will
- only start processing a new spec with the following call.
- If an error occurs, on return out_spec contains the value
- of in_spec when the error occurred.
-
- With each successive file name returned in out_spec, the
- function's return value is one. When there are no more matching
- names the function returns zero. If on the first call no file
- matches in_spec, or there is any other error, -1 is returned.
-*/
-
-#include <rmsdef.h>
-#include <descrip.h>
-#define OUTSIZE MAX_FILE_SPEC_LEN
-static short
-fn_exp (out, in)
- vspec *out;
- char *in;
-{
- static long context = 0;
- static struct dsc$descriptor_s o;
- static struct dsc$descriptor_s i;
- static bool pass1 = TRUE;
- long status;
- short retval;
-
- if (pass1)
- {
- pass1 = FALSE;
- o.dsc$a_pointer = (char *) out;
- o.dsc$w_length = (short)OUTSIZE;
- i.dsc$a_pointer = in;
- i.dsc$w_length = (short)strlen(in);
- i.dsc$b_dtype = DSC$K_DTYPE_T;
- i.dsc$b_class = DSC$K_CLASS_S;
- o.dsc$b_dtype = DSC$K_DTYPE_VT;
- o.dsc$b_class = DSC$K_CLASS_VS;
- }
- if ((status = lib$find_file(&i, &o, &context, 0, 0)) == RMS$_NORMAL)
- {
- out->body[out->curlen] = EOS;
- return 1;
- }
- else if (status == RMS$_NMF)
- retval = 0;
- else
- {
- strcpy(out->body, in);
- retval = -1;
- }
- lib$find_file_end(&context);
- pass1 = TRUE;
- return retval;
-}
-
-/*
- v1.01 nmm 19-Aug-85 gfnames - return in successive calls the
- name of each file specified by the provided arg expanding wildcards.
-*/
-static char *
-gfnames (arg, p_error)
- char *arg;
- bool *p_error;
-{
- static vspec filename = {MAX_FILE_SPEC_LEN, "\0"};
-
- switch (fn_exp (&filename, arg))
- {
- case 1:
- *p_error = FALSE;
- return filename.body;
- case 0:
- *p_error = FALSE;
- return NULL;
- default:
- *p_error = TRUE;
- return filename.body;
- }
-}
-
-#ifndef OLD /* Newer versions of VMS do provide `system'. */
-system (cmd)
- char *cmd;
-{
- error ("%s", "system() function not implemented under VMS");
-}
-#endif
-
-#define VERSION_DELIM ';'
-char *massage_name (s)
- char *s;
-{
- char *start = s;
-
- for ( ; *s; s++)
- if (*s == VERSION_DELIM)
- {
- *s = EOS;
- break;
- }
- else
- *s = lowcase (*s);
- return start;
-}
-#endif /* VMS */
-
-\f
int
main (argc, argv)
int argc;
int current_arg, file_count;
linebuffer filename_lb;
bool help_asked = FALSE;
-#ifdef VMS
- bool got_err;
-#endif
char *optstring;
int opt;
analyse_regex (argbuffer[i].what);
break;
case at_filename:
-#ifdef VMS
- while ((this_file = gfnames (argbuffer[i].what, &got_err)) != NULL)
- {
- if (got_err)
- {
- error ("can't find file %s\n", this_file);
- argc--, argv++;
- }
- else
- {
- this_file = massage_name (this_file);
- }
-#else
this_file = argbuffer[i].what;
-#endif
/* Input file named "-" means read file names from stdin
(one per line) and use them. */
if (streq (this_file, "-"))
}
else
process_file_name (this_file, lang);
-#ifdef VMS
- }
-#endif
break;
case at_stdin:
this_file = argbuffer[i].what;
pfatal (file);
cleanup:
- if (compressed_name) free (compressed_name);
- if (uncompressed_name) free (uncompressed_name);
+ free (compressed_name);
+ free (uncompressed_name);
last_node = NULL;
curfdp = NULL;
return;
{
register node *node_right = np->right;
free_tree (np->left);
- if (np->name != NULL)
- free (np->name);
+ free (np->name);
free (np->regex);
free (np);
np = node_right;
free_fdesc (fdp)
register fdesc *fdp;
{
- if (fdp->infname != NULL) free (fdp->infname);
- if (fdp->infabsname != NULL) free (fdp->infabsname);
- if (fdp->infabsdir != NULL) free (fdp->infabsdir);
- if (fdp->taggedfname != NULL) free (fdp->taggedfname);
- if (fdp->prop != NULL) free (fdp->prop);
+ free (fdp->infname);
+ free (fdp->infabsname);
+ free (fdp->infabsdir);
+ free (fdp->taggedfname);
+ free (fdp->prop);
free (fdp);
}
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
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, 15,
- 14, 35, 35, 35, 35, 35, 35, 35, 14, 35,
- 35, 35, 35, 12, 13, 35, 35, 35, 35, 12,
+ 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,
{
enum
{
- TOTAL_KEYWORDS = 32,
+ TOTAL_KEYWORDS = 33,
MIN_WORD_LENGTH = 2,
MAX_WORD_LENGTH = 15,
MIN_HASH_VALUE = 2,
{
{""}, {""},
{"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},
nl >= 0 && cstack.bracelev[nl] >= bracelev;
nl--)
{
- if (cstack.cname[nl] != NULL)
- free (cstack.cname[nl]);
+ free (cstack.cname[nl]);
cstack.nl = nl;
}
}
LOOP_ON_INPUT_LINES (inf, lb, cp)
{
- skip_spaces(cp);
+ cp = skip_spaces (cp);
if (LOOKING_AT (cp, "package"))
{
last[len] = '\0';
}
}
- if (last != NULL)
- free (last);
+ free (last);
}
last[len] = '\0';
}
}
- if (last != NULL)
- free (last);
+ free (last);
}
/* Build a sequence of "../" strings for the resulting relative file name. */
i = 0;
+ while (*dp == '/')
+ ++dp;
while ((dp = etags_strchr (dp + 1, '/')) != NULL)
- i += 1;
+ {
+ i += 1;
+ while (*dp == '/')
+ ++dp;
+ }
res = xnew (3*i + strlen (fp + 1) + 1, char);
res[0] = '\0';
while (i-- > 0)