xref: /vim-8.2.3635/src/version.c (revision e48a2dd3)
1 /* vi:set ts=8 sts=4 sw=4:
2  *
3  * VIM - Vi IMproved		by Bram Moolenaar
4  *
5  * Do ":help uganda"  in Vim to read copying and usage conditions.
6  * Do ":help credits" in Vim to see a list of people who contributed.
7  * See README.txt for an overview of the Vim source code.
8  */
9 
10 #include "vim.h"
11 
12 #ifdef AMIGA
13 # include <time.h>	/* for time() */
14 #endif
15 
16 /*
17  * Vim originated from Stevie version 3.6 (Fish disk 217) by GRWalter (Fred)
18  * It has been changed beyond recognition since then.
19  *
20  * Differences between version 6.x and 7.x can be found with ":help version7".
21  * Differences between version 5.x and 6.x can be found with ":help version6".
22  * Differences between version 4.x and 5.x can be found with ":help version5".
23  * Differences between version 3.0 and 4.x can be found with ":help version4".
24  * All the remarks about older versions have been removed, they are not very
25  * interesting.
26  */
27 
28 #include "version.h"
29 
30 char		*Version = VIM_VERSION_SHORT;
31 static char	*mediumVersion = VIM_VERSION_MEDIUM;
32 
33 #if defined(HAVE_DATE_TIME) || defined(PROTO)
34 # if (defined(VMS) && defined(VAXC)) || defined(PROTO)
35 char	longVersion[sizeof(VIM_VERSION_LONG_DATE) + sizeof(__DATE__)
36 						      + sizeof(__TIME__) + 3];
37     void
38 make_version()
39 {
40     /*
41      * Construct the long version string.  Necessary because
42      * VAX C can't catenate strings in the preprocessor.
43      */
44     strcpy(longVersion, VIM_VERSION_LONG_DATE);
45     strcat(longVersion, __DATE__);
46     strcat(longVersion, " ");
47     strcat(longVersion, __TIME__);
48     strcat(longVersion, ")");
49 }
50 # else
51 char	*longVersion = VIM_VERSION_LONG_DATE __DATE__ " " __TIME__ ")";
52 # endif
53 #else
54 char	*longVersion = VIM_VERSION_LONG;
55 #endif
56 
57 static void version_msg __ARGS((char *s));
58 
59 static char *(features[]) =
60 {
61 #ifdef AMIGA		/* only for Amiga systems */
62 # ifdef FEAT_ARP
63 	"+ARP",
64 # else
65 	"-ARP",
66 # endif
67 #endif
68 #ifdef FEAT_ARABIC
69 	"+arabic",
70 #else
71 	"-arabic",
72 #endif
73 #ifdef FEAT_AUTOCMD
74 	"+autocmd",
75 #else
76 	"-autocmd",
77 #endif
78 #ifdef FEAT_BEVAL
79 	"+balloon_eval",
80 #else
81 	"-balloon_eval",
82 #endif
83 #ifdef FEAT_BROWSE
84 	"+browse",
85 #else
86 	"-browse",
87 #endif
88 #ifdef NO_BUILTIN_TCAPS
89 	"-builtin_terms",
90 #endif
91 #ifdef SOME_BUILTIN_TCAPS
92 	"+builtin_terms",
93 #endif
94 #ifdef ALL_BUILTIN_TCAPS
95 	"++builtin_terms",
96 #endif
97 #ifdef FEAT_BYTEOFF
98 	"+byte_offset",
99 #else
100 	"-byte_offset",
101 #endif
102 #ifdef FEAT_CINDENT
103 	"+cindent",
104 #else
105 	"-cindent",
106 #endif
107 #ifdef FEAT_CLIENTSERVER
108 	"+clientserver",
109 #else
110 	"-clientserver",
111 #endif
112 #ifdef FEAT_CLIPBOARD
113 	"+clipboard",
114 #else
115 	"-clipboard",
116 #endif
117 #ifdef FEAT_CMDL_COMPL
118 	"+cmdline_compl",
119 #else
120 	"-cmdline_compl",
121 #endif
122 #ifdef FEAT_CMDHIST
123 	"+cmdline_hist",
124 #else
125 	"-cmdline_hist",
126 #endif
127 #ifdef FEAT_CMDL_INFO
128 	"+cmdline_info",
129 #else
130 	"-cmdline_info",
131 #endif
132 #ifdef FEAT_COMMENTS
133 	"+comments",
134 #else
135 	"-comments",
136 #endif
137 #ifdef FEAT_CONCEAL
138 	"+conceal",
139 #else
140 	"-conceal",
141 #endif
142 #ifdef FEAT_CRYPT
143 	"+cryptv",
144 #else
145 	"-cryptv",
146 #endif
147 #ifdef FEAT_CSCOPE
148 	"+cscope",
149 #else
150 	"-cscope",
151 #endif
152 #ifdef FEAT_CURSORBIND
153 	"+cursorbind",
154 #else
155 	"-cursorbind",
156 #endif
157 #ifdef CURSOR_SHAPE
158 	"+cursorshape",
159 #else
160 	"-cursorshape",
161 #endif
162 #if defined(FEAT_CON_DIALOG) && defined(FEAT_GUI_DIALOG)
163 	"+dialog_con_gui",
164 #else
165 # if defined(FEAT_CON_DIALOG)
166 	"+dialog_con",
167 # else
168 #  if defined(FEAT_GUI_DIALOG)
169 	"+dialog_gui",
170 #  else
171 	"-dialog",
172 #  endif
173 # endif
174 #endif
175 #ifdef FEAT_DIFF
176 	"+diff",
177 #else
178 	"-diff",
179 #endif
180 #ifdef FEAT_DIGRAPHS
181 	"+digraphs",
182 #else
183 	"-digraphs",
184 #endif
185 #ifdef FEAT_DND
186 	"+dnd",
187 #else
188 	"-dnd",
189 #endif
190 #ifdef EBCDIC
191 	"+ebcdic",
192 #else
193 	"-ebcdic",
194 #endif
195 #ifdef FEAT_EMACS_TAGS
196 	"+emacs_tags",
197 #else
198 	"-emacs_tags",
199 #endif
200 #ifdef FEAT_EVAL
201 	"+eval",
202 #else
203 	"-eval",
204 #endif
205 #ifdef FEAT_EX_EXTRA
206 	"+ex_extra",
207 #else
208 	"-ex_extra",
209 #endif
210 #ifdef FEAT_SEARCH_EXTRA
211 	"+extra_search",
212 #else
213 	"-extra_search",
214 #endif
215 #ifdef FEAT_FKMAP
216 	"+farsi",
217 #else
218 	"-farsi",
219 #endif
220 #ifdef FEAT_SEARCHPATH
221 	"+file_in_path",
222 #else
223 	"-file_in_path",
224 #endif
225 #ifdef FEAT_FIND_ID
226 	"+find_in_path",
227 #else
228 	"-find_in_path",
229 #endif
230 #ifdef FEAT_FLOAT
231 	"+float",
232 #else
233 	"-float",
234 #endif
235 #ifdef FEAT_FOLDING
236 	"+folding",
237 #else
238 	"-folding",
239 #endif
240 #ifdef FEAT_FOOTER
241 	"+footer",
242 #else
243 	"-footer",
244 #endif
245 	    /* only interesting on Unix systems */
246 #if !defined(USE_SYSTEM) && defined(UNIX)
247 	"+fork()",
248 #endif
249 #ifdef FEAT_GETTEXT
250 # ifdef DYNAMIC_GETTEXT
251 	"+gettext/dyn",
252 # else
253 	"+gettext",
254 # endif
255 #else
256 	"-gettext",
257 #endif
258 #ifdef FEAT_HANGULIN
259 	"+hangul_input",
260 #else
261 	"-hangul_input",
262 #endif
263 #if (defined(HAVE_ICONV_H) && defined(USE_ICONV)) || defined(DYNAMIC_ICONV)
264 # ifdef DYNAMIC_ICONV
265 	"+iconv/dyn",
266 # else
267 	"+iconv",
268 # endif
269 #else
270 	"-iconv",
271 #endif
272 #ifdef FEAT_INS_EXPAND
273 	"+insert_expand",
274 #else
275 	"-insert_expand",
276 #endif
277 #ifdef FEAT_JUMPLIST
278 	"+jumplist",
279 #else
280 	"-jumplist",
281 #endif
282 #ifdef FEAT_KEYMAP
283 	"+keymap",
284 #else
285 	"-keymap",
286 #endif
287 #ifdef FEAT_LANGMAP
288 	"+langmap",
289 #else
290 	"-langmap",
291 #endif
292 #ifdef FEAT_LIBCALL
293 	"+libcall",
294 #else
295 	"-libcall",
296 #endif
297 #ifdef FEAT_LINEBREAK
298 	"+linebreak",
299 #else
300 	"-linebreak",
301 #endif
302 #ifdef FEAT_LISP
303 	"+lispindent",
304 #else
305 	"-lispindent",
306 #endif
307 #ifdef FEAT_LISTCMDS
308 	"+listcmds",
309 #else
310 	"-listcmds",
311 #endif
312 #ifdef FEAT_LOCALMAP
313 	"+localmap",
314 #else
315 	"-localmap",
316 #endif
317 #ifdef FEAT_LUA
318 # ifdef DYNAMIC_LUA
319 	"+lua/dyn",
320 # else
321 	"+lua",
322 # endif
323 #else
324 	"-lua",
325 #endif
326 #ifdef FEAT_MENU
327 	"+menu",
328 #else
329 	"-menu",
330 #endif
331 #ifdef FEAT_SESSION
332 	"+mksession",
333 #else
334 	"-mksession",
335 #endif
336 #ifdef FEAT_MODIFY_FNAME
337 	"+modify_fname",
338 #else
339 	"-modify_fname",
340 #endif
341 #ifdef FEAT_MOUSE
342 	"+mouse",
343 #  ifdef FEAT_MOUSESHAPE
344 	"+mouseshape",
345 #  else
346 	"-mouseshape",
347 #  endif
348 # else
349 	"-mouse",
350 #endif
351 #if defined(UNIX) || defined(VMS)
352 # ifdef FEAT_MOUSE_DEC
353 	"+mouse_dec",
354 # else
355 	"-mouse_dec",
356 # endif
357 # ifdef FEAT_MOUSE_GPM
358 	"+mouse_gpm",
359 # else
360 	"-mouse_gpm",
361 # endif
362 # ifdef FEAT_MOUSE_JSB
363 	"+mouse_jsbterm",
364 # else
365 	"-mouse_jsbterm",
366 # endif
367 # ifdef FEAT_MOUSE_NET
368 	"+mouse_netterm",
369 # else
370 	"-mouse_netterm",
371 # endif
372 # ifdef FEAT_SYSMOUSE
373 	"+mouse_sysmouse",
374 # else
375 	"-mouse_sysmouse",
376 # endif
377 # ifdef FEAT_MOUSE_XTERM
378 	"+mouse_xterm",
379 # else
380 	"-mouse_xterm",
381 # endif
382 # ifdef FEAT_MOUSE_URXVT
383 	"+mouse_urxvt",
384 # else
385 	"-mouse_urxvt",
386 # endif
387 # ifdef FEAT_MOUSE_SGR
388 	"+mouse_sgr",
389 # else
390 	"-mouse_sgr",
391 # endif
392 #endif
393 #ifdef __QNX__
394 # ifdef FEAT_MOUSE_PTERM
395 	"+mouse_pterm",
396 # else
397 	"-mouse_pterm",
398 # endif
399 #endif
400 #ifdef FEAT_MBYTE_IME
401 # ifdef DYNAMIC_IME
402 	"+multi_byte_ime/dyn",
403 # else
404 	"+multi_byte_ime",
405 # endif
406 #else
407 # ifdef FEAT_MBYTE
408 	"+multi_byte",
409 # else
410 	"-multi_byte",
411 # endif
412 #endif
413 #ifdef FEAT_MULTI_LANG
414 	"+multi_lang",
415 #else
416 	"-multi_lang",
417 #endif
418 #ifdef FEAT_MZSCHEME
419 # ifdef DYNAMIC_MZSCHEME
420 	"+mzscheme/dyn",
421 # else
422 	"+mzscheme",
423 # endif
424 #else
425 	"-mzscheme",
426 #endif
427 #ifdef FEAT_NETBEANS_INTG
428 	"+netbeans_intg",
429 #else
430 	"-netbeans_intg",
431 #endif
432 #ifdef FEAT_GUI_W32
433 # ifdef FEAT_OLE
434 	"+ole",
435 # else
436 	"-ole",
437 # endif
438 #endif
439 #ifdef FEAT_PATH_EXTRA
440 	"+path_extra",
441 #else
442 	"-path_extra",
443 #endif
444 #ifdef FEAT_PERL
445 # ifdef DYNAMIC_PERL
446 	"+perl/dyn",
447 # else
448 	"+perl",
449 # endif
450 #else
451 	"-perl",
452 #endif
453 #ifdef FEAT_PERSISTENT_UNDO
454 	"+persistent_undo",
455 #else
456 	"-persistent_undo",
457 #endif
458 #ifdef FEAT_PRINTER
459 # ifdef FEAT_POSTSCRIPT
460 	"+postscript",
461 # else
462 	"-postscript",
463 # endif
464 	"+printer",
465 #else
466 	"-printer",
467 #endif
468 #ifdef FEAT_PROFILE
469 	"+profile",
470 #else
471 	"-profile",
472 #endif
473 #ifdef FEAT_PYTHON
474 # ifdef DYNAMIC_PYTHON
475 	"+python/dyn",
476 # else
477 	"+python",
478 # endif
479 #else
480 	"-python",
481 #endif
482 #ifdef FEAT_PYTHON3
483 # ifdef DYNAMIC_PYTHON3
484 	"+python3/dyn",
485 # else
486 	"+python3",
487 # endif
488 #else
489 	"-python3",
490 #endif
491 #ifdef FEAT_QUICKFIX
492 	"+quickfix",
493 #else
494 	"-quickfix",
495 #endif
496 #ifdef FEAT_RELTIME
497 	"+reltime",
498 #else
499 	"-reltime",
500 #endif
501 #ifdef FEAT_RIGHTLEFT
502 	"+rightleft",
503 #else
504 	"-rightleft",
505 #endif
506 #ifdef FEAT_RUBY
507 # ifdef DYNAMIC_RUBY
508 	"+ruby/dyn",
509 # else
510 	"+ruby",
511 # endif
512 #else
513 	"-ruby",
514 #endif
515 #ifdef FEAT_SCROLLBIND
516 	"+scrollbind",
517 #else
518 	"-scrollbind",
519 #endif
520 #ifdef FEAT_SIGNS
521 	"+signs",
522 #else
523 	"-signs",
524 #endif
525 #ifdef FEAT_SMARTINDENT
526 	"+smartindent",
527 #else
528 	"-smartindent",
529 #endif
530 #ifdef FEAT_SNIFF
531 	"+sniff",
532 #else
533 	"-sniff",
534 #endif
535 #ifdef STARTUPTIME
536 	"+startuptime",
537 #else
538 	"-startuptime",
539 #endif
540 #ifdef FEAT_STL_OPT
541 	"+statusline",
542 #else
543 	"-statusline",
544 #endif
545 #ifdef FEAT_SUN_WORKSHOP
546 	"+sun_workshop",
547 #else
548 	"-sun_workshop",
549 #endif
550 #ifdef FEAT_SYN_HL
551 	"+syntax",
552 #else
553 	"-syntax",
554 #endif
555 	    /* only interesting on Unix systems */
556 #if defined(USE_SYSTEM) && (defined(UNIX) || defined(__EMX__))
557 	"+system()",
558 #endif
559 #ifdef FEAT_TAG_BINS
560 	"+tag_binary",
561 #else
562 	"-tag_binary",
563 #endif
564 #ifdef FEAT_TAG_OLDSTATIC
565 	"+tag_old_static",
566 #else
567 	"-tag_old_static",
568 #endif
569 #ifdef FEAT_TAG_ANYWHITE
570 	"+tag_any_white",
571 #else
572 	"-tag_any_white",
573 #endif
574 #ifdef FEAT_TCL
575 # ifdef DYNAMIC_TCL
576 	"+tcl/dyn",
577 # else
578 	"+tcl",
579 # endif
580 #else
581 	"-tcl",
582 #endif
583 #if defined(UNIX) || defined(__EMX__)
584 /* only Unix (or OS/2 with EMX!) can have terminfo instead of termcap */
585 # ifdef TERMINFO
586 	"+terminfo",
587 # else
588 	"-terminfo",
589 # endif
590 #else		    /* unix always includes termcap support */
591 # ifdef HAVE_TGETENT
592 	"+tgetent",
593 # else
594 	"-tgetent",
595 # endif
596 #endif
597 #ifdef FEAT_TERMRESPONSE
598 	"+termresponse",
599 #else
600 	"-termresponse",
601 #endif
602 #ifdef FEAT_TEXTOBJ
603 	"+textobjects",
604 #else
605 	"-textobjects",
606 #endif
607 #ifdef FEAT_TITLE
608 	"+title",
609 #else
610 	"-title",
611 #endif
612 #ifdef FEAT_TOOLBAR
613 	"+toolbar",
614 #else
615 	"-toolbar",
616 #endif
617 #ifdef FEAT_USR_CMDS
618 	"+user_commands",
619 #else
620 	"-user_commands",
621 #endif
622 #ifdef FEAT_VERTSPLIT
623 	"+vertsplit",
624 #else
625 	"-vertsplit",
626 #endif
627 #ifdef FEAT_VIRTUALEDIT
628 	"+virtualedit",
629 #else
630 	"-virtualedit",
631 #endif
632 #ifdef FEAT_VISUAL
633 	"+visual",
634 # ifdef FEAT_VISUALEXTRA
635 	"+visualextra",
636 # else
637 	"-visualextra",
638 # endif
639 #else
640 	"-visual",
641 #endif
642 #ifdef FEAT_VIMINFO
643 	"+viminfo",
644 #else
645 	"-viminfo",
646 #endif
647 #ifdef FEAT_VREPLACE
648 	"+vreplace",
649 #else
650 	"-vreplace",
651 #endif
652 #ifdef FEAT_WILDIGN
653 	"+wildignore",
654 #else
655 	"-wildignore",
656 #endif
657 #ifdef FEAT_WILDMENU
658 	"+wildmenu",
659 #else
660 	"-wildmenu",
661 #endif
662 #ifdef FEAT_WINDOWS
663 	"+windows",
664 #else
665 	"-windows",
666 #endif
667 #ifdef FEAT_WRITEBACKUP
668 	"+writebackup",
669 #else
670 	"-writebackup",
671 #endif
672 #if defined(UNIX) || defined(VMS)
673 # ifdef FEAT_X11
674 	"+X11",
675 # else
676 	"-X11",
677 # endif
678 #endif
679 #ifdef FEAT_XFONTSET
680 	"+xfontset",
681 #else
682 	"-xfontset",
683 #endif
684 #ifdef FEAT_XIM
685 	"+xim",
686 #else
687 	"-xim",
688 #endif
689 #if defined(UNIX) || defined(VMS)
690 # ifdef USE_XSMP_INTERACT
691 	"+xsmp_interact",
692 # else
693 #  ifdef USE_XSMP
694 	"+xsmp",
695 #  else
696 	"-xsmp",
697 #  endif
698 # endif
699 # ifdef FEAT_XCLIPBOARD
700 	"+xterm_clipboard",
701 # else
702 	"-xterm_clipboard",
703 # endif
704 #endif
705 #ifdef FEAT_XTERM_SAVE
706 	"+xterm_save",
707 #else
708 	"-xterm_save",
709 #endif
710 #ifdef WIN3264
711 # ifdef FEAT_XPM_W32
712 	"+xpm_w32",
713 # else
714 	"-xpm_w32",
715 # endif
716 #endif
717 	NULL
718 };
719 
720 static int included_patches[] =
721 {   /* Add new patch number below this line */
722 /**/
723     655,
724 /**/
725     654,
726 /**/
727     653,
728 /**/
729     652,
730 /**/
731     651,
732 /**/
733     650,
734 /**/
735     649,
736 /**/
737     648,
738 /**/
739     647,
740 /**/
741     646,
742 /**/
743     645,
744 /**/
745     644,
746 /**/
747     643,
748 /**/
749     642,
750 /**/
751     641,
752 /**/
753     640,
754 /**/
755     639,
756 /**/
757     638,
758 /**/
759     637,
760 /**/
761     636,
762 /**/
763     635,
764 /**/
765     634,
766 /**/
767     633,
768 /**/
769     632,
770 /**/
771     631,
772 /**/
773     630,
774 /**/
775     629,
776 /**/
777     628,
778 /**/
779     627,
780 /**/
781     626,
782 /**/
783     625,
784 /**/
785     624,
786 /**/
787     623,
788 /**/
789     622,
790 /**/
791     621,
792 /**/
793     620,
794 /**/
795     619,
796 /**/
797     618,
798 /**/
799     617,
800 /**/
801     616,
802 /**/
803     615,
804 /**/
805     614,
806 /**/
807     613,
808 /**/
809     612,
810 /**/
811     611,
812 /**/
813     610,
814 /**/
815     609,
816 /**/
817     608,
818 /**/
819     607,
820 /**/
821     606,
822 /**/
823     605,
824 /**/
825     604,
826 /**/
827     603,
828 /**/
829     602,
830 /**/
831     601,
832 /**/
833     600,
834 /**/
835     599,
836 /**/
837     598,
838 /**/
839     597,
840 /**/
841     596,
842 /**/
843     595,
844 /**/
845     594,
846 /**/
847     593,
848 /**/
849     592,
850 /**/
851     591,
852 /**/
853     590,
854 /**/
855     589,
856 /**/
857     588,
858 /**/
859     587,
860 /**/
861     586,
862 /**/
863     585,
864 /**/
865     584,
866 /**/
867     583,
868 /**/
869     582,
870 /**/
871     581,
872 /**/
873     580,
874 /**/
875     579,
876 /**/
877     578,
878 /**/
879     577,
880 /**/
881     576,
882 /**/
883     575,
884 /**/
885     574,
886 /**/
887     573,
888 /**/
889     572,
890 /**/
891     571,
892 /**/
893     570,
894 /**/
895     569,
896 /**/
897     568,
898 /**/
899     567,
900 /**/
901     566,
902 /**/
903     565,
904 /**/
905     564,
906 /**/
907     563,
908 /**/
909     562,
910 /**/
911     561,
912 /**/
913     560,
914 /**/
915     559,
916 /**/
917     558,
918 /**/
919     557,
920 /**/
921     556,
922 /**/
923     555,
924 /**/
925     554,
926 /**/
927     553,
928 /**/
929     552,
930 /**/
931     551,
932 /**/
933     550,
934 /**/
935     549,
936 /**/
937     548,
938 /**/
939     547,
940 /**/
941     546,
942 /**/
943     545,
944 /**/
945     544,
946 /**/
947     543,
948 /**/
949     542,
950 /**/
951     541,
952 /**/
953     540,
954 /**/
955     539,
956 /**/
957     538,
958 /**/
959     537,
960 /**/
961     536,
962 /**/
963     535,
964 /**/
965     534,
966 /**/
967     533,
968 /**/
969     532,
970 /**/
971     531,
972 /**/
973     530,
974 /**/
975     529,
976 /**/
977     528,
978 /**/
979     527,
980 /**/
981     526,
982 /**/
983     525,
984 /**/
985     524,
986 /**/
987     523,
988 /**/
989     522,
990 /**/
991     521,
992 /**/
993     520,
994 /**/
995     519,
996 /**/
997     518,
998 /**/
999     517,
1000 /**/
1001     516,
1002 /**/
1003     515,
1004 /**/
1005     514,
1006 /**/
1007     513,
1008 /**/
1009     512,
1010 /**/
1011     511,
1012 /**/
1013     510,
1014 /**/
1015     509,
1016 /**/
1017     508,
1018 /**/
1019     507,
1020 /**/
1021     506,
1022 /**/
1023     505,
1024 /**/
1025     504,
1026 /**/
1027     503,
1028 /**/
1029     502,
1030 /**/
1031     501,
1032 /**/
1033     500,
1034 /**/
1035     499,
1036 /**/
1037     498,
1038 /**/
1039     497,
1040 /**/
1041     496,
1042 /**/
1043     495,
1044 /**/
1045     494,
1046 /**/
1047     493,
1048 /**/
1049     492,
1050 /**/
1051     491,
1052 /**/
1053     490,
1054 /**/
1055     489,
1056 /**/
1057     488,
1058 /**/
1059     487,
1060 /**/
1061     486,
1062 /**/
1063     485,
1064 /**/
1065     484,
1066 /**/
1067     483,
1068 /**/
1069     482,
1070 /**/
1071     481,
1072 /**/
1073     480,
1074 /**/
1075     479,
1076 /**/
1077     478,
1078 /**/
1079     477,
1080 /**/
1081     476,
1082 /**/
1083     475,
1084 /**/
1085     474,
1086 /**/
1087     473,
1088 /**/
1089     472,
1090 /**/
1091     471,
1092 /**/
1093     470,
1094 /**/
1095     469,
1096 /**/
1097     468,
1098 /**/
1099     467,
1100 /**/
1101     466,
1102 /**/
1103     465,
1104 /**/
1105     464,
1106 /**/
1107     463,
1108 /**/
1109     462,
1110 /**/
1111     461,
1112 /**/
1113     460,
1114 /**/
1115     459,
1116 /**/
1117     458,
1118 /**/
1119     457,
1120 /**/
1121     456,
1122 /**/
1123     455,
1124 /**/
1125     454,
1126 /**/
1127     453,
1128 /**/
1129     452,
1130 /**/
1131     451,
1132 /**/
1133     450,
1134 /**/
1135     449,
1136 /**/
1137     448,
1138 /**/
1139     447,
1140 /**/
1141     446,
1142 /**/
1143     445,
1144 /**/
1145     444,
1146 /**/
1147     443,
1148 /**/
1149     442,
1150 /**/
1151     441,
1152 /**/
1153     440,
1154 /**/
1155     439,
1156 /**/
1157     438,
1158 /**/
1159     437,
1160 /**/
1161     436,
1162 /**/
1163     435,
1164 /**/
1165     434,
1166 /**/
1167     433,
1168 /**/
1169     432,
1170 /**/
1171     431,
1172 /**/
1173     430,
1174 /**/
1175     429,
1176 /**/
1177     428,
1178 /**/
1179     427,
1180 /**/
1181     426,
1182 /**/
1183     425,
1184 /**/
1185     424,
1186 /**/
1187     423,
1188 /**/
1189     422,
1190 /**/
1191     421,
1192 /**/
1193     420,
1194 /**/
1195     419,
1196 /**/
1197     418,
1198 /**/
1199     417,
1200 /**/
1201     416,
1202 /**/
1203     415,
1204 /**/
1205     414,
1206 /**/
1207     413,
1208 /**/
1209     412,
1210 /**/
1211     411,
1212 /**/
1213     410,
1214 /**/
1215     409,
1216 /**/
1217     408,
1218 /**/
1219     407,
1220 /**/
1221     406,
1222 /**/
1223     405,
1224 /**/
1225     404,
1226 /**/
1227     403,
1228 /**/
1229     402,
1230 /**/
1231     401,
1232 /**/
1233     400,
1234 /**/
1235     399,
1236 /**/
1237     398,
1238 /**/
1239     397,
1240 /**/
1241     396,
1242 /**/
1243     395,
1244 /**/
1245     394,
1246 /**/
1247     393,
1248 /**/
1249     392,
1250 /**/
1251     391,
1252 /**/
1253     390,
1254 /**/
1255     389,
1256 /**/
1257     388,
1258 /**/
1259     387,
1260 /**/
1261     386,
1262 /**/
1263     385,
1264 /**/
1265     384,
1266 /**/
1267     383,
1268 /**/
1269     382,
1270 /**/
1271     381,
1272 /**/
1273     380,
1274 /**/
1275     379,
1276 /**/
1277     378,
1278 /**/
1279     377,
1280 /**/
1281     376,
1282 /**/
1283     375,
1284 /**/
1285     374,
1286 /**/
1287     373,
1288 /**/
1289     372,
1290 /**/
1291     371,
1292 /**/
1293     370,
1294 /**/
1295     369,
1296 /**/
1297     368,
1298 /**/
1299     367,
1300 /**/
1301     366,
1302 /**/
1303     365,
1304 /**/
1305     364,
1306 /**/
1307     363,
1308 /**/
1309     362,
1310 /**/
1311     361,
1312 /**/
1313     360,
1314 /**/
1315     359,
1316 /**/
1317     358,
1318 /**/
1319     357,
1320 /**/
1321     356,
1322 /**/
1323     355,
1324 /**/
1325     354,
1326 /**/
1327     353,
1328 /**/
1329     352,
1330 /**/
1331     351,
1332 /**/
1333     350,
1334 /**/
1335     349,
1336 /**/
1337     348,
1338 /**/
1339     347,
1340 /**/
1341     346,
1342 /**/
1343     345,
1344 /**/
1345     344,
1346 /**/
1347     343,
1348 /**/
1349     342,
1350 /**/
1351     341,
1352 /**/
1353     340,
1354 /**/
1355     339,
1356 /**/
1357     338,
1358 /**/
1359     337,
1360 /**/
1361     336,
1362 /**/
1363     335,
1364 /**/
1365     334,
1366 /**/
1367     333,
1368 /**/
1369     332,
1370 /**/
1371     331,
1372 /**/
1373     330,
1374 /**/
1375     329,
1376 /**/
1377     328,
1378 /**/
1379     327,
1380 /**/
1381     326,
1382 /**/
1383     325,
1384 /**/
1385     324,
1386 /**/
1387     323,
1388 /**/
1389     322,
1390 /**/
1391     321,
1392 /**/
1393     320,
1394 /**/
1395     319,
1396 /**/
1397     318,
1398 /**/
1399     317,
1400 /**/
1401     316,
1402 /**/
1403     315,
1404 /**/
1405     314,
1406 /**/
1407     313,
1408 /**/
1409     312,
1410 /**/
1411     311,
1412 /**/
1413     310,
1414 /**/
1415     309,
1416 /**/
1417     308,
1418 /**/
1419     307,
1420 /**/
1421     306,
1422 /**/
1423     305,
1424 /**/
1425     304,
1426 /**/
1427     303,
1428 /**/
1429     302,
1430 /**/
1431     301,
1432 /**/
1433     300,
1434 /**/
1435     299,
1436 /**/
1437     298,
1438 /**/
1439     297,
1440 /**/
1441     296,
1442 /**/
1443     295,
1444 /**/
1445     294,
1446 /**/
1447     293,
1448 /**/
1449     292,
1450 /**/
1451     291,
1452 /**/
1453     290,
1454 /**/
1455     289,
1456 /**/
1457     288,
1458 /**/
1459     287,
1460 /**/
1461     286,
1462 /**/
1463     285,
1464 /**/
1465     284,
1466 /**/
1467     283,
1468 /**/
1469     282,
1470 /**/
1471     281,
1472 /**/
1473     280,
1474 /**/
1475     279,
1476 /**/
1477     278,
1478 /**/
1479     277,
1480 /**/
1481     276,
1482 /**/
1483     275,
1484 /**/
1485     274,
1486 /**/
1487     273,
1488 /**/
1489     272,
1490 /**/
1491     271,
1492 /**/
1493     270,
1494 /**/
1495     269,
1496 /**/
1497     268,
1498 /**/
1499     267,
1500 /**/
1501     266,
1502 /**/
1503     265,
1504 /**/
1505     264,
1506 /**/
1507     263,
1508 /**/
1509     262,
1510 /**/
1511     261,
1512 /**/
1513     260,
1514 /**/
1515     259,
1516 /**/
1517     258,
1518 /**/
1519     257,
1520 /**/
1521     256,
1522 /**/
1523     255,
1524 /**/
1525     254,
1526 /**/
1527     253,
1528 /**/
1529     252,
1530 /**/
1531     251,
1532 /**/
1533     250,
1534 /**/
1535     249,
1536 /**/
1537     248,
1538 /**/
1539     247,
1540 /**/
1541     246,
1542 /**/
1543     245,
1544 /**/
1545     244,
1546 /**/
1547     243,
1548 /**/
1549     242,
1550 /**/
1551     241,
1552 /**/
1553     240,
1554 /**/
1555     239,
1556 /**/
1557     238,
1558 /**/
1559     237,
1560 /**/
1561     236,
1562 /**/
1563     235,
1564 /**/
1565     234,
1566 /**/
1567     233,
1568 /**/
1569     232,
1570 /**/
1571     231,
1572 /**/
1573     230,
1574 /**/
1575     229,
1576 /**/
1577     228,
1578 /**/
1579     227,
1580 /**/
1581     226,
1582 /**/
1583     225,
1584 /**/
1585     224,
1586 /**/
1587     223,
1588 /**/
1589     222,
1590 /**/
1591     221,
1592 /**/
1593     220,
1594 /**/
1595     219,
1596 /**/
1597     218,
1598 /**/
1599     217,
1600 /**/
1601     216,
1602 /**/
1603     215,
1604 /**/
1605     214,
1606 /**/
1607     213,
1608 /**/
1609     212,
1610 /**/
1611     211,
1612 /**/
1613     210,
1614 /**/
1615     209,
1616 /**/
1617     208,
1618 /**/
1619     207,
1620 /**/
1621     206,
1622 /**/
1623     205,
1624 /**/
1625     204,
1626 /**/
1627     203,
1628 /**/
1629     202,
1630 /**/
1631     201,
1632 /**/
1633     200,
1634 /**/
1635     199,
1636 /**/
1637     198,
1638 /**/
1639     197,
1640 /**/
1641     196,
1642 /**/
1643     195,
1644 /**/
1645     194,
1646 /**/
1647     193,
1648 /**/
1649     192,
1650 /**/
1651     191,
1652 /**/
1653     190,
1654 /**/
1655     189,
1656 /**/
1657     188,
1658 /**/
1659     187,
1660 /**/
1661     186,
1662 /**/
1663     185,
1664 /**/
1665     184,
1666 /**/
1667     183,
1668 /**/
1669     182,
1670 /**/
1671     181,
1672 /**/
1673     180,
1674 /**/
1675     179,
1676 /**/
1677     178,
1678 /**/
1679     177,
1680 /**/
1681     176,
1682 /**/
1683     175,
1684 /**/
1685     174,
1686 /**/
1687     173,
1688 /**/
1689     172,
1690 /**/
1691     171,
1692 /**/
1693     170,
1694 /**/
1695     169,
1696 /**/
1697     168,
1698 /**/
1699     167,
1700 /**/
1701     166,
1702 /**/
1703     165,
1704 /**/
1705     164,
1706 /**/
1707     163,
1708 /**/
1709     162,
1710 /**/
1711     161,
1712 /**/
1713     160,
1714 /**/
1715     159,
1716 /**/
1717     158,
1718 /**/
1719     157,
1720 /**/
1721     156,
1722 /**/
1723     155,
1724 /**/
1725     154,
1726 /**/
1727     153,
1728 /**/
1729     152,
1730 /**/
1731     151,
1732 /**/
1733     150,
1734 /**/
1735     149,
1736 /**/
1737     148,
1738 /**/
1739     147,
1740 /**/
1741     146,
1742 /**/
1743     145,
1744 /**/
1745     144,
1746 /**/
1747     143,
1748 /**/
1749     142,
1750 /**/
1751     141,
1752 /**/
1753     140,
1754 /**/
1755     139,
1756 /**/
1757     138,
1758 /**/
1759     137,
1760 /**/
1761     136,
1762 /**/
1763     135,
1764 /**/
1765     134,
1766 /**/
1767     133,
1768 /**/
1769     132,
1770 /**/
1771     131,
1772 /**/
1773     130,
1774 /**/
1775     129,
1776 /**/
1777     128,
1778 /**/
1779     127,
1780 /**/
1781     126,
1782 /**/
1783     125,
1784 /**/
1785     124,
1786 /**/
1787     123,
1788 /**/
1789     122,
1790 /**/
1791     121,
1792 /**/
1793     120,
1794 /**/
1795     119,
1796 /**/
1797     118,
1798 /**/
1799     117,
1800 /**/
1801     116,
1802 /**/
1803     115,
1804 /**/
1805     114,
1806 /**/
1807     113,
1808 /**/
1809     112,
1810 /**/
1811     111,
1812 /**/
1813     110,
1814 /**/
1815     109,
1816 /**/
1817     108,
1818 /**/
1819     107,
1820 /**/
1821     106,
1822 /**/
1823     105,
1824 /**/
1825     104,
1826 /**/
1827     103,
1828 /**/
1829     102,
1830 /**/
1831     101,
1832 /**/
1833     100,
1834 /**/
1835     99,
1836 /**/
1837     98,
1838 /**/
1839     97,
1840 /**/
1841     96,
1842 /**/
1843     95,
1844 /**/
1845     94,
1846 /**/
1847     93,
1848 /**/
1849     92,
1850 /**/
1851     91,
1852 /**/
1853     90,
1854 /**/
1855     89,
1856 /**/
1857     88,
1858 /**/
1859     87,
1860 /**/
1861     86,
1862 /**/
1863     85,
1864 /**/
1865     84,
1866 /**/
1867     83,
1868 /**/
1869     82,
1870 /**/
1871     81,
1872 /**/
1873     80,
1874 /**/
1875     79,
1876 /**/
1877     78,
1878 /**/
1879     77,
1880 /**/
1881     76,
1882 /**/
1883     75,
1884 /**/
1885     74,
1886 /**/
1887     73,
1888 /**/
1889     72,
1890 /**/
1891     71,
1892 /**/
1893     70,
1894 /**/
1895     69,
1896 /**/
1897     68,
1898 /**/
1899     67,
1900 /**/
1901     66,
1902 /**/
1903     65,
1904 /**/
1905     64,
1906 /**/
1907     63,
1908 /**/
1909     62,
1910 /**/
1911     61,
1912 /**/
1913     60,
1914 /**/
1915     59,
1916 /**/
1917     58,
1918 /**/
1919     57,
1920 /**/
1921     56,
1922 /**/
1923     55,
1924 /**/
1925     54,
1926 /**/
1927     53,
1928 /**/
1929     52,
1930 /**/
1931     51,
1932 /**/
1933     50,
1934 /**/
1935     49,
1936 /**/
1937     48,
1938 /**/
1939     47,
1940 /**/
1941     46,
1942 /**/
1943     45,
1944 /**/
1945     44,
1946 /**/
1947     43,
1948 /**/
1949     42,
1950 /**/
1951     41,
1952 /**/
1953     40,
1954 /**/
1955     39,
1956 /**/
1957     38,
1958 /**/
1959     37,
1960 /**/
1961     36,
1962 /**/
1963     35,
1964 /**/
1965     34,
1966 /**/
1967     33,
1968 /**/
1969     32,
1970 /**/
1971     31,
1972 /**/
1973     30,
1974 /**/
1975     29,
1976 /**/
1977     28,
1978 /**/
1979     27,
1980 /**/
1981     26,
1982 /**/
1983     25,
1984 /**/
1985     24,
1986 /**/
1987     23,
1988 /**/
1989     22,
1990 /**/
1991     21,
1992 /**/
1993     20,
1994 /**/
1995     19,
1996 /**/
1997     18,
1998 /**/
1999     17,
2000 /**/
2001     16,
2002 /**/
2003     15,
2004 /**/
2005     14,
2006 /**/
2007     13,
2008 /**/
2009     12,
2010 /**/
2011     11,
2012 /**/
2013     10,
2014 /**/
2015     9,
2016 /**/
2017     8,
2018 /**/
2019     7,
2020 /**/
2021     6,
2022 /**/
2023     5,
2024 /**/
2025     4,
2026 /**/
2027     3,
2028 /**/
2029     2,
2030 /**/
2031     1,
2032 /**/
2033     0
2034 };
2035 
2036 /*
2037  * Place to put a short description when adding a feature with a patch.
2038  * Keep it short, e.g.,: "relative numbers", "persistent undo".
2039  * Also add a comment marker to separate the lines.
2040  * See the official Vim patches for the diff format: It must use a context of
2041  * one line only.  Create it by hand or use "diff -C2" and edit the patch.
2042  */
2043 static char *(extra_patches[]) =
2044 {   /* Add your patch description below this line */
2045 /**/
2046     NULL
2047 };
2048 
2049     int
2050 highest_patch()
2051 {
2052     int		i;
2053     int		h = 0;
2054 
2055     for (i = 0; included_patches[i] != 0; ++i)
2056 	if (included_patches[i] > h)
2057 	    h = included_patches[i];
2058     return h;
2059 }
2060 
2061 #if defined(FEAT_EVAL) || defined(PROTO)
2062 /*
2063  * Return TRUE if patch "n" has been included.
2064  */
2065     int
2066 has_patch(n)
2067     int		n;
2068 {
2069     int		i;
2070 
2071     for (i = 0; included_patches[i] != 0; ++i)
2072 	if (included_patches[i] == n)
2073 	    return TRUE;
2074     return FALSE;
2075 }
2076 #endif
2077 
2078     void
2079 ex_version(eap)
2080     exarg_T	*eap;
2081 {
2082     /*
2083      * Ignore a ":version 9.99" command.
2084      */
2085     if (*eap->arg == NUL)
2086     {
2087 	msg_putchar('\n');
2088 	list_version();
2089     }
2090 }
2091 
2092     void
2093 list_version()
2094 {
2095     int		i;
2096     int		first;
2097     char	*s = "";
2098 
2099     /*
2100      * When adding features here, don't forget to update the list of
2101      * internal variables in eval.c!
2102      */
2103     MSG(longVersion);
2104 #ifdef WIN3264
2105 # ifdef FEAT_GUI_W32
2106 #  if defined(_MSC_VER) && (_MSC_VER <= 1010)
2107     /* Only MS VC 4.1 and earlier can do Win32s */
2108     MSG_PUTS(_("\nMS-Windows 16/32-bit GUI version"));
2109 #  else
2110 #   ifdef _WIN64
2111     MSG_PUTS(_("\nMS-Windows 64-bit GUI version"));
2112 #   else
2113     MSG_PUTS(_("\nMS-Windows 32-bit GUI version"));
2114 #   endif
2115 #  endif
2116     if (gui_is_win32s())
2117 	MSG_PUTS(_(" in Win32s mode"));
2118 # ifdef FEAT_OLE
2119     MSG_PUTS(_(" with OLE support"));
2120 # endif
2121 # else
2122 #  ifdef _WIN64
2123     MSG_PUTS(_("\nMS-Windows 64-bit console version"));
2124 #  else
2125     MSG_PUTS(_("\nMS-Windows 32-bit console version"));
2126 #  endif
2127 # endif
2128 #endif
2129 #ifdef WIN16
2130     MSG_PUTS(_("\nMS-Windows 16-bit version"));
2131 #endif
2132 #ifdef MSDOS
2133 # ifdef DJGPP
2134     MSG_PUTS(_("\n32-bit MS-DOS version"));
2135 # else
2136     MSG_PUTS(_("\n16-bit MS-DOS version"));
2137 # endif
2138 #endif
2139 #ifdef MACOS
2140 # ifdef MACOS_X
2141 #  ifdef MACOS_X_UNIX
2142     MSG_PUTS(_("\nMacOS X (unix) version"));
2143 #  else
2144     MSG_PUTS(_("\nMacOS X version"));
2145 #  endif
2146 #else
2147     MSG_PUTS(_("\nMacOS version"));
2148 # endif
2149 #endif
2150 
2151 #ifdef VMS
2152     MSG_PUTS(_("\nOpenVMS version"));
2153 # ifdef HAVE_PATHDEF
2154     if (*compiled_arch != NUL)
2155     {
2156 	MSG_PUTS(" - ");
2157 	MSG_PUTS(compiled_arch);
2158     }
2159 # endif
2160 
2161 #endif
2162 
2163     /* Print the list of patch numbers if there is at least one. */
2164     /* Print a range when patches are consecutive: "1-10, 12, 15-40, 42-45" */
2165     if (included_patches[0] != 0)
2166     {
2167 	MSG_PUTS(_("\nIncluded patches: "));
2168 	first = -1;
2169 	/* find last one */
2170 	for (i = 0; included_patches[i] != 0; ++i)
2171 	    ;
2172 	while (--i >= 0)
2173 	{
2174 	    if (first < 0)
2175 		first = included_patches[i];
2176 	    if (i == 0 || included_patches[i - 1] != included_patches[i] + 1)
2177 	    {
2178 		MSG_PUTS(s);
2179 		s = ", ";
2180 		msg_outnum((long)first);
2181 		if (first != included_patches[i])
2182 		{
2183 		    MSG_PUTS("-");
2184 		    msg_outnum((long)included_patches[i]);
2185 		}
2186 		first = -1;
2187 	    }
2188 	}
2189     }
2190 
2191     /* Print the list of extra patch descriptions if there is at least one. */
2192     if (extra_patches[0] != NULL)
2193     {
2194 	MSG_PUTS(_("\nExtra patches: "));
2195 	s = "";
2196 	for (i = 0; extra_patches[i] != NULL; ++i)
2197 	{
2198 	    MSG_PUTS(s);
2199 	    s = ", ";
2200 	    MSG_PUTS(extra_patches[i]);
2201 	}
2202     }
2203 
2204 #ifdef MODIFIED_BY
2205     MSG_PUTS("\n");
2206     MSG_PUTS(_("Modified by "));
2207     MSG_PUTS(MODIFIED_BY);
2208 #endif
2209 
2210 #ifdef HAVE_PATHDEF
2211     if (*compiled_user != NUL || *compiled_sys != NUL)
2212     {
2213 	MSG_PUTS(_("\nCompiled "));
2214 	if (*compiled_user != NUL)
2215 	{
2216 	    MSG_PUTS(_("by "));
2217 	    MSG_PUTS(compiled_user);
2218 	}
2219 	if (*compiled_sys != NUL)
2220 	{
2221 	    MSG_PUTS("@");
2222 	    MSG_PUTS(compiled_sys);
2223 	}
2224     }
2225 #endif
2226 
2227 #ifdef FEAT_HUGE
2228     MSG_PUTS(_("\nHuge version "));
2229 #else
2230 # ifdef FEAT_BIG
2231     MSG_PUTS(_("\nBig version "));
2232 # else
2233 #  ifdef FEAT_NORMAL
2234     MSG_PUTS(_("\nNormal version "));
2235 #  else
2236 #   ifdef FEAT_SMALL
2237     MSG_PUTS(_("\nSmall version "));
2238 #   else
2239     MSG_PUTS(_("\nTiny version "));
2240 #   endif
2241 #  endif
2242 # endif
2243 #endif
2244 #ifndef FEAT_GUI
2245     MSG_PUTS(_("without GUI."));
2246 #else
2247 # ifdef FEAT_GUI_GTK
2248 #  ifdef FEAT_GUI_GNOME
2249     MSG_PUTS(_("with GTK2-GNOME GUI."));
2250 #  else
2251     MSG_PUTS(_("with GTK2 GUI."));
2252 #  endif
2253 # else
2254 #  ifdef FEAT_GUI_MOTIF
2255     MSG_PUTS(_("with X11-Motif GUI."));
2256 #  else
2257 #   ifdef FEAT_GUI_ATHENA
2258 #    ifdef FEAT_GUI_NEXTAW
2259     MSG_PUTS(_("with X11-neXtaw GUI."));
2260 #    else
2261     MSG_PUTS(_("with X11-Athena GUI."));
2262 #    endif
2263 #   else
2264 #     ifdef FEAT_GUI_PHOTON
2265     MSG_PUTS(_("with Photon GUI."));
2266 #     else
2267 #      if defined(MSWIN)
2268     MSG_PUTS(_("with GUI."));
2269 #      else
2270 #	if defined(TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON
2271     MSG_PUTS(_("with Carbon GUI."));
2272 #	else
2273 #	 if defined(TARGET_API_MAC_OSX) && TARGET_API_MAC_OSX
2274     MSG_PUTS(_("with Cocoa GUI."));
2275 #	 else
2276 #	  if defined(MACOS)
2277     MSG_PUTS(_("with (classic) GUI."));
2278 #	  endif
2279 #	 endif
2280 #	endif
2281 #      endif
2282 #    endif
2283 #   endif
2284 #  endif
2285 # endif
2286 #endif
2287     version_msg(_("  Features included (+) or not (-):\n"));
2288 
2289     /* print all the features */
2290     for (i = 0; features[i] != NULL; ++i)
2291     {
2292 	version_msg(features[i]);
2293 	if (msg_col > 0)
2294 	    version_msg(" ");
2295     }
2296 
2297     version_msg("\n");
2298 #ifdef SYS_VIMRC_FILE
2299     version_msg(_("   system vimrc file: \""));
2300     version_msg(SYS_VIMRC_FILE);
2301     version_msg("\"\n");
2302 #endif
2303 #ifdef USR_VIMRC_FILE
2304     version_msg(_("     user vimrc file: \""));
2305     version_msg(USR_VIMRC_FILE);
2306     version_msg("\"\n");
2307 #endif
2308 #ifdef USR_VIMRC_FILE2
2309     version_msg(_(" 2nd user vimrc file: \""));
2310     version_msg(USR_VIMRC_FILE2);
2311     version_msg("\"\n");
2312 #endif
2313 #ifdef USR_VIMRC_FILE3
2314     version_msg(_(" 3rd user vimrc file: \""));
2315     version_msg(USR_VIMRC_FILE3);
2316     version_msg("\"\n");
2317 #endif
2318 #ifdef USR_EXRC_FILE
2319     version_msg(_("      user exrc file: \""));
2320     version_msg(USR_EXRC_FILE);
2321     version_msg("\"\n");
2322 #endif
2323 #ifdef USR_EXRC_FILE2
2324     version_msg(_("  2nd user exrc file: \""));
2325     version_msg(USR_EXRC_FILE2);
2326     version_msg("\"\n");
2327 #endif
2328 #ifdef FEAT_GUI
2329 # ifdef SYS_GVIMRC_FILE
2330     version_msg(_("  system gvimrc file: \""));
2331     version_msg(SYS_GVIMRC_FILE);
2332     version_msg("\"\n");
2333 # endif
2334     version_msg(_("    user gvimrc file: \""));
2335     version_msg(USR_GVIMRC_FILE);
2336     version_msg("\"\n");
2337 # ifdef USR_GVIMRC_FILE2
2338     version_msg(_("2nd user gvimrc file: \""));
2339     version_msg(USR_GVIMRC_FILE2);
2340     version_msg("\"\n");
2341 # endif
2342 # ifdef USR_GVIMRC_FILE3
2343     version_msg(_("3rd user gvimrc file: \""));
2344     version_msg(USR_GVIMRC_FILE3);
2345     version_msg("\"\n");
2346 # endif
2347 #endif
2348 #ifdef FEAT_GUI
2349 # ifdef SYS_MENU_FILE
2350     version_msg(_("    system menu file: \""));
2351     version_msg(SYS_MENU_FILE);
2352     version_msg("\"\n");
2353 # endif
2354 #endif
2355 #ifdef HAVE_PATHDEF
2356     if (*default_vim_dir != NUL)
2357     {
2358 	version_msg(_("  fall-back for $VIM: \""));
2359 	version_msg((char *)default_vim_dir);
2360 	version_msg("\"\n");
2361     }
2362     if (*default_vimruntime_dir != NUL)
2363     {
2364 	version_msg(_(" f-b for $VIMRUNTIME: \""));
2365 	version_msg((char *)default_vimruntime_dir);
2366 	version_msg("\"\n");
2367     }
2368     version_msg(_("Compilation: "));
2369     version_msg((char *)all_cflags);
2370     version_msg("\n");
2371 #ifdef VMS
2372     if (*compiler_version != NUL)
2373     {
2374 	version_msg(_("Compiler: "));
2375 	version_msg((char *)compiler_version);
2376 	version_msg("\n");
2377     }
2378 #endif
2379     version_msg(_("Linking: "));
2380     version_msg((char *)all_lflags);
2381 #endif
2382 #ifdef DEBUG
2383     version_msg("\n");
2384     version_msg(_("  DEBUG BUILD"));
2385 #endif
2386 }
2387 
2388 /*
2389  * Output a string for the version message.  If it's going to wrap, output a
2390  * newline, unless the message is too long to fit on the screen anyway.
2391  */
2392     static void
2393 version_msg(s)
2394     char	*s;
2395 {
2396     int		len = (int)STRLEN(s);
2397 
2398     if (!got_int && len < (int)Columns && msg_col + len >= (int)Columns
2399 								&& *s != '\n')
2400 	msg_putchar('\n');
2401     if (!got_int)
2402 	MSG_PUTS(s);
2403 }
2404 
2405 static void do_intro_line __ARGS((int row, char_u *mesg, int add_version, int attr));
2406 
2407 /*
2408  * Give an introductory message about Vim.
2409  * Only used when starting Vim on an empty file, without a file name.
2410  * Or with the ":intro" command (for Sven :-).
2411  */
2412     void
2413 intro_message(colon)
2414     int		colon;		/* TRUE for ":intro" */
2415 {
2416     int		i;
2417     int		row;
2418     int		blanklines;
2419     int		sponsor;
2420     char	*p;
2421     static char	*(lines[]) =
2422     {
2423 	N_("VIM - Vi IMproved"),
2424 	"",
2425 	N_("version "),
2426 	N_("by Bram Moolenaar et al."),
2427 #ifdef MODIFIED_BY
2428 	" ",
2429 #endif
2430 	N_("Vim is open source and freely distributable"),
2431 	"",
2432 	N_("Help poor children in Uganda!"),
2433 	N_("type  :help iccf<Enter>       for information "),
2434 	"",
2435 	N_("type  :q<Enter>               to exit         "),
2436 	N_("type  :help<Enter>  or  <F1>  for on-line help"),
2437 	N_("type  :help version7<Enter>   for version info"),
2438 	NULL,
2439 	"",
2440 	N_("Running in Vi compatible mode"),
2441 	N_("type  :set nocp<Enter>        for Vim defaults"),
2442 	N_("type  :help cp-default<Enter> for info on this"),
2443     };
2444 #ifdef FEAT_GUI
2445     static char	*(gui_lines[]) =
2446     {
2447 	NULL,
2448 	NULL,
2449 	NULL,
2450 	NULL,
2451 #ifdef MODIFIED_BY
2452 	NULL,
2453 #endif
2454 	NULL,
2455 	NULL,
2456 	NULL,
2457 	N_("menu  Help->Orphans           for information    "),
2458 	NULL,
2459 	N_("Running modeless, typed text is inserted"),
2460 	N_("menu  Edit->Global Settings->Toggle Insert Mode  "),
2461 	N_("                              for two modes      "),
2462 	NULL,
2463 	NULL,
2464 	NULL,
2465 	N_("menu  Edit->Global Settings->Toggle Vi Compatible"),
2466 	N_("                              for Vim defaults   "),
2467     };
2468 #endif
2469 
2470     /* blanklines = screen height - # message lines */
2471     blanklines = (int)Rows - ((sizeof(lines) / sizeof(char *)) - 1);
2472     if (!p_cp)
2473 	blanklines += 4;  /* add 4 for not showing "Vi compatible" message */
2474 #if defined(WIN3264) && !defined(FEAT_GUI_W32)
2475     if (mch_windows95())
2476 	blanklines -= 3;  /* subtract 3 for showing "Windows 95" message */
2477 #endif
2478 
2479 #ifdef FEAT_WINDOWS
2480     /* Don't overwrite a statusline.  Depends on 'cmdheight'. */
2481     if (p_ls > 1)
2482 	blanklines -= Rows - topframe->fr_height;
2483 #endif
2484     if (blanklines < 0)
2485 	blanklines = 0;
2486 
2487     /* Show the sponsor and register message one out of four times, the Uganda
2488      * message two out of four times. */
2489     sponsor = (int)time(NULL);
2490     sponsor = ((sponsor & 2) == 0) - ((sponsor & 4) == 0);
2491 
2492     /* start displaying the message lines after half of the blank lines */
2493     row = blanklines / 2;
2494     if ((row >= 2 && Columns >= 50) || colon)
2495     {
2496 	for (i = 0; i < (int)(sizeof(lines) / sizeof(char *)); ++i)
2497 	{
2498 	    p = lines[i];
2499 #ifdef FEAT_GUI
2500 	    if (p_im && gui.in_use && gui_lines[i] != NULL)
2501 		p = gui_lines[i];
2502 #endif
2503 	    if (p == NULL)
2504 	    {
2505 		if (!p_cp)
2506 		    break;
2507 		continue;
2508 	    }
2509 	    if (sponsor != 0)
2510 	    {
2511 		if (strstr(p, "children") != NULL)
2512 		    p = sponsor < 0
2513 			? N_("Sponsor Vim development!")
2514 			: N_("Become a registered Vim user!");
2515 		else if (strstr(p, "iccf") != NULL)
2516 		    p = sponsor < 0
2517 			? N_("type  :help sponsor<Enter>    for information ")
2518 			: N_("type  :help register<Enter>   for information ");
2519 		else if (strstr(p, "Orphans") != NULL)
2520 		    p = N_("menu  Help->Sponsor/Register  for information    ");
2521 	    }
2522 	    if (*p != NUL)
2523 		do_intro_line(row, (char_u *)_(p), i == 2, 0);
2524 	    ++row;
2525 	}
2526 #if defined(WIN3264) && !defined(FEAT_GUI_W32)
2527 	if (mch_windows95())
2528 	{
2529 	    do_intro_line(++row,
2530 		    (char_u *)_("WARNING: Windows 95/98/ME detected"),
2531 							FALSE, hl_attr(HLF_E));
2532 	    do_intro_line(++row,
2533 		(char_u *)_("type  :help windows95<Enter>  for info on this"),
2534 								    FALSE, 0);
2535 	}
2536 #endif
2537     }
2538 
2539     /* Make the wait-return message appear just below the text. */
2540     if (colon)
2541 	msg_row = row;
2542 }
2543 
2544     static void
2545 do_intro_line(row, mesg, add_version, attr)
2546     int		row;
2547     char_u	*mesg;
2548     int		add_version;
2549     int		attr;
2550 {
2551     char_u	vers[20];
2552     int		col;
2553     char_u	*p;
2554     int		l;
2555     int		clen;
2556 #ifdef MODIFIED_BY
2557 # define MODBY_LEN 150
2558     char_u	modby[MODBY_LEN];
2559 
2560     if (*mesg == ' ')
2561     {
2562 	vim_strncpy(modby, (char_u *)_("Modified by "), MODBY_LEN - 1);
2563 	l = STRLEN(modby);
2564 	vim_strncpy(modby + l, (char_u *)MODIFIED_BY, MODBY_LEN - l - 1);
2565 	mesg = modby;
2566     }
2567 #endif
2568 
2569     /* Center the message horizontally. */
2570     col = vim_strsize(mesg);
2571     if (add_version)
2572     {
2573 	STRCPY(vers, mediumVersion);
2574 	if (highest_patch())
2575 	{
2576 	    /* Check for 9.9x or 9.9xx, alpha/beta version */
2577 	    if (isalpha((int)vers[3]))
2578 	    {
2579 		int len = (isalpha((int)vers[4])) ? 5 : 4;
2580 		sprintf((char *)vers + len, ".%d%s", highest_patch(),
2581 							 mediumVersion + len);
2582 	    }
2583 	    else
2584 		sprintf((char *)vers + 3, ".%d", highest_patch());
2585 	}
2586 	col += (int)STRLEN(vers);
2587     }
2588     col = (Columns - col) / 2;
2589     if (col < 0)
2590 	col = 0;
2591 
2592     /* Split up in parts to highlight <> items differently. */
2593     for (p = mesg; *p != NUL; p += l)
2594     {
2595 	clen = 0;
2596 	for (l = 0; p[l] != NUL
2597 			 && (l == 0 || (p[l] != '<' && p[l - 1] != '>')); ++l)
2598 	{
2599 #ifdef FEAT_MBYTE
2600 	    if (has_mbyte)
2601 	    {
2602 		clen += ptr2cells(p + l);
2603 		l += (*mb_ptr2len)(p + l) - 1;
2604 	    }
2605 	    else
2606 #endif
2607 		clen += byte2cells(p[l]);
2608 	}
2609 	screen_puts_len(p, l, row, col, *p == '<' ? hl_attr(HLF_8) : attr);
2610 	col += clen;
2611     }
2612 
2613     /* Add the version number to the version line. */
2614     if (add_version)
2615 	screen_puts(vers, row, col, 0);
2616 }
2617 
2618 /*
2619  * ":intro": clear screen, display intro screen and wait for return.
2620  */
2621     void
2622 ex_intro(eap)
2623     exarg_T	*eap UNUSED;
2624 {
2625     screenclear();
2626     intro_message(TRUE);
2627     wait_return(TRUE);
2628 }
2629