* etags.c: Prolog language totaly rewritten.
(Prolog_functions): Rewritten from scratch.
(skip_comment, prolog_getit): Removed.
(prolog_skip_comment): New function, like old skip_comment.
(prolog_pred, prolog_atom, prolog_white): New functions.
(erlang_func, erlang_attributes): Forward declarations added.
(erlang_atom): Check if backslash ends line inside quoted atom.
* etags.c (absolutefn): DOS_NT version corrected.
(main): Append "/" to the dir name only if not already there.
(print_help): Explain the absolute/relative file name issue.
* etags.c: New Languange Erlang added.
(Erlang_functions, erlang_func, erlang_attribute, erlang_atom,
erlang_white): New functions.
(Erlang_suffixes): New suffix list.
(lang_names): Erlang entry added.
(prolog_getit): Accepts headers spanning several lines.
Always name tags.
(Prolog_functions): Removed incorrect compensation for
newline characters.
(readline_internal): Zero-terminate last line.
(gperf): Added keywords for Objective C and GNU macros.
(sym_type): Added values to account for Objective C and GNU macros.
(begtk): The '@' character can start a token.
(objdef, methodlen, objtag): New variables for Objective C.
(consider_token, C_entries): Added code for Objective C.
(plain_C_suffixes): Add .m and .lm for Objective C.
(Yacc_suffixes): Add .ym for Objective yacc.
(GROW_LINEBUFFER): New macro.
(consider_token, C_entries, Pascal_functions): Use the new macro.
(consider_token): Take one more argument. Caller changed.
(consider_token): Use the hashing function to spot GNU macros.
(C_entries): Consider // as a comment start even in plain C for
the sake of Objective C parsing.
(pfnote): Don't make a tag for ctags if there is no name.
(getit, Asm_labels, Perl_functions, Pascal_functions, L_getit,
get_scheme, prolog_getit): Name the tag in ctags mode.
(pfnote): Truncate ctags lines to 50 chars, like it worked once.
(Perl_interpreters): Accept "@PERL@" as an interpreter.
(suggest_asking_for_help): New function.
(main, get_language_from_name): Use suggest_asking_for_help.
(main): Let get_language_from_name make language existence check.
(streq, strneq): Check the arguments #if DEBUG.
get_lang_from_suffix): New functions.
(get_language): Function deleted.
(lang_entry): Two members added to struct.
(lang_names): Reflect the new layout of lang_entry.
(print_language_names, main, find_entries): Use the new functions.
(find_entries): Look at the first line for #! if no language.
(C_entries): Invalidate the token when funcdef is reset.
(Perl_functions): New function.
(lang_suffixes): .pl and .pm are Perl suffixes.
(substitute): Remove some wrong and some useless code related with
escape `\` character in regexp replacement string.
(TEX_defenv): Added part, appendix, entry, index. Removed typeout.
(lang_suffixes): New suffixes: .hpp for C++; .f90 for Fortran;
.bib, .ltx, .TeX for TeX (.bbl, .dtx removed); .ml for Lisp;
.prolog for prolog (.pl removed).
(massage_name, etags_getcwd): Use lowcase instead of tolower.
(regex.h): Don't include it if REGEX_IN_LIBC is defined.
(C_entries, find_entries): Added comments about memory leakage.
(add_node): Dead code removed.
(add_node): Correctly compare node file names.
(Pascal_functions): Correctly allocate and free memory for tline.
(pfnote): Put the definition of fp in the innermost block.
(NODE): `named' member removed.
(pfnote, free_tree, put_entries, total_size_of_entries): Do not
use the `named' member, check whether `name' is NULL instead.
(pfnote): `named' argument removed, all callers changed.
(getit, Asm_labels, Pascal_functions, L_getit, get_scheme,
TeX_functions, TEX_getit, prolog_getit): Useless string allocation
removed from pfnote call, some code cleanup.
(relative_filename): Free temporary space allocated by concat.
(lowcase): new macro.
(tail, Fortran_functions, Pascal_functions): use new macro lowcase.
(lang_suffixes): new suffix ".pc" for Pro*C files.
(consider_token): don't tag all tokens beginning with DEFUN & Co..
(tail): look for the end of the token when comparing.
(takeprec): since now tail behaves differently, use strneq.
(make-docfile.exe,hexl.exe,wakeup.exe,etags.exe): Don't depend upon LIBS.
(DOC): Use del instead of rm.
(DOC) [WINDOWS95]: Use DOC.
(clean): Handle MSVC aux files.
(config.h,paths.h): Use $(CP) instead of cp.
(config.h): Use $(CONFIG_H)
(make-docfile.obj): Depend upon config.h.
Clean up comments.
(DOC): Place DOC strings in DOC-X.
(config.h, paths.h): New source location.
(all): Use COMPAT_LIB in library list.
Use DEL_TREE instead of delnode.
(etags.exe): Use $(LINK) instead of link32.
(now obsolescent) -n login fullname mailaddr option.
Don't omit path from repository root when logging CVS files.
Add -R option for recursive rlog.
(AWK): New environment variable (default `awk') for name of awk program.
(output_authors, tab, loginFullnameMailaddrs, recursive): New variables.
Quote authors and fullnames correctly.
savetok.valid. Mark token as valid when it is initialised.
(make_tag): Make token only if token is valid and reset validity.
(CNL_SAVE_DEFINEDEF): Test for savetok.valid instead of token_saved.
(TOKEN): Added a new member: valid.
(C_entries): Do not allocate a new space for each token found by
consider_token. Let make_tag do that instead.
(make_tag): Since now TOKEN has memory of where it is taken from,
this new macro substitutes both make_tag_from_new_lb and
make_tag_from_oth_lb. All callers changed.
(TOKEN): Add linepos and buffer members.
(main): Initialise token_str.
(lang_extensions): Recognise .c++ and .h++ as C++ file suffixes.
(token_str): New global variable used by C_entries.
of fixed length static buffers in many places.
* etags.c (FILEPOS, GET_CHARNO, GET_FILEPOS, max, LINENO): Deleted.
(append_to_tagfile, typedefs, typedefs_and_cplusplus,
constantypedefs, update, vgrind_style, no_warnings,
cxref_style, cplusplus, noindentypedefs): Were int, now logical.
(permit_duplicates): Was a var, now a #define.
(filename_lb): Was global, now local to main.
(main): Open the tag file when in cxref mode.
Use a BUFSIZ size buffer for making the shell commands.
Look at the return value from the system routine.
Exit when cannot open the tag file.
(process_file): Open the file and pass the FILE* to find_entries.
(find_entries): Now void, because does not open the file itself.
(pfnote): Recovering from lack of memory does not work. Removed.
Use savenstr and simplify the code.
(free_tree): Only free the name space if node is named.
(structtag): Now a pointer, not a fixed length array of chars.
(consider_token): Don't take a token as argument. Use savenstr
when saving a tag in structtag. Callers changed.
(TOKEN): Structure changed. Now used only in C_entries.
(TOKEN_SAVED_P, SAVE_TOKEN, RESTORE_TOKEN): Deleted.
(C_entries): nameb and savenameb deleted. Use dinamic allocation.
(pfcnt): Deleted. Users updated.
(getit, Asm_labels, Pascal_functions, L_getit, get_scheme,
TEX_getit, prolog_getit): Use dinamic allocation for storing
the tag instead of a fixed size buffer.
language functions, because many compilers are buggy.
(etags_getcwd): Fix the previous fix on the #else branch.
(readline_internal): Discard possible \r before \n here.
(C_entries): Do not deal with \r here: undo previous fix.
functions and a macro that allow the program to work on input
lines of whatever length. Copied from etags.c.
(fatal): Print a fatal error message and exit.
(main): Use the new functions. Fixed a bug that made a \037 char
appear at the end of the output.
(main): If socket/mqueue name is in home dir, add in the host name.
Rename .emacs_server to .emacs-server-....
[!HAVE_SYSVIPC] (main): Fix error message diction.
is compiled if this is defined. The new functions and variables
added #ifdef ETAGS_REGEXP are not listed in this ChangeLog.
[VMS]: All VMS specific code previously contained in
etags-vmslib.c is now included here, modified for dealing with
language and regex options intermixed with filenames.
(header_file): Global variable deleted.
(Lang_Function): New typedef. All language parser functions
changed to this new type.
(string_numeric_p, substr, prestr): Functions deleted.
(readline_internal): Does the job that readline did previously.
(longopts): --language and --regex options added.
(lang_names, lang_extensions, lang_func, print_language_names):
New structures, variables and functions for choosing languages.
(print_help): Help strings updated. Calls print_language_names.
(argument_type, ARGUMENT): Typedefs for dealing with language and
regex options intermixed with filenames.
(main): Changed the way of dealing with arguments on the command
line to deal with language and regex options intermixed with
filenames.
(get_language, default_C_entries, Cplusplus_entries,
Cstar_entries, Yacc_entries, just_read_file): New functions.
(find_entries): Use the new method for choosing the language.
(Pascal_functions): Allow intermixing of comment styles.
(prolog_getit, skip_comment): Rewritten for speed.
(readline): Rewritten to deal with regexps.
fails, store the fact that we've searched it and don't search it
again after reading more data.
(getline): When determining whether or not it's necessary
to grow the input buffer, take into account the null that's stored
at the end of already-read input in the buffer.
(consider_token): Comment out "EXFUN". Use "DEFUN" instead of "DEF".
(consider_token): set funcdef to fignore when a DEFUN is met.
(C_entries): Now we can use Tom Hageman patch for extern "C".
defined, and if HAVE_CONFIG_H isn't defined, define
MAIL_USE_POP always (so that this file can be included in
other programs besides emacs).
Only declare h_errno if HAVE_H_ERRNO isn't defined or
HAVE_CONFIG_H isn't defined.
(find_crlf, getline): Instead of using strstr, use a
custom function for finding CRLF.
(my_strstr): Function deleted.
Don't include string.h or strings.h.
Include des.h before krb.h.
Do declare my_strstr.
(getline): Really use my_strstr.
Leave one empty place in server->buffer,
and put a null at the end of the data in it.
(C_entries): Recognise #define inside a struct.
(C_entries): ANSI tells that preprocessor commands do not have to
start on the first column.
(print_help): Documentation corrected for -d and -D.
(white, endtk): ANSI tells the vertical tab is a separator.
(mbx_delimit_end, mbx_delimit_begin): Check for errors.
(mbx_write): Check for errors and for From line.
(pop_retr, popmail): Use subroutines in pop.c to do the real work.
(get_errmsg, multiline, getline, putline, pop_stat, pop_command)
(pop_init): Functions deleted.
print advice to run it, if it has anything significant to do.
And only if MOVEMAIL_NEEDS_BLESSING.
(blessmail): Use emacs, not temacs.
(configuration): Renamed from configname.
Makefile.in is now generated from it, and then preprocessed.
Change comments to C syntax.
Include config.h.
(LIBS_SYSTEM, LIBS_MACHINE): Define as empty if not defined.
(LOADLIBES): Define from LIBS_SYSTEM and LIBS_MACHINE.
(PF_funcs, Asm_funcs, L_funcs, PAS_funcs, TEX_funcs,
Scheme_funcs, prolog_funcs): renamed to Fortran_functions,
Asm_labels, Lisp_functions, Pascal_functions, Scheme_functions,
TeX_functions, Prolog_functions.
(inf): no more a global variable.
(C_entries): take 2nd parameter `inf' instead of using the global one.
(find_entries): added the cp1 var for optimisation.
(find_entries): added more suffixes for assembler files.
(Asm_funcs): Now finds labels even without an ending colon.
the indesc open was moved inside a fork.
Handle MAIL_USE_LOCKF.
(MAIL_USE_SYSTEM_LOCK): New conditional macro.
Define it if either MAIL_USE_FLOCK or MAIL_USE_LOCKF.
(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.
(relative_filename, absolute_filename, absolute_dirname):
functions added to compute filenames in tags files.
(process_file): filenames in tags file are relative to the
directory where the tags file is (useful with the -o option).
(main): initialise the outfiledir var.
(TYPEDST): added the `tignore' value.
(C_entries): corrected various small bugs.
(longopts, print_help, main, process_file): put absolute filenames
in the tag file if the -A --absolute-pathnames option is used.
(print_help): alfabetically order the options.
(malloc, realloc, strcpy, strncpy, strcmp): remove extern declar.
(schedule): Don't return a value.
(sigcatch): Reestablish the handler first.
(getevent): Always call notify at the end.
(notify): Defer alarms around the whole body of function.
(main): Don't request SIGIO, and don't handle it.
Loop calling getevent.
(sigcatch): Delete code to handle SIGIO.
If defer_alarms is set, don't call notify, just set alarm_deferred.
(getevent): Use read, not getchar. Handle EINTR and EAGAIN.
Set defer_alarms around realloc and schedule.
If alarm_deferred gets set, call notify.
Likewise if this event is the only pending event.
Make buf and buf_size global variables.
Don't malloc buf if it is already non-zero.
(schedule): Just exit if run out of memory.
Return the number of events.
(signal) [_CX_UX]: Add #undef.
(write_c_args): Take new arg FUNC. Make output look like lisp call
prototypes: (function ARG1 ARG2), upcasing arg names.
(scan_c_file): Pass BUF to write_c_args for FUNC arg.
stab_type, add_keyword, C_reate_stab, C_create_stabs): deleted.
Use gperf generated hash table instead of linked list.
(C_stab_entry, hash, in_word_set, get_C_stab, C_symtype): added.
Mostly code generated by gperf.
(consider_token): removed unused parameter `lp'.
(PF_funcs, getit): allow subroutine and similar declarations
to span multiple lines.
(C_entries): check for newline if inchar to avoid bus errors.
(process_file, find_entries): distinguish among nonexistent
and not regular file.
* etags.c: (C_entries): Keep track of ()-parenthesis level so that
functions returning a pointer to a function, a la `signal', can be
parsed. This also required new state `fstartlist' to `FUNCST'.
(SAVE_TOKEN, RESTORE_TOKEN, TOKEN_SAVED_P): 1-deep token save stack.
(C_entries, CNL): use it to isolate preprocessor directive processing
from the other state engines.
(begtk): add '~', for C++ class destructors.
directory. Only chmod and chgrp files that we installed, which
excludes ${INSTALLABLE_SCRIPTS}. They go in ${bindir}.
(INSTALLFLAGS): Deleted definition, since it is an unused variable now.
* etags.c (C_entries): is_func is initialised here instead of in
consider_token for the sake of the yacc rules section.
(C_entries): Now class, struct, enum, union and typedef produce
named tags.
(L_funcs): the (foo::defmumble stuff now should work.
(consider_token): function returned random value--corrected.
(C_entries): corrected == versus = typo.
* etags.c (FINCST): added the fignore status. Means we are
after the parameter list and before the open curly brace.
Allows correct parsing of C++ constructors.
(C_entries, consider_token): make use of fignore.
(consider_token): reset funcdef when next_token_is_func: when in
ctags mode makes DEFVAR and others work better.
(L_isquote): function that recognises the "(quote" string.
(L_getit): ignore quoting via "'" or "(quote". Useful for defalias.
(main): now calls xnew instead of alloca for portability.
(../src/config.h): included only if HAVE_CONFIG_H.
(const): void definition removed--config.h takes care of it.
(consider_token): DEFUNs now treated like funcs in ctags mode.
(LEVEL_OK_FOR_FUNCDEF): removed.
(C_entries): optimized the test that used LEVEL_OK_FOR_FUNCDEF.
(C_entries): removed a piece of useless code.
(C_entries): making typedef tags is delayed until a semicolon
is met. This handles "typedef int X, Y, Z;" correctly.
* Makefile.in (YACC): New variable.
(lib-src/Makefile.in): Edit YACC into the makefile.
* Makefile.in (YACC): New variable, to be set by top-level Makefile.