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