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