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 1100, 746 /**/ 747 1099, 748 /**/ 749 1098, 750 /**/ 751 1097, 752 /**/ 753 1096, 754 /**/ 755 1095, 756 /**/ 757 1094, 758 /**/ 759 1093, 760 /**/ 761 1092, 762 /**/ 763 1091, 764 /**/ 765 1090, 766 /**/ 767 1089, 768 /**/ 769 1088, 770 /**/ 771 1087, 772 /**/ 773 1086, 774 /**/ 775 1085, 776 /**/ 777 1084, 778 /**/ 779 1083, 780 /**/ 781 1082, 782 /**/ 783 1081, 784 /**/ 785 1080, 786 /**/ 787 1079, 788 /**/ 789 1078, 790 /**/ 791 1077, 792 /**/ 793 1076, 794 /**/ 795 1075, 796 /**/ 797 1074, 798 /**/ 799 1073, 800 /**/ 801 1072, 802 /**/ 803 1071, 804 /**/ 805 1070, 806 /**/ 807 1069, 808 /**/ 809 1068, 810 /**/ 811 1067, 812 /**/ 813 1066, 814 /**/ 815 1065, 816 /**/ 817 1064, 818 /**/ 819 1063, 820 /**/ 821 1062, 822 /**/ 823 1061, 824 /**/ 825 1060, 826 /**/ 827 1059, 828 /**/ 829 1058, 830 /**/ 831 1057, 832 /**/ 833 1056, 834 /**/ 835 1055, 836 /**/ 837 1054, 838 /**/ 839 1053, 840 /**/ 841 1052, 842 /**/ 843 1051, 844 /**/ 845 1050, 846 /**/ 847 1049, 848 /**/ 849 1048, 850 /**/ 851 1047, 852 /**/ 853 1046, 854 /**/ 855 1045, 856 /**/ 857 1044, 858 /**/ 859 1043, 860 /**/ 861 1042, 862 /**/ 863 1041, 864 /**/ 865 1040, 866 /**/ 867 1039, 868 /**/ 869 1038, 870 /**/ 871 1037, 872 /**/ 873 1036, 874 /**/ 875 1035, 876 /**/ 877 1034, 878 /**/ 879 1033, 880 /**/ 881 1032, 882 /**/ 883 1031, 884 /**/ 885 1030, 886 /**/ 887 1029, 888 /**/ 889 1028, 890 /**/ 891 1027, 892 /**/ 893 1026, 894 /**/ 895 1025, 896 /**/ 897 1024, 898 /**/ 899 1023, 900 /**/ 901 1022, 902 /**/ 903 1021, 904 /**/ 905 1020, 906 /**/ 907 1019, 908 /**/ 909 1018, 910 /**/ 911 1017, 912 /**/ 913 1016, 914 /**/ 915 1015, 916 /**/ 917 1014, 918 /**/ 919 1013, 920 /**/ 921 1012, 922 /**/ 923 1011, 924 /**/ 925 1010, 926 /**/ 927 1009, 928 /**/ 929 1008, 930 /**/ 931 1007, 932 /**/ 933 1006, 934 /**/ 935 1005, 936 /**/ 937 1004, 938 /**/ 939 1003, 940 /**/ 941 1002, 942 /**/ 943 1001, 944 /**/ 945 1000, 946 /**/ 947 999, 948 /**/ 949 998, 950 /**/ 951 997, 952 /**/ 953 996, 954 /**/ 955 995, 956 /**/ 957 994, 958 /**/ 959 993, 960 /**/ 961 992, 962 /**/ 963 991, 964 /**/ 965 990, 966 /**/ 967 989, 968 /**/ 969 988, 970 /**/ 971 987, 972 /**/ 973 986, 974 /**/ 975 985, 976 /**/ 977 984, 978 /**/ 979 983, 980 /**/ 981 982, 982 /**/ 983 981, 984 /**/ 985 980, 986 /**/ 987 979, 988 /**/ 989 978, 990 /**/ 991 977, 992 /**/ 993 976, 994 /**/ 995 975, 996 /**/ 997 974, 998 /**/ 999 973, 1000 /**/ 1001 972, 1002 /**/ 1003 971, 1004 /**/ 1005 970, 1006 /**/ 1007 969, 1008 /**/ 1009 968, 1010 /**/ 1011 967, 1012 /**/ 1013 966, 1014 /**/ 1015 965, 1016 /**/ 1017 964, 1018 /**/ 1019 963, 1020 /**/ 1021 962, 1022 /**/ 1023 961, 1024 /**/ 1025 960, 1026 /**/ 1027 959, 1028 /**/ 1029 958, 1030 /**/ 1031 957, 1032 /**/ 1033 956, 1034 /**/ 1035 955, 1036 /**/ 1037 954, 1038 /**/ 1039 953, 1040 /**/ 1041 952, 1042 /**/ 1043 951, 1044 /**/ 1045 950, 1046 /**/ 1047 949, 1048 /**/ 1049 948, 1050 /**/ 1051 947, 1052 /**/ 1053 946, 1054 /**/ 1055 945, 1056 /**/ 1057 944, 1058 /**/ 1059 943, 1060 /**/ 1061 942, 1062 /**/ 1063 941, 1064 /**/ 1065 940, 1066 /**/ 1067 939, 1068 /**/ 1069 938, 1070 /**/ 1071 937, 1072 /**/ 1073 936, 1074 /**/ 1075 935, 1076 /**/ 1077 934, 1078 /**/ 1079 933, 1080 /**/ 1081 932, 1082 /**/ 1083 931, 1084 /**/ 1085 930, 1086 /**/ 1087 929, 1088 /**/ 1089 928, 1090 /**/ 1091 927, 1092 /**/ 1093 926, 1094 /**/ 1095 925, 1096 /**/ 1097 924, 1098 /**/ 1099 923, 1100 /**/ 1101 922, 1102 /**/ 1103 921, 1104 /**/ 1105 920, 1106 /**/ 1107 919, 1108 /**/ 1109 918, 1110 /**/ 1111 917, 1112 /**/ 1113 916, 1114 /**/ 1115 915, 1116 /**/ 1117 914, 1118 /**/ 1119 913, 1120 /**/ 1121 912, 1122 /**/ 1123 911, 1124 /**/ 1125 910, 1126 /**/ 1127 909, 1128 /**/ 1129 908, 1130 /**/ 1131 907, 1132 /**/ 1133 906, 1134 /**/ 1135 905, 1136 /**/ 1137 904, 1138 /**/ 1139 903, 1140 /**/ 1141 902, 1142 /**/ 1143 901, 1144 /**/ 1145 900, 1146 /**/ 1147 899, 1148 /**/ 1149 898, 1150 /**/ 1151 897, 1152 /**/ 1153 896, 1154 /**/ 1155 895, 1156 /**/ 1157 894, 1158 /**/ 1159 893, 1160 /**/ 1161 892, 1162 /**/ 1163 891, 1164 /**/ 1165 890, 1166 /**/ 1167 889, 1168 /**/ 1169 888, 1170 /**/ 1171 887, 1172 /**/ 1173 886, 1174 /**/ 1175 885, 1176 /**/ 1177 884, 1178 /**/ 1179 883, 1180 /**/ 1181 882, 1182 /**/ 1183 881, 1184 /**/ 1185 880, 1186 /**/ 1187 879, 1188 /**/ 1189 878, 1190 /**/ 1191 877, 1192 /**/ 1193 876, 1194 /**/ 1195 875, 1196 /**/ 1197 874, 1198 /**/ 1199 873, 1200 /**/ 1201 872, 1202 /**/ 1203 871, 1204 /**/ 1205 870, 1206 /**/ 1207 869, 1208 /**/ 1209 868, 1210 /**/ 1211 867, 1212 /**/ 1213 866, 1214 /**/ 1215 865, 1216 /**/ 1217 864, 1218 /**/ 1219 863, 1220 /**/ 1221 862, 1222 /**/ 1223 861, 1224 /**/ 1225 860, 1226 /**/ 1227 859, 1228 /**/ 1229 858, 1230 /**/ 1231 857, 1232 /**/ 1233 856, 1234 /**/ 1235 855, 1236 /**/ 1237 854, 1238 /**/ 1239 853, 1240 /**/ 1241 852, 1242 /**/ 1243 851, 1244 /**/ 1245 850, 1246 /**/ 1247 849, 1248 /**/ 1249 848, 1250 /**/ 1251 847, 1252 /**/ 1253 846, 1254 /**/ 1255 845, 1256 /**/ 1257 844, 1258 /**/ 1259 843, 1260 /**/ 1261 842, 1262 /**/ 1263 841, 1264 /**/ 1265 840, 1266 /**/ 1267 839, 1268 /**/ 1269 838, 1270 /**/ 1271 837, 1272 /**/ 1273 836, 1274 /**/ 1275 835, 1276 /**/ 1277 834, 1278 /**/ 1279 833, 1280 /**/ 1281 832, 1282 /**/ 1283 831, 1284 /**/ 1285 830, 1286 /**/ 1287 829, 1288 /**/ 1289 828, 1290 /**/ 1291 827, 1292 /**/ 1293 826, 1294 /**/ 1295 825, 1296 /**/ 1297 824, 1298 /**/ 1299 823, 1300 /**/ 1301 822, 1302 /**/ 1303 821, 1304 /**/ 1305 820, 1306 /**/ 1307 819, 1308 /**/ 1309 818, 1310 /**/ 1311 817, 1312 /**/ 1313 816, 1314 /**/ 1315 815, 1316 /**/ 1317 814, 1318 /**/ 1319 813, 1320 /**/ 1321 812, 1322 /**/ 1323 811, 1324 /**/ 1325 810, 1326 /**/ 1327 809, 1328 /**/ 1329 808, 1330 /**/ 1331 807, 1332 /**/ 1333 806, 1334 /**/ 1335 805, 1336 /**/ 1337 804, 1338 /**/ 1339 803, 1340 /**/ 1341 802, 1342 /**/ 1343 801, 1344 /**/ 1345 800, 1346 /**/ 1347 799, 1348 /**/ 1349 798, 1350 /**/ 1351 797, 1352 /**/ 1353 796, 1354 /**/ 1355 795, 1356 /**/ 1357 794, 1358 /**/ 1359 793, 1360 /**/ 1361 792, 1362 /**/ 1363 791, 1364 /**/ 1365 790, 1366 /**/ 1367 789, 1368 /**/ 1369 788, 1370 /**/ 1371 787, 1372 /**/ 1373 786, 1374 /**/ 1375 785, 1376 /**/ 1377 784, 1378 /**/ 1379 783, 1380 /**/ 1381 782, 1382 /**/ 1383 781, 1384 /**/ 1385 780, 1386 /**/ 1387 779, 1388 /**/ 1389 778, 1390 /**/ 1391 777, 1392 /**/ 1393 776, 1394 /**/ 1395 775, 1396 /**/ 1397 774, 1398 /**/ 1399 773, 1400 /**/ 1401 772, 1402 /**/ 1403 771, 1404 /**/ 1405 770, 1406 /**/ 1407 769, 1408 /**/ 1409 768, 1410 /**/ 1411 767, 1412 /**/ 1413 766, 1414 /**/ 1415 765, 1416 /**/ 1417 764, 1418 /**/ 1419 763, 1420 /**/ 1421 762, 1422 /**/ 1423 761, 1424 /**/ 1425 760, 1426 /**/ 1427 759, 1428 /**/ 1429 758, 1430 /**/ 1431 757, 1432 /**/ 1433 756, 1434 /**/ 1435 755, 1436 /**/ 1437 754, 1438 /**/ 1439 753, 1440 /**/ 1441 752, 1442 /**/ 1443 751, 1444 /**/ 1445 750, 1446 /**/ 1447 749, 1448 /**/ 1449 748, 1450 /**/ 1451 747, 1452 /**/ 1453 746, 1454 /**/ 1455 745, 1456 /**/ 1457 744, 1458 /**/ 1459 743, 1460 /**/ 1461 742, 1462 /**/ 1463 741, 1464 /**/ 1465 740, 1466 /**/ 1467 739, 1468 /**/ 1469 738, 1470 /**/ 1471 737, 1472 /**/ 1473 736, 1474 /**/ 1475 735, 1476 /**/ 1477 734, 1478 /**/ 1479 733, 1480 /**/ 1481 732, 1482 /**/ 1483 731, 1484 /**/ 1485 730, 1486 /**/ 1487 729, 1488 /**/ 1489 728, 1490 /**/ 1491 727, 1492 /**/ 1493 726, 1494 /**/ 1495 725, 1496 /**/ 1497 724, 1498 /**/ 1499 723, 1500 /**/ 1501 722, 1502 /**/ 1503 721, 1504 /**/ 1505 720, 1506 /**/ 1507 719, 1508 /**/ 1509 718, 1510 /**/ 1511 717, 1512 /**/ 1513 716, 1514 /**/ 1515 715, 1516 /**/ 1517 714, 1518 /**/ 1519 713, 1520 /**/ 1521 712, 1522 /**/ 1523 711, 1524 /**/ 1525 710, 1526 /**/ 1527 709, 1528 /**/ 1529 708, 1530 /**/ 1531 707, 1532 /**/ 1533 706, 1534 /**/ 1535 705, 1536 /**/ 1537 704, 1538 /**/ 1539 703, 1540 /**/ 1541 702, 1542 /**/ 1543 701, 1544 /**/ 1545 700, 1546 /**/ 1547 699, 1548 /**/ 1549 698, 1550 /**/ 1551 697, 1552 /**/ 1553 696, 1554 /**/ 1555 695, 1556 /**/ 1557 694, 1558 /**/ 1559 693, 1560 /**/ 1561 692, 1562 /**/ 1563 691, 1564 /**/ 1565 690, 1566 /**/ 1567 689, 1568 /**/ 1569 688, 1570 /**/ 1571 687, 1572 /**/ 1573 686, 1574 /**/ 1575 685, 1576 /**/ 1577 684, 1578 /**/ 1579 683, 1580 /**/ 1581 682, 1582 /**/ 1583 681, 1584 /**/ 1585 680, 1586 /**/ 1587 679, 1588 /**/ 1589 678, 1590 /**/ 1591 677, 1592 /**/ 1593 676, 1594 /**/ 1595 675, 1596 /**/ 1597 674, 1598 /**/ 1599 673, 1600 /**/ 1601 672, 1602 /**/ 1603 671, 1604 /**/ 1605 670, 1606 /**/ 1607 669, 1608 /**/ 1609 668, 1610 /**/ 1611 667, 1612 /**/ 1613 666, 1614 /**/ 1615 665, 1616 /**/ 1617 664, 1618 /**/ 1619 663, 1620 /**/ 1621 662, 1622 /**/ 1623 661, 1624 /**/ 1625 660, 1626 /**/ 1627 659, 1628 /**/ 1629 658, 1630 /**/ 1631 657, 1632 /**/ 1633 656, 1634 /**/ 1635 655, 1636 /**/ 1637 654, 1638 /**/ 1639 653, 1640 /**/ 1641 652, 1642 /**/ 1643 651, 1644 /**/ 1645 650, 1646 /**/ 1647 649, 1648 /**/ 1649 648, 1650 /**/ 1651 647, 1652 /**/ 1653 646, 1654 /**/ 1655 645, 1656 /**/ 1657 644, 1658 /**/ 1659 643, 1660 /**/ 1661 642, 1662 /**/ 1663 641, 1664 /**/ 1665 640, 1666 /**/ 1667 639, 1668 /**/ 1669 638, 1670 /**/ 1671 637, 1672 /**/ 1673 636, 1674 /**/ 1675 635, 1676 /**/ 1677 634, 1678 /**/ 1679 633, 1680 /**/ 1681 632, 1682 /**/ 1683 631, 1684 /**/ 1685 630, 1686 /**/ 1687 629, 1688 /**/ 1689 628, 1690 /**/ 1691 627, 1692 /**/ 1693 626, 1694 /**/ 1695 625, 1696 /**/ 1697 624, 1698 /**/ 1699 623, 1700 /**/ 1701 622, 1702 /**/ 1703 621, 1704 /**/ 1705 620, 1706 /**/ 1707 619, 1708 /**/ 1709 618, 1710 /**/ 1711 617, 1712 /**/ 1713 616, 1714 /**/ 1715 615, 1716 /**/ 1717 614, 1718 /**/ 1719 613, 1720 /**/ 1721 612, 1722 /**/ 1723 611, 1724 /**/ 1725 610, 1726 /**/ 1727 609, 1728 /**/ 1729 608, 1730 /**/ 1731 607, 1732 /**/ 1733 606, 1734 /**/ 1735 605, 1736 /**/ 1737 604, 1738 /**/ 1739 603, 1740 /**/ 1741 602, 1742 /**/ 1743 601, 1744 /**/ 1745 600, 1746 /**/ 1747 599, 1748 /**/ 1749 598, 1750 /**/ 1751 597, 1752 /**/ 1753 596, 1754 /**/ 1755 595, 1756 /**/ 1757 594, 1758 /**/ 1759 593, 1760 /**/ 1761 592, 1762 /**/ 1763 591, 1764 /**/ 1765 590, 1766 /**/ 1767 589, 1768 /**/ 1769 588, 1770 /**/ 1771 587, 1772 /**/ 1773 586, 1774 /**/ 1775 585, 1776 /**/ 1777 584, 1778 /**/ 1779 583, 1780 /**/ 1781 582, 1782 /**/ 1783 581, 1784 /**/ 1785 580, 1786 /**/ 1787 579, 1788 /**/ 1789 578, 1790 /**/ 1791 577, 1792 /**/ 1793 576, 1794 /**/ 1795 575, 1796 /**/ 1797 574, 1798 /**/ 1799 573, 1800 /**/ 1801 572, 1802 /**/ 1803 571, 1804 /**/ 1805 570, 1806 /**/ 1807 569, 1808 /**/ 1809 568, 1810 /**/ 1811 567, 1812 /**/ 1813 566, 1814 /**/ 1815 565, 1816 /**/ 1817 564, 1818 /**/ 1819 563, 1820 /**/ 1821 562, 1822 /**/ 1823 561, 1824 /**/ 1825 560, 1826 /**/ 1827 559, 1828 /**/ 1829 558, 1830 /**/ 1831 557, 1832 /**/ 1833 556, 1834 /**/ 1835 555, 1836 /**/ 1837 554, 1838 /**/ 1839 553, 1840 /**/ 1841 552, 1842 /**/ 1843 551, 1844 /**/ 1845 550, 1846 /**/ 1847 549, 1848 /**/ 1849 548, 1850 /**/ 1851 547, 1852 /**/ 1853 546, 1854 /**/ 1855 545, 1856 /**/ 1857 544, 1858 /**/ 1859 543, 1860 /**/ 1861 542, 1862 /**/ 1863 541, 1864 /**/ 1865 540, 1866 /**/ 1867 539, 1868 /**/ 1869 538, 1870 /**/ 1871 537, 1872 /**/ 1873 536, 1874 /**/ 1875 535, 1876 /**/ 1877 534, 1878 /**/ 1879 533, 1880 /**/ 1881 532, 1882 /**/ 1883 531, 1884 /**/ 1885 530, 1886 /**/ 1887 529, 1888 /**/ 1889 528, 1890 /**/ 1891 527, 1892 /**/ 1893 526, 1894 /**/ 1895 525, 1896 /**/ 1897 524, 1898 /**/ 1899 523, 1900 /**/ 1901 522, 1902 /**/ 1903 521, 1904 /**/ 1905 520, 1906 /**/ 1907 519, 1908 /**/ 1909 518, 1910 /**/ 1911 517, 1912 /**/ 1913 516, 1914 /**/ 1915 515, 1916 /**/ 1917 514, 1918 /**/ 1919 513, 1920 /**/ 1921 512, 1922 /**/ 1923 511, 1924 /**/ 1925 510, 1926 /**/ 1927 509, 1928 /**/ 1929 508, 1930 /**/ 1931 507, 1932 /**/ 1933 506, 1934 /**/ 1935 505, 1936 /**/ 1937 504, 1938 /**/ 1939 503, 1940 /**/ 1941 502, 1942 /**/ 1943 501, 1944 /**/ 1945 500, 1946 /**/ 1947 499, 1948 /**/ 1949 498, 1950 /**/ 1951 497, 1952 /**/ 1953 496, 1954 /**/ 1955 495, 1956 /**/ 1957 494, 1958 /**/ 1959 493, 1960 /**/ 1961 492, 1962 /**/ 1963 491, 1964 /**/ 1965 490, 1966 /**/ 1967 489, 1968 /**/ 1969 488, 1970 /**/ 1971 487, 1972 /**/ 1973 486, 1974 /**/ 1975 485, 1976 /**/ 1977 484, 1978 /**/ 1979 483, 1980 /**/ 1981 482, 1982 /**/ 1983 481, 1984 /**/ 1985 480, 1986 /**/ 1987 479, 1988 /**/ 1989 478, 1990 /**/ 1991 477, 1992 /**/ 1993 476, 1994 /**/ 1995 475, 1996 /**/ 1997 474, 1998 /**/ 1999 473, 2000 /**/ 2001 472, 2002 /**/ 2003 471, 2004 /**/ 2005 470, 2006 /**/ 2007 469, 2008 /**/ 2009 468, 2010 /**/ 2011 467, 2012 /**/ 2013 466, 2014 /**/ 2015 465, 2016 /**/ 2017 464, 2018 /**/ 2019 463, 2020 /**/ 2021 462, 2022 /**/ 2023 461, 2024 /**/ 2025 460, 2026 /**/ 2027 459, 2028 /**/ 2029 458, 2030 /**/ 2031 457, 2032 /**/ 2033 456, 2034 /**/ 2035 455, 2036 /**/ 2037 454, 2038 /**/ 2039 453, 2040 /**/ 2041 452, 2042 /**/ 2043 451, 2044 /**/ 2045 450, 2046 /**/ 2047 449, 2048 /**/ 2049 448, 2050 /**/ 2051 447, 2052 /**/ 2053 446, 2054 /**/ 2055 445, 2056 /**/ 2057 444, 2058 /**/ 2059 443, 2060 /**/ 2061 442, 2062 /**/ 2063 441, 2064 /**/ 2065 440, 2066 /**/ 2067 439, 2068 /**/ 2069 438, 2070 /**/ 2071 437, 2072 /**/ 2073 436, 2074 /**/ 2075 435, 2076 /**/ 2077 434, 2078 /**/ 2079 433, 2080 /**/ 2081 432, 2082 /**/ 2083 431, 2084 /**/ 2085 430, 2086 /**/ 2087 429, 2088 /**/ 2089 428, 2090 /**/ 2091 427, 2092 /**/ 2093 426, 2094 /**/ 2095 425, 2096 /**/ 2097 424, 2098 /**/ 2099 423, 2100 /**/ 2101 422, 2102 /**/ 2103 421, 2104 /**/ 2105 420, 2106 /**/ 2107 419, 2108 /**/ 2109 418, 2110 /**/ 2111 417, 2112 /**/ 2113 416, 2114 /**/ 2115 415, 2116 /**/ 2117 414, 2118 /**/ 2119 413, 2120 /**/ 2121 412, 2122 /**/ 2123 411, 2124 /**/ 2125 410, 2126 /**/ 2127 409, 2128 /**/ 2129 408, 2130 /**/ 2131 407, 2132 /**/ 2133 406, 2134 /**/ 2135 405, 2136 /**/ 2137 404, 2138 /**/ 2139 403, 2140 /**/ 2141 402, 2142 /**/ 2143 401, 2144 /**/ 2145 400, 2146 /**/ 2147 399, 2148 /**/ 2149 398, 2150 /**/ 2151 397, 2152 /**/ 2153 396, 2154 /**/ 2155 395, 2156 /**/ 2157 394, 2158 /**/ 2159 393, 2160 /**/ 2161 392, 2162 /**/ 2163 391, 2164 /**/ 2165 390, 2166 /**/ 2167 389, 2168 /**/ 2169 388, 2170 /**/ 2171 387, 2172 /**/ 2173 386, 2174 /**/ 2175 385, 2176 /**/ 2177 384, 2178 /**/ 2179 383, 2180 /**/ 2181 382, 2182 /**/ 2183 381, 2184 /**/ 2185 380, 2186 /**/ 2187 379, 2188 /**/ 2189 378, 2190 /**/ 2191 377, 2192 /**/ 2193 376, 2194 /**/ 2195 375, 2196 /**/ 2197 374, 2198 /**/ 2199 373, 2200 /**/ 2201 372, 2202 /**/ 2203 371, 2204 /**/ 2205 370, 2206 /**/ 2207 369, 2208 /**/ 2209 368, 2210 /**/ 2211 367, 2212 /**/ 2213 366, 2214 /**/ 2215 365, 2216 /**/ 2217 364, 2218 /**/ 2219 363, 2220 /**/ 2221 362, 2222 /**/ 2223 361, 2224 /**/ 2225 360, 2226 /**/ 2227 359, 2228 /**/ 2229 358, 2230 /**/ 2231 357, 2232 /**/ 2233 356, 2234 /**/ 2235 355, 2236 /**/ 2237 354, 2238 /**/ 2239 353, 2240 /**/ 2241 352, 2242 /**/ 2243 351, 2244 /**/ 2245 350, 2246 /**/ 2247 349, 2248 /**/ 2249 348, 2250 /**/ 2251 347, 2252 /**/ 2253 346, 2254 /**/ 2255 345, 2256 /**/ 2257 344, 2258 /**/ 2259 343, 2260 /**/ 2261 342, 2262 /**/ 2263 341, 2264 /**/ 2265 340, 2266 /**/ 2267 339, 2268 /**/ 2269 338, 2270 /**/ 2271 337, 2272 /**/ 2273 336, 2274 /**/ 2275 335, 2276 /**/ 2277 334, 2278 /**/ 2279 333, 2280 /**/ 2281 332, 2282 /**/ 2283 331, 2284 /**/ 2285 330, 2286 /**/ 2287 329, 2288 /**/ 2289 328, 2290 /**/ 2291 327, 2292 /**/ 2293 326, 2294 /**/ 2295 325, 2296 /**/ 2297 324, 2298 /**/ 2299 323, 2300 /**/ 2301 322, 2302 /**/ 2303 321, 2304 /**/ 2305 320, 2306 /**/ 2307 319, 2308 /**/ 2309 318, 2310 /**/ 2311 317, 2312 /**/ 2313 316, 2314 /**/ 2315 315, 2316 /**/ 2317 314, 2318 /**/ 2319 313, 2320 /**/ 2321 312, 2322 /**/ 2323 311, 2324 /**/ 2325 310, 2326 /**/ 2327 309, 2328 /**/ 2329 308, 2330 /**/ 2331 307, 2332 /**/ 2333 306, 2334 /**/ 2335 305, 2336 /**/ 2337 304, 2338 /**/ 2339 303, 2340 /**/ 2341 302, 2342 /**/ 2343 301, 2344 /**/ 2345 300, 2346 /**/ 2347 299, 2348 /**/ 2349 298, 2350 /**/ 2351 297, 2352 /**/ 2353 296, 2354 /**/ 2355 295, 2356 /**/ 2357 294, 2358 /**/ 2359 293, 2360 /**/ 2361 292, 2362 /**/ 2363 291, 2364 /**/ 2365 290, 2366 /**/ 2367 289, 2368 /**/ 2369 288, 2370 /**/ 2371 287, 2372 /**/ 2373 286, 2374 /**/ 2375 285, 2376 /**/ 2377 284, 2378 /**/ 2379 283, 2380 /**/ 2381 282, 2382 /**/ 2383 281, 2384 /**/ 2385 280, 2386 /**/ 2387 279, 2388 /**/ 2389 278, 2390 /**/ 2391 277, 2392 /**/ 2393 276, 2394 /**/ 2395 275, 2396 /**/ 2397 274, 2398 /**/ 2399 273, 2400 /**/ 2401 272, 2402 /**/ 2403 271, 2404 /**/ 2405 270, 2406 /**/ 2407 269, 2408 /**/ 2409 268, 2410 /**/ 2411 267, 2412 /**/ 2413 266, 2414 /**/ 2415 265, 2416 /**/ 2417 264, 2418 /**/ 2419 263, 2420 /**/ 2421 262, 2422 /**/ 2423 261, 2424 /**/ 2425 260, 2426 /**/ 2427 259, 2428 /**/ 2429 258, 2430 /**/ 2431 257, 2432 /**/ 2433 256, 2434 /**/ 2435 255, 2436 /**/ 2437 254, 2438 /**/ 2439 253, 2440 /**/ 2441 252, 2442 /**/ 2443 251, 2444 /**/ 2445 250, 2446 /**/ 2447 249, 2448 /**/ 2449 248, 2450 /**/ 2451 247, 2452 /**/ 2453 246, 2454 /**/ 2455 245, 2456 /**/ 2457 244, 2458 /**/ 2459 243, 2460 /**/ 2461 242, 2462 /**/ 2463 241, 2464 /**/ 2465 240, 2466 /**/ 2467 239, 2468 /**/ 2469 238, 2470 /**/ 2471 237, 2472 /**/ 2473 236, 2474 /**/ 2475 235, 2476 /**/ 2477 234, 2478 /**/ 2479 233, 2480 /**/ 2481 232, 2482 /**/ 2483 231, 2484 /**/ 2485 230, 2486 /**/ 2487 229, 2488 /**/ 2489 228, 2490 /**/ 2491 227, 2492 /**/ 2493 226, 2494 /**/ 2495 225, 2496 /**/ 2497 224, 2498 /**/ 2499 223, 2500 /**/ 2501 222, 2502 /**/ 2503 221, 2504 /**/ 2505 220, 2506 /**/ 2507 219, 2508 /**/ 2509 218, 2510 /**/ 2511 217, 2512 /**/ 2513 216, 2514 /**/ 2515 215, 2516 /**/ 2517 214, 2518 /**/ 2519 213, 2520 /**/ 2521 212, 2522 /**/ 2523 211, 2524 /**/ 2525 210, 2526 /**/ 2527 209, 2528 /**/ 2529 208, 2530 /**/ 2531 207, 2532 /**/ 2533 206, 2534 /**/ 2535 205, 2536 /**/ 2537 204, 2538 /**/ 2539 203, 2540 /**/ 2541 202, 2542 /**/ 2543 201, 2544 /**/ 2545 200, 2546 /**/ 2547 199, 2548 /**/ 2549 198, 2550 /**/ 2551 197, 2552 /**/ 2553 196, 2554 /**/ 2555 195, 2556 /**/ 2557 194, 2558 /**/ 2559 193, 2560 /**/ 2561 192, 2562 /**/ 2563 191, 2564 /**/ 2565 190, 2566 /**/ 2567 189, 2568 /**/ 2569 188, 2570 /**/ 2571 187, 2572 /**/ 2573 186, 2574 /**/ 2575 185, 2576 /**/ 2577 184, 2578 /**/ 2579 183, 2580 /**/ 2581 182, 2582 /**/ 2583 181, 2584 /**/ 2585 180, 2586 /**/ 2587 179, 2588 /**/ 2589 178, 2590 /**/ 2591 177, 2592 /**/ 2593 176, 2594 /**/ 2595 175, 2596 /**/ 2597 174, 2598 /**/ 2599 173, 2600 /**/ 2601 172, 2602 /**/ 2603 171, 2604 /**/ 2605 170, 2606 /**/ 2607 169, 2608 /**/ 2609 168, 2610 /**/ 2611 167, 2612 /**/ 2613 166, 2614 /**/ 2615 165, 2616 /**/ 2617 164, 2618 /**/ 2619 163, 2620 /**/ 2621 162, 2622 /**/ 2623 161, 2624 /**/ 2625 160, 2626 /**/ 2627 159, 2628 /**/ 2629 158, 2630 /**/ 2631 157, 2632 /**/ 2633 156, 2634 /**/ 2635 155, 2636 /**/ 2637 154, 2638 /**/ 2639 153, 2640 /**/ 2641 152, 2642 /**/ 2643 151, 2644 /**/ 2645 150, 2646 /**/ 2647 149, 2648 /**/ 2649 148, 2650 /**/ 2651 147, 2652 /**/ 2653 146, 2654 /**/ 2655 145, 2656 /**/ 2657 144, 2658 /**/ 2659 143, 2660 /**/ 2661 142, 2662 /**/ 2663 141, 2664 /**/ 2665 140, 2666 /**/ 2667 139, 2668 /**/ 2669 138, 2670 /**/ 2671 137, 2672 /**/ 2673 136, 2674 /**/ 2675 135, 2676 /**/ 2677 134, 2678 /**/ 2679 133, 2680 /**/ 2681 132, 2682 /**/ 2683 131, 2684 /**/ 2685 130, 2686 /**/ 2687 129, 2688 /**/ 2689 128, 2690 /**/ 2691 127, 2692 /**/ 2693 126, 2694 /**/ 2695 125, 2696 /**/ 2697 124, 2698 /**/ 2699 123, 2700 /**/ 2701 122, 2702 /**/ 2703 121, 2704 /**/ 2705 120, 2706 /**/ 2707 119, 2708 /**/ 2709 118, 2710 /**/ 2711 117, 2712 /**/ 2713 116, 2714 /**/ 2715 115, 2716 /**/ 2717 114, 2718 /**/ 2719 113, 2720 /**/ 2721 112, 2722 /**/ 2723 111, 2724 /**/ 2725 110, 2726 /**/ 2727 109, 2728 /**/ 2729 108, 2730 /**/ 2731 107, 2732 /**/ 2733 106, 2734 /**/ 2735 105, 2736 /**/ 2737 104, 2738 /**/ 2739 103, 2740 /**/ 2741 102, 2742 /**/ 2743 101, 2744 /**/ 2745 100, 2746 /**/ 2747 99, 2748 /**/ 2749 98, 2750 /**/ 2751 97, 2752 /**/ 2753 96, 2754 /**/ 2755 95, 2756 /**/ 2757 94, 2758 /**/ 2759 93, 2760 /**/ 2761 92, 2762 /**/ 2763 91, 2764 /**/ 2765 90, 2766 /**/ 2767 89, 2768 /**/ 2769 88, 2770 /**/ 2771 87, 2772 /**/ 2773 86, 2774 /**/ 2775 85, 2776 /**/ 2777 84, 2778 /**/ 2779 83, 2780 /**/ 2781 82, 2782 /**/ 2783 81, 2784 /**/ 2785 80, 2786 /**/ 2787 79, 2788 /**/ 2789 78, 2790 /**/ 2791 77, 2792 /**/ 2793 76, 2794 /**/ 2795 75, 2796 /**/ 2797 74, 2798 /**/ 2799 73, 2800 /**/ 2801 72, 2802 /**/ 2803 71, 2804 /**/ 2805 70, 2806 /**/ 2807 69, 2808 /**/ 2809 68, 2810 /**/ 2811 67, 2812 /**/ 2813 66, 2814 /**/ 2815 65, 2816 /**/ 2817 64, 2818 /**/ 2819 63, 2820 /**/ 2821 62, 2822 /**/ 2823 61, 2824 /**/ 2825 60, 2826 /**/ 2827 59, 2828 /**/ 2829 58, 2830 /**/ 2831 57, 2832 /**/ 2833 56, 2834 /**/ 2835 55, 2836 /**/ 2837 54, 2838 /**/ 2839 53, 2840 /**/ 2841 52, 2842 /**/ 2843 51, 2844 /**/ 2845 50, 2846 /**/ 2847 49, 2848 /**/ 2849 48, 2850 /**/ 2851 47, 2852 /**/ 2853 46, 2854 /**/ 2855 45, 2856 /**/ 2857 44, 2858 /**/ 2859 43, 2860 /**/ 2861 42, 2862 /**/ 2863 41, 2864 /**/ 2865 40, 2866 /**/ 2867 39, 2868 /**/ 2869 38, 2870 /**/ 2871 37, 2872 /**/ 2873 36, 2874 /**/ 2875 35, 2876 /**/ 2877 34, 2878 /**/ 2879 33, 2880 /**/ 2881 32, 2882 /**/ 2883 31, 2884 /**/ 2885 30, 2886 /**/ 2887 29, 2888 /**/ 2889 28, 2890 /**/ 2891 27, 2892 /**/ 2893 26, 2894 /**/ 2895 25, 2896 /**/ 2897 24, 2898 /**/ 2899 23, 2900 /**/ 2901 22, 2902 /**/ 2903 21, 2904 /**/ 2905 20, 2906 /**/ 2907 19, 2908 /**/ 2909 18, 2910 /**/ 2911 17, 2912 /**/ 2913 16, 2914 /**/ 2915 15, 2916 /**/ 2917 14, 2918 /**/ 2919 13, 2920 /**/ 2921 12, 2922 /**/ 2923 11, 2924 /**/ 2925 10, 2926 /**/ 2927 9, 2928 /**/ 2929 8, 2930 /**/ 2931 7, 2932 /**/ 2933 6, 2934 /**/ 2935 5, 2936 /**/ 2937 4, 2938 /**/ 2939 3, 2940 /**/ 2941 2, 2942 /**/ 2943 1, 2944 /**/ 2945 0 2946 }; 2947 2948 /* 2949 * Place to put a short description when adding a feature with a patch. 2950 * Keep it short, e.g.,: "relative numbers", "persistent undo". 2951 * Also add a comment marker to separate the lines. 2952 * See the official Vim patches for the diff format: It must use a context of 2953 * one line only. Create it by hand or use "diff -C2" and edit the patch. 2954 */ 2955 static char *(extra_patches[]) = 2956 { /* Add your patch description below this line */ 2957 /**/ 2958 NULL 2959 }; 2960 2961 int 2962 highest_patch() 2963 { 2964 int i; 2965 int h = 0; 2966 2967 for (i = 0; included_patches[i] != 0; ++i) 2968 if (included_patches[i] > h) 2969 h = included_patches[i]; 2970 return h; 2971 } 2972 2973 #if defined(FEAT_EVAL) || defined(PROTO) 2974 /* 2975 * Return TRUE if patch "n" has been included. 2976 */ 2977 int 2978 has_patch(n) 2979 int n; 2980 { 2981 int i; 2982 2983 for (i = 0; included_patches[i] != 0; ++i) 2984 if (included_patches[i] == n) 2985 return TRUE; 2986 return FALSE; 2987 } 2988 #endif 2989 2990 void 2991 ex_version(eap) 2992 exarg_T *eap; 2993 { 2994 /* 2995 * Ignore a ":version 9.99" command. 2996 */ 2997 if (*eap->arg == NUL) 2998 { 2999 msg_putchar('\n'); 3000 list_version(); 3001 } 3002 } 3003 3004 /* 3005 * List all features aligned in columns, dictionary style. 3006 */ 3007 static void 3008 list_features() 3009 { 3010 int i; 3011 int ncol; 3012 int nrow; 3013 int nfeat = 0; 3014 int width = 0; 3015 3016 /* Find the length of the longest feature name, use that + 1 as the column 3017 * width */ 3018 for (i = 0; features[i] != NULL; ++i) 3019 { 3020 int l = (int)STRLEN(features[i]); 3021 3022 if (l > width) 3023 width = l; 3024 ++nfeat; 3025 } 3026 width += 1; 3027 3028 if (Columns < width) 3029 { 3030 /* Not enough screen columns - show one per line */ 3031 for (i = 0; features[i] != NULL; ++i) 3032 { 3033 version_msg(features[i]); 3034 if (msg_col > 0) 3035 msg_putchar('\n'); 3036 } 3037 return; 3038 } 3039 3040 /* The rightmost column doesn't need a separator. 3041 * Sacrifice it to fit in one more column if possible. */ 3042 ncol = (int) (Columns + 1) / width; 3043 nrow = nfeat / ncol + (nfeat % ncol ? 1 : 0); 3044 3045 /* i counts columns then rows. idx counts rows then columns. */ 3046 for (i = 0; !got_int && i < nrow * ncol; ++i) 3047 { 3048 int idx = (i / ncol) + (i % ncol) * nrow; 3049 3050 if (idx < nfeat) 3051 { 3052 int last_col = (i + 1) % ncol == 0; 3053 3054 msg_puts((char_u *)features[idx]); 3055 if (last_col) 3056 { 3057 if (msg_col > 0) 3058 msg_putchar('\n'); 3059 } 3060 else 3061 { 3062 while (msg_col % width) 3063 msg_putchar(' '); 3064 } 3065 } 3066 else 3067 { 3068 if (msg_col > 0) 3069 msg_putchar('\n'); 3070 } 3071 } 3072 } 3073 3074 void 3075 list_version() 3076 { 3077 int i; 3078 int first; 3079 char *s = ""; 3080 3081 /* 3082 * When adding features here, don't forget to update the list of 3083 * internal variables in eval.c! 3084 */ 3085 MSG(longVersion); 3086 #ifdef WIN3264 3087 # ifdef FEAT_GUI_W32 3088 # if defined(_MSC_VER) && (_MSC_VER <= 1010) 3089 /* Only MS VC 4.1 and earlier can do Win32s */ 3090 MSG_PUTS(_("\nMS-Windows 16/32-bit GUI version")); 3091 # else 3092 # ifdef _WIN64 3093 MSG_PUTS(_("\nMS-Windows 64-bit GUI version")); 3094 # else 3095 MSG_PUTS(_("\nMS-Windows 32-bit GUI version")); 3096 # endif 3097 # endif 3098 if (gui_is_win32s()) 3099 MSG_PUTS(_(" in Win32s mode")); 3100 # ifdef FEAT_OLE 3101 MSG_PUTS(_(" with OLE support")); 3102 # endif 3103 # else 3104 # ifdef _WIN64 3105 MSG_PUTS(_("\nMS-Windows 64-bit console version")); 3106 # else 3107 MSG_PUTS(_("\nMS-Windows 32-bit console version")); 3108 # endif 3109 # endif 3110 #endif 3111 #ifdef WIN16 3112 MSG_PUTS(_("\nMS-Windows 16-bit version")); 3113 #endif 3114 #ifdef MSDOS 3115 # ifdef DJGPP 3116 MSG_PUTS(_("\n32-bit MS-DOS version")); 3117 # else 3118 MSG_PUTS(_("\n16-bit MS-DOS version")); 3119 # endif 3120 #endif 3121 #ifdef MACOS 3122 # ifdef MACOS_X 3123 # ifdef MACOS_X_UNIX 3124 MSG_PUTS(_("\nMacOS X (unix) version")); 3125 # else 3126 MSG_PUTS(_("\nMacOS X version")); 3127 # endif 3128 #else 3129 MSG_PUTS(_("\nMacOS version")); 3130 # endif 3131 #endif 3132 3133 #ifdef VMS 3134 MSG_PUTS(_("\nOpenVMS version")); 3135 # ifdef HAVE_PATHDEF 3136 if (*compiled_arch != NUL) 3137 { 3138 MSG_PUTS(" - "); 3139 MSG_PUTS(compiled_arch); 3140 } 3141 # endif 3142 3143 #endif 3144 3145 /* Print the list of patch numbers if there is at least one. */ 3146 /* Print a range when patches are consecutive: "1-10, 12, 15-40, 42-45" */ 3147 if (included_patches[0] != 0) 3148 { 3149 MSG_PUTS(_("\nIncluded patches: ")); 3150 first = -1; 3151 /* find last one */ 3152 for (i = 0; included_patches[i] != 0; ++i) 3153 ; 3154 while (--i >= 0) 3155 { 3156 if (first < 0) 3157 first = included_patches[i]; 3158 if (i == 0 || included_patches[i - 1] != included_patches[i] + 1) 3159 { 3160 MSG_PUTS(s); 3161 s = ", "; 3162 msg_outnum((long)first); 3163 if (first != included_patches[i]) 3164 { 3165 MSG_PUTS("-"); 3166 msg_outnum((long)included_patches[i]); 3167 } 3168 first = -1; 3169 } 3170 } 3171 } 3172 3173 /* Print the list of extra patch descriptions if there is at least one. */ 3174 if (extra_patches[0] != NULL) 3175 { 3176 MSG_PUTS(_("\nExtra patches: ")); 3177 s = ""; 3178 for (i = 0; extra_patches[i] != NULL; ++i) 3179 { 3180 MSG_PUTS(s); 3181 s = ", "; 3182 MSG_PUTS(extra_patches[i]); 3183 } 3184 } 3185 3186 #ifdef MODIFIED_BY 3187 MSG_PUTS("\n"); 3188 MSG_PUTS(_("Modified by ")); 3189 MSG_PUTS(MODIFIED_BY); 3190 #endif 3191 3192 #ifdef HAVE_PATHDEF 3193 if (*compiled_user != NUL || *compiled_sys != NUL) 3194 { 3195 MSG_PUTS(_("\nCompiled ")); 3196 if (*compiled_user != NUL) 3197 { 3198 MSG_PUTS(_("by ")); 3199 MSG_PUTS(compiled_user); 3200 } 3201 if (*compiled_sys != NUL) 3202 { 3203 MSG_PUTS("@"); 3204 MSG_PUTS(compiled_sys); 3205 } 3206 } 3207 #endif 3208 3209 #ifdef FEAT_HUGE 3210 MSG_PUTS(_("\nHuge version ")); 3211 #else 3212 # ifdef FEAT_BIG 3213 MSG_PUTS(_("\nBig version ")); 3214 # else 3215 # ifdef FEAT_NORMAL 3216 MSG_PUTS(_("\nNormal version ")); 3217 # else 3218 # ifdef FEAT_SMALL 3219 MSG_PUTS(_("\nSmall version ")); 3220 # else 3221 MSG_PUTS(_("\nTiny version ")); 3222 # endif 3223 # endif 3224 # endif 3225 #endif 3226 #ifndef FEAT_GUI 3227 MSG_PUTS(_("without GUI.")); 3228 #else 3229 # ifdef FEAT_GUI_GTK 3230 # ifdef FEAT_GUI_GNOME 3231 MSG_PUTS(_("with GTK2-GNOME GUI.")); 3232 # else 3233 MSG_PUTS(_("with GTK2 GUI.")); 3234 # endif 3235 # else 3236 # ifdef FEAT_GUI_MOTIF 3237 MSG_PUTS(_("with X11-Motif GUI.")); 3238 # else 3239 # ifdef FEAT_GUI_ATHENA 3240 # ifdef FEAT_GUI_NEXTAW 3241 MSG_PUTS(_("with X11-neXtaw GUI.")); 3242 # else 3243 MSG_PUTS(_("with X11-Athena GUI.")); 3244 # endif 3245 # else 3246 # ifdef FEAT_GUI_PHOTON 3247 MSG_PUTS(_("with Photon GUI.")); 3248 # else 3249 # if defined(MSWIN) 3250 MSG_PUTS(_("with GUI.")); 3251 # else 3252 # if defined(TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON 3253 MSG_PUTS(_("with Carbon GUI.")); 3254 # else 3255 # if defined(TARGET_API_MAC_OSX) && TARGET_API_MAC_OSX 3256 MSG_PUTS(_("with Cocoa GUI.")); 3257 # else 3258 # if defined(MACOS) 3259 MSG_PUTS(_("with (classic) GUI.")); 3260 # endif 3261 # endif 3262 # endif 3263 # endif 3264 # endif 3265 # endif 3266 # endif 3267 # endif 3268 #endif 3269 version_msg(_(" Features included (+) or not (-):\n")); 3270 3271 list_features(); 3272 3273 #ifdef SYS_VIMRC_FILE 3274 version_msg(_(" system vimrc file: \"")); 3275 version_msg(SYS_VIMRC_FILE); 3276 version_msg("\"\n"); 3277 #endif 3278 #ifdef USR_VIMRC_FILE 3279 version_msg(_(" user vimrc file: \"")); 3280 version_msg(USR_VIMRC_FILE); 3281 version_msg("\"\n"); 3282 #endif 3283 #ifdef USR_VIMRC_FILE2 3284 version_msg(_(" 2nd user vimrc file: \"")); 3285 version_msg(USR_VIMRC_FILE2); 3286 version_msg("\"\n"); 3287 #endif 3288 #ifdef USR_VIMRC_FILE3 3289 version_msg(_(" 3rd user vimrc file: \"")); 3290 version_msg(USR_VIMRC_FILE3); 3291 version_msg("\"\n"); 3292 #endif 3293 #ifdef USR_EXRC_FILE 3294 version_msg(_(" user exrc file: \"")); 3295 version_msg(USR_EXRC_FILE); 3296 version_msg("\"\n"); 3297 #endif 3298 #ifdef USR_EXRC_FILE2 3299 version_msg(_(" 2nd user exrc file: \"")); 3300 version_msg(USR_EXRC_FILE2); 3301 version_msg("\"\n"); 3302 #endif 3303 #ifdef FEAT_GUI 3304 # ifdef SYS_GVIMRC_FILE 3305 version_msg(_(" system gvimrc file: \"")); 3306 version_msg(SYS_GVIMRC_FILE); 3307 version_msg("\"\n"); 3308 # endif 3309 version_msg(_(" user gvimrc file: \"")); 3310 version_msg(USR_GVIMRC_FILE); 3311 version_msg("\"\n"); 3312 # ifdef USR_GVIMRC_FILE2 3313 version_msg(_("2nd user gvimrc file: \"")); 3314 version_msg(USR_GVIMRC_FILE2); 3315 version_msg("\"\n"); 3316 # endif 3317 # ifdef USR_GVIMRC_FILE3 3318 version_msg(_("3rd user gvimrc file: \"")); 3319 version_msg(USR_GVIMRC_FILE3); 3320 version_msg("\"\n"); 3321 # endif 3322 #endif 3323 #ifdef FEAT_GUI 3324 # ifdef SYS_MENU_FILE 3325 version_msg(_(" system menu file: \"")); 3326 version_msg(SYS_MENU_FILE); 3327 version_msg("\"\n"); 3328 # endif 3329 #endif 3330 #ifdef HAVE_PATHDEF 3331 if (*default_vim_dir != NUL) 3332 { 3333 version_msg(_(" fall-back for $VIM: \"")); 3334 version_msg((char *)default_vim_dir); 3335 version_msg("\"\n"); 3336 } 3337 if (*default_vimruntime_dir != NUL) 3338 { 3339 version_msg(_(" f-b for $VIMRUNTIME: \"")); 3340 version_msg((char *)default_vimruntime_dir); 3341 version_msg("\"\n"); 3342 } 3343 version_msg(_("Compilation: ")); 3344 version_msg((char *)all_cflags); 3345 version_msg("\n"); 3346 #ifdef VMS 3347 if (*compiler_version != NUL) 3348 { 3349 version_msg(_("Compiler: ")); 3350 version_msg((char *)compiler_version); 3351 version_msg("\n"); 3352 } 3353 #endif 3354 version_msg(_("Linking: ")); 3355 version_msg((char *)all_lflags); 3356 #endif 3357 #ifdef DEBUG 3358 version_msg("\n"); 3359 version_msg(_(" DEBUG BUILD")); 3360 #endif 3361 } 3362 3363 /* 3364 * Output a string for the version message. If it's going to wrap, output a 3365 * newline, unless the message is too long to fit on the screen anyway. 3366 */ 3367 static void 3368 version_msg(s) 3369 char *s; 3370 { 3371 int len = (int)STRLEN(s); 3372 3373 if (!got_int && len < (int)Columns && msg_col + len >= (int)Columns 3374 && *s != '\n') 3375 msg_putchar('\n'); 3376 if (!got_int) 3377 MSG_PUTS(s); 3378 } 3379 3380 static void do_intro_line __ARGS((int row, char_u *mesg, int add_version, int attr)); 3381 3382 /* 3383 * Show the intro message when not editing a file. 3384 */ 3385 void 3386 maybe_intro_message() 3387 { 3388 if (bufempty() 3389 && curbuf->b_fname == NULL 3390 #ifdef FEAT_WINDOWS 3391 && firstwin->w_next == NULL 3392 #endif 3393 && vim_strchr(p_shm, SHM_INTRO) == NULL) 3394 intro_message(FALSE); 3395 } 3396 3397 /* 3398 * Give an introductory message about Vim. 3399 * Only used when starting Vim on an empty file, without a file name. 3400 * Or with the ":intro" command (for Sven :-). 3401 */ 3402 void 3403 intro_message(colon) 3404 int colon; /* TRUE for ":intro" */ 3405 { 3406 int i; 3407 int row; 3408 int blanklines; 3409 int sponsor; 3410 char *p; 3411 static char *(lines[]) = 3412 { 3413 N_("VIM - Vi IMproved"), 3414 "", 3415 N_("version "), 3416 N_("by Bram Moolenaar et al."), 3417 #ifdef MODIFIED_BY 3418 " ", 3419 #endif 3420 N_("Vim is open source and freely distributable"), 3421 "", 3422 N_("Help poor children in Uganda!"), 3423 N_("type :help iccf<Enter> for information "), 3424 "", 3425 N_("type :q<Enter> to exit "), 3426 N_("type :help<Enter> or <F1> for on-line help"), 3427 N_("type :help version7<Enter> for version info"), 3428 NULL, 3429 "", 3430 N_("Running in Vi compatible mode"), 3431 N_("type :set nocp<Enter> for Vim defaults"), 3432 N_("type :help cp-default<Enter> for info on this"), 3433 }; 3434 #ifdef FEAT_GUI 3435 static char *(gui_lines[]) = 3436 { 3437 NULL, 3438 NULL, 3439 NULL, 3440 NULL, 3441 #ifdef MODIFIED_BY 3442 NULL, 3443 #endif 3444 NULL, 3445 NULL, 3446 NULL, 3447 N_("menu Help->Orphans for information "), 3448 NULL, 3449 N_("Running modeless, typed text is inserted"), 3450 N_("menu Edit->Global Settings->Toggle Insert Mode "), 3451 N_(" for two modes "), 3452 NULL, 3453 NULL, 3454 NULL, 3455 N_("menu Edit->Global Settings->Toggle Vi Compatible"), 3456 N_(" for Vim defaults "), 3457 }; 3458 #endif 3459 3460 /* blanklines = screen height - # message lines */ 3461 blanklines = (int)Rows - ((sizeof(lines) / sizeof(char *)) - 1); 3462 if (!p_cp) 3463 blanklines += 4; /* add 4 for not showing "Vi compatible" message */ 3464 #if defined(WIN3264) && !defined(FEAT_GUI_W32) 3465 if (mch_windows95()) 3466 blanklines -= 3; /* subtract 3 for showing "Windows 95" message */ 3467 #endif 3468 3469 #ifdef FEAT_WINDOWS 3470 /* Don't overwrite a statusline. Depends on 'cmdheight'. */ 3471 if (p_ls > 1) 3472 blanklines -= Rows - topframe->fr_height; 3473 #endif 3474 if (blanklines < 0) 3475 blanklines = 0; 3476 3477 /* Show the sponsor and register message one out of four times, the Uganda 3478 * message two out of four times. */ 3479 sponsor = (int)time(NULL); 3480 sponsor = ((sponsor & 2) == 0) - ((sponsor & 4) == 0); 3481 3482 /* start displaying the message lines after half of the blank lines */ 3483 row = blanklines / 2; 3484 if ((row >= 2 && Columns >= 50) || colon) 3485 { 3486 for (i = 0; i < (int)(sizeof(lines) / sizeof(char *)); ++i) 3487 { 3488 p = lines[i]; 3489 #ifdef FEAT_GUI 3490 if (p_im && gui.in_use && gui_lines[i] != NULL) 3491 p = gui_lines[i]; 3492 #endif 3493 if (p == NULL) 3494 { 3495 if (!p_cp) 3496 break; 3497 continue; 3498 } 3499 if (sponsor != 0) 3500 { 3501 if (strstr(p, "children") != NULL) 3502 p = sponsor < 0 3503 ? N_("Sponsor Vim development!") 3504 : N_("Become a registered Vim user!"); 3505 else if (strstr(p, "iccf") != NULL) 3506 p = sponsor < 0 3507 ? N_("type :help sponsor<Enter> for information ") 3508 : N_("type :help register<Enter> for information "); 3509 else if (strstr(p, "Orphans") != NULL) 3510 p = N_("menu Help->Sponsor/Register for information "); 3511 } 3512 if (*p != NUL) 3513 do_intro_line(row, (char_u *)_(p), i == 2, 0); 3514 ++row; 3515 } 3516 #if defined(WIN3264) && !defined(FEAT_GUI_W32) 3517 if (mch_windows95()) 3518 { 3519 do_intro_line(++row, 3520 (char_u *)_("WARNING: Windows 95/98/ME detected"), 3521 FALSE, hl_attr(HLF_E)); 3522 do_intro_line(++row, 3523 (char_u *)_("type :help windows95<Enter> for info on this"), 3524 FALSE, 0); 3525 } 3526 #endif 3527 } 3528 3529 /* Make the wait-return message appear just below the text. */ 3530 if (colon) 3531 msg_row = row; 3532 } 3533 3534 static void 3535 do_intro_line(row, mesg, add_version, attr) 3536 int row; 3537 char_u *mesg; 3538 int add_version; 3539 int attr; 3540 { 3541 char_u vers[20]; 3542 int col; 3543 char_u *p; 3544 int l; 3545 int clen; 3546 #ifdef MODIFIED_BY 3547 # define MODBY_LEN 150 3548 char_u modby[MODBY_LEN]; 3549 3550 if (*mesg == ' ') 3551 { 3552 vim_strncpy(modby, (char_u *)_("Modified by "), MODBY_LEN - 1); 3553 l = STRLEN(modby); 3554 vim_strncpy(modby + l, (char_u *)MODIFIED_BY, MODBY_LEN - l - 1); 3555 mesg = modby; 3556 } 3557 #endif 3558 3559 /* Center the message horizontally. */ 3560 col = vim_strsize(mesg); 3561 if (add_version) 3562 { 3563 STRCPY(vers, mediumVersion); 3564 if (highest_patch()) 3565 { 3566 /* Check for 9.9x or 9.9xx, alpha/beta version */ 3567 if (isalpha((int)vers[3])) 3568 { 3569 int len = (isalpha((int)vers[4])) ? 5 : 4; 3570 sprintf((char *)vers + len, ".%d%s", highest_patch(), 3571 mediumVersion + len); 3572 } 3573 else 3574 sprintf((char *)vers + 3, ".%d", highest_patch()); 3575 } 3576 col += (int)STRLEN(vers); 3577 } 3578 col = (Columns - col) / 2; 3579 if (col < 0) 3580 col = 0; 3581 3582 /* Split up in parts to highlight <> items differently. */ 3583 for (p = mesg; *p != NUL; p += l) 3584 { 3585 clen = 0; 3586 for (l = 0; p[l] != NUL 3587 && (l == 0 || (p[l] != '<' && p[l - 1] != '>')); ++l) 3588 { 3589 #ifdef FEAT_MBYTE 3590 if (has_mbyte) 3591 { 3592 clen += ptr2cells(p + l); 3593 l += (*mb_ptr2len)(p + l) - 1; 3594 } 3595 else 3596 #endif 3597 clen += byte2cells(p[l]); 3598 } 3599 screen_puts_len(p, l, row, col, *p == '<' ? hl_attr(HLF_8) : attr); 3600 col += clen; 3601 } 3602 3603 /* Add the version number to the version line. */ 3604 if (add_version) 3605 screen_puts(vers, row, col, 0); 3606 } 3607 3608 /* 3609 * ":intro": clear screen, display intro screen and wait for return. 3610 */ 3611 void 3612 ex_intro(eap) 3613 exarg_T *eap UNUSED; 3614 { 3615 screenclear(); 3616 intro_message(TRUE); 3617 wait_return(TRUE); 3618 } 3619