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