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