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