This is version.c in view mode; [Download] [Up]
/* vi:set ts=4 sw=4:
* vi:set comments=sbl\:*\ -,mb\:*,el\:*\ -,sr\:/\*,mb\:*,el\:*\/,fb\:- :
*
* VIM - Vi IMproved by Bram Moolenaar
*
* Do ":help uganda" in Vim to read copying and usage conditions.
* Do ":help credits" in Vim to see a list of people who contributed.
*/
#include "vim.h"
#include "globals.h"
#include "proto.h"
/*
* Vim originated from Stevie version 3.6 (Fish disk 217) by GRWalter (Fred)
* It has been changed beyond recognition since then.
*
* All the remarks about older versions have been removed, they are not very
* interesting. Differences between version 3.0 and 4.x can be found in
* "../doc/version4.txt".
*
* Changes between version 5.0e and 5.0f:
* - Added quite a few highlighting files, and update a few other ones.
* - Fixed: When there are only keywords, ":syntax" didn't list them, and
* highlighting didn't work.
* - Added configure check for strncasecmp(), stricmp() and strnicmp(). Added
* vim_stricmp() for when there's no library function for stricmp().
* - Fixed: In an xterm that switches screens, after exiting Vim all shell
* commands would be highlighted.
* - Fixed: Blockwise visual mode wasn't correct when moving vertically over a
* special character (displayed as two screen characters).
* - Added 'nrformat' option. Default: "hex,octal".
* - Renamed "struct option" to "struct vimoption" to avoid name clash with
* GNU getopt().
* - Fixed: ":abclear" didn't work (but ":iabclear" and ":cabclear" did work).
* - In Visual mode, "Q" is ignored (just gives a beep).
* - In Insert mode, "<C-O>Q" didn't redraw after returning.
* - Fixed: when 'nowrap' used, screen wasn't always updated correctly.
* - Fixed: "vim -c split file" displayed extra lines.
* - Added file_readable() function to expressions.
* - Included patches for Python (Moore).
* - Fixed: After starting the GUI, searched the termcap for a "gui" term.
* - Fixed: When 'hls' used, search for "^$" caused a hang.
* - Fixed for Unix: Only output an extra newline on exit when outputted
* something in the alternate screen, or when there is a message that needs
* to be cleared.
* - Fixed: w_curswant wasn't updated always, caused test20 to fail.
* - Fixed: "/a\{" did strange things, depending on previous search.
* - Fixed: When 'hls' was set, an error in the last regexp caused trouble.
* - Fixed: "c}" only redrawed one line (with -u NONE).
* - Fixed: Ex mode didn't work for GUI and systems without cooked input.
* - Fixed: MSDOS an DJGPP versions messed up interrupt handling when going to
* Ex mode. Separated raw/cooked setting and interrupt catching on/off.
* - Fixed: divide by zero crashed Vim (e.g. in ":echo % % %").
* - Fixed: Starting GUI in Ex mode could get wrong window height.
* - Fixed: For mappings, CTRL-META-A was shown as <M-^A> instead of <MC-A>,
* while :map only accepts <MC-A>. Now <M-C-A> is shown.
* - "/\(.\{2\}\)*" gave bogus error message.
* - Fixed: syntax regions didn't work correct when no syncing specified
* (e.g., a simple string didn't cross lines).
* - Fixed: Syntax highlighting didn't work for special characters when there
* is a 'hls' match in the same line.
* - Fixed: syntax match which matches an empty string was only recognized
* once at the start or just after another match.
* - Fixed: GUI highlighting: Could not set background or foreground to black
* (unless it is the default color)
* - Fixed: In Insert mode, cursor-right at end of line moved shown cursor left.
* - Various changes to make the Win32 GUI work better (Webb).
* - Implemented the "shortest match" regexp "\{-}" (Webb).
* - Added ":intro" command: Show introductory message.
* - Fixed: Unix: When using full path name in a tags file, which contains a
* link, and 'hidden' set and jumping to a tag in the current file, would
* get bogus ATTENTION message. Solved by always expanding file names, even
* when starting with '/'.
* - Fixed: When inserting a CR with 'cindent' set (and a bunch of other
* conditions) the cursor went to a wrong location.
* - Added: GUI Menu for syntax highlighting in syntax.vim.
* - Changed '|' register to '=' register (expression evaluation)
*
* Changes between version 5.0d and 5.0e:
* - Use $VIM for global vimrc, gvimrc and menu.vim files.
* - Removed os_os2_mkpd.c, it only contained the compile flags, which hardly
* ever change.
* - Fixed: After ":global" command, cursor could be past the end of the line.
* - Fixed: 'hlsearch' highlighting of special characters (e.g., a TAB) didn't
* highlight the whole thing.
* - Fixed: Variable names must not depend on 'iskeyword', because this may
* include strange characters, like '(' for help files.
* - Included xxd version xxd V1.7a (Juergen Weigert).
* - Fixed: After "Du^R" cursor could be past the end of the line.
* - Added "%", "#", "<cword>", etc. to expressions (Goldberg).
* - Added FileChangedShell autocommand event (Goldberg).
* - Expand <sfile> in an ":autocmd" when it is defined.
* - Added "nested" flag to ":autocmd", allows nesting.
* - Handle CTRL-C in GUI for external command, when "setsid()" is supported.
* - Syncing on C comments is a little bit better for // lines.
* - Changed syntax of ":region" command to require a '=' for the start, skip
* and end items. More consistent with the ":highlight" command.
* - Fixed: "r<CR>" didn't work correctly on the last char of a line.
* - Fixed: sometimes a window resize or other signal caused an endless loop,
* involving set_winsize().
* - Included a few extra syntax files. Improved a few existing ones.
* - Fixed: a syntax "end" pattern that matches the start of a line with "^"
* didn't work.
* - Fixed: Syntax keyword matching didn't work when current buffer had other
* 'iskeyword' setting (e.g., help files).
* - Added ignoring case for syntax highlighting: ":syntax case [match|ignore]".
* - Fixed: "vim -r" didn't work, it just hang (using tgetent() while 'term'
* is empty).
* - Fixed: "gk" while 'nowrap' set moved two lines up.
* - Fixed: when windows are split, a message that causes a scroll-up messed
* up one of the windows, which required a CTRL-L to be typed.
* - Added "mb" termcap option: blink. Can only be used by assigning it to
* one of the other highlight options.
* - Changed: When an :if or :elseif runs into an error, don't wait for an
* :endif, just abort the conditional.
* - Fixed: possible endless loop when using shell command in the GUI.
* - Fixed: menu's defined in the .vimrc were removed when GUI started.
* - Fixed: when syncing in C comments, skip backwards over lines that end in
* a backslash. Helps for multi-line defines.
* - Allow use of not-yet defined group names after "contains". Needed for
* ALLBUT where the current item is used.
* - Fixed: A CTRL-C inside an ":if" command stopped the screen updating.
* - Renamed "various.c" to "misc2.c", "misccmds.c to "misc1.c".
* - Fixed: was possible to move cursor beyond end of line with "''".
*
* Changes between version 5.0c and 5.0d:
* - Added Win32 GUI version (Robert Webb) !!!
* - Included Exuberant ctags 1.6b1 (Darren Hiebert). Made changes to
* Makefile to compile it.
* - Included patches for Python interface from Paul Moore.
* - Fixed crash when pasting with the mouse in insert mode.
* - Fixed menu bar not working (or even crashing gvim).
* - Fixed: RIGHTLEFT didn't work.
* - Ignore characters after "ex", "view" and "gvim" when checking startup
* mode. Allows the use of "gvim5" et. al.
* - Added "-Z" argument: start in restricted mode (like "rvim").
* - Fixed: crash whith ":unmenu *" in .gvimrc for Athena.
* - Fixed: syntax "ctermfg=" would set "ctermbg=" instead.
* - Fixed: "5>>" shifted 5 lines 5 times, instead of 1 time.
* - Fixed: CTRL-C when getting a prompt in ":global" didn't interrupt.
* - Fixed: CTRL-Y and CTRL-E in Insert mode didn't work.
* - Fixed: when 'so' is non-zero, and moving the scrollbar completely to the
* bottom, there was a lot of flashing.
* - Fixed: moving cursor with mouse in Insert mode didn't work.
* - Fixed GUI: scrollbar ident must be long for DEC Alpha.
* - Made 'guipty' default on, because so many people need it.
* - "gex" and "gview" start the GUI in ex mode or readonly mode.
* - Implemented ":set all&", set all options to their default value.
* - Stop highlighting before clearing the screen, needed for some terminals.
* - Added "getline()" evaluation function, can be used to check for type of
* syntax highlighting in script files.
* - Added "has_syntax_items" variable, is TRUE when syntax items present.
* - Fixed: Some functions called vim_regcomp() without setting reg_magic,
* which could lead to unpredictable magicness.
* - Fixed: crash when clicking around the status line, could get a selection
* with a backwards range.
* - Fixed: abbreviations didn't work.
* - Renamed "sub.c" to "various.c".
* - Changed ":syntax translate" into ":highlight link".
* - Handle all syntax stuff like 'magic' is set.
* - Removed highlight groups local to buffer. They are all global now, so
* they can be shared between buffers.
* - Added group-name argument to "syntax sync ccomment", so you can specify
* the group-name for a comment.
* - Fixed: when deleting more than one line characterwise, the last character
* wasn't deleted.
* - Fixed: tags filename relative to the current file didn't work.
*
* Changes between version 5.0b and 5.0c:
* - Set time of patch and backup file same as original file (Unix only).
* (Hiebert).
* - INCOMPATIBLE changes to command line arguments:
* "-v" now means to start Ex in Vi mode, use "-R" for read-only mode.
* "-e" now means to start Vi in Ex mode, use "-q" for quickfix.
* "-s" in Ex mode now means to run in silent (batch) mode.
* "-x" reserved for crypt, use "-f" to avoid starting a new CLI (Amiga).
* - Amiga in QuickFix mode no longer opens another window. Shell commands
* can be used now.
* - Switched to autoconf 2.12.
* - Added range to ":normal" command.
* - MSDOS: Added detection of $VIM by finding "vim.exe" in the path.
* - Win32: Added detection of $VIM by using argv[0].
* - GUI: fixed: status line could be overwritten when moving the scrollbar
* quickly (or when 'wd' is non-zero).
* - Added decmouse patches from David Binette.
* - Added "wildcard in path" patches from Karsten Sievert.
* - Included "shtags" from Stephen Riehm.
* - Made w_fraction from float to int, so Amiga doesn't need "-lm".
* - Expand environment variables with expand_env(), instead of calling the
* shell. Makes ":so $VIM/syntax/syntax.vim" a LOT faster.
* - Fixed: An ESC at the end of a ":normal" command caused a wait for a
* terminal code to finish. Now, a terminal code is not recognized when its
* start comes from a mapping or ":normal" command.
* - Included "<sfile>": file name from a ":source" command.
* - Renamed strsave() to vim_strsave(). dgux has it as a library function.
* - Renamed mk_os2pd.c to os_os2_mkpd.c, to put it with the "os_" files.
* - Renamed perl* to if_perl*.
* - Added Python interface patches from Paul Moore: if_python*.
* - Moved a lot of code outside of the big switch() statements in edit.c,
* ex_docmd.c and normal.c. Helps for compiler optimization and makes the
* code easier to understand.
* - Included patches for BeBox from Olaf Seibert.
* - Included patches from Robert Webb for GUI. Layout of the windows is now
* done inside Vim, instead of letting the layout manager do this. Makes
* Vim work with Lesstif!
*
* Changes between version 5.0a and 5.0b:
* - Renamed b_filename to b_ffname, b_xfilename to b_fname and b_sfilename to
* b_sfname. Renamed mf_xfname to mf_ffname.
* - Added ":echon" command and changed ":echo" command.
* - Added register '|': result of expression.
* - Display '#' register with ":dis" command.
* - Renamed a lot of files. All operating system dependent files are now
* preceded with "os_".
* - Read the default menus from $VIM/menu.vim
*
* Changes between version < 4.9 and 5.0a:
* - Added ":echo" command.
* - Use "datadir" in configure, instead of our own check for HELPDIR.
* - Reduced output for cursor positioning: Use CR-LF for moving to first few
* columns in next few lines; Don't output CR twice when using termios.
* - Optimized cursor positioning. Use CR, BS and NL when it's shorter than
* absolute cursor positioning.
* - Removed ':' from 'isfname' for Unix. Check for "://" in a file name
* anyway. Also check for ":\\", for MS-DOS.
* - Split cmdline.c into ex_docmd.c and ex_getln.c.
* - Don't show the mode when redrawing is disabled.
* - Disable redrawing while repeating insert "1000ii<Esc>".
* - GUI: Change cursor shape when to vertical bar when inserting and
* horizontal bar when replacing text.
* - Added '@' highlighting flag in 'highlight'.
* - Added support for "bc" termcap entry.
* - Count to "K"eyword command, when 'keywordprg' is "man", is inserted in
* the man command. "2K" results in "!man 2 <cword>"
* - When using "gf" on a relative path name, remove "../" from the filename,
* like it's done for filenames in the tags file.
* - When started as "rvim", disallow shell commands.
* - Added 'u' flag to 'cpoptions': make "u" work like in vi, but allow
* multi-level undo/redo with CTRL-R.
* - Disallow 'h' flag in 'highlight' (wasn't used anymore since 3.0).
* - Changed variable names and comments for "yank buffer" to "yank register",
* to reflect what is used in the docs.
* - When finishing recording, don't make the record register the default put
* register.
* - Changed attachment layout for Motif (Sonia Heimann).
* - Made "d$" or "D" for long lines a lot faster (delete all characters at
* once, instead of one by one).
* - When using "!!", don't put ":5,5!" on the command line, but ":.!". And
* some other enhancements to replace the line number with "." or "$" when
* possible.
* - Renamed normal() to normal_cmd(), a Mac compiler doesn't like normal().
* - Unix: Added "link.sh" script, which removes a few unneccesary libraries
* from the link command.
* - Added all the syntax highlighting stuff, in sytax.c.
* - When using $VIM and it's not set, get the directory from 'helpfile',
* excluding "/doc/help.txt".
* - Made the default for the 'helpfile' "$VIM/doc/help.txt" (added the
* "/doc" part).
* - Removed use of IObuff in vim_getenv(), makes life easier.
* - MSDOS et.al.: Renamed $VIM/viminfo to $VIM/_viminfo. It's more
* consistant: .vimrc/_vimrc and .viminfo/_viminfo
* - Moved contents of regsub.c into regexp.c, cleaned it up a little.
* - Included patches from Robert Webb for \{a,b\} in regexp patterns.
* - Included patches from Eric Fischer for first version of Ex mode.
* - For systems where case doesn't matter in file names (MSDOS, Amiga), sort
* file names while ignoring case. For buffer names too.
* - Added 'lazyredraw' option: Don't redraw the screen while executing
* macros, registers or other not typed commands.
* - Added '#' register: alternate file name.
* - Added ":hide" command, exactly the same as ":close".
* - When starting the GUI, restrict the window size to the screen size.
* - Deleted "addcr.c" and "addcr.bat". They were not very useful.
* - When resizing the window, don't redraw when redrawing is disabled. Will
* happen later.
* - Added highlighting to show the match with the last used search pattern,
* when 'hlsearch' option is set.
* - Don't use HPUX digraphs by default, but only when HPUX_DIGRAPHS is
* defined.
* - Added 't_xs', highlighting not erased by overwriting, for hpterm.
* Combined with 'weirdinvert'. Visual mode works on hpterm now.
* - Made setting special highlighting attributes a lot faster by using
* highlight_attr[], instead of searching in the 'highlight' string.
* - Did some performance optimizations, various changes to source code.
* - Access option table by first letter, instead of searching from start.
* - Added expression evaluation, ":let" command in eval.c.
* - Added ":if", ":else", ":elseif" and ":endif" commands.
* - Fixed UMR warning in set_expand_context().
* - Fixed memory leak: b_winlnum list was never freed.
* - Added patches for using Perl. ":perldo", ":perl", etc. Patches made by
* Sven Verdoolaege and Matt Gerassimoff.
* - Allow command line file-arguments and option-arguments to be mixed.
* - Added "-" commandline argument: read text from stdin.
* - When reading from stdin doesn't work, read from stderr (helps for
* "foo | xargs vim".
* - Removed the use of "did_cd": Only use the full pathname for files that
* are currently open, not for files opened after the ":cd". (Webb)
* - When resizing windows, try to keep the cursor in the same relative
* position. (Webb)
*/
#include "version.h"
char *Version = VIM_VERSION_SHORT;
char *mediumVersion = VIM_VERSION_MEDIUM;
#ifdef HAVE_DATE_TIME
char *longVersion = VIM_VERSION_LONG_DATE __DATE__ " " __TIME__ ")";
#else
char *longVersion = VIM_VERSION_LONG;
#endif
static void version_msg __ARGS((char *s));
int
get_version()
{
return (VIM_VERSION_MAJOR * 100 + VIM_VERSION_MINOR);
}
void
do_version(arg)
char_u *arg;
{
long n;
if (*arg != NUL)
{
found_version = getdigits(&arg) * 100;
if (*arg == '.' && isdigit(arg[1]))
{
/* "4.1" -> 401, "4.10" -> 410 */
n = arg[1] - '0';
if (isdigit(arg[2]))
found_version += (arg[2] - '0') + n * 10;
else
found_version += n;
}
if (found_version > get_version())
{
MSG("Warning: Found newer version command");
if (sourcing_name != NULL)
{
MSG_PUTS(" in: \"");
msg_outtrans(sourcing_name);
MSG_PUTS("\" line: ");
msg_outnum((long)sourcing_lnum);
}
}
}
else
{
/*
* When adding features here, don't forget to update the list of
* internal variables in eval.c!
*/
msg_putchar('\n');
MSG(longVersion);
#ifdef WIN32
MSG_PUTS("\nWindows NT / Windows 95 version");
#endif
#ifdef MSDOS
# ifdef DJGPP
MSG_PUTS("\n32 bit MS-DOS version");
# else
MSG_PUTS("\n16 bit MS-DOS version");
# endif
#endif
MSG_PUTS("\nCompiled with (+) or without (-):\n");
#ifdef AMIGA /* only for Amiga systems */
# ifdef NO_ARP
version_msg("-ARP ");
# else
version_msg("+ARP ");
# endif
#endif
#ifdef AUTOCMD
version_msg("+autocmd ");
#else
version_msg("-autocmd ");
#endif
#ifdef NO_BUILTIN_TCAPS
version_msg("-builtin_terms ");
#endif
#ifdef SOME_BUILTIN_TCAPS
version_msg("+builtin_terms ");
#endif
#ifdef ALL_BUILTIN_TCAPS
version_msg("++builtin_terms ");
#endif
#ifdef CINDENT
version_msg("+cindent ");
#else
version_msg("-cindent ");
#endif
#ifdef COMPATIBLE
version_msg("+compatible ");
#else
version_msg("-compatible ");
#endif
#ifdef DEBUG
version_msg("+debug ");
#endif
#ifdef DIGRAPHS
version_msg("+digraphs ");
#else
version_msg("-digraphs ");
#endif
#ifdef EMACS_TAGS
version_msg("+emacs_tags ");
#else
version_msg("-emacs_tags ");
#endif
/* only interesting on Unix systems */
#if !defined(USE_SYSTEM) && defined(UNIX)
version_msg("+fork() ");
#endif
#ifdef UNIX
# ifdef USE_GUI_MOTIF
version_msg("+GUI_Motif ");
# else
# ifdef USE_GUI_ATHENA
version_msg("+GUI_Athena ");
# else
version_msg("-GUI ");
# endif
# endif
#endif
#ifdef INSERT_EXPAND
version_msg("+insert_expand ");
#else
version_msg("-insert_expand ");
#endif
#ifdef HAVE_LANGMAP
version_msg("+langmap ");
#else
version_msg("-langmap ");
#endif
#ifdef LISPINDENT
version_msg("+lispindent ");
#else
version_msg("-lispindent ");
#endif
#ifdef HAVE_PERL_INTERP
version_msg("+perl ");
#else
version_msg("-perl ");
#endif
#ifdef HAVE_PYTHON
version_msg("+python ");
#else
version_msg("-python ");
#endif
#ifdef RIGHTLEFT
version_msg("+rightleft ");
#else
version_msg("-rightleft ");
#endif
#ifdef SMARTINDENT
version_msg("+smartindent ");
#else
version_msg("-smartindent ");
#endif
/* only interesting on Unix systems */
#if defined(USE_SYSTEM) && (defined(UNIX) || defined(__EMX__))
version_msg("+system() ");
#endif
#if defined(UNIX) || defined(__EMX__)
/* only unix (or OS/2 with EMX!) can have terminfo instead of termcap */
# ifdef TERMINFO
version_msg("+terminfo ");
# else
version_msg("-terminfo ");
# endif
#else /* unix always includes termcap support */
# ifdef HAVE_TGETENT
version_msg("+tgetent ");
# else
version_msg("-tgetent ");
# endif
#endif
#ifdef VIMINFO
version_msg("+viminfo ");
#else
version_msg("-viminfo ");
#endif
#ifdef WRITEBACKUP
version_msg("+writebackup ");
#else
version_msg("-writebackup ");
#endif
#ifdef UNIX
# if defined(WANT_X11) && defined(HAVE_X11)
version_msg("+X11 ");
# else
version_msg("-X11 ");
# endif
#endif
msg_putchar('\n');
#ifdef USR_VIMRC_FILE
version_msg(" user vimrc file: \"");
version_msg(USR_VIMRC_FILE);
version_msg("\" ");
#endif
#ifdef USR_EXRC_FILE
version_msg(" user exrc file: \"");
version_msg(USR_EXRC_FILE);
version_msg("\" ");
#endif
#ifdef USE_GUI
version_msg(" user gvimrc file: \"");
version_msg(USR_GVIMRC_FILE);
version_msg("\" ");
#endif
#ifdef SYS_VIMRC_FILE
msg_putchar('\n');
version_msg(" system vimrc file: \"");
version_msg(SYS_VIMRC_FILE);
version_msg("\"");
#endif
#ifdef USE_GUI
# ifdef SYS_GVIMRC_FILE
msg_putchar('\n');
version_msg("system gvimrc file: \"");
version_msg(SYS_GVIMRC_FILE);
MSG_PUTS("\"");
# endif
# ifdef SYS_MENU_FILE
msg_putchar('\n');
version_msg(" system menu file: \"");
version_msg(SYS_MENU_FILE);
MSG_PUTS("\"");
# endif
#endif
#ifdef HAVE_PATHDEF
msg_putchar('\n');
version_msg(" default for $VIM: \"");
version_msg((char *)default_vim_dir);
MSG_PUTS("\"\n");
version_msg("Compilation: ");
version_msg((char *)all_cflags);
msg_putchar('\n');
version_msg("Linking: ");
version_msg((char *)all_lflags);
#endif
}
}
/*
* Output a string for the version message. If it's going to wrap, output a
* newline, unless the message is too long to fit on the screen anyway.
*/
static void
version_msg(s)
char *s;
{
int len = strlen(s);
if (len < (int)Columns && msg_col + len >= (int)Columns)
msg_putchar('\n');
MSG_PUTS(s);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.