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