xref: /vim-8.2.3635/src/version.c (revision d14e00ea)
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 
38     void
39 make_version(void)
40 {
41     /*
42      * Construct the long version string.  Necessary because
43      * VAX C can't catenate strings in the preprocessor.
44      */
45     strcpy(longVersion, VIM_VERSION_LONG_DATE);
46     strcat(longVersion, __DATE__);
47     strcat(longVersion, " ");
48     strcat(longVersion, __TIME__);
49     strcat(longVersion, ")");
50 }
51 # else
52 char	*longVersion = VIM_VERSION_LONG_DATE __DATE__ " " __TIME__ ")";
53 # endif
54 #else
55 char	*longVersion = VIM_VERSION_LONG;
56 #endif
57 
58 static void list_features(void);
59 static void version_msg(char *s);
60 
61 static char *(features[]) =
62 {
63 #ifdef HAVE_ACL
64 	"+acl",
65 #else
66 	"-acl",
67 #endif
68 #ifdef AMIGA		/* only for Amiga systems */
69 # ifdef FEAT_ARP
70 	"+ARP",
71 # else
72 	"-ARP",
73 # endif
74 #endif
75 #ifdef FEAT_ARABIC
76 	"+arabic",
77 #else
78 	"-arabic",
79 #endif
80 #ifdef FEAT_AUTOCMD
81 	"+autocmd",
82 #else
83 	"-autocmd",
84 #endif
85 #ifdef FEAT_BEVAL
86 	"+balloon_eval",
87 #else
88 	"-balloon_eval",
89 #endif
90 #ifdef FEAT_BROWSE
91 	"+browse",
92 #else
93 	"-browse",
94 #endif
95 #ifdef NO_BUILTIN_TCAPS
96 	"-builtin_terms",
97 #endif
98 #ifdef SOME_BUILTIN_TCAPS
99 	"+builtin_terms",
100 #endif
101 #ifdef ALL_BUILTIN_TCAPS
102 	"++builtin_terms",
103 #endif
104 #ifdef FEAT_BYTEOFF
105 	"+byte_offset",
106 #else
107 	"-byte_offset",
108 #endif
109 #ifdef FEAT_CHANNEL
110 	"+channel",
111 #else
112 	"-channel",
113 #endif
114 #ifdef FEAT_CINDENT
115 	"+cindent",
116 #else
117 	"-cindent",
118 #endif
119 #ifdef FEAT_CLIENTSERVER
120 	"+clientserver",
121 #else
122 	"-clientserver",
123 #endif
124 #ifdef FEAT_CLIPBOARD
125 	"+clipboard",
126 #else
127 	"-clipboard",
128 #endif
129 #ifdef FEAT_CMDL_COMPL
130 	"+cmdline_compl",
131 #else
132 	"-cmdline_compl",
133 #endif
134 #ifdef FEAT_CMDHIST
135 	"+cmdline_hist",
136 #else
137 	"-cmdline_hist",
138 #endif
139 #ifdef FEAT_CMDL_INFO
140 	"+cmdline_info",
141 #else
142 	"-cmdline_info",
143 #endif
144 #ifdef FEAT_COMMENTS
145 	"+comments",
146 #else
147 	"-comments",
148 #endif
149 #ifdef FEAT_CONCEAL
150 	"+conceal",
151 #else
152 	"-conceal",
153 #endif
154 #ifdef FEAT_CRYPT
155 	"+cryptv",
156 #else
157 	"-cryptv",
158 #endif
159 #ifdef FEAT_CSCOPE
160 	"+cscope",
161 #else
162 	"-cscope",
163 #endif
164 #ifdef FEAT_CURSORBIND
165 	"+cursorbind",
166 #else
167 	"-cursorbind",
168 #endif
169 #ifdef CURSOR_SHAPE
170 	"+cursorshape",
171 #else
172 	"-cursorshape",
173 #endif
174 #if defined(FEAT_CON_DIALOG) && defined(FEAT_GUI_DIALOG)
175 	"+dialog_con_gui",
176 #else
177 # if defined(FEAT_CON_DIALOG)
178 	"+dialog_con",
179 # else
180 #  if defined(FEAT_GUI_DIALOG)
181 	"+dialog_gui",
182 #  else
183 	"-dialog",
184 #  endif
185 # endif
186 #endif
187 #ifdef FEAT_DIFF
188 	"+diff",
189 #else
190 	"-diff",
191 #endif
192 #ifdef FEAT_DIGRAPHS
193 	"+digraphs",
194 #else
195 	"-digraphs",
196 #endif
197 #ifdef FEAT_GUI_W32
198 # ifdef FEAT_DIRECTX
199 	"+directx",
200 # else
201 	"-directx",
202 # endif
203 #endif
204 #ifdef FEAT_DND
205 	"+dnd",
206 #else
207 	"-dnd",
208 #endif
209 #ifdef EBCDIC
210 	"+ebcdic",
211 #else
212 	"-ebcdic",
213 #endif
214 #ifdef FEAT_EMACS_TAGS
215 	"+emacs_tags",
216 #else
217 	"-emacs_tags",
218 #endif
219 #ifdef FEAT_EVAL
220 	"+eval",
221 #else
222 	"-eval",
223 #endif
224 	"+ex_extra",
225 #ifdef FEAT_SEARCH_EXTRA
226 	"+extra_search",
227 #else
228 	"-extra_search",
229 #endif
230 #ifdef FEAT_FKMAP
231 	"+farsi",
232 #else
233 	"-farsi",
234 #endif
235 #ifdef FEAT_SEARCHPATH
236 	"+file_in_path",
237 #else
238 	"-file_in_path",
239 #endif
240 #ifdef FEAT_FIND_ID
241 	"+find_in_path",
242 #else
243 	"-find_in_path",
244 #endif
245 #ifdef FEAT_FLOAT
246 	"+float",
247 #else
248 	"-float",
249 #endif
250 #ifdef FEAT_FOLDING
251 	"+folding",
252 #else
253 	"-folding",
254 #endif
255 #ifdef FEAT_FOOTER
256 	"+footer",
257 #else
258 	"-footer",
259 #endif
260 	    /* only interesting on Unix systems */
261 #if !defined(USE_SYSTEM) && defined(UNIX)
262 	"+fork()",
263 #endif
264 #ifdef FEAT_GETTEXT
265 # ifdef DYNAMIC_GETTEXT
266 	"+gettext/dyn",
267 # else
268 	"+gettext",
269 # endif
270 #else
271 	"-gettext",
272 #endif
273 #ifdef FEAT_HANGULIN
274 	"+hangul_input",
275 #else
276 	"-hangul_input",
277 #endif
278 #if (defined(HAVE_ICONV_H) && defined(USE_ICONV)) || defined(DYNAMIC_ICONV)
279 # ifdef DYNAMIC_ICONV
280 	"+iconv/dyn",
281 # else
282 	"+iconv",
283 # endif
284 #else
285 	"-iconv",
286 #endif
287 #ifdef FEAT_INS_EXPAND
288 	"+insert_expand",
289 #else
290 	"-insert_expand",
291 #endif
292 #ifdef FEAT_JUMPLIST
293 	"+jumplist",
294 #else
295 	"-jumplist",
296 #endif
297 #ifdef FEAT_KEYMAP
298 	"+keymap",
299 #else
300 	"-keymap",
301 #endif
302 #ifdef FEAT_LANGMAP
303 	"+langmap",
304 #else
305 	"-langmap",
306 #endif
307 #ifdef FEAT_LIBCALL
308 	"+libcall",
309 #else
310 	"-libcall",
311 #endif
312 #ifdef FEAT_LINEBREAK
313 	"+linebreak",
314 #else
315 	"-linebreak",
316 #endif
317 #ifdef FEAT_LISP
318 	"+lispindent",
319 #else
320 	"-lispindent",
321 #endif
322 #ifdef FEAT_LISTCMDS
323 	"+listcmds",
324 #else
325 	"-listcmds",
326 #endif
327 #ifdef FEAT_LOCALMAP
328 	"+localmap",
329 #else
330 	"-localmap",
331 #endif
332 #ifdef FEAT_LUA
333 # ifdef DYNAMIC_LUA
334 	"+lua/dyn",
335 # else
336 	"+lua",
337 # endif
338 #else
339 	"-lua",
340 #endif
341 #ifdef FEAT_MENU
342 	"+menu",
343 #else
344 	"-menu",
345 #endif
346 #ifdef FEAT_SESSION
347 	"+mksession",
348 #else
349 	"-mksession",
350 #endif
351 #ifdef FEAT_MODIFY_FNAME
352 	"+modify_fname",
353 #else
354 	"-modify_fname",
355 #endif
356 #ifdef FEAT_MOUSE
357 	"+mouse",
358 #  ifdef FEAT_MOUSESHAPE
359 	"+mouseshape",
360 #  else
361 	"-mouseshape",
362 #  endif
363 # else
364 	"-mouse",
365 #endif
366 
367 #if defined(UNIX) || defined(VMS)
368 # ifdef FEAT_MOUSE_DEC
369 	"+mouse_dec",
370 # else
371 	"-mouse_dec",
372 # endif
373 # ifdef FEAT_MOUSE_GPM
374 	"+mouse_gpm",
375 # else
376 	"-mouse_gpm",
377 # endif
378 # ifdef FEAT_MOUSE_JSB
379 	"+mouse_jsbterm",
380 # else
381 	"-mouse_jsbterm",
382 # endif
383 # ifdef FEAT_MOUSE_NET
384 	"+mouse_netterm",
385 # else
386 	"-mouse_netterm",
387 # endif
388 #endif
389 
390 #ifdef __QNX__
391 # ifdef FEAT_MOUSE_PTERM
392 	"+mouse_pterm",
393 # else
394 	"-mouse_pterm",
395 # endif
396 #endif
397 
398 #if defined(UNIX) || defined(VMS)
399 # ifdef FEAT_MOUSE_SGR
400 	"+mouse_sgr",
401 # else
402 	"-mouse_sgr",
403 # endif
404 # ifdef FEAT_SYSMOUSE
405 	"+mouse_sysmouse",
406 # else
407 	"-mouse_sysmouse",
408 # endif
409 # ifdef FEAT_MOUSE_URXVT
410 	"+mouse_urxvt",
411 # else
412 	"-mouse_urxvt",
413 # endif
414 # ifdef FEAT_MOUSE_XTERM
415 	"+mouse_xterm",
416 # else
417 	"-mouse_xterm",
418 # endif
419 #endif
420 
421 #ifdef FEAT_MBYTE_IME
422 # ifdef DYNAMIC_IME
423 	"+multi_byte_ime/dyn",
424 # else
425 	"+multi_byte_ime",
426 # endif
427 #else
428 # ifdef FEAT_MBYTE
429 	"+multi_byte",
430 # else
431 	"-multi_byte",
432 # endif
433 #endif
434 #ifdef FEAT_MULTI_LANG
435 	"+multi_lang",
436 #else
437 	"-multi_lang",
438 #endif
439 #ifdef FEAT_MZSCHEME
440 # ifdef DYNAMIC_MZSCHEME
441 	"+mzscheme/dyn",
442 # else
443 	"+mzscheme",
444 # endif
445 #else
446 	"-mzscheme",
447 #endif
448 #ifdef FEAT_NETBEANS_INTG
449 	"+netbeans_intg",
450 #else
451 	"-netbeans_intg",
452 #endif
453 #ifdef FEAT_GUI_W32
454 # ifdef FEAT_OLE
455 	"+ole",
456 # else
457 	"-ole",
458 # endif
459 #endif
460 #ifdef FEAT_PATH_EXTRA
461 	"+path_extra",
462 #else
463 	"-path_extra",
464 #endif
465 #ifdef FEAT_PERL
466 # ifdef DYNAMIC_PERL
467 	"+perl/dyn",
468 # else
469 	"+perl",
470 # endif
471 #else
472 	"-perl",
473 #endif
474 #ifdef FEAT_PERSISTENT_UNDO
475 	"+persistent_undo",
476 #else
477 	"-persistent_undo",
478 #endif
479 #ifdef FEAT_PRINTER
480 # ifdef FEAT_POSTSCRIPT
481 	"+postscript",
482 # else
483 	"-postscript",
484 # endif
485 	"+printer",
486 #else
487 	"-printer",
488 #endif
489 #ifdef FEAT_PROFILE
490 	"+profile",
491 #else
492 	"-profile",
493 #endif
494 #ifdef FEAT_PYTHON
495 # ifdef DYNAMIC_PYTHON
496 	"+python/dyn",
497 # else
498 	"+python",
499 # endif
500 #else
501 	"-python",
502 #endif
503 #ifdef FEAT_PYTHON3
504 # ifdef DYNAMIC_PYTHON3
505 	"+python3/dyn",
506 # else
507 	"+python3",
508 # endif
509 #else
510 	"-python3",
511 #endif
512 #ifdef FEAT_QUICKFIX
513 	"+quickfix",
514 #else
515 	"-quickfix",
516 #endif
517 #ifdef FEAT_RELTIME
518 	"+reltime",
519 #else
520 	"-reltime",
521 #endif
522 #ifdef FEAT_RIGHTLEFT
523 	"+rightleft",
524 #else
525 	"-rightleft",
526 #endif
527 #ifdef FEAT_RUBY
528 # ifdef DYNAMIC_RUBY
529 	"+ruby/dyn",
530 # else
531 	"+ruby",
532 # endif
533 #else
534 	"-ruby",
535 #endif
536 #ifdef FEAT_SCROLLBIND
537 	"+scrollbind",
538 #else
539 	"-scrollbind",
540 #endif
541 #ifdef FEAT_SIGNS
542 	"+signs",
543 #else
544 	"-signs",
545 #endif
546 #ifdef FEAT_SMARTINDENT
547 	"+smartindent",
548 #else
549 	"-smartindent",
550 #endif
551 #ifdef FEAT_SNIFF
552 	"+sniff",
553 #else
554 	"-sniff",
555 #endif
556 #ifdef STARTUPTIME
557 	"+startuptime",
558 #else
559 	"-startuptime",
560 #endif
561 #ifdef FEAT_STL_OPT
562 	"+statusline",
563 #else
564 	"-statusline",
565 #endif
566 #ifdef FEAT_SUN_WORKSHOP
567 	"+sun_workshop",
568 #else
569 	"-sun_workshop",
570 #endif
571 #ifdef FEAT_SYN_HL
572 	"+syntax",
573 #else
574 	"-syntax",
575 #endif
576 	    /* only interesting on Unix systems */
577 #if defined(USE_SYSTEM) && (defined(UNIX) || defined(__EMX__))
578 	"+system()",
579 #endif
580 #ifdef FEAT_TAG_BINS
581 	"+tag_binary",
582 #else
583 	"-tag_binary",
584 #endif
585 #ifdef FEAT_TAG_OLDSTATIC
586 	"+tag_old_static",
587 #else
588 	"-tag_old_static",
589 #endif
590 #ifdef FEAT_TAG_ANYWHITE
591 	"+tag_any_white",
592 #else
593 	"-tag_any_white",
594 #endif
595 #ifdef FEAT_TCL
596 # ifdef DYNAMIC_TCL
597 	"+tcl/dyn",
598 # else
599 	"+tcl",
600 # endif
601 #else
602 	"-tcl",
603 #endif
604 #if defined(UNIX) || defined(__EMX__)
605 /* only Unix (or OS/2 with EMX!) can have terminfo instead of termcap */
606 # ifdef TERMINFO
607 	"+terminfo",
608 # else
609 	"-terminfo",
610 # endif
611 #else		    /* unix always includes termcap support */
612 # ifdef HAVE_TGETENT
613 	"+tgetent",
614 # else
615 	"-tgetent",
616 # endif
617 #endif
618 #ifdef FEAT_TERMRESPONSE
619 	"+termresponse",
620 #else
621 	"-termresponse",
622 #endif
623 #ifdef FEAT_TEXTOBJ
624 	"+textobjects",
625 #else
626 	"-textobjects",
627 #endif
628 #ifdef FEAT_TITLE
629 	"+title",
630 #else
631 	"-title",
632 #endif
633 #ifdef FEAT_TOOLBAR
634 	"+toolbar",
635 #else
636 	"-toolbar",
637 #endif
638 #ifdef FEAT_USR_CMDS
639 	"+user_commands",
640 #else
641 	"-user_commands",
642 #endif
643 #ifdef FEAT_VERTSPLIT
644 	"+vertsplit",
645 #else
646 	"-vertsplit",
647 #endif
648 #ifdef FEAT_VIRTUALEDIT
649 	"+virtualedit",
650 #else
651 	"-virtualedit",
652 #endif
653 	"+visual",
654 #ifdef FEAT_VISUALEXTRA
655 	"+visualextra",
656 #else
657 	"-visualextra",
658 #endif
659 #ifdef FEAT_VIMINFO
660 	"+viminfo",
661 #else
662 	"-viminfo",
663 #endif
664 #ifdef FEAT_VREPLACE
665 	"+vreplace",
666 #else
667 	"-vreplace",
668 #endif
669 #ifdef FEAT_WILDIGN
670 	"+wildignore",
671 #else
672 	"-wildignore",
673 #endif
674 #ifdef FEAT_WILDMENU
675 	"+wildmenu",
676 #else
677 	"-wildmenu",
678 #endif
679 #ifdef FEAT_WINDOWS
680 	"+windows",
681 #else
682 	"-windows",
683 #endif
684 #ifdef FEAT_WRITEBACKUP
685 	"+writebackup",
686 #else
687 	"-writebackup",
688 #endif
689 #if defined(UNIX) || defined(VMS)
690 # ifdef FEAT_X11
691 	"+X11",
692 # else
693 	"-X11",
694 # endif
695 #endif
696 #ifdef FEAT_XFONTSET
697 	"+xfontset",
698 #else
699 	"-xfontset",
700 #endif
701 #ifdef FEAT_XIM
702 	"+xim",
703 #else
704 	"-xim",
705 #endif
706 #if defined(UNIX) || defined(VMS)
707 # ifdef USE_XSMP_INTERACT
708 	"+xsmp_interact",
709 # else
710 #  ifdef USE_XSMP
711 	"+xsmp",
712 #  else
713 	"-xsmp",
714 #  endif
715 # endif
716 # ifdef FEAT_XCLIPBOARD
717 	"+xterm_clipboard",
718 # else
719 	"-xterm_clipboard",
720 # endif
721 #endif
722 #ifdef FEAT_XTERM_SAVE
723 	"+xterm_save",
724 #else
725 	"-xterm_save",
726 #endif
727 #ifdef WIN3264
728 # ifdef FEAT_XPM_W32
729 	"+xpm_w32",
730 # else
731 	"-xpm_w32",
732 # endif
733 #else
734 # ifdef HAVE_XPM
735 	"+xpm",
736 # else
737 	"-xpm",
738 # endif
739 #endif
740 	NULL
741 };
742 
743 static int included_patches[] =
744 {   /* Add new patch number below this line */
745 /**/
746     1225,
747 /**/
748     1224,
749 /**/
750     1223,
751 /**/
752     1222,
753 /**/
754     1221,
755 /**/
756     1220,
757 /**/
758     1219,
759 /**/
760     1218,
761 /**/
762     1217,
763 /**/
764     1216,
765 /**/
766     1215,
767 /**/
768     1214,
769 /**/
770     1213,
771 /**/
772     1212,
773 /**/
774     1211,
775 /**/
776     1210,
777 /**/
778     1209,
779 /**/
780     1208,
781 /**/
782     1207,
783 /**/
784     1206,
785 /**/
786     1205,
787 /**/
788     1204,
789 /**/
790     1203,
791 /**/
792     1202,
793 /**/
794     1201,
795 /**/
796     1200,
797 /**/
798     1199,
799 /**/
800     1198,
801 /**/
802     1197,
803 /**/
804     1196,
805 /**/
806     1195,
807 /**/
808     1194,
809 /**/
810     1193,
811 /**/
812     1192,
813 /**/
814     1191,
815 /**/
816     1190,
817 /**/
818     1189,
819 /**/
820     1188,
821 /**/
822     1187,
823 /**/
824     1186,
825 /**/
826     1185,
827 /**/
828     1184,
829 /**/
830     1183,
831 /**/
832     1182,
833 /**/
834     1181,
835 /**/
836     1180,
837 /**/
838     1179,
839 /**/
840     1178,
841 /**/
842     1177,
843 /**/
844     1176,
845 /**/
846     1175,
847 /**/
848     1174,
849 /**/
850     1173,
851 /**/
852     1172,
853 /**/
854     1171,
855 /**/
856     1170,
857 /**/
858     1169,
859 /**/
860     1168,
861 /**/
862     1167,
863 /**/
864     1166,
865 /**/
866     1165,
867 /**/
868     1164,
869 /**/
870     1163,
871 /**/
872     1162,
873 /**/
874     1161,
875 /**/
876     1160,
877 /**/
878     1159,
879 /**/
880     1158,
881 /**/
882     1157,
883 /**/
884     1156,
885 /**/
886     1155,
887 /**/
888     1154,
889 /**/
890     1153,
891 /**/
892     1152,
893 /**/
894     1151,
895 /**/
896     1150,
897 /**/
898     1149,
899 /**/
900     1148,
901 /**/
902     1147,
903 /**/
904     1146,
905 /**/
906     1145,
907 /**/
908     1144,
909 /**/
910     1143,
911 /**/
912     1142,
913 /**/
914     1141,
915 /**/
916     1140,
917 /**/
918     1139,
919 /**/
920     1138,
921 /**/
922     1137,
923 /**/
924     1136,
925 /**/
926     1135,
927 /**/
928     1134,
929 /**/
930     1133,
931 /**/
932     1132,
933 /**/
934     1131,
935 /**/
936     1130,
937 /**/
938     1129,
939 /**/
940     1128,
941 /**/
942     1127,
943 /**/
944     1126,
945 /**/
946     1125,
947 /**/
948     1124,
949 /**/
950     1123,
951 /**/
952     1122,
953 /**/
954     1121,
955 /**/
956     1120,
957 /**/
958     1119,
959 /**/
960     1118,
961 /**/
962     1117,
963 /**/
964     1116,
965 /**/
966     1115,
967 /**/
968     1114,
969 /**/
970     1113,
971 /**/
972     1112,
973 /**/
974     1111,
975 /**/
976     1110,
977 /**/
978     1109,
979 /**/
980     1108,
981 /**/
982     1107,
983 /**/
984     1106,
985 /**/
986     1105,
987 /**/
988     1104,
989 /**/
990     1103,
991 /**/
992     1102,
993 /**/
994     1101,
995 /**/
996     1100,
997 /**/
998     1099,
999 /**/
1000     1098,
1001 /**/
1002     1097,
1003 /**/
1004     1096,
1005 /**/
1006     1095,
1007 /**/
1008     1094,
1009 /**/
1010     1093,
1011 /**/
1012     1092,
1013 /**/
1014     1091,
1015 /**/
1016     1090,
1017 /**/
1018     1089,
1019 /**/
1020     1088,
1021 /**/
1022     1087,
1023 /**/
1024     1086,
1025 /**/
1026     1085,
1027 /**/
1028     1084,
1029 /**/
1030     1083,
1031 /**/
1032     1082,
1033 /**/
1034     1081,
1035 /**/
1036     1080,
1037 /**/
1038     1079,
1039 /**/
1040     1078,
1041 /**/
1042     1077,
1043 /**/
1044     1076,
1045 /**/
1046     1075,
1047 /**/
1048     1074,
1049 /**/
1050     1073,
1051 /**/
1052     1072,
1053 /**/
1054     1071,
1055 /**/
1056     1070,
1057 /**/
1058     1069,
1059 /**/
1060     1068,
1061 /**/
1062     1067,
1063 /**/
1064     1066,
1065 /**/
1066     1065,
1067 /**/
1068     1064,
1069 /**/
1070     1063,
1071 /**/
1072     1062,
1073 /**/
1074     1061,
1075 /**/
1076     1060,
1077 /**/
1078     1059,
1079 /**/
1080     1058,
1081 /**/
1082     1057,
1083 /**/
1084     1056,
1085 /**/
1086     1055,
1087 /**/
1088     1054,
1089 /**/
1090     1053,
1091 /**/
1092     1052,
1093 /**/
1094     1051,
1095 /**/
1096     1050,
1097 /**/
1098     1049,
1099 /**/
1100     1048,
1101 /**/
1102     1047,
1103 /**/
1104     1046,
1105 /**/
1106     1045,
1107 /**/
1108     1044,
1109 /**/
1110     1043,
1111 /**/
1112     1042,
1113 /**/
1114     1041,
1115 /**/
1116     1040,
1117 /**/
1118     1039,
1119 /**/
1120     1038,
1121 /**/
1122     1037,
1123 /**/
1124     1036,
1125 /**/
1126     1035,
1127 /**/
1128     1034,
1129 /**/
1130     1033,
1131 /**/
1132     1032,
1133 /**/
1134     1031,
1135 /**/
1136     1030,
1137 /**/
1138     1029,
1139 /**/
1140     1028,
1141 /**/
1142     1027,
1143 /**/
1144     1026,
1145 /**/
1146     1025,
1147 /**/
1148     1024,
1149 /**/
1150     1023,
1151 /**/
1152     1022,
1153 /**/
1154     1021,
1155 /**/
1156     1020,
1157 /**/
1158     1019,
1159 /**/
1160     1018,
1161 /**/
1162     1017,
1163 /**/
1164     1016,
1165 /**/
1166     1015,
1167 /**/
1168     1014,
1169 /**/
1170     1013,
1171 /**/
1172     1012,
1173 /**/
1174     1011,
1175 /**/
1176     1010,
1177 /**/
1178     1009,
1179 /**/
1180     1008,
1181 /**/
1182     1007,
1183 /**/
1184     1006,
1185 /**/
1186     1005,
1187 /**/
1188     1004,
1189 /**/
1190     1003,
1191 /**/
1192     1002,
1193 /**/
1194     1001,
1195 /**/
1196     1000,
1197 /**/
1198     999,
1199 /**/
1200     998,
1201 /**/
1202     997,
1203 /**/
1204     996,
1205 /**/
1206     995,
1207 /**/
1208     994,
1209 /**/
1210     993,
1211 /**/
1212     992,
1213 /**/
1214     991,
1215 /**/
1216     990,
1217 /**/
1218     989,
1219 /**/
1220     988,
1221 /**/
1222     987,
1223 /**/
1224     986,
1225 /**/
1226     985,
1227 /**/
1228     984,
1229 /**/
1230     983,
1231 /**/
1232     982,
1233 /**/
1234     981,
1235 /**/
1236     980,
1237 /**/
1238     979,
1239 /**/
1240     978,
1241 /**/
1242     977,
1243 /**/
1244     976,
1245 /**/
1246     975,
1247 /**/
1248     974,
1249 /**/
1250     973,
1251 /**/
1252     972,
1253 /**/
1254     971,
1255 /**/
1256     970,
1257 /**/
1258     969,
1259 /**/
1260     968,
1261 /**/
1262     967,
1263 /**/
1264     966,
1265 /**/
1266     965,
1267 /**/
1268     964,
1269 /**/
1270     963,
1271 /**/
1272     962,
1273 /**/
1274     961,
1275 /**/
1276     960,
1277 /**/
1278     959,
1279 /**/
1280     958,
1281 /**/
1282     957,
1283 /**/
1284     956,
1285 /**/
1286     955,
1287 /**/
1288     954,
1289 /**/
1290     953,
1291 /**/
1292     952,
1293 /**/
1294     951,
1295 /**/
1296     950,
1297 /**/
1298     949,
1299 /**/
1300     948,
1301 /**/
1302     947,
1303 /**/
1304     946,
1305 /**/
1306     945,
1307 /**/
1308     944,
1309 /**/
1310     943,
1311 /**/
1312     942,
1313 /**/
1314     941,
1315 /**/
1316     940,
1317 /**/
1318     939,
1319 /**/
1320     938,
1321 /**/
1322     937,
1323 /**/
1324     936,
1325 /**/
1326     935,
1327 /**/
1328     934,
1329 /**/
1330     933,
1331 /**/
1332     932,
1333 /**/
1334     931,
1335 /**/
1336     930,
1337 /**/
1338     929,
1339 /**/
1340     928,
1341 /**/
1342     927,
1343 /**/
1344     926,
1345 /**/
1346     925,
1347 /**/
1348     924,
1349 /**/
1350     923,
1351 /**/
1352     922,
1353 /**/
1354     921,
1355 /**/
1356     920,
1357 /**/
1358     919,
1359 /**/
1360     918,
1361 /**/
1362     917,
1363 /**/
1364     916,
1365 /**/
1366     915,
1367 /**/
1368     914,
1369 /**/
1370     913,
1371 /**/
1372     912,
1373 /**/
1374     911,
1375 /**/
1376     910,
1377 /**/
1378     909,
1379 /**/
1380     908,
1381 /**/
1382     907,
1383 /**/
1384     906,
1385 /**/
1386     905,
1387 /**/
1388     904,
1389 /**/
1390     903,
1391 /**/
1392     902,
1393 /**/
1394     901,
1395 /**/
1396     900,
1397 /**/
1398     899,
1399 /**/
1400     898,
1401 /**/
1402     897,
1403 /**/
1404     896,
1405 /**/
1406     895,
1407 /**/
1408     894,
1409 /**/
1410     893,
1411 /**/
1412     892,
1413 /**/
1414     891,
1415 /**/
1416     890,
1417 /**/
1418     889,
1419 /**/
1420     888,
1421 /**/
1422     887,
1423 /**/
1424     886,
1425 /**/
1426     885,
1427 /**/
1428     884,
1429 /**/
1430     883,
1431 /**/
1432     882,
1433 /**/
1434     881,
1435 /**/
1436     880,
1437 /**/
1438     879,
1439 /**/
1440     878,
1441 /**/
1442     877,
1443 /**/
1444     876,
1445 /**/
1446     875,
1447 /**/
1448     874,
1449 /**/
1450     873,
1451 /**/
1452     872,
1453 /**/
1454     871,
1455 /**/
1456     870,
1457 /**/
1458     869,
1459 /**/
1460     868,
1461 /**/
1462     867,
1463 /**/
1464     866,
1465 /**/
1466     865,
1467 /**/
1468     864,
1469 /**/
1470     863,
1471 /**/
1472     862,
1473 /**/
1474     861,
1475 /**/
1476     860,
1477 /**/
1478     859,
1479 /**/
1480     858,
1481 /**/
1482     857,
1483 /**/
1484     856,
1485 /**/
1486     855,
1487 /**/
1488     854,
1489 /**/
1490     853,
1491 /**/
1492     852,
1493 /**/
1494     851,
1495 /**/
1496     850,
1497 /**/
1498     849,
1499 /**/
1500     848,
1501 /**/
1502     847,
1503 /**/
1504     846,
1505 /**/
1506     845,
1507 /**/
1508     844,
1509 /**/
1510     843,
1511 /**/
1512     842,
1513 /**/
1514     841,
1515 /**/
1516     840,
1517 /**/
1518     839,
1519 /**/
1520     838,
1521 /**/
1522     837,
1523 /**/
1524     836,
1525 /**/
1526     835,
1527 /**/
1528     834,
1529 /**/
1530     833,
1531 /**/
1532     832,
1533 /**/
1534     831,
1535 /**/
1536     830,
1537 /**/
1538     829,
1539 /**/
1540     828,
1541 /**/
1542     827,
1543 /**/
1544     826,
1545 /**/
1546     825,
1547 /**/
1548     824,
1549 /**/
1550     823,
1551 /**/
1552     822,
1553 /**/
1554     821,
1555 /**/
1556     820,
1557 /**/
1558     819,
1559 /**/
1560     818,
1561 /**/
1562     817,
1563 /**/
1564     816,
1565 /**/
1566     815,
1567 /**/
1568     814,
1569 /**/
1570     813,
1571 /**/
1572     812,
1573 /**/
1574     811,
1575 /**/
1576     810,
1577 /**/
1578     809,
1579 /**/
1580     808,
1581 /**/
1582     807,
1583 /**/
1584     806,
1585 /**/
1586     805,
1587 /**/
1588     804,
1589 /**/
1590     803,
1591 /**/
1592     802,
1593 /**/
1594     801,
1595 /**/
1596     800,
1597 /**/
1598     799,
1599 /**/
1600     798,
1601 /**/
1602     797,
1603 /**/
1604     796,
1605 /**/
1606     795,
1607 /**/
1608     794,
1609 /**/
1610     793,
1611 /**/
1612     792,
1613 /**/
1614     791,
1615 /**/
1616     790,
1617 /**/
1618     789,
1619 /**/
1620     788,
1621 /**/
1622     787,
1623 /**/
1624     786,
1625 /**/
1626     785,
1627 /**/
1628     784,
1629 /**/
1630     783,
1631 /**/
1632     782,
1633 /**/
1634     781,
1635 /**/
1636     780,
1637 /**/
1638     779,
1639 /**/
1640     778,
1641 /**/
1642     777,
1643 /**/
1644     776,
1645 /**/
1646     775,
1647 /**/
1648     774,
1649 /**/
1650     773,
1651 /**/
1652     772,
1653 /**/
1654     771,
1655 /**/
1656     770,
1657 /**/
1658     769,
1659 /**/
1660     768,
1661 /**/
1662     767,
1663 /**/
1664     766,
1665 /**/
1666     765,
1667 /**/
1668     764,
1669 /**/
1670     763,
1671 /**/
1672     762,
1673 /**/
1674     761,
1675 /**/
1676     760,
1677 /**/
1678     759,
1679 /**/
1680     758,
1681 /**/
1682     757,
1683 /**/
1684     756,
1685 /**/
1686     755,
1687 /**/
1688     754,
1689 /**/
1690     753,
1691 /**/
1692     752,
1693 /**/
1694     751,
1695 /**/
1696     750,
1697 /**/
1698     749,
1699 /**/
1700     748,
1701 /**/
1702     747,
1703 /**/
1704     746,
1705 /**/
1706     745,
1707 /**/
1708     744,
1709 /**/
1710     743,
1711 /**/
1712     742,
1713 /**/
1714     741,
1715 /**/
1716     740,
1717 /**/
1718     739,
1719 /**/
1720     738,
1721 /**/
1722     737,
1723 /**/
1724     736,
1725 /**/
1726     735,
1727 /**/
1728     734,
1729 /**/
1730     733,
1731 /**/
1732     732,
1733 /**/
1734     731,
1735 /**/
1736     730,
1737 /**/
1738     729,
1739 /**/
1740     728,
1741 /**/
1742     727,
1743 /**/
1744     726,
1745 /**/
1746     725,
1747 /**/
1748     724,
1749 /**/
1750     723,
1751 /**/
1752     722,
1753 /**/
1754     721,
1755 /**/
1756     720,
1757 /**/
1758     719,
1759 /**/
1760     718,
1761 /**/
1762     717,
1763 /**/
1764     716,
1765 /**/
1766     715,
1767 /**/
1768     714,
1769 /**/
1770     713,
1771 /**/
1772     712,
1773 /**/
1774     711,
1775 /**/
1776     710,
1777 /**/
1778     709,
1779 /**/
1780     708,
1781 /**/
1782     707,
1783 /**/
1784     706,
1785 /**/
1786     705,
1787 /**/
1788     704,
1789 /**/
1790     703,
1791 /**/
1792     702,
1793 /**/
1794     701,
1795 /**/
1796     700,
1797 /**/
1798     699,
1799 /**/
1800     698,
1801 /**/
1802     697,
1803 /**/
1804     696,
1805 /**/
1806     695,
1807 /**/
1808     694,
1809 /**/
1810     693,
1811 /**/
1812     692,
1813 /**/
1814     691,
1815 /**/
1816     690,
1817 /**/
1818     689,
1819 /**/
1820     688,
1821 /**/
1822     687,
1823 /**/
1824     686,
1825 /**/
1826     685,
1827 /**/
1828     684,
1829 /**/
1830     683,
1831 /**/
1832     682,
1833 /**/
1834     681,
1835 /**/
1836     680,
1837 /**/
1838     679,
1839 /**/
1840     678,
1841 /**/
1842     677,
1843 /**/
1844     676,
1845 /**/
1846     675,
1847 /**/
1848     674,
1849 /**/
1850     673,
1851 /**/
1852     672,
1853 /**/
1854     671,
1855 /**/
1856     670,
1857 /**/
1858     669,
1859 /**/
1860     668,
1861 /**/
1862     667,
1863 /**/
1864     666,
1865 /**/
1866     665,
1867 /**/
1868     664,
1869 /**/
1870     663,
1871 /**/
1872     662,
1873 /**/
1874     661,
1875 /**/
1876     660,
1877 /**/
1878     659,
1879 /**/
1880     658,
1881 /**/
1882     657,
1883 /**/
1884     656,
1885 /**/
1886     655,
1887 /**/
1888     654,
1889 /**/
1890     653,
1891 /**/
1892     652,
1893 /**/
1894     651,
1895 /**/
1896     650,
1897 /**/
1898     649,
1899 /**/
1900     648,
1901 /**/
1902     647,
1903 /**/
1904     646,
1905 /**/
1906     645,
1907 /**/
1908     644,
1909 /**/
1910     643,
1911 /**/
1912     642,
1913 /**/
1914     641,
1915 /**/
1916     640,
1917 /**/
1918     639,
1919 /**/
1920     638,
1921 /**/
1922     637,
1923 /**/
1924     636,
1925 /**/
1926     635,
1927 /**/
1928     634,
1929 /**/
1930     633,
1931 /**/
1932     632,
1933 /**/
1934     631,
1935 /**/
1936     630,
1937 /**/
1938     629,
1939 /**/
1940     628,
1941 /**/
1942     627,
1943 /**/
1944     626,
1945 /**/
1946     625,
1947 /**/
1948     624,
1949 /**/
1950     623,
1951 /**/
1952     622,
1953 /**/
1954     621,
1955 /**/
1956     620,
1957 /**/
1958     619,
1959 /**/
1960     618,
1961 /**/
1962     617,
1963 /**/
1964     616,
1965 /**/
1966     615,
1967 /**/
1968     614,
1969 /**/
1970     613,
1971 /**/
1972     612,
1973 /**/
1974     611,
1975 /**/
1976     610,
1977 /**/
1978     609,
1979 /**/
1980     608,
1981 /**/
1982     607,
1983 /**/
1984     606,
1985 /**/
1986     605,
1987 /**/
1988     604,
1989 /**/
1990     603,
1991 /**/
1992     602,
1993 /**/
1994     601,
1995 /**/
1996     600,
1997 /**/
1998     599,
1999 /**/
2000     598,
2001 /**/
2002     597,
2003 /**/
2004     596,
2005 /**/
2006     595,
2007 /**/
2008     594,
2009 /**/
2010     593,
2011 /**/
2012     592,
2013 /**/
2014     591,
2015 /**/
2016     590,
2017 /**/
2018     589,
2019 /**/
2020     588,
2021 /**/
2022     587,
2023 /**/
2024     586,
2025 /**/
2026     585,
2027 /**/
2028     584,
2029 /**/
2030     583,
2031 /**/
2032     582,
2033 /**/
2034     581,
2035 /**/
2036     580,
2037 /**/
2038     579,
2039 /**/
2040     578,
2041 /**/
2042     577,
2043 /**/
2044     576,
2045 /**/
2046     575,
2047 /**/
2048     574,
2049 /**/
2050     573,
2051 /**/
2052     572,
2053 /**/
2054     571,
2055 /**/
2056     570,
2057 /**/
2058     569,
2059 /**/
2060     568,
2061 /**/
2062     567,
2063 /**/
2064     566,
2065 /**/
2066     565,
2067 /**/
2068     564,
2069 /**/
2070     563,
2071 /**/
2072     562,
2073 /**/
2074     561,
2075 /**/
2076     560,
2077 /**/
2078     559,
2079 /**/
2080     558,
2081 /**/
2082     557,
2083 /**/
2084     556,
2085 /**/
2086     555,
2087 /**/
2088     554,
2089 /**/
2090     553,
2091 /**/
2092     552,
2093 /**/
2094     551,
2095 /**/
2096     550,
2097 /**/
2098     549,
2099 /**/
2100     548,
2101 /**/
2102     547,
2103 /**/
2104     546,
2105 /**/
2106     545,
2107 /**/
2108     544,
2109 /**/
2110     543,
2111 /**/
2112     542,
2113 /**/
2114     541,
2115 /**/
2116     540,
2117 /**/
2118     539,
2119 /**/
2120     538,
2121 /**/
2122     537,
2123 /**/
2124     536,
2125 /**/
2126     535,
2127 /**/
2128     534,
2129 /**/
2130     533,
2131 /**/
2132     532,
2133 /**/
2134     531,
2135 /**/
2136     530,
2137 /**/
2138     529,
2139 /**/
2140     528,
2141 /**/
2142     527,
2143 /**/
2144     526,
2145 /**/
2146     525,
2147 /**/
2148     524,
2149 /**/
2150     523,
2151 /**/
2152     522,
2153 /**/
2154     521,
2155 /**/
2156     520,
2157 /**/
2158     519,
2159 /**/
2160     518,
2161 /**/
2162     517,
2163 /**/
2164     516,
2165 /**/
2166     515,
2167 /**/
2168     514,
2169 /**/
2170     513,
2171 /**/
2172     512,
2173 /**/
2174     511,
2175 /**/
2176     510,
2177 /**/
2178     509,
2179 /**/
2180     508,
2181 /**/
2182     507,
2183 /**/
2184     506,
2185 /**/
2186     505,
2187 /**/
2188     504,
2189 /**/
2190     503,
2191 /**/
2192     502,
2193 /**/
2194     501,
2195 /**/
2196     500,
2197 /**/
2198     499,
2199 /**/
2200     498,
2201 /**/
2202     497,
2203 /**/
2204     496,
2205 /**/
2206     495,
2207 /**/
2208     494,
2209 /**/
2210     493,
2211 /**/
2212     492,
2213 /**/
2214     491,
2215 /**/
2216     490,
2217 /**/
2218     489,
2219 /**/
2220     488,
2221 /**/
2222     487,
2223 /**/
2224     486,
2225 /**/
2226     485,
2227 /**/
2228     484,
2229 /**/
2230     483,
2231 /**/
2232     482,
2233 /**/
2234     481,
2235 /**/
2236     480,
2237 /**/
2238     479,
2239 /**/
2240     478,
2241 /**/
2242     477,
2243 /**/
2244     476,
2245 /**/
2246     475,
2247 /**/
2248     474,
2249 /**/
2250     473,
2251 /**/
2252     472,
2253 /**/
2254     471,
2255 /**/
2256     470,
2257 /**/
2258     469,
2259 /**/
2260     468,
2261 /**/
2262     467,
2263 /**/
2264     466,
2265 /**/
2266     465,
2267 /**/
2268     464,
2269 /**/
2270     463,
2271 /**/
2272     462,
2273 /**/
2274     461,
2275 /**/
2276     460,
2277 /**/
2278     459,
2279 /**/
2280     458,
2281 /**/
2282     457,
2283 /**/
2284     456,
2285 /**/
2286     455,
2287 /**/
2288     454,
2289 /**/
2290     453,
2291 /**/
2292     452,
2293 /**/
2294     451,
2295 /**/
2296     450,
2297 /**/
2298     449,
2299 /**/
2300     448,
2301 /**/
2302     447,
2303 /**/
2304     446,
2305 /**/
2306     445,
2307 /**/
2308     444,
2309 /**/
2310     443,
2311 /**/
2312     442,
2313 /**/
2314     441,
2315 /**/
2316     440,
2317 /**/
2318     439,
2319 /**/
2320     438,
2321 /**/
2322     437,
2323 /**/
2324     436,
2325 /**/
2326     435,
2327 /**/
2328     434,
2329 /**/
2330     433,
2331 /**/
2332     432,
2333 /**/
2334     431,
2335 /**/
2336     430,
2337 /**/
2338     429,
2339 /**/
2340     428,
2341 /**/
2342     427,
2343 /**/
2344     426,
2345 /**/
2346     425,
2347 /**/
2348     424,
2349 /**/
2350     423,
2351 /**/
2352     422,
2353 /**/
2354     421,
2355 /**/
2356     420,
2357 /**/
2358     419,
2359 /**/
2360     418,
2361 /**/
2362     417,
2363 /**/
2364     416,
2365 /**/
2366     415,
2367 /**/
2368     414,
2369 /**/
2370     413,
2371 /**/
2372     412,
2373 /**/
2374     411,
2375 /**/
2376     410,
2377 /**/
2378     409,
2379 /**/
2380     408,
2381 /**/
2382     407,
2383 /**/
2384     406,
2385 /**/
2386     405,
2387 /**/
2388     404,
2389 /**/
2390     403,
2391 /**/
2392     402,
2393 /**/
2394     401,
2395 /**/
2396     400,
2397 /**/
2398     399,
2399 /**/
2400     398,
2401 /**/
2402     397,
2403 /**/
2404     396,
2405 /**/
2406     395,
2407 /**/
2408     394,
2409 /**/
2410     393,
2411 /**/
2412     392,
2413 /**/
2414     391,
2415 /**/
2416     390,
2417 /**/
2418     389,
2419 /**/
2420     388,
2421 /**/
2422     387,
2423 /**/
2424     386,
2425 /**/
2426     385,
2427 /**/
2428     384,
2429 /**/
2430     383,
2431 /**/
2432     382,
2433 /**/
2434     381,
2435 /**/
2436     380,
2437 /**/
2438     379,
2439 /**/
2440     378,
2441 /**/
2442     377,
2443 /**/
2444     376,
2445 /**/
2446     375,
2447 /**/
2448     374,
2449 /**/
2450     373,
2451 /**/
2452     372,
2453 /**/
2454     371,
2455 /**/
2456     370,
2457 /**/
2458     369,
2459 /**/
2460     368,
2461 /**/
2462     367,
2463 /**/
2464     366,
2465 /**/
2466     365,
2467 /**/
2468     364,
2469 /**/
2470     363,
2471 /**/
2472     362,
2473 /**/
2474     361,
2475 /**/
2476     360,
2477 /**/
2478     359,
2479 /**/
2480     358,
2481 /**/
2482     357,
2483 /**/
2484     356,
2485 /**/
2486     355,
2487 /**/
2488     354,
2489 /**/
2490     353,
2491 /**/
2492     352,
2493 /**/
2494     351,
2495 /**/
2496     350,
2497 /**/
2498     349,
2499 /**/
2500     348,
2501 /**/
2502     347,
2503 /**/
2504     346,
2505 /**/
2506     345,
2507 /**/
2508     344,
2509 /**/
2510     343,
2511 /**/
2512     342,
2513 /**/
2514     341,
2515 /**/
2516     340,
2517 /**/
2518     339,
2519 /**/
2520     338,
2521 /**/
2522     337,
2523 /**/
2524     336,
2525 /**/
2526     335,
2527 /**/
2528     334,
2529 /**/
2530     333,
2531 /**/
2532     332,
2533 /**/
2534     331,
2535 /**/
2536     330,
2537 /**/
2538     329,
2539 /**/
2540     328,
2541 /**/
2542     327,
2543 /**/
2544     326,
2545 /**/
2546     325,
2547 /**/
2548     324,
2549 /**/
2550     323,
2551 /**/
2552     322,
2553 /**/
2554     321,
2555 /**/
2556     320,
2557 /**/
2558     319,
2559 /**/
2560     318,
2561 /**/
2562     317,
2563 /**/
2564     316,
2565 /**/
2566     315,
2567 /**/
2568     314,
2569 /**/
2570     313,
2571 /**/
2572     312,
2573 /**/
2574     311,
2575 /**/
2576     310,
2577 /**/
2578     309,
2579 /**/
2580     308,
2581 /**/
2582     307,
2583 /**/
2584     306,
2585 /**/
2586     305,
2587 /**/
2588     304,
2589 /**/
2590     303,
2591 /**/
2592     302,
2593 /**/
2594     301,
2595 /**/
2596     300,
2597 /**/
2598     299,
2599 /**/
2600     298,
2601 /**/
2602     297,
2603 /**/
2604     296,
2605 /**/
2606     295,
2607 /**/
2608     294,
2609 /**/
2610     293,
2611 /**/
2612     292,
2613 /**/
2614     291,
2615 /**/
2616     290,
2617 /**/
2618     289,
2619 /**/
2620     288,
2621 /**/
2622     287,
2623 /**/
2624     286,
2625 /**/
2626     285,
2627 /**/
2628     284,
2629 /**/
2630     283,
2631 /**/
2632     282,
2633 /**/
2634     281,
2635 /**/
2636     280,
2637 /**/
2638     279,
2639 /**/
2640     278,
2641 /**/
2642     277,
2643 /**/
2644     276,
2645 /**/
2646     275,
2647 /**/
2648     274,
2649 /**/
2650     273,
2651 /**/
2652     272,
2653 /**/
2654     271,
2655 /**/
2656     270,
2657 /**/
2658     269,
2659 /**/
2660     268,
2661 /**/
2662     267,
2663 /**/
2664     266,
2665 /**/
2666     265,
2667 /**/
2668     264,
2669 /**/
2670     263,
2671 /**/
2672     262,
2673 /**/
2674     261,
2675 /**/
2676     260,
2677 /**/
2678     259,
2679 /**/
2680     258,
2681 /**/
2682     257,
2683 /**/
2684     256,
2685 /**/
2686     255,
2687 /**/
2688     254,
2689 /**/
2690     253,
2691 /**/
2692     252,
2693 /**/
2694     251,
2695 /**/
2696     250,
2697 /**/
2698     249,
2699 /**/
2700     248,
2701 /**/
2702     247,
2703 /**/
2704     246,
2705 /**/
2706     245,
2707 /**/
2708     244,
2709 /**/
2710     243,
2711 /**/
2712     242,
2713 /**/
2714     241,
2715 /**/
2716     240,
2717 /**/
2718     239,
2719 /**/
2720     238,
2721 /**/
2722     237,
2723 /**/
2724     236,
2725 /**/
2726     235,
2727 /**/
2728     234,
2729 /**/
2730     233,
2731 /**/
2732     232,
2733 /**/
2734     231,
2735 /**/
2736     230,
2737 /**/
2738     229,
2739 /**/
2740     228,
2741 /**/
2742     227,
2743 /**/
2744     226,
2745 /**/
2746     225,
2747 /**/
2748     224,
2749 /**/
2750     223,
2751 /**/
2752     222,
2753 /**/
2754     221,
2755 /**/
2756     220,
2757 /**/
2758     219,
2759 /**/
2760     218,
2761 /**/
2762     217,
2763 /**/
2764     216,
2765 /**/
2766     215,
2767 /**/
2768     214,
2769 /**/
2770     213,
2771 /**/
2772     212,
2773 /**/
2774     211,
2775 /**/
2776     210,
2777 /**/
2778     209,
2779 /**/
2780     208,
2781 /**/
2782     207,
2783 /**/
2784     206,
2785 /**/
2786     205,
2787 /**/
2788     204,
2789 /**/
2790     203,
2791 /**/
2792     202,
2793 /**/
2794     201,
2795 /**/
2796     200,
2797 /**/
2798     199,
2799 /**/
2800     198,
2801 /**/
2802     197,
2803 /**/
2804     196,
2805 /**/
2806     195,
2807 /**/
2808     194,
2809 /**/
2810     193,
2811 /**/
2812     192,
2813 /**/
2814     191,
2815 /**/
2816     190,
2817 /**/
2818     189,
2819 /**/
2820     188,
2821 /**/
2822     187,
2823 /**/
2824     186,
2825 /**/
2826     185,
2827 /**/
2828     184,
2829 /**/
2830     183,
2831 /**/
2832     182,
2833 /**/
2834     181,
2835 /**/
2836     180,
2837 /**/
2838     179,
2839 /**/
2840     178,
2841 /**/
2842     177,
2843 /**/
2844     176,
2845 /**/
2846     175,
2847 /**/
2848     174,
2849 /**/
2850     173,
2851 /**/
2852     172,
2853 /**/
2854     171,
2855 /**/
2856     170,
2857 /**/
2858     169,
2859 /**/
2860     168,
2861 /**/
2862     167,
2863 /**/
2864     166,
2865 /**/
2866     165,
2867 /**/
2868     164,
2869 /**/
2870     163,
2871 /**/
2872     162,
2873 /**/
2874     161,
2875 /**/
2876     160,
2877 /**/
2878     159,
2879 /**/
2880     158,
2881 /**/
2882     157,
2883 /**/
2884     156,
2885 /**/
2886     155,
2887 /**/
2888     154,
2889 /**/
2890     153,
2891 /**/
2892     152,
2893 /**/
2894     151,
2895 /**/
2896     150,
2897 /**/
2898     149,
2899 /**/
2900     148,
2901 /**/
2902     147,
2903 /**/
2904     146,
2905 /**/
2906     145,
2907 /**/
2908     144,
2909 /**/
2910     143,
2911 /**/
2912     142,
2913 /**/
2914     141,
2915 /**/
2916     140,
2917 /**/
2918     139,
2919 /**/
2920     138,
2921 /**/
2922     137,
2923 /**/
2924     136,
2925 /**/
2926     135,
2927 /**/
2928     134,
2929 /**/
2930     133,
2931 /**/
2932     132,
2933 /**/
2934     131,
2935 /**/
2936     130,
2937 /**/
2938     129,
2939 /**/
2940     128,
2941 /**/
2942     127,
2943 /**/
2944     126,
2945 /**/
2946     125,
2947 /**/
2948     124,
2949 /**/
2950     123,
2951 /**/
2952     122,
2953 /**/
2954     121,
2955 /**/
2956     120,
2957 /**/
2958     119,
2959 /**/
2960     118,
2961 /**/
2962     117,
2963 /**/
2964     116,
2965 /**/
2966     115,
2967 /**/
2968     114,
2969 /**/
2970     113,
2971 /**/
2972     112,
2973 /**/
2974     111,
2975 /**/
2976     110,
2977 /**/
2978     109,
2979 /**/
2980     108,
2981 /**/
2982     107,
2983 /**/
2984     106,
2985 /**/
2986     105,
2987 /**/
2988     104,
2989 /**/
2990     103,
2991 /**/
2992     102,
2993 /**/
2994     101,
2995 /**/
2996     100,
2997 /**/
2998     99,
2999 /**/
3000     98,
3001 /**/
3002     97,
3003 /**/
3004     96,
3005 /**/
3006     95,
3007 /**/
3008     94,
3009 /**/
3010     93,
3011 /**/
3012     92,
3013 /**/
3014     91,
3015 /**/
3016     90,
3017 /**/
3018     89,
3019 /**/
3020     88,
3021 /**/
3022     87,
3023 /**/
3024     86,
3025 /**/
3026     85,
3027 /**/
3028     84,
3029 /**/
3030     83,
3031 /**/
3032     82,
3033 /**/
3034     81,
3035 /**/
3036     80,
3037 /**/
3038     79,
3039 /**/
3040     78,
3041 /**/
3042     77,
3043 /**/
3044     76,
3045 /**/
3046     75,
3047 /**/
3048     74,
3049 /**/
3050     73,
3051 /**/
3052     72,
3053 /**/
3054     71,
3055 /**/
3056     70,
3057 /**/
3058     69,
3059 /**/
3060     68,
3061 /**/
3062     67,
3063 /**/
3064     66,
3065 /**/
3066     65,
3067 /**/
3068     64,
3069 /**/
3070     63,
3071 /**/
3072     62,
3073 /**/
3074     61,
3075 /**/
3076     60,
3077 /**/
3078     59,
3079 /**/
3080     58,
3081 /**/
3082     57,
3083 /**/
3084     56,
3085 /**/
3086     55,
3087 /**/
3088     54,
3089 /**/
3090     53,
3091 /**/
3092     52,
3093 /**/
3094     51,
3095 /**/
3096     50,
3097 /**/
3098     49,
3099 /**/
3100     48,
3101 /**/
3102     47,
3103 /**/
3104     46,
3105 /**/
3106     45,
3107 /**/
3108     44,
3109 /**/
3110     43,
3111 /**/
3112     42,
3113 /**/
3114     41,
3115 /**/
3116     40,
3117 /**/
3118     39,
3119 /**/
3120     38,
3121 /**/
3122     37,
3123 /**/
3124     36,
3125 /**/
3126     35,
3127 /**/
3128     34,
3129 /**/
3130     33,
3131 /**/
3132     32,
3133 /**/
3134     31,
3135 /**/
3136     30,
3137 /**/
3138     29,
3139 /**/
3140     28,
3141 /**/
3142     27,
3143 /**/
3144     26,
3145 /**/
3146     25,
3147 /**/
3148     24,
3149 /**/
3150     23,
3151 /**/
3152     22,
3153 /**/
3154     21,
3155 /**/
3156     20,
3157 /**/
3158     19,
3159 /**/
3160     18,
3161 /**/
3162     17,
3163 /**/
3164     16,
3165 /**/
3166     15,
3167 /**/
3168     14,
3169 /**/
3170     13,
3171 /**/
3172     12,
3173 /**/
3174     11,
3175 /**/
3176     10,
3177 /**/
3178     9,
3179 /**/
3180     8,
3181 /**/
3182     7,
3183 /**/
3184     6,
3185 /**/
3186     5,
3187 /**/
3188     4,
3189 /**/
3190     3,
3191 /**/
3192     2,
3193 /**/
3194     1,
3195 /**/
3196     0
3197 };
3198 
3199 /*
3200  * Place to put a short description when adding a feature with a patch.
3201  * Keep it short, e.g.,: "relative numbers", "persistent undo".
3202  * Also add a comment marker to separate the lines.
3203  * See the official Vim patches for the diff format: It must use a context of
3204  * one line only.  Create it by hand or use "diff -C2" and edit the patch.
3205  */
3206 static char *(extra_patches[]) =
3207 {   /* Add your patch description below this line */
3208 /**/
3209     NULL
3210 };
3211 
3212     int
3213 highest_patch(void)
3214 {
3215     int		i;
3216     int		h = 0;
3217 
3218     for (i = 0; included_patches[i] != 0; ++i)
3219 	if (included_patches[i] > h)
3220 	    h = included_patches[i];
3221     return h;
3222 }
3223 
3224 #if defined(FEAT_EVAL) || defined(PROTO)
3225 /*
3226  * Return TRUE if patch "n" has been included.
3227  */
3228     int
3229 has_patch(int n)
3230 {
3231     int		i;
3232 
3233     for (i = 0; included_patches[i] != 0; ++i)
3234 	if (included_patches[i] == n)
3235 	    return TRUE;
3236     return FALSE;
3237 }
3238 #endif
3239 
3240     void
3241 ex_version(exarg_T *eap)
3242 {
3243     /*
3244      * Ignore a ":version 9.99" command.
3245      */
3246     if (*eap->arg == NUL)
3247     {
3248 	msg_putchar('\n');
3249 	list_version();
3250     }
3251 }
3252 
3253 /*
3254  * List all features aligned in columns, dictionary style.
3255  */
3256     static void
3257 list_features(void)
3258 {
3259     int		i;
3260     int		ncol;
3261     int		nrow;
3262     int		nfeat = 0;
3263     int		width = 0;
3264 
3265     /* Find the length of the longest feature name, use that + 1 as the column
3266      * width */
3267     for (i = 0; features[i] != NULL; ++i)
3268     {
3269 	int l = (int)STRLEN(features[i]);
3270 
3271 	if (l > width)
3272 	    width = l;
3273 	++nfeat;
3274     }
3275     width += 1;
3276 
3277     if (Columns < width)
3278     {
3279 	/* Not enough screen columns - show one per line */
3280 	for (i = 0; features[i] != NULL; ++i)
3281 	{
3282 	    version_msg(features[i]);
3283 	    if (msg_col > 0)
3284 		msg_putchar('\n');
3285 	}
3286 	return;
3287     }
3288 
3289     /* The rightmost column doesn't need a separator.
3290      * Sacrifice it to fit in one more column if possible. */
3291     ncol = (int) (Columns + 1) / width;
3292     nrow = nfeat / ncol + (nfeat % ncol ? 1 : 0);
3293 
3294     /* i counts columns then rows.  idx counts rows then columns. */
3295     for (i = 0; !got_int && i < nrow * ncol; ++i)
3296     {
3297 	int idx = (i / ncol) + (i % ncol) * nrow;
3298 
3299 	if (idx < nfeat)
3300 	{
3301 	    int last_col = (i + 1) % ncol == 0;
3302 
3303 	    msg_puts((char_u *)features[idx]);
3304 	    if (last_col)
3305 	    {
3306 		if (msg_col > 0)
3307 		    msg_putchar('\n');
3308 	    }
3309 	    else
3310 	    {
3311 		while (msg_col % width)
3312 		    msg_putchar(' ');
3313 	    }
3314 	}
3315 	else
3316 	{
3317 	    if (msg_col > 0)
3318 		msg_putchar('\n');
3319 	}
3320     }
3321 }
3322 
3323     void
3324 list_version(void)
3325 {
3326     int		i;
3327     int		first;
3328     char	*s = "";
3329 
3330     /*
3331      * When adding features here, don't forget to update the list of
3332      * internal variables in eval.c!
3333      */
3334     MSG(longVersion);
3335 #ifdef WIN3264
3336 # ifdef FEAT_GUI_W32
3337 #  if defined(_MSC_VER) && (_MSC_VER <= 1010)
3338     /* Only MS VC 4.1 and earlier can do Win32s */
3339     MSG_PUTS(_("\nMS-Windows 16/32-bit GUI version"));
3340 #  else
3341 #   ifdef _WIN64
3342     MSG_PUTS(_("\nMS-Windows 64-bit GUI version"));
3343 #   else
3344     MSG_PUTS(_("\nMS-Windows 32-bit GUI version"));
3345 #   endif
3346 #  endif
3347     if (gui_is_win32s())
3348 	MSG_PUTS(_(" in Win32s mode"));
3349 # ifdef FEAT_OLE
3350     MSG_PUTS(_(" with OLE support"));
3351 # endif
3352 # else
3353 #  ifdef _WIN64
3354     MSG_PUTS(_("\nMS-Windows 64-bit console version"));
3355 #  else
3356     MSG_PUTS(_("\nMS-Windows 32-bit console version"));
3357 #  endif
3358 # endif
3359 #endif
3360 #ifdef WIN16
3361     MSG_PUTS(_("\nMS-Windows 16-bit version"));
3362 #endif
3363 #ifdef MSDOS
3364 # ifdef DJGPP
3365     MSG_PUTS(_("\n32-bit MS-DOS version"));
3366 # else
3367     MSG_PUTS(_("\n16-bit MS-DOS version"));
3368 # endif
3369 #endif
3370 #ifdef MACOS
3371 # ifdef MACOS_X
3372 #  ifdef MACOS_X_UNIX
3373     MSG_PUTS(_("\nMacOS X (unix) version"));
3374 #  else
3375     MSG_PUTS(_("\nMacOS X version"));
3376 #  endif
3377 #else
3378     MSG_PUTS(_("\nMacOS version"));
3379 # endif
3380 #endif
3381 
3382 #ifdef VMS
3383     MSG_PUTS(_("\nOpenVMS version"));
3384 # ifdef HAVE_PATHDEF
3385     if (*compiled_arch != NUL)
3386     {
3387 	MSG_PUTS(" - ");
3388 	MSG_PUTS(compiled_arch);
3389     }
3390 # endif
3391 
3392 #endif
3393 
3394     /* Print the list of patch numbers if there is at least one. */
3395     /* Print a range when patches are consecutive: "1-10, 12, 15-40, 42-45" */
3396     if (included_patches[0] != 0)
3397     {
3398 	MSG_PUTS(_("\nIncluded patches: "));
3399 	first = -1;
3400 	/* find last one */
3401 	for (i = 0; included_patches[i] != 0; ++i)
3402 	    ;
3403 	while (--i >= 0)
3404 	{
3405 	    if (first < 0)
3406 		first = included_patches[i];
3407 	    if (i == 0 || included_patches[i - 1] != included_patches[i] + 1)
3408 	    {
3409 		MSG_PUTS(s);
3410 		s = ", ";
3411 		msg_outnum((long)first);
3412 		if (first != included_patches[i])
3413 		{
3414 		    MSG_PUTS("-");
3415 		    msg_outnum((long)included_patches[i]);
3416 		}
3417 		first = -1;
3418 	    }
3419 	}
3420     }
3421 
3422     /* Print the list of extra patch descriptions if there is at least one. */
3423     if (extra_patches[0] != NULL)
3424     {
3425 	MSG_PUTS(_("\nExtra patches: "));
3426 	s = "";
3427 	for (i = 0; extra_patches[i] != NULL; ++i)
3428 	{
3429 	    MSG_PUTS(s);
3430 	    s = ", ";
3431 	    MSG_PUTS(extra_patches[i]);
3432 	}
3433     }
3434 
3435 #ifdef MODIFIED_BY
3436     MSG_PUTS("\n");
3437     MSG_PUTS(_("Modified by "));
3438     MSG_PUTS(MODIFIED_BY);
3439 #endif
3440 
3441 #ifdef HAVE_PATHDEF
3442     if (*compiled_user != NUL || *compiled_sys != NUL)
3443     {
3444 	MSG_PUTS(_("\nCompiled "));
3445 	if (*compiled_user != NUL)
3446 	{
3447 	    MSG_PUTS(_("by "));
3448 	    MSG_PUTS(compiled_user);
3449 	}
3450 	if (*compiled_sys != NUL)
3451 	{
3452 	    MSG_PUTS("@");
3453 	    MSG_PUTS(compiled_sys);
3454 	}
3455     }
3456 #endif
3457 
3458 #ifdef FEAT_HUGE
3459     MSG_PUTS(_("\nHuge version "));
3460 #else
3461 # ifdef FEAT_BIG
3462     MSG_PUTS(_("\nBig version "));
3463 # else
3464 #  ifdef FEAT_NORMAL
3465     MSG_PUTS(_("\nNormal version "));
3466 #  else
3467 #   ifdef FEAT_SMALL
3468     MSG_PUTS(_("\nSmall version "));
3469 #   else
3470     MSG_PUTS(_("\nTiny version "));
3471 #   endif
3472 #  endif
3473 # endif
3474 #endif
3475 #ifndef FEAT_GUI
3476     MSG_PUTS(_("without GUI."));
3477 #else
3478 # ifdef FEAT_GUI_GTK
3479 #  ifdef FEAT_GUI_GNOME
3480     MSG_PUTS(_("with GTK2-GNOME GUI."));
3481 #  else
3482     MSG_PUTS(_("with GTK2 GUI."));
3483 #  endif
3484 # else
3485 #  ifdef FEAT_GUI_MOTIF
3486     MSG_PUTS(_("with X11-Motif GUI."));
3487 #  else
3488 #   ifdef FEAT_GUI_ATHENA
3489 #    ifdef FEAT_GUI_NEXTAW
3490     MSG_PUTS(_("with X11-neXtaw GUI."));
3491 #    else
3492     MSG_PUTS(_("with X11-Athena GUI."));
3493 #    endif
3494 #   else
3495 #     ifdef FEAT_GUI_PHOTON
3496     MSG_PUTS(_("with Photon GUI."));
3497 #     else
3498 #      if defined(MSWIN)
3499     MSG_PUTS(_("with GUI."));
3500 #      else
3501 #	if defined(TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON
3502     MSG_PUTS(_("with Carbon GUI."));
3503 #	else
3504 #	 if defined(TARGET_API_MAC_OSX) && TARGET_API_MAC_OSX
3505     MSG_PUTS(_("with Cocoa GUI."));
3506 #	 else
3507 #	  if defined(MACOS)
3508     MSG_PUTS(_("with (classic) GUI."));
3509 #	  endif
3510 #	 endif
3511 #	endif
3512 #      endif
3513 #    endif
3514 #   endif
3515 #  endif
3516 # endif
3517 #endif
3518     version_msg(_("  Features included (+) or not (-):\n"));
3519 
3520     list_features();
3521 
3522 #ifdef SYS_VIMRC_FILE
3523     version_msg(_("   system vimrc file: \""));
3524     version_msg(SYS_VIMRC_FILE);
3525     version_msg("\"\n");
3526 #endif
3527 #ifdef USR_VIMRC_FILE
3528     version_msg(_("     user vimrc file: \""));
3529     version_msg(USR_VIMRC_FILE);
3530     version_msg("\"\n");
3531 #endif
3532 #ifdef USR_VIMRC_FILE2
3533     version_msg(_(" 2nd user vimrc file: \""));
3534     version_msg(USR_VIMRC_FILE2);
3535     version_msg("\"\n");
3536 #endif
3537 #ifdef USR_VIMRC_FILE3
3538     version_msg(_(" 3rd user vimrc file: \""));
3539     version_msg(USR_VIMRC_FILE3);
3540     version_msg("\"\n");
3541 #endif
3542 #ifdef USR_EXRC_FILE
3543     version_msg(_("      user exrc file: \""));
3544     version_msg(USR_EXRC_FILE);
3545     version_msg("\"\n");
3546 #endif
3547 #ifdef USR_EXRC_FILE2
3548     version_msg(_("  2nd user exrc file: \""));
3549     version_msg(USR_EXRC_FILE2);
3550     version_msg("\"\n");
3551 #endif
3552 #ifdef FEAT_GUI
3553 # ifdef SYS_GVIMRC_FILE
3554     version_msg(_("  system gvimrc file: \""));
3555     version_msg(SYS_GVIMRC_FILE);
3556     version_msg("\"\n");
3557 # endif
3558     version_msg(_("    user gvimrc file: \""));
3559     version_msg(USR_GVIMRC_FILE);
3560     version_msg("\"\n");
3561 # ifdef USR_GVIMRC_FILE2
3562     version_msg(_("2nd user gvimrc file: \""));
3563     version_msg(USR_GVIMRC_FILE2);
3564     version_msg("\"\n");
3565 # endif
3566 # ifdef USR_GVIMRC_FILE3
3567     version_msg(_("3rd user gvimrc file: \""));
3568     version_msg(USR_GVIMRC_FILE3);
3569     version_msg("\"\n");
3570 # endif
3571 #endif
3572 #ifdef FEAT_GUI
3573 # ifdef SYS_MENU_FILE
3574     version_msg(_("    system menu file: \""));
3575     version_msg(SYS_MENU_FILE);
3576     version_msg("\"\n");
3577 # endif
3578 #endif
3579 #ifdef HAVE_PATHDEF
3580     if (*default_vim_dir != NUL)
3581     {
3582 	version_msg(_("  fall-back for $VIM: \""));
3583 	version_msg((char *)default_vim_dir);
3584 	version_msg("\"\n");
3585     }
3586     if (*default_vimruntime_dir != NUL)
3587     {
3588 	version_msg(_(" f-b for $VIMRUNTIME: \""));
3589 	version_msg((char *)default_vimruntime_dir);
3590 	version_msg("\"\n");
3591     }
3592     version_msg(_("Compilation: "));
3593     version_msg((char *)all_cflags);
3594     version_msg("\n");
3595 #ifdef VMS
3596     if (*compiler_version != NUL)
3597     {
3598 	version_msg(_("Compiler: "));
3599 	version_msg((char *)compiler_version);
3600 	version_msg("\n");
3601     }
3602 #endif
3603     version_msg(_("Linking: "));
3604     version_msg((char *)all_lflags);
3605 #endif
3606 #ifdef DEBUG
3607     version_msg("\n");
3608     version_msg(_("  DEBUG BUILD"));
3609 #endif
3610 }
3611 
3612 /*
3613  * Output a string for the version message.  If it's going to wrap, output a
3614  * newline, unless the message is too long to fit on the screen anyway.
3615  */
3616     static void
3617 version_msg(char *s)
3618 {
3619     int		len = (int)STRLEN(s);
3620 
3621     if (!got_int && len < (int)Columns && msg_col + len >= (int)Columns
3622 								&& *s != '\n')
3623 	msg_putchar('\n');
3624     if (!got_int)
3625 	MSG_PUTS(s);
3626 }
3627 
3628 static void do_intro_line(int row, char_u *mesg, int add_version, int attr);
3629 
3630 /*
3631  * Show the intro message when not editing a file.
3632  */
3633     void
3634 maybe_intro_message(void)
3635 {
3636     if (bufempty()
3637 	    && curbuf->b_fname == NULL
3638 #ifdef FEAT_WINDOWS
3639 	    && firstwin->w_next == NULL
3640 #endif
3641 	    && vim_strchr(p_shm, SHM_INTRO) == NULL)
3642 	intro_message(FALSE);
3643 }
3644 
3645 /*
3646  * Give an introductory message about Vim.
3647  * Only used when starting Vim on an empty file, without a file name.
3648  * Or with the ":intro" command (for Sven :-).
3649  */
3650     void
3651 intro_message(
3652     int		colon)		/* TRUE for ":intro" */
3653 {
3654     int		i;
3655     int		row;
3656     int		blanklines;
3657     int		sponsor;
3658     char	*p;
3659     static char	*(lines[]) =
3660     {
3661 	N_("VIM - Vi IMproved"),
3662 	"",
3663 	N_("version "),
3664 	N_("by Bram Moolenaar et al."),
3665 #ifdef MODIFIED_BY
3666 	" ",
3667 #endif
3668 	N_("Vim is open source and freely distributable"),
3669 	"",
3670 	N_("Help poor children in Uganda!"),
3671 	N_("type  :help iccf<Enter>       for information "),
3672 	"",
3673 	N_("type  :q<Enter>               to exit         "),
3674 	N_("type  :help<Enter>  or  <F1>  for on-line help"),
3675 	N_("type  :help version7<Enter>   for version info"),
3676 	NULL,
3677 	"",
3678 	N_("Running in Vi compatible mode"),
3679 	N_("type  :set nocp<Enter>        for Vim defaults"),
3680 	N_("type  :help cp-default<Enter> for info on this"),
3681     };
3682 #ifdef FEAT_GUI
3683     static char	*(gui_lines[]) =
3684     {
3685 	NULL,
3686 	NULL,
3687 	NULL,
3688 	NULL,
3689 #ifdef MODIFIED_BY
3690 	NULL,
3691 #endif
3692 	NULL,
3693 	NULL,
3694 	NULL,
3695 	N_("menu  Help->Orphans           for information    "),
3696 	NULL,
3697 	N_("Running modeless, typed text is inserted"),
3698 	N_("menu  Edit->Global Settings->Toggle Insert Mode  "),
3699 	N_("                              for two modes      "),
3700 	NULL,
3701 	NULL,
3702 	NULL,
3703 	N_("menu  Edit->Global Settings->Toggle Vi Compatible"),
3704 	N_("                              for Vim defaults   "),
3705     };
3706 #endif
3707 
3708     /* blanklines = screen height - # message lines */
3709     blanklines = (int)Rows - ((sizeof(lines) / sizeof(char *)) - 1);
3710     if (!p_cp)
3711 	blanklines += 4;  /* add 4 for not showing "Vi compatible" message */
3712 #if defined(WIN3264) && !defined(FEAT_GUI_W32)
3713     if (mch_windows95())
3714 	blanklines -= 3;  /* subtract 3 for showing "Windows 95" message */
3715 #endif
3716 
3717 #ifdef FEAT_WINDOWS
3718     /* Don't overwrite a statusline.  Depends on 'cmdheight'. */
3719     if (p_ls > 1)
3720 	blanklines -= Rows - topframe->fr_height;
3721 #endif
3722     if (blanklines < 0)
3723 	blanklines = 0;
3724 
3725     /* Show the sponsor and register message one out of four times, the Uganda
3726      * message two out of four times. */
3727     sponsor = (int)time(NULL);
3728     sponsor = ((sponsor & 2) == 0) - ((sponsor & 4) == 0);
3729 
3730     /* start displaying the message lines after half of the blank lines */
3731     row = blanklines / 2;
3732     if ((row >= 2 && Columns >= 50) || colon)
3733     {
3734 	for (i = 0; i < (int)(sizeof(lines) / sizeof(char *)); ++i)
3735 	{
3736 	    p = lines[i];
3737 #ifdef FEAT_GUI
3738 	    if (p_im && gui.in_use && gui_lines[i] != NULL)
3739 		p = gui_lines[i];
3740 #endif
3741 	    if (p == NULL)
3742 	    {
3743 		if (!p_cp)
3744 		    break;
3745 		continue;
3746 	    }
3747 	    if (sponsor != 0)
3748 	    {
3749 		if (strstr(p, "children") != NULL)
3750 		    p = sponsor < 0
3751 			? N_("Sponsor Vim development!")
3752 			: N_("Become a registered Vim user!");
3753 		else if (strstr(p, "iccf") != NULL)
3754 		    p = sponsor < 0
3755 			? N_("type  :help sponsor<Enter>    for information ")
3756 			: N_("type  :help register<Enter>   for information ");
3757 		else if (strstr(p, "Orphans") != NULL)
3758 		    p = N_("menu  Help->Sponsor/Register  for information    ");
3759 	    }
3760 	    if (*p != NUL)
3761 		do_intro_line(row, (char_u *)_(p), i == 2, 0);
3762 	    ++row;
3763 	}
3764 #if defined(WIN3264) && !defined(FEAT_GUI_W32)
3765 	if (mch_windows95())
3766 	{
3767 	    do_intro_line(++row,
3768 		    (char_u *)_("WARNING: Windows 95/98/ME detected"),
3769 							FALSE, hl_attr(HLF_E));
3770 	    do_intro_line(++row,
3771 		(char_u *)_("type  :help windows95<Enter>  for info on this"),
3772 								    FALSE, 0);
3773 	}
3774 #endif
3775     }
3776 
3777     /* Make the wait-return message appear just below the text. */
3778     if (colon)
3779 	msg_row = row;
3780 }
3781 
3782     static void
3783 do_intro_line(
3784     int		row,
3785     char_u	*mesg,
3786     int		add_version,
3787     int		attr)
3788 {
3789     char_u	vers[20];
3790     int		col;
3791     char_u	*p;
3792     int		l;
3793     int		clen;
3794 #ifdef MODIFIED_BY
3795 # define MODBY_LEN 150
3796     char_u	modby[MODBY_LEN];
3797 
3798     if (*mesg == ' ')
3799     {
3800 	vim_strncpy(modby, (char_u *)_("Modified by "), MODBY_LEN - 1);
3801 	l = STRLEN(modby);
3802 	vim_strncpy(modby + l, (char_u *)MODIFIED_BY, MODBY_LEN - l - 1);
3803 	mesg = modby;
3804     }
3805 #endif
3806 
3807     /* Center the message horizontally. */
3808     col = vim_strsize(mesg);
3809     if (add_version)
3810     {
3811 	STRCPY(vers, mediumVersion);
3812 	if (highest_patch())
3813 	{
3814 	    /* Check for 9.9x or 9.9xx, alpha/beta version */
3815 	    if (isalpha((int)vers[3]))
3816 	    {
3817 		int len = (isalpha((int)vers[4])) ? 5 : 4;
3818 		sprintf((char *)vers + len, ".%d%s", highest_patch(),
3819 							 mediumVersion + len);
3820 	    }
3821 	    else
3822 		sprintf((char *)vers + 3, ".%d", highest_patch());
3823 	}
3824 	col += (int)STRLEN(vers);
3825     }
3826     col = (Columns - col) / 2;
3827     if (col < 0)
3828 	col = 0;
3829 
3830     /* Split up in parts to highlight <> items differently. */
3831     for (p = mesg; *p != NUL; p += l)
3832     {
3833 	clen = 0;
3834 	for (l = 0; p[l] != NUL
3835 			 && (l == 0 || (p[l] != '<' && p[l - 1] != '>')); ++l)
3836 	{
3837 #ifdef FEAT_MBYTE
3838 	    if (has_mbyte)
3839 	    {
3840 		clen += ptr2cells(p + l);
3841 		l += (*mb_ptr2len)(p + l) - 1;
3842 	    }
3843 	    else
3844 #endif
3845 		clen += byte2cells(p[l]);
3846 	}
3847 	screen_puts_len(p, l, row, col, *p == '<' ? hl_attr(HLF_8) : attr);
3848 	col += clen;
3849     }
3850 
3851     /* Add the version number to the version line. */
3852     if (add_version)
3853 	screen_puts(vers, row, col, 0);
3854 }
3855 
3856 /*
3857  * ":intro": clear screen, display intro screen and wait for return.
3858  */
3859     void
3860 ex_intro(exarg_T *eap UNUSED)
3861 {
3862     screenclear();
3863     intro_message(TRUE);
3864     wait_return(TRUE);
3865 }
3866