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