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