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