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