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