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