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