diff src/version.c @ 7:3fc0f57ecb91 v7.0001

updated for version 7.0001
author vimboss
date Sun, 13 Jun 2004 20:20:40 +0000
parents
children 4424b47a0797
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/src/version.c
@@ -0,0 +1,1219 @@
+/* vi:set ts=8 sts=4 sw=4:
+ *
+ * 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.
+ * See README.txt for an overview of the Vim source code.
+ */
+
+#include "vim.h"
+
+#ifdef AMIGA
+# include <time.h>	/* for time() */
+#endif
+
+/*
+ * Vim originated from Stevie version 3.6 (Fish disk 217) by GRWalter (Fred)
+ * It has been changed beyond recognition since then.
+ *
+ * Differences between version 5.x and 6.x can be found with ":help version6".
+ * Differences between version 4.x and 5.x can be found with ":help version5".
+ * Differences between version 3.0 and 4.x can be found with ":help version4".
+ * All the remarks about older versions have been removed, they are not very
+ * interesting.
+ */
+
+#include "version.h"
+
+char	*Version = VIM_VERSION_SHORT;
+char	*mediumVersion = VIM_VERSION_MEDIUM;
+
+#if defined(HAVE_DATE_TIME) || defined(PROTO)
+# if (defined(VMS) && defined(VAXC)) || defined(PROTO)
+char	longVersion[sizeof(VIM_VERSION_LONG_DATE) + sizeof(__DATE__)
+						      + sizeof(__TIME__) + 3];
+    void
+make_version()
+{
+    /*
+     * Construct the long version string.  Necessary because
+     * VAX C can't catenate strings in the preprocessor.
+     */
+    strcpy(longVersion, VIM_VERSION_LONG_DATE);
+    strcat(longVersion, __DATE__);
+    strcat(longVersion, " ");
+    strcat(longVersion, __TIME__);
+    strcat(longVersion, ")");
+}
+# else
+char	*longVersion = VIM_VERSION_LONG_DATE __DATE__ " " __TIME__ ")";
+# endif
+#else
+char	*longVersion = VIM_VERSION_LONG;
+#endif
+
+static void version_msg __ARGS((char *s));
+
+static char *(features[]) =
+{
+#ifdef AMIGA		/* only for Amiga systems */
+# ifdef FEAT_ARP
+	"+ARP",
+# else
+	"-ARP",
+# endif
+#endif
+#ifdef FEAT_ARABIC
+	"+arabic",
+#else
+	"-arabic",
+#endif
+#ifdef FEAT_AUTOCMD
+	"+autocmd",
+#else
+	"-autocmd",
+#endif
+#ifdef FEAT_BEVAL
+	"+balloon_eval",
+#else
+	"-balloon_eval",
+#endif
+#ifdef FEAT_BROWSE
+	"+browse",
+#else
+	"-browse",
+#endif
+#ifdef NO_BUILTIN_TCAPS
+	"-builtin_terms",
+#endif
+#ifdef SOME_BUILTIN_TCAPS
+	"+builtin_terms",
+#endif
+#ifdef ALL_BUILTIN_TCAPS
+	"++builtin_terms",
+#endif
+#ifdef FEAT_BYTEOFF
+	"+byte_offset",
+#else
+	"-byte_offset",
+#endif
+#ifdef FEAT_CINDENT
+	"+cindent",
+#else
+	"-cindent",
+#endif
+#ifdef FEAT_CLIENTSERVER
+	"+clientserver",
+#else
+	"-clientserver",
+#endif
+#ifdef FEAT_CLIPBOARD
+	"+clipboard",
+#else
+	"-clipboard",
+#endif
+#ifdef FEAT_CMDL_COMPL
+	"+cmdline_compl",
+#else
+	"-cmdline_compl",
+#endif
+#ifdef FEAT_CMDHIST
+	"+cmdline_hist",
+#else
+	"-cmdline_hist",
+#endif
+#ifdef FEAT_CMDL_INFO
+	"+cmdline_info",
+#else
+	"-cmdline_info",
+#endif
+#ifdef FEAT_COMMENTS
+	"+comments",
+#else
+	"-comments",
+#endif
+#ifdef FEAT_CRYPT
+	"+cryptv",
+#else
+	"-cryptv",
+#endif
+#ifdef FEAT_CSCOPE
+	"+cscope",
+#else
+	"-cscope",
+#endif
+#if defined(FEAT_CON_DIALOG) && defined(FEAT_GUI_DIALOG)
+	"+dialog_con_gui",
+#else
+# if defined(FEAT_CON_DIALOG)
+	"+dialog_con",
+# else
+#  if defined(FEAT_GUI_DIALOG)
+	"+dialog_gui",
+#  else
+	"-dialog",
+#  endif
+# endif
+#endif
+#ifdef FEAT_DIFF
+	"+diff",
+#else
+	"-diff",
+#endif
+#ifdef FEAT_DIGRAPHS
+	"+digraphs",
+#else
+	"-digraphs",
+#endif
+#ifdef FEAT_DND
+	"+dnd",
+#else
+	"-dnd",
+#endif
+#ifdef EBCDIC
+	"+ebcdic",
+#else
+	"-ebcdic",
+#endif
+#ifdef FEAT_EMACS_TAGS
+	"+emacs_tags",
+#else
+	"-emacs_tags",
+#endif
+#ifdef FEAT_EVAL
+	"+eval",
+#else
+	"-eval",
+#endif
+#ifdef FEAT_EX_EXTRA
+	"+ex_extra",
+#else
+	"-ex_extra",
+#endif
+#ifdef FEAT_SEARCH_EXTRA
+	"+extra_search",
+#else
+	"-extra_search",
+#endif
+#ifdef FEAT_FKMAP
+	"+farsi",
+#else
+	"-farsi",
+#endif
+#ifdef FEAT_SEARCHPATH
+	"+file_in_path",
+#else
+	"-file_in_path",
+#endif
+#ifdef FEAT_FIND_ID
+	"+find_in_path",
+#else
+	"-find_in_path",
+#endif
+#ifdef FEAT_FOLDING
+	"+folding",
+#else
+	"-folding",
+#endif
+#ifdef FEAT_FOOTER
+	"+footer",
+#else
+	"-footer",
+#endif
+	    /* only interesting on Unix systems */
+#if !defined(USE_SYSTEM) && defined(UNIX)
+	"+fork()",
+#endif
+#ifdef FEAT_GETTEXT
+# ifdef DYNAMIC_GETTEXT
+	"+gettext/dyn",
+# else
+	"+gettext",
+# endif
+#else
+	"-gettext",
+#endif
+#ifdef FEAT_HANGULIN
+	"+hangul_input",
+#else
+	"-hangul_input",
+#endif
+#if (defined(HAVE_ICONV_H) && defined(USE_ICONV)) || defined(DYNAMIC_ICONV)
+# ifdef DYNAMIC_ICONV
+	"+iconv/dyn",
+# else
+	"+iconv",
+# endif
+#else
+	"-iconv",
+#endif
+#ifdef FEAT_INS_EXPAND
+	"+insert_expand",
+#else
+	"-insert_expand",
+#endif
+#ifdef FEAT_JUMPLIST
+	"+jumplist",
+#else
+	"-jumplist",
+#endif
+#ifdef FEAT_KEYMAP
+	"+keymap",
+#else
+	"-keymap",
+#endif
+#ifdef FEAT_LANGMAP
+	"+langmap",
+#else
+	"-langmap",
+#endif
+#ifdef FEAT_LIBCALL
+	"+libcall",
+#else
+	"-libcall",
+#endif
+#ifdef FEAT_LINEBREAK
+	"+linebreak",
+#else
+	"-linebreak",
+#endif
+#ifdef FEAT_LISP
+	"+lispindent",
+#else
+	"-lispindent",
+#endif
+#ifdef FEAT_LISTCMDS
+	"+listcmds",
+#else
+	"-listcmds",
+#endif
+#ifdef FEAT_LOCALMAP
+	"+localmap",
+#else
+	"-localmap",
+#endif
+#ifdef FEAT_MENU
+	"+menu",
+#else
+	"-menu",
+#endif
+#ifdef FEAT_SESSION
+	"+mksession",
+#else
+	"-mksession",
+#endif
+#ifdef FEAT_MODIFY_FNAME
+	"+modify_fname",
+#else
+	"-modify_fname",
+#endif
+#ifdef FEAT_MOUSE
+	"+mouse",
+#  ifdef FEAT_MOUSESHAPE
+	"+mouseshape",
+#  else
+	"-mouseshape",
+#  endif
+# else
+	"-mouse",
+#endif
+#if defined(UNIX) || defined(VMS)
+# ifdef FEAT_MOUSE_DEC
+	"+mouse_dec",
+# else
+	"-mouse_dec",
+# endif
+# ifdef FEAT_MOUSE_GPM
+	"+mouse_gpm",
+# else
+	"-mouse_gpm",
+# endif
+# ifdef FEAT_MOUSE_JSB
+	"+mouse_jsbterm",
+# else
+	"-mouse_jsbterm",
+# endif
+# ifdef FEAT_MOUSE_NET
+	"+mouse_netterm",
+# else
+	"-mouse_netterm",
+# endif
+# ifdef FEAT_MOUSE_XTERM
+	"+mouse_xterm",
+# else
+	"-mouse_xterm",
+# endif
+#endif
+#ifdef __QNX__
+# ifdef FEAT_MOUSE_PTERM
+	"+mouse_pterm",
+# else
+	"-mouse_pterm",
+# endif
+#endif
+#ifdef FEAT_MBYTE_IME
+# ifdef DYNAMIC_IME
+	"+multi_byte_ime/dyn",
+# else
+	"+multi_byte_ime",
+# endif
+#else
+# ifdef FEAT_MBYTE
+	"+multi_byte",
+# else
+	"-multi_byte",
+# endif
+#endif
+#ifdef FEAT_MULTI_LANG
+	"+multi_lang",
+#else
+	"-multi_lang",
+#endif
+#ifdef FEAT_NETBEANS_INTG
+	"+netbeans_intg",
+#else
+	"-netbeans_intg",
+#endif
+#ifdef FEAT_GUI_W32
+# ifdef FEAT_OLE
+	"+ole",
+# else
+	"-ole",
+# endif
+#endif
+#ifdef FEAT_OSFILETYPE
+	"+osfiletype",
+#else
+	"-osfiletype",
+#endif
+#ifdef FEAT_PATH_EXTRA
+	"+path_extra",
+#else
+	"-path_extra",
+#endif
+#ifdef FEAT_PERL
+# ifdef DYNAMIC_PERL
+	"+perl/dyn",
+# else
+	"+perl",
+# endif
+#else
+	"-perl",
+#endif
+#ifdef FEAT_PRINTER
+# ifdef FEAT_POSTSCRIPT
+	"+postscript",
+# else
+	"-postscript",
+# endif
+	"+printer",
+#else
+	"-printer",
+#endif
+#ifdef FEAT_PYTHON
+# ifdef DYNAMIC_PYTHON
+	"+python/dyn",
+# else
+	"+python",
+# endif
+#else
+	"-python",
+#endif
+#ifdef FEAT_QUICKFIX
+	"+quickfix",
+#else
+	"-quickfix",
+#endif
+#ifdef FEAT_RIGHTLEFT
+	"+rightleft",
+#else
+	"-rightleft",
+#endif
+#ifdef FEAT_RUBY
+# ifdef DYNAMIC_RUBY
+	"+ruby/dyn",
+# else
+	"+ruby",
+# endif
+#else
+	"-ruby",
+#endif
+#ifdef FEAT_SCROLLBIND
+	"+scrollbind",
+#else
+	"-scrollbind",
+#endif
+#ifdef FEAT_SIGNS
+	"+signs",
+#else
+	"-signs",
+#endif
+#ifdef FEAT_SMARTINDENT
+	"+smartindent",
+#else
+	"-smartindent",
+#endif
+#ifdef FEAT_SNIFF
+	"+sniff",
+#else
+	"-sniff",
+#endif
+#ifdef FEAT_STL_OPT
+	"+statusline",
+#else
+	"-statusline",
+#endif
+#ifdef FEAT_SUN_WORKSHOP
+	"+sun_workshop",
+#else
+	"-sun_workshop",
+#endif
+#ifdef FEAT_SYN_HL
+	"+syntax",
+#else
+	"-syntax",
+#endif
+	    /* only interesting on Unix systems */
+#if defined(USE_SYSTEM) && (defined(UNIX) || defined(__EMX__))
+	"+system()",
+#endif
+#ifdef FEAT_TAG_BINS
+	"+tag_binary",
+#else
+	"-tag_binary",
+#endif
+#ifdef FEAT_TAG_OLDSTATIC
+	"+tag_old_static",
+#else
+	"-tag_old_static",
+#endif
+#ifdef FEAT_TAG_ANYWHITE
+	"+tag_any_white",
+#else
+	"-tag_any_white",
+#endif
+#ifdef FEAT_TCL
+# ifdef DYNAMIC_TCL
+	"+tcl/dyn",
+# else
+	"+tcl",
+# endif
+#else
+	"-tcl",
+#endif
+#if defined(UNIX) || defined(__EMX__)
+/* only Unix (or OS/2 with EMX!) can have terminfo instead of termcap */
+# ifdef TERMINFO
+	"+terminfo",
+# else
+	"-terminfo",
+# endif
+#else		    /* unix always includes termcap support */
+# ifdef HAVE_TGETENT
+	"+tgetent",
+# else
+	"-tgetent",
+# endif
+#endif
+#ifdef FEAT_TERMRESPONSE
+	"+termresponse",
+#else
+	"-termresponse",
+#endif
+#ifdef FEAT_TEXTOBJ
+	"+textobjects",
+#else
+	"-textobjects",
+#endif
+#ifdef FEAT_TITLE
+	"+title",
+#else
+	"-title",
+#endif
+#ifdef FEAT_TOOLBAR
+	"+toolbar",
+#else
+	"-toolbar",
+#endif
+#ifdef FEAT_USR_CMDS
+	"+user_commands",
+#else
+	"-user_commands",
+#endif
+#ifdef FEAT_VERTSPLIT
+	"+vertsplit",
+#else
+	"-vertsplit",
+#endif
+#ifdef FEAT_VIRTUALEDIT
+	"+virtualedit",
+#else
+	"-virtualedit",
+#endif
+#ifdef FEAT_VISUAL
+	"+visual",
+# ifdef FEAT_VISUALEXTRA
+	"+visualextra",
+# else
+	"-visualextra",
+# endif
+#else
+	"-visual",
+#endif
+#ifdef FEAT_VIMINFO
+	"+viminfo",
+#else
+	"-viminfo",
+#endif
+#ifdef FEAT_VREPLACE
+	"+vreplace",
+#else
+	"-vreplace",
+#endif
+#ifdef FEAT_WILDIGN
+	"+wildignore",
+#else
+	"-wildignore",
+#endif
+#ifdef FEAT_WILDMENU
+	"+wildmenu",
+#else
+	"-wildmenu",
+#endif
+#ifdef FEAT_WINDOWS
+	"+windows",
+#else
+	"-windows",
+#endif
+#ifdef FEAT_WRITEBACKUP
+	"+writebackup",
+#else
+	"-writebackup",
+#endif
+#if defined(UNIX) || defined(VMS)
+# ifdef FEAT_X11
+	"+X11",
+# else
+	"-X11",
+# endif
+#endif
+#ifdef FEAT_XFONTSET
+	"+xfontset",
+#else
+	"-xfontset",
+#endif
+#ifdef FEAT_XIM
+	"+xim",
+#else
+	"-xim",
+#endif
+#if defined(UNIX) || defined(VMS)
+# ifdef USE_XSMP_INTERACT
+	"+xsmp_interact",
+# else
+#  ifdef USE_XSMP
+	"+xsmp",
+#  else
+	"-xsmp",
+#  endif
+# endif
+# ifdef FEAT_XCLIPBOARD
+	"+xterm_clipboard",
+# else
+	"-xterm_clipboard",
+# endif
+#endif
+#ifdef FEAT_XTERM_SAVE
+	"+xterm_save",
+#else
+	"-xterm_save",
+#endif
+#ifdef WIN3264
+# ifdef FEAT_XPM_W32
+	"+xpm_w32",
+# else
+	"-xpm_w32",
+# endif
+#endif
+	NULL
+};
+
+static int included_patches[] =
+{   /* Add new patch number below this line */
+/**/
+    0
+};
+
+    int
+highest_patch()
+{
+    int		i;
+    int		h = 0;
+
+    for (i = 0; included_patches[i] != 0; ++i)
+	if (included_patches[i] > h)
+	    h = included_patches[i];
+    return h;
+}
+
+#if defined(FEAT_EVAL) || defined(PROTO)
+/*
+ * Return TRUE if patch "n" has been included.
+ */
+    int
+has_patch(n)
+    int		n;
+{
+    int		i;
+
+    for (i = 0; included_patches[i] != 0; ++i)
+	if (included_patches[i] == n)
+	    return TRUE;
+    return FALSE;
+}
+#endif
+
+    void
+ex_version(eap)
+    exarg_T	*eap;
+{
+    /*
+     * Ignore a ":version 9.99" command.
+     */
+    if (*eap->arg == NUL)
+    {
+	msg_putchar('\n');
+	list_version();
+    }
+}
+
+    void
+list_version()
+{
+    int		i;
+    int		first;
+    char	*s = "";
+
+    /*
+     * When adding features here, don't forget to update the list of
+     * internal variables in eval.c!
+     */
+    MSG(longVersion);
+#ifdef WIN3264
+# ifdef FEAT_GUI_W32
+#  if defined(_MSC_VER) && (_MSC_VER <= 1010)
+    /* Only MS VC 4.1 and earlier can do Win32s */
+    MSG_PUTS(_("\nMS-Windows 16/32 bit GUI version"));
+#  else
+    MSG_PUTS(_("\nMS-Windows 32 bit GUI version"));
+#  endif
+    if (gui_is_win32s())
+	MSG_PUTS(_(" in Win32s mode"));
+# ifdef FEAT_OLE
+    MSG_PUTS(_(" with OLE support"));
+# endif
+# else
+    MSG_PUTS(_("\nMS-Windows 32 bit console version"));
+# endif
+#endif
+#ifdef WIN16
+    MSG_PUTS(_("\nMS-Windows 16 bit version"));
+#endif
+#ifdef MSDOS
+# ifdef DJGPP
+    MSG_PUTS(_("\n32 bit MS-DOS version"));
+# else
+    MSG_PUTS(_("\n16 bit MS-DOS version"));
+# endif
+#endif
+#ifdef MACOS
+# ifdef MACOS_X
+#  ifdef MACOS_X_UNIX
+    MSG_PUTS(_("\nMacOS X (unix) version"));
+#  else
+    MSG_PUTS(_("\nMacOS X version"));
+#  endif
+#else
+    MSG_PUTS(_("\nMacOS version"));
+# endif
+#endif
+
+#ifdef RISCOS
+    MSG_PUTS(_("\nRISC OS version"));
+#endif
+#ifdef VMS
+    MSG_PUTS("\nOpenVMS version");
+#endif
+
+    /* Print the list of patch numbers if there is at least one. */
+    /* Print a range when patches are consecutive: "1-10, 12, 15-40, 42-45" */
+    if (included_patches[0] != 0)
+    {
+	MSG_PUTS(_("\nIncluded patches: "));
+	first = -1;
+	/* find last one */
+	for (i = 0; included_patches[i] != 0; ++i)
+	    ;
+	while (--i >= 0)
+	{
+	    if (first < 0)
+		first = included_patches[i];
+	    if (i == 0 || included_patches[i - 1] != included_patches[i] + 1)
+	    {
+		MSG_PUTS(s);
+		s = ", ";
+		msg_outnum((long)first);
+		if (first != included_patches[i])
+		{
+		    MSG_PUTS("-");
+		    msg_outnum((long)included_patches[i]);
+		}
+		first = -1;
+	    }
+	}
+    }
+
+#ifdef MODIFIED_BY
+    MSG_PUTS("\n");
+    MSG_PUTS(_("Modified by "));
+    MSG_PUTS(MODIFIED_BY);
+#endif
+
+#ifdef HAVE_PATHDEF
+    if (*compiled_user != NUL || *compiled_sys != NUL)
+    {
+	MSG_PUTS(_("\nCompiled "));
+	if (*compiled_user != NUL)
+	{
+	    MSG_PUTS(_("by "));
+	    MSG_PUTS(compiled_user);
+	}
+	if (*compiled_sys != NUL)
+	{
+	    MSG_PUTS("@");
+	    MSG_PUTS(compiled_sys);
+	}
+    }
+#endif
+
+#ifdef FEAT_HUGE
+    MSG_PUTS(_("\nHuge version "));
+#else
+# ifdef FEAT_BIG
+    MSG_PUTS(_("\nBig version "));
+# else
+#  ifdef FEAT_NORMAL
+    MSG_PUTS(_("\nNormal version "));
+#  else
+#   ifdef FEAT_SMALL
+    MSG_PUTS(_("\nSmall version "));
+#   else
+    MSG_PUTS(_("\nTiny version "));
+#   endif
+#  endif
+# endif
+#endif
+#ifndef FEAT_GUI
+    MSG_PUTS(_("without GUI."));
+#else
+# ifdef FEAT_GUI_GTK
+#  ifdef FEAT_GUI_GNOME
+#   ifdef HAVE_GTK2
+    MSG_PUTS(_("with GTK2-GNOME GUI."));
+#   else
+    MSG_PUTS(_("with GTK-GNOME GUI."));
+#   endif
+#  else
+#   ifdef HAVE_GTK2
+    MSG_PUTS(_("with GTK2 GUI."));
+#   else
+    MSG_PUTS(_("with GTK GUI."));
+#   endif
+#  endif
+# else
+#  ifdef FEAT_GUI_MOTIF
+    MSG_PUTS(_("with X11-Motif GUI."));
+#  else
+#   ifdef FEAT_GUI_ATHENA
+#    ifdef FEAT_GUI_NEXTAW
+    MSG_PUTS(_("with X11-neXtaw GUI."));
+#    else
+    MSG_PUTS(_("with X11-Athena GUI."));
+#    endif
+#   else
+#    ifdef FEAT_GUI_BEOS
+    MSG_PUTS(_("with BeOS GUI."));
+#    else
+#     ifdef FEAT_GUI_PHOTON
+    MSG_PUTS(_("with Photon GUI."));
+#     else
+#      if defined(MSWIN)
+    MSG_PUTS(_("with GUI."));
+#      else
+#	if defined (TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON
+    MSG_PUTS(_("with Carbon GUI."));
+#	else
+#	 if defined (TARGET_API_MAC_OSX) && TARGET_API_MAC_OSX
+    MSG_PUTS(_("with Cocoa GUI."));
+#	 else
+#	  if defined (MACOS)
+    MSG_PUTS(_("with (classic) GUI."));
+#	  endif
+#	 endif
+#	endif
+#      endif
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+    version_msg(_("  Features included (+) or not (-):\n"));
+
+    /* print all the features */
+    for (i = 0; features[i] != NULL; ++i)
+    {
+	version_msg(features[i]);
+	if (msg_col > 0)
+	    version_msg(" ");
+    }
+
+    version_msg("\n");
+#ifdef SYS_VIMRC_FILE
+    version_msg(_("   system vimrc file: \""));
+    version_msg(SYS_VIMRC_FILE);
+    version_msg("\"\n");
+#endif
+#ifdef USR_VIMRC_FILE
+    version_msg(_("     user vimrc file: \""));
+    version_msg(USR_VIMRC_FILE);
+    version_msg("\"\n");
+#endif
+#ifdef USR_VIMRC_FILE2
+    version_msg(_(" 2nd user vimrc file: \""));
+    version_msg(USR_VIMRC_FILE2);
+    version_msg("\"\n");
+#endif
+#ifdef USR_VIMRC_FILE3
+    version_msg(_(" 3rd user vimrc file: \""));
+    version_msg(USR_VIMRC_FILE3);
+    version_msg("\"\n");
+#endif
+#ifdef USR_EXRC_FILE
+    version_msg(_("      user exrc file: \""));
+    version_msg(USR_EXRC_FILE);
+    version_msg("\"\n");
+#endif
+#ifdef USR_EXRC_FILE2
+    version_msg(_("  2nd user exrc file: \""));
+    version_msg(USR_EXRC_FILE2);
+    version_msg("\"\n");
+#endif
+#ifdef FEAT_GUI
+# ifdef SYS_GVIMRC_FILE
+    version_msg(_("  system gvimrc file: \""));
+    version_msg(SYS_GVIMRC_FILE);
+    version_msg("\"\n");
+# endif
+    version_msg(_("    user gvimrc file: \""));
+    version_msg(USR_GVIMRC_FILE);
+    version_msg("\"\n");
+# ifdef USR_GVIMRC_FILE2
+    version_msg(_("2nd user gvimrc file: \""));
+    version_msg(USR_GVIMRC_FILE2);
+    version_msg("\"\n");
+# endif
+# ifdef USR_GVIMRC_FILE3
+    version_msg(_("3rd user gvimrc file: \""));
+    version_msg(USR_GVIMRC_FILE3);
+    version_msg("\"\n");
+# endif
+#endif
+#ifdef FEAT_GUI
+# ifdef SYS_MENU_FILE
+    version_msg(_("    system menu file: \""));
+    version_msg(SYS_MENU_FILE);
+    version_msg("\"\n");
+# endif
+#endif
+#ifdef HAVE_PATHDEF
+    if (*default_vim_dir != NUL)
+    {
+	version_msg(_("  fall-back for $VIM: \""));
+	version_msg((char *)default_vim_dir);
+	version_msg("\"\n");
+    }
+    if (*default_vimruntime_dir != NUL)
+    {
+	version_msg(_(" f-b for $VIMRUNTIME: \""));
+	version_msg((char *)default_vimruntime_dir);
+	version_msg("\"\n");
+    }
+    version_msg(_("Compilation: "));
+    version_msg((char *)all_cflags);
+    version_msg("\n");
+#ifdef VMS
+    if (*compiler_version != NUL)
+    {
+	version_msg(_("Compiler: "));
+	version_msg((char *)compiler_version);
+	version_msg("\n");
+    }
+#endif
+    version_msg(_("Linking: "));
+    version_msg((char *)all_lflags);
+#endif
+#ifdef DEBUG
+    version_msg("\n");
+    version_msg(_("  DEBUG BUILD"));
+#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 = (int)STRLEN(s);
+
+    if (!got_int && len < (int)Columns && msg_col + len >= (int)Columns
+								&& *s != '\n')
+	msg_putchar('\n');
+    if (!got_int)
+	MSG_PUTS(s);
+}
+
+static void do_intro_line __ARGS((int row, char_u *mesg, int add_version, int attr));
+
+/*
+ * Give an introductory message about Vim.
+ * Only used when starting Vim on an empty file, without a file name.
+ * Or with the ":intro" command (for Sven :-).
+ */
+    void
+intro_message(colon)
+    int		colon;		/* TRUE for ":intro" */
+{
+    int		i;
+    int		row;
+    int		blanklines;
+    int		sponsor;
+    char	*p;
+    static char	*(lines[]) =
+    {
+	N_("VIM - Vi IMproved"),
+	"",
+	N_("version "),
+	N_("by Bram Moolenaar et al."),
+#ifdef MODIFIED_BY
+	" ",
+#endif
+	N_("Vim is open source and freely distributable"),
+	"",
+	N_("Help poor children in Uganda!"),
+	N_("type  :help iccf<Enter>       for information "),
+	"",
+	N_("type  :q<Enter>               to exit         "),
+	N_("type  :help<Enter>  or  <F1>  for on-line help"),
+	N_("type  :help version6<Enter>   for version info"),
+	NULL,
+	"",
+	N_("Running in Vi compatible mode"),
+	N_("type  :set nocp<Enter>        for Vim defaults"),
+	N_("type  :help cp-default<Enter> for info on this"),
+    };
+#ifdef FEAT_GUI
+    static char	*(gui_lines[]) =
+    {
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+#ifdef MODIFIED_BY
+	NULL,
+#endif
+	NULL,
+	NULL,
+	NULL,
+	N_("menu  Help->Orphans           for information    "),
+	NULL,
+	N_("Running modeless, typed text is inserted"),
+	N_("menu  Edit->Global Settings->Toggle Insert Mode  "),
+	N_("                              for two modes      "),
+	NULL,
+	NULL,
+	NULL,
+	N_("menu  Edit->Global Settings->Toggle Vi Compatible"),
+	N_("                              for Vim defaults   "),
+    };
+#endif
+
+    /* blanklines = screen height - # message lines */
+    blanklines = (int)Rows - ((sizeof(lines) / sizeof(char *)) - 1);
+    if (!p_cp)
+	blanklines += 4;  /* add 4 for not showing "Vi compatible" message */
+#if defined(WIN3264) && !defined(FEAT_GUI_W32)
+    if (mch_windows95())
+	blanklines -= 3;  /* subtract 3 for showing "Windows 95" message */
+#endif
+
+#ifdef FEAT_WINDOWS
+    /* Don't overwrite a statusline.  Depends on 'cmdheight'. */
+    if (p_ls > 1)
+	blanklines -= Rows - topframe->fr_height;
+#endif
+    if (blanklines < 0)
+	blanklines = 0;
+
+    /* Show the sponsor and register message one out of four times, the Uganda
+     * message two out of four times. */
+    sponsor = time(NULL);
+    sponsor = ((sponsor & 2) == 0) - ((sponsor & 4) == 0);
+
+    /* start displaying the message lines after half of the blank lines */
+    row = blanklines / 2;
+    if ((row >= 2 && Columns >= 50) || colon)
+    {
+	for (i = 0; i < (int)(sizeof(lines) / sizeof(char *)); ++i)
+	{
+	    p = lines[i];
+#ifdef FEAT_GUI
+	    if (p_im && gui.in_use && gui_lines[i] != NULL)
+		p = gui_lines[i];
+#endif
+	    if (p == NULL)
+	    {
+		if (!p_cp)
+		    break;
+		continue;
+	    }
+	    if (sponsor != 0)
+	    {
+		if (strstr(p, "children") != NULL)
+		    p = sponsor < 0
+			? N_("Sponsor Vim development!")
+			: N_("Become a registered Vim user!");
+		else if (strstr(p, "iccf") != NULL)
+		    p = sponsor < 0
+			? N_("type  :help sponsor<Enter>    for information ")
+			: N_("type  :help register<Enter>   for information ");
+		else if (strstr(p, "Orphans") != NULL)
+		    p = N_("menu  Help->Sponsor/Register  for information    ");
+	    }
+	    if (*p != NUL)
+		do_intro_line(row, (char_u *)_(p), i == 2, 0);
+	    ++row;
+	}
+#if defined(WIN3264) && !defined(FEAT_GUI_W32)
+	if (mch_windows95())
+	{
+	    do_intro_line(++row,
+		    (char_u *)_("WARNING: Windows 95/98/ME detected"),
+							FALSE, hl_attr(HLF_E));
+	    do_intro_line(++row,
+		(char_u *)_("type  :help windows95<Enter>  for info on this"),
+								    FALSE, 0);
+	}
+#endif
+    }
+
+    /* Make the wait-return message appear just below the text. */
+    if (colon)
+	msg_row = row;
+}
+
+    static void
+do_intro_line(row, mesg, add_version, attr)
+    int		row;
+    char_u	*mesg;
+    int		add_version;
+    int		attr;
+{
+    char_u	vers[20];
+    int		col;
+    char_u	*p;
+    int		l;
+    int		clen;
+#ifdef MODIFIED_BY
+# define MODBY_LEN 150
+    char_u	modby[MODBY_LEN];
+
+    if (*mesg == ' ')
+    {
+	STRNCPY(modby, _("Modified by "), MODBY_LEN);
+	modby[MODBY_LEN - 1] = NUL;
+	l = STRLEN(modby);
+	STRNCPY(modby + l, MODIFIED_BY, MODBY_LEN - l);
+	modby[MODBY_LEN - 1] = NUL;
+	mesg = modby;
+    }
+#endif
+
+    /* Center the message horizontally. */
+    col = vim_strsize(mesg);
+    if (add_version)
+    {
+	STRCPY(vers, mediumVersion);
+	if (highest_patch())
+	{
+	    /* Check for 9.9x or 9.9xx, alpha/beta version */
+	    if (isalpha((int)mediumVersion[3]))
+	    {
+		if (isalpha((int)mediumVersion[4]))
+		    sprintf((char *)vers + 5, ".%d%s", highest_patch(),
+							   mediumVersion + 5);
+		else
+		    sprintf((char *)vers + 4, ".%d%s", highest_patch(),
+							   mediumVersion + 4);
+	    }
+	    else
+		sprintf((char *)vers + 3, ".%d", highest_patch());
+	}
+	col += (int)STRLEN(vers);
+    }
+    col = (Columns - col) / 2;
+    if (col < 0)
+	col = 0;
+
+    /* Split up in parts to highlight <> items differently. */
+    for (p = mesg; *p != NUL; p += l)
+    {
+	clen = 0;
+	for (l = 0; p[l] != NUL
+			 && (l == 0 || (p[l] != '<' && p[l - 1] != '>')); ++l)
+	{
+#ifdef FEAT_MBYTE
+	    if (has_mbyte)
+	    {
+		clen += ptr2cells(p + l);
+		l += (*mb_ptr2len_check)(p + l) - 1;
+	    }
+	    else
+#endif
+		clen += byte2cells(p[l]);
+	}
+	screen_puts_len(p, l, row, col, *p == '<' ? hl_attr(HLF_8) : attr);
+	col += clen;
+    }
+
+    /* Add the version number to the version line. */
+    if (add_version)
+	screen_puts(vers, row, col, 0);
+}
+
+/*
+ * ":intro": clear screen, display intro screen and wait for return.
+ */
+/*ARGSUSED*/
+    void
+ex_intro(eap)
+    exarg_T	*eap;
+{
+    screenclear();
+    intro_message(TRUE);
+    wait_return(TRUE);
+}