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