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