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