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